final.asm (1101B)
1 init: 2 clrf PORTA ; make sure port A output latches are low 3 clrf PORTB ; make sure port B output latches are low 4 bsf STATUS,RP0 ; select memory bank 1 5 movlw b'11111111' ; set port A data direction to inputs 6 movwf TRISA 7 movlw b'00000000' ; set port B data direction to outputs 8 movwf TRISB 9 bcf STATUS,RP0 ; select memory bank 0 10 BACK equ B4 11 goto main 12 13 volow: 14 movlw b'00000001' 15 movwf PORTB 16 goto main 17 vomid: 18 movlw b'00000011' 19 movwf PORTB 20 goto main 21 vohigh: 22 movlw b'00000111' 23 movwf PORTB 24 goto main 25 vovhigh: 26 movlw b'00001111' 27 movwf PORTB 28 goto main 29 30 31 convert: 32 andlw b'00001111' 33 movwf BACK 34 35 andlw b'00001100' 36 btfsc STATUS, Z 37 goto volow 38 movf BACK, W 39 40 andlw b'00001100' 41 sublw b'00000100' 42 btfsc STATUS, Z 43 goto vomid 44 movf BACK, W 45 46 andlw b'00001100' 47 sublw b'00001000' 48 btfsc STATUS, Z 49 goto vohigh 50 movf BACK, W 51 52 andlw b'00001100' 53 sublw b'00001100' 54 btfsc STATUS, Z 55 goto vovhigh 56 movf BACK, W 57 58 goto main 59 60 main: 61 call readadc0 62 movf B0, W 63 64 goto convert 65 66 goto main 67 68 end