Artikel: [ASM] Pulsenteller

Pulsen tellen op PORT1.0 en op PORTB op een 7 segment display weergeven.

list p=16f84
#include <P16f84.inc>
count equ 20h
RA0 equ 00
RA3 equ 03
;----------------------------------------------------------
;PORTA = input, PORTB = output
;----------------------------------------------------------
org 5
start bsf STATUS,RP0 ;bank1
movlw b'00000111' ;PORTA.0 .1 en .2 als input declareren
movwf TRISA
clrf TRISB ;PORTB declareren als output
bcf STATUS,RP0 ;Bank0
bsf PORTA,RA3
;----------------------------------------------------------
;main
;----------------------------------------------------------
main clrf count
loop btfss PORTA,RA0 ;Als A.0
goto InCount ;hoog is naar incount gaan
goto loop ;laag is naar loop gaan
;
InCount incf count,F ;Count + 1 => Count
movlw 0x10 ;10 in het werkregister zetten
xorwf count,w ;Xor met count, w
btfsc STATUS,Z ;Als dit
goto plus6 ;1 is naar plus6 gaan
;
out movf count,w ;Nul is dan count naar het werkregister
call optbl ;Ophalen hoe uitgang moet staan bij dit getal
movwf PORTB ;Wegschrijven naar portB
;
inlaag btfss PORTA,RA0 ;Hier blijven tot dat portA.0 laag is
goto inlaag
goto loop ;Naar loop gaan als portA.0 laag is
;
plus6 movlw 0x06 ;6 in het werkregister zetten
addwf count,F ;6 bij count optellen
bcf count,4 ;bit 4 clearen xxx0xxxx
goto out ;naar out gaan
;----------------------------------------------------------
optbl addwf PCL,F
retlw b'11000000' ;0
retlw b'11111001' ;1
retlw b'10100100' ;2
retlw b'10110000' ;3
retlw b'10011001' ;4
retlw b'10010010' ;5
retlw b'10000010' ;6
retlw b'11111000' ;7
retlw b'10000000' ;8
retlw b'10010000' ;9
; dpgfedcba
end

Een reactie achterlaten

Your email address will not be published.