Sure, maybe something like this...
Code:
@ DEVICE XT_OSC,MCLR_OFF,LVP_OFF,WDT_OFF,PROTECT_OFF
DEFINE LOADER_USED 1
' ** Setup the Resonator Frequency, in Mhz **
Define OSC 4
Baud con 84 ' 9600 baud rate
' ** Port configurations **
TX VAR PORTB.5
RX VAR PORTB.2
CLK VAR PORTA.4
DI Var PORTA.0
RESET VAR PORTB.6
PIEZO VAR PORTB.7
DAT VAR WORD
Idx VAR BYTE
;---------------------------------------------------------------------------
Init:
ANSEL = 0 'Configure all pins to digital operation since not using ADC
CMCON = 7 ' disable comparators
begin:
low piezo
dat = $FFF7
serout2 tx,baud,["1st Data = ",bin16 dat,13,10]
GOSUB SendDat
dat = $3
serout2 tx,baud,["2nd Data = ",bin16 dat,13,10]
GOSUB SendDat
dat = $fffe
serout2 tx,baud,["3rd Data = ",bin16 dat,13,10]
GOSUB SendDat
STOP
;---------------------------------------------------------------------------
SendDAT:
LOW RESET ; 5ms reset pulse
PAUSE 5
INPUT RESET
PAUSE 300 ; 300ms before data
For Idx = 15 to 0 STEP -1 ; loop thru the bits
LOW CLK ; set CLK LOW
IF dat.0(Idx) THEN
INPUT DI ; if bit = 1 then INPUT, not HIGH
ELSE
LOW DI ; if bit = 0 then LOW
ENDIF
PAUSE 1 ; data settle time
INPUT CLK ; clks data on rising edge
PAUSE 1 ; data read time
NEXT Idx ; do rest of the bits
INPUT DI ; leave data line tri-stated
RETURN
Bookmarks