技术热线: 4007-888-234

软件模拟SPI串口(汇编和PICC编写)

更新时间: 2019-03-26
阅读量:3076

软件模拟SPI串口(汇编和PICC编写)

pic低档单片机中,多没有SPI串口,在与外界串口器件通讯时带来麻烦,下面给出软件模拟SPI串口的程序:

汇编:

;*********************************************************** output movwf outdb clrf rxdata movlw 0x09 movwf i again decfsz i,1 goto dbtran return dbtran movlw 0x80 andwf outdb,0 btfsc STATUS,2 goto daout bsf PORTC,5 datan rlf outdb,1 movlw 0x02 movwf T1 call delay bsf PORTC,3 btfss PORTC,4 goto datas bsf STATUS,0 datat rlf rxdata,1 movlw 0x02 movwf T1 call delay bcf PORTC,3 goto again daout bcf PORTC,5 goto datan datas bcf STATUS,0 goto datat ;************************************************************ delay decfsz T1,1 goto delay return ;***********************************************************

这是一个SPI串口调用子程序,其中outdb为发送数据,rxdata为接受来的数据,此程序在与外部EEPROM通讯中,经过检验没问题。

piCC

unsigned char RW_SPI(unsigned char val){ unsigned char BitCounter; for (BitCounter=8;BitCounter!=0;BitCounter--){ CLK=0; //write DI=0; if(val&0x80) DI=1; val<<=1;

CLK=1; //read if(DO) val|=1;

} CLK=0; return val; }

此函数把SPI的读写功能集成在一块,传递的val既是向SPI写的数据,也是从SPI读取的数据,只需要在执行读或写之前把MCUI/O脚设置成相应的输出或输入即可。(因为在大部分应用中,是把SPIDIDO相连并用MCU的一个IO口来读写)。

调用示例:

#define NULL 0

SETIO=OUTPUT; CS=0; RW_SPI(0xab); CS=1;

//SPI0xab数据。

CS=0; SETIO=INPUT;