AI8051U如何配置SPI通讯
诚心请教:我现在想用AI8051U配置双向SPI通讯,驱动LCD显示
SPI通讯分为8Bite,和9Bite
现在需要实现:
1、如果多字节传输,第一字节为9bit,后面都是8Bite
2、如果单字节传输为9bit
如51板代码:
void write_comm(uint command)
{
serial1=command;
serial1=serial1<<8;//这是寄存数据位移,可以不能考虑此行
CS1=0;
SDA=0;SCL=0;SCL=1;//发送状态位SDA=0为command SDA=1为DATA
//开始发送8Bite
SDA=db7;SCL=0;SCL=1;
SDA=db6;SCL=0;SCL=1;
SDA=db5;SCL=0;SCL=1;
SDA=db4;SCL=0;SCL=1;
SDA=db3;SCL=0;SCL=1;
SDA=db2;SCL=0;SCL=1;
SDA=db1;SCL=0;SCL=1;
SDA=db0;SCL=0;SCL=1;
SCL=0;
CS1=1;
}
void write_data(uint data)
{
serial1=data;
serial1=serial1<<8;//这是寄存数据位移,可以不能考虑此行
CS1=0;
SDA=1;SCL=0;SCL=1;////发送状态位SDA=0为command SDA=1为DATA
//开始发送8位数据
SDA=db7;SCL=0;SCL=1;//开始发送8Bite
SDA=db6;SCL=0;SCL=1;
SDA=db5;SCL=0;SCL=1;
SDA=db4;SCL=0;SCL=1;
SDA=db3;SCL=0;SCL=1;
SDA=db2;SCL=0;SCL=1;
SDA=db1;SCL=0;SCL=1;
SDA=db0;SCL=0;SCL=1;
SCL=0;
CS1=1;
}
void Dual_channel(uchar H_data,uchar L_data)
{
// 数据赋值
serial2=H_data;
serial1=L_data;
serial2=serial2<<8;
serial1=serial1<<8;
//开始发送传输数据
CS1=0;//
SDA=1;SCL=0;SCL=1; SCL=0;//发送状态位SDA=0为command SDA=1为DATA
//开始发送16位数据,SDA发送高8位,RS发送低8位
SDA=db15;RS=db7;SCL=0;SCL=1;
SDA=db14;RS=db6;SCL=0;SCL=1;
SDA=db13;RS=db5;SCL=0;SCL=1;
SDA=db12;RS=db4;SCL=0;SCL=1;
SDA=db11;RS=db3;SCL=0;SCL=1;
SDA=db10;RS=db2;SCL=0;SCL=1;
SDA=db9;RS=db1;SCL=0;SCL=1;
SDA=db8;RS=db0;SCL=0;SCL=1;
SCL=0;
CS1=1;
}
哪位大神帮忙指导一下,谢谢!
你是通过IO口模拟,纯软件实现SPI通讯。
那可以写一个传输9bit数据的函数,例如:void write_9bit(uint data)
其中data是16位数据,传输其中需要的9bit内容即可。
需要传输9bit数据时调用write_9bit函数,需要传输8bit数据时调用write_data函数。
页:
[1]