wejos
Member
this project should turn 8 leds on/off according to the binary value the user pressed in his keyboard. my problem is the schematic diagram for this project isn't available. i have no idea where RA2 was connected to which pin of MAX232. it says in the code that it wont continue unless pin 18 goes (im not sure if "btfsc" waits for high or low) so ill just say it's status have had changed.
second problem is im not sure if MAX232 is okay to use since the author said in the tutorial that a MAX233 was used. maybe this is where all the problem started. I used MAX232 as replacement of MAX233.
the entire code:
after this im heading for nigel's work...
Code:
switch btfsc portA, 2 ; Is A2 equal 0? i.e. is switch closed?
; goto switch ; No, so keep checking
second problem is im not sure if MAX232 is okay to use since the author said in the tutorial that a MAX233 was used. maybe this is where all the problem started. I used MAX232 as replacement of MAX233.
the entire code:
Code:
; 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
;=======================================================================
after this im heading for nigel's work...