技术热线: 4007-888-234
设计开发

专注差异化嵌入式产品解决方案 给智能产品定制注入灵魂给予生命

开发工具

提供开发工具、应用测试 完善的开发代码案例库分享

技术支持

从全面的产品导入到强大技术支援服务 全程贴心伴随服务,创造无限潜能!

新品推广

提供新的芯片及解决方案,提升客户产品竞争力

新闻中心

提供最新的单片机资讯,行业消息以及公司新闻动态

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

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

软件模拟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;