Binäres Zählen im Sekundentakt
           processor pic16f877a
           include   p16f877.inc
           __config  _HS_OSC & _WDT_OFF & _PWRTE_ON
ZAEHL1     equ 0x20          ; Hilfsvariable für Warte-Routine
ZAEHL2     equ 0x21          ; Hilfsvariable für Warte-Routine
ZAEHL3     equ 0x22          ; Hilfsvariable für Warte-Routine
           org 0x00
RESET:     clrf STATUS
           movlw 0x00
           movwf PCLATH
           goto main
           org 0x10
;-----------------------------------------------
;Warte-Routine 1,000537 ms bei 8,867238 MHz
wait1ms:   movlw d'223'
           movwf ZAEHL1
           movlw d'3'
           movwf ZAEHL2
tloop1ms   decfsz ZAEHL1
           goto tloop1ms
           decfsz ZAEHL2
           goto tloop1ms
           return
;------------------------------------------------
;Warte-Routine 1,000001 s bei 8,867238 MHz
wait1s:    movlw d'239'
           movwf ZAEHL1
           movlw d'63'
           movwf ZAEHL2
           movlw d'12'
           movwf ZAEHL3
tloop1s    decfsz ZAEHL1
           goto tloop1s
           decfsz ZAEHL2
           goto tloop1s
           decfsz ZAEHL3
           goto tloop1s
           return
;------------------------------------------------
main:
;Port-Setup
	  bsf STATUS,5       ; wechsle zu Bank1
           movlw b'00000000'  ; setze Port B, Bit 0-7
           movwf TRISB        ; als Ausgang
           bcf STATUS,5       ; wieder in Bank 0 wechseln
;Port auf 0
	  movlw 0x0
	  movwf PORTB
;Zählschleife
start:
;warten
          call wait1s
;Port B hochzählen
          incf PORTB
;Sprung zum Start
          goto start
          end
In diesem Programm wird eine hochpräzise Warte-Routine verwendet, die mit Hilfe der Debugger-Stoppuhr kalibriert wurde.
Eigene Wartezeiten kann man durch entsprechende Vorbelegung der Register ZAEHL1, ZAEHL2, ZAEHL3 erreichen.
Neu in diesem Programm:
include (p16f877.inc),
 call, return,
Konfiguration des PIC mit __config.
 Die angeführten Links führen zu dem 
Assembler-Kurs von Jörg Bredendiek.