Vous êtes sur la page 1sur 2

' ' ' ' ' ' ' ' ' ' ' ' ' ' '

'

Name : SPIMAST.pbp Compiler : PICBASIC PRO Compiler 2.6 Assembler : PM or MPASM Target PIC : 40-pin 16F or 18F Hardware : Lab-X1, Lab-X2 or similar Oscillator : 4MHz internal or external Keywords : LCDOUT, HARDWARE SPI MASTER Description : PicBasic Pro program to read and write to SPI slave using the hardware synchronous serial port. Connect SDI(master) to SDO(slave), SDO(master) to SDI(slave), AND SCK(master) to SCK(slave). Common ground is required. Sends ascii "?" to request data, waits for a "!" to begin receiving data. Expects to find the ADC conversion value in the 6th position of the received string.

' Define LCD registers and bits Define LCD_DREG PORTD Define LCD_DBIT 4 Define LCD_RSREG PORTE Define LCD_RSBIT 0 Define LCD_EREG PORTE Define LCD_EBIT 1 SSPEN CKP SMP CKE SSPIF VAR VAR VAR VAR VAR SSPCON.5 SSPCON.4 SSPSTAT.7 SSPSTAT.6 PIR1.3 ' ' ' ' ' SSP Enable bit Clock Polarity Select Data input sample phase Clock Edge Select bit SPI interrupt flag

i VAR BYTE a VAR BYTE[6] ADCON1 = 7 Low PORTE.2 Pause 100 TRISC SSPEN CKP = CKE = SSPIF SMP = = 0 = 1 0 0 = 0 0

' loop counter ' Holds 6 characters read from slave ' Set PORTA and PORTE to digital ' LCD R/W line low (W) ' Wait for LCD to start up ' ' ' ' ' ' set PORTC I/O enable SPI pins clock idle low transmit on idle to active transition clear buffer full status sample in middle of data

mainloop: GoSub getdata ' initiate conversion and receive data LCDOut $fe, 1, STR a\5, DEC a[5] ' display received string Pause 100 GoTo mainloop ' do it forever getdata: SSPBUF = "?" ' send ? to start conversion GoSub letclear ' wait for buffer to clear IF SSPBUF<>"!" Then getdata ' wait for reply (!) For i = 0 to 5 SSPBUF = 0 GoSub letclear a[i] = SSPBUF ' ' ' ' loop for 6 characters write to SSPBUF to start clock wait for receipt store received character in array

Next i Return

' get next character

letclear: IF SSPIF = 0 Then letclear ' wait for SPI interupt flag PauseUs 25 ' 25uS fudge factor SSPIF = 0 ' reset flag Return End

Vous aimerez peut-être aussi