swapf lsn,w ; swap & save
MOVwf msn ; into w
MOVlw 0fh
andwf lsn,f ; strip off upper rubbish
andwf msn,f ; strip off upper rubbish
MOVf msn,0 ; reload
call lookup ; get value
MOVwf lo_val ; save it
incf msn,w ; increment pointer
call lookup ; get next value
subwf lo_val,w ; get difference & save
MOVwf hi_val
mult addwf hi_val,f ; add to current
decfsz lsn,f ; count down on multiply loop
goto mult
swapf hi_val,w ; divide by 16
andlw 0fh ; extract upper nibble
subwf lo_val,w ; add lo value to lo value to get result
return
adconv bsf ADCON0,GO ; start conversion
MOVlw .5 ; wait delay 10uS
MOVwf temp
decfsz temp,f ; loop for a while
goto $-1
btfsc ADCON0,GO ; test for end of conversion
goto $-1
retlw 0
bin_bcd MOVwf digit1 ; first digit
clrf digit2 ; second digit
tenlop MOVlw .10
subwf digit1,w ; find out how many 10’s
btfsc STATUS,C
incf digit2,f
btfsc STATUS,C
MOVwf digit1 ; remainder 1’s left
btfsc STATUS,C
goto tenlop
return
; =======================================
init clrf PORTB
clrf PORTA
clrf ADCON0
clrf flags
page1
MOVlw b’11110011’
MOVwf TRISA
MOVlw b’10000000’ ;
MOVwf TRISB ; set up port b
MOVlw b’00000100’ ; /32
MOVwf OPTION_REG
MOVlw b’00000010’
MOVwf ADCON1
page0
MOVlw b’00001000’ ; set up change of state on portb
MOVwf INTCON ; to wake up
sleep ; shut down
MOVlw b’11000001’ ; set a/d internal rc clock
; channel 0, a/d running
MOVwf ADCON0 ; do it
MOVlw .153 ; timeout value
MOVwf count
MOVlw .16 ; interval timer reload
MOVwf read
MOVlw b’10100000’ ; set up change of state on portb
MOVwf INTCON ; to wake up
call adconv ; perform A/D conversion
; ================== main ====================
main btfsc flags,0 ; test for timeout
上一页 [1] [2] [3] 下一页
本文关键字:程序 PIC单片机,单片机-工控设备 - PIC单片机