Thanks for the info, but still not sure what to delete or keep. Here is what I have so far:
Code:
INCLUDE "MODEDEFS.BAS"
@ DEVICE PIC16F628a,XT_OSC
@ DEVICE pic16F628a, WDT_OFF
@ DEVICE pic16F628a, PWRT_ON
@ DEVICE pic16F628a, MCLR_ON
@ DEVICE pic16F628a, BOD_ON
@ DEVICE pic16F628a, LVP_OFF
@ DEVICE pic16F628a, CPD_OFF
@ DEVICE pic16F628a, PROTECT_OFF
DEFINE OSC 4
DEFINE NO_CLRWDT 1 ' Watchdog timer is disabled, so we don't need to reset it
DEFINE INTHAND RESET_VT ' Interrrupt on Timer1 overflow to reset outputs in 65.5mS
' if no serial data received in this time period
'SYMBOL D_IN = porta.0 ' Encoder data input pin
SYMBOL serpin = porta.0 ' Encoder data input pin
SYMBOL TMR1IF = PIR1.0 ' Timer1 overflow interrupt flag (reset in int handler)
SYMBOL TMR1IE = PIE1.0 ' Timer1 interrupt enable bit
CMCON=%00000111
vrcon=0
trisa = %00000001
trisb = %00000000
PORTA = 0
PORTB = 0
'serpin VAR porta.0 'serial input pin
address con %0000000000000000
add1 VAR WORD
address1 var byte
address2 var byte
address3 var byte
address4 var byte
addA var byte '0-7
addB var byte '8-15
addC var byte '0-7
addD var byte '8-15
chkcrc var byte
crcA var byte
crcB var byte
chksum2 var byte bank0 system '
chksum3 var byte
flag var byte 'latching feature
i var byte
latch var byte
mydata var byte
mydata1 VAR byte
mydata2 var byte
mydata3 var byte
mydata4 var byte
rf var porta.4
'Variables for saving state in interrupt handler
wsave VAR BYTE $70 system ' Saves W
ssave VAR BYTE bank0 system ' Saves STATUS
psave VAR BYTE bank0 system ' Saves PCLATH
fsave VAR BYTE bank0 system ' Saves FSR
' Setup Timer1 for resets after ~65.5mS
T1CON = %00000000 ' Internal clock, 1:1 prescale, Timer1 off for now
TMR1L = 0
TMR1H = 0 ' Timer1 low & high bytes cleared
TMR1IF = 0 ' Clear Timer1 overflow flag before enabling interrupt
TMR1IE = 1 ' Enable Timer1 overflow interrupt
INTCON = %11000000 ' Global & peripheral ints enabled
chksum2 = 0 ' Clear match count
GOTO cycle ' Jump over int handler
ASM
RESET_VT
movwf wsave ; Save W
swapf STATUS, W ; Swap STATUS to W (swap avoids changing STATUS)
clrf STATUS ; Clear STATUS
movwf ssave ; Save swapped STATUS
movf PCLATH, W ; Move PCLATH to W
movwf psave ; Save PCLATH
movf FSR, W ; Move FSR to W
movwf fsave ; Save FSR
; Do interrupt stuff here
bcf T1CON,TMR1ON ; Stop Timer1
clrf TMR1L ; Clear low byte
clrf TMR1H ; Clear high byte
bcf PIR1,TMR1IF ; Clear Timer1 interrupt flag bit
;clrf GPIO ; Clear outputs on button release (or timeout)
clrf chksum2 ; Clear match variable
; Restore FSR, PCLATH, STATUS and W registers
movf fsave, W ; retrieve FSR value
movwf FSR ; Restore it to FSR
movf psave, W ; Retrieve PCLATH value
movwf PCLATH ; Restore it to PCLATH
swapf ssave, W ; Get swapped STATUS value (swap to avoid changing STATUS)
movwf STATUS ; Restore it to STATUS
swapf wsave, F ; Swap the stored W value
swapf wsave, W ; Restore it to W (swap to avoid changing STATUS)
bsf T1CON,TMR1ON ; Re-enable Timer1 before exiting interrupt handler
retfie ; Return from the interrupt
ENDASM
PAUSE 20 'SETTLE INPUTS
start:
low rf
'ZERO VARIABLES
ADD1=0
adda = 0
addb = 0
addc = 0
addd = 0
address1 = 0
address2 = 0
address3 = 0
address4 = 0
mydata=0
chkcrc = 0
i = 0
flag = 0
latch = %01010000
mydata = 0
mydata1 = 0
mydata2 = 0
mydata3 = 0
mydata4 = 0
porta.1 = 0
porta.2 = 0
porta.3 = 0
portb = 0
pause 10
cycle:
low rf
repeat
ADD1=0
adda = 0
addb = 0
addc = 0
addd = 0
address1 = 0
address2 = 0
address3 = 0
address4 = 0
chkcrc = 0
i = 0
mydata = 0
mydata1 = 0
mydata2 = 0
mydata3 = 0
mydata4 = 0
'******************************************************************************
' Fire up Timer1 before entry to serial input routine
T1CON.0 = 1
' at 4MHz Timer1 overflows in 65536 * 1uS (~65.5mS) if no Synch byte
' and serial data arrive on time. SERIN2 timeout & label options
' are useless with a noisy RF receiver output - as noise continually
' resets the timeout period causing it to hang forever.
' Wait for Synch byte, then get new inbound data & checksum
SERIN2 serpin,16468,[wait(254),address1,address2,address3,address4,_
mydata1,mydata2,crca,crcb]
T1CON.0 = 0 ' Stop Timer1 once we've received data
TMR1L = 0 ' Clear low byte
TMR1H = 0 ' Clear high byte
' / **** Begin data validation **** /
From here I am off to decode using my own version so I am not using anything in the orignal example except for the timeout, do you have any suggestions on what to keep, delete or change?
Bookmarks