CLEAR
@ device pic16F876A, HS_OSC, wdt_on, lvp_off, protect_off
DEFINE OSC 20
ADDRESS VAR WORD ' Holds 10-bit address
DAT_OUT VAR BYTE ' Holds 8-bit data byte
BITS VAR BYTE ' Bit index for address & data bit pointer
LOOPS VAR BYTE ' Loop var for encode routine
LEDGreen var PORTC.4
' Use this timing for a Holtek HT640 @3V, 390K osc resistor
LONGB CON 732 ' 732uS for long bit & inter-bit delay
SHORTB CON 382 ' 382uS for short bit & inter-bit delay
' Use this timing for a Holtek HT640 @5V, 390K osc resistor
'LONGB CON 861 ' 861uS for long bit & inter-bit delay
'SHORTB CON 431 ' 431uS for short bit & inter-bit delay
SYMBOL E_OUT = PORTB.5 ' Assign encoder data out (to RF module) pin here
' Bank 1 Hardware initialization
'OPTION_REG = 128 ' Pull-ups = off, GPIO.2 = I/O, prescaler to Timer1
' Bank 0 Hardware initialization
PORTB = 0 ' Data output to RF transmitter idles low
TRISB=%00000000 ' all outputs
' sending A#2#3#64 with MCS terminal turns ON relay #1 at address #2
' #3 is sent since the FCTN-RLY4-xxx has the upper 2 address bits of the
' 10-bit decoder address left open (floating).
MAIN:
;DEBUGIN 5000,MAIN,[WAIT("A"),ADDRESS.LOWBYTE,ADDRESS.HIGHBYTE,DAT_OUT]
ADDRESS = $31F '1100011111
DAT_OUT = $99 '10011001
ENCODE_640:
high LEDGreen
FOR LOOPS = 1 TO 8 ' 8 data packet bursts per transmit period
' to simulate user button presses. |
' now do synch period & synch bits _ __ _ __ _|
HIGH E_OUT : PAUSEUS SHORTB ' | | | | | | | | | |
LOW E_OUT : PAUSEUS SHORTB ' | | | | | | | | | |
HIGH E_OUT : PAUSEUS LONGB ' | | | | | | | | | |
LOW E_OUT : PAUSEUS LONGB ' | | | | | | | | | |
HIGH E_OUT : PAUSEUS SHORTB ' | | | | | | | | | | ADDRESS | DATA
LOW E_OUT : PAUSEUS SHORTB ' | | | | | | | | | | 10-BIT | 8-BIT
HIGH E_OUT : PAUSEUS LONGB ' | | | | | | | | | |
LOW E_OUT : PAUSEUS LONGB ' 14mS | | | | | | | | | |
HIGH E_OUT : PAUSEUS SHORTB '_____ | |_| |__| |_| |__| |
' SYNCH BITS |
' now encode/send address
FOR BITS = 0 to 9 ' send 10-bit address
IF ADDRESS.0[BITS] = 1 THEN ' a 1 indicates the address bit is floating. NOT 1
LOW E_OUT : PAUSEUS LONGB
HIGH E_OUT : PAUSEUS SHORTB
LOW E_OUT : PAUSEUS LONGB
HIGH E_OUT : PAUSEUS SHORTB
ELSE
LOW E_OUT : PAUSEUS SHORTB
HIGH E_OUT : PAUSEUS LONGB
LOW E_OUT : PAUSEUS SHORTB
HIGH E_OUT : PAUSEUS LONGB
ENDIF
NEXT BITS
' now encode/send data
FOR BITS = 0 to 7 ' 8-bit data
IF DAT_OUT.0[BITS] THEN
LOW E_OUT : PAUSEUS LONGB
HIGH E_OUT : PAUSEUS SHORTB
LOW E_OUT : PAUSEUS LONGB
HIGH E_OUT : PAUSEUS SHORTB
ELSE
LOW E_OUT : PAUSEUS SHORTB
HIGH E_OUT : PAUSEUS LONGB
LOW E_OUT : PAUSEUS SHORTB
HIGH E_OUT : PAUSEUS LONGB
ENDIF
NEXT BITS
LOW E_OUT ' start synch period @ start of 2nd data packet
PAUSE 14 ' 14mS to 15mS synch period
NEXT LOOPS ' Close loop
LOW E_OUT ' Disable transmitter (turn off carrier)
low LEDGreen
pause 1000
GOTO Main
END
Bookmarks