wejos
Member
1. what are the 0x0c, 0x0d and 0x0e (commented as general purpose register) given in the code below? because i cannot find them in the 16f84 registry. Do they act there as variables?
tmr0 equ 0x01 ; Timer/counter register
status equ 0x03 ; Status word register. See Easy PIC'n p. 145
portA equ 0x05 ; Port A register
portB equ 0x06 ; Port B register
intCon equ 0x0b ; Interrupt control register
rcvReg equ 0x0c ; General purpose register
count equ 0x0d ; General purpose register
temp equ 0x0e ; General purpose register
optReg equ 0x81 ; File register in Bank 1
trisA equ 0x85 ; File register in Bank 1. See Easy PIC'n p. 145
trisB equ 0x86 ; File register in Bank 1. See Easy PIC'n p. 145
2. can i do this?
if rcvReg = binary-value-of-letter-"a" then RB1 will go high
full source is from **broken link removed** (if you pressed a letter from the keyboard the pic will light a couple of leds equivalent to the binary value):
; FILE: rcv1_1.asm
; AUTH: P.Oh
; DATE: 04/27/02 18:00 1.0 - WORKS
; 04/27/02 18:35 1.1
; DESC: 1.0: PC-to-PIC serial communications. LEDs display binary equivalent
; of key typed on PC
; 1.1: Same as 1.0 but eliminates need for switch
; REFS: rcv4800.asm in PIC'n Techniques p. 219
;--------------------------------------------------------------------------
list p=16f84
radix hex
;--------------------------------------------------------------------------
; CPU EQUATES
tmr0 equ 0x01 ; Timer/counter register
status equ 0x03 ; Status word register. See Easy PIC'n p. 145
portA equ 0x05 ; Port A register
portB equ 0x06 ; Port B register
intCon equ 0x0b ; Interrupt control register
rcvReg equ 0x0c ; General purpose register
count equ 0x0d ; General purpose register
temp equ 0x0e ; General purpose register
optReg equ 0x81 ; File register in Bank 1
trisA equ 0x85 ; File register in Bank 1. See Easy PIC'n p. 145
trisB equ 0x86 ; File register in Bank 1. See Easy PIC'n p. 145
;--------------------------------------------------------------------------
; BIT EQUATES
rp0 equ 5
;--------------------------------------------------------------------------
org 0x000
start bsf status, rp0 ; Switch to Bank 1. See Easy PIC'n p. 145
movlw b'00000101' ; A0, A2 are input and the rest are output
movwf trisA
movlw b'00000000' ; Port B: all output
movwf trisB
bcf status, rp0 ; Switch back to Bank 0
clrf portB
clrf rcvReg
; switch btfsc portA, 2 ; Is A2 equal 0? i.e. is switch closed?
; goto switch ; No, so keep checking
doThis call rcv4800 ; Yes, to serial in subroutine
movf rcvReg, w ; Get byte received
movwf portB ; Display byte on the 8 LEDs
circle goto doThis ; Done
;--------------------------------------------------------------------------
rcv4800 bcf intCon, 5 ; Disable tmr0 interrupts
bcf intCon, 7 ; Disable global interrupts
clrf tmr0 ; Clear timer/counter
clrwdt ; Clear wdt prep prescaler assign
bsf status, rp0 ; to page 1
movlw b'11011000' ; set up timer/counter
movwf optReg
bcf status, rp0 ; Back to page 1
movlw 0x08 ; Init shift counter
movwf count
sbit btfsc portA, 0 ; Look for start bit
goto sbit ; For Mark
movlw 0x98 ;
movwf tmr0 ; Load and start timer/counter
bcf intCon, 2 ; Clear tmr0 overflow flag
time1 btfss intCon, 2 ; Has the timer (bit 2) overflowed? Skip next line if 1
goto time1 ; No
btfsc portA, 0 ; Start bit still low?
goto sbit ; False start, go back
movlw 0x30 ; real, define N for timer
movwf tmr0 ; start timer/counter - bit time
bcf intCon, 2 ; Clear tmr0 overflow flag
time2 btfss intCon, 2 ; Timer overflow?
goto time2 ; No
movlw 0x30 ; Yes, define N for timer
movwf tmr0 ; Start timer/counter
bcf intCon, 2; ; Clear tmr0 overflow flah
movf portA, w ; Read port A
movwf temp ; Store
rrf temp, f ; Rotate bit 0 into carry flag
rrf rcvReg, f ; Rotate carry into rcvReg bit 7
decfsz count, f ; Shifted 8?
goto time2 ; No
time3 btfss intCon, 2 ; Timer overflow?
goto time3 ; No
return ; Yes, byte received
;-----------------------------------------------------------------------
end
;-----------------------------------------------------------------------
; At blast time, select:
; memory unprotected
; watchdog timer disabled
; standard crystal (4 MHz)
; power-up timer on
;=======================================================================
tmr0 equ 0x01 ; Timer/counter register
status equ 0x03 ; Status word register. See Easy PIC'n p. 145
portA equ 0x05 ; Port A register
portB equ 0x06 ; Port B register
intCon equ 0x0b ; Interrupt control register
rcvReg equ 0x0c ; General purpose register
count equ 0x0d ; General purpose register
temp equ 0x0e ; General purpose register
optReg equ 0x81 ; File register in Bank 1
trisA equ 0x85 ; File register in Bank 1. See Easy PIC'n p. 145
trisB equ 0x86 ; File register in Bank 1. See Easy PIC'n p. 145
2. can i do this?
if rcvReg = binary-value-of-letter-"a" then RB1 will go high
full source is from **broken link removed** (if you pressed a letter from the keyboard the pic will light a couple of leds equivalent to the binary value):
; FILE: rcv1_1.asm
; AUTH: P.Oh
; DATE: 04/27/02 18:00 1.0 - WORKS
; 04/27/02 18:35 1.1
; DESC: 1.0: PC-to-PIC serial communications. LEDs display binary equivalent
; of key typed on PC
; 1.1: Same as 1.0 but eliminates need for switch
; REFS: rcv4800.asm in PIC'n Techniques p. 219
;--------------------------------------------------------------------------
list p=16f84
radix hex
;--------------------------------------------------------------------------
; CPU EQUATES
tmr0 equ 0x01 ; Timer/counter register
status equ 0x03 ; Status word register. See Easy PIC'n p. 145
portA equ 0x05 ; Port A register
portB equ 0x06 ; Port B register
intCon equ 0x0b ; Interrupt control register
rcvReg equ 0x0c ; General purpose register
count equ 0x0d ; General purpose register
temp equ 0x0e ; General purpose register
optReg equ 0x81 ; File register in Bank 1
trisA equ 0x85 ; File register in Bank 1. See Easy PIC'n p. 145
trisB equ 0x86 ; File register in Bank 1. See Easy PIC'n p. 145
;--------------------------------------------------------------------------
; BIT EQUATES
rp0 equ 5
;--------------------------------------------------------------------------
org 0x000
start bsf status, rp0 ; Switch to Bank 1. See Easy PIC'n p. 145
movlw b'00000101' ; A0, A2 are input and the rest are output
movwf trisA
movlw b'00000000' ; Port B: all output
movwf trisB
bcf status, rp0 ; Switch back to Bank 0
clrf portB
clrf rcvReg
; switch btfsc portA, 2 ; Is A2 equal 0? i.e. is switch closed?
; goto switch ; No, so keep checking
doThis call rcv4800 ; Yes, to serial in subroutine
movf rcvReg, w ; Get byte received
movwf portB ; Display byte on the 8 LEDs
circle goto doThis ; Done
;--------------------------------------------------------------------------
rcv4800 bcf intCon, 5 ; Disable tmr0 interrupts
bcf intCon, 7 ; Disable global interrupts
clrf tmr0 ; Clear timer/counter
clrwdt ; Clear wdt prep prescaler assign
bsf status, rp0 ; to page 1
movlw b'11011000' ; set up timer/counter
movwf optReg
bcf status, rp0 ; Back to page 1
movlw 0x08 ; Init shift counter
movwf count
sbit btfsc portA, 0 ; Look for start bit
goto sbit ; For Mark
movlw 0x98 ;
movwf tmr0 ; Load and start timer/counter
bcf intCon, 2 ; Clear tmr0 overflow flag
time1 btfss intCon, 2 ; Has the timer (bit 2) overflowed? Skip next line if 1
goto time1 ; No
btfsc portA, 0 ; Start bit still low?
goto sbit ; False start, go back
movlw 0x30 ; real, define N for timer
movwf tmr0 ; start timer/counter - bit time
bcf intCon, 2 ; Clear tmr0 overflow flag
time2 btfss intCon, 2 ; Timer overflow?
goto time2 ; No
movlw 0x30 ; Yes, define N for timer
movwf tmr0 ; Start timer/counter
bcf intCon, 2; ; Clear tmr0 overflow flah
movf portA, w ; Read port A
movwf temp ; Store
rrf temp, f ; Rotate bit 0 into carry flag
rrf rcvReg, f ; Rotate carry into rcvReg bit 7
decfsz count, f ; Shifted 8?
goto time2 ; No
time3 btfss intCon, 2 ; Timer overflow?
goto time3 ; No
return ; Yes, byte received
;-----------------------------------------------------------------------
end
;-----------------------------------------------------------------------
; At blast time, select:
; memory unprotected
; watchdog timer disabled
; standard crystal (4 MHz)
; power-up timer on
;=======================================================================