共2条
1/1 1 跳转至页
LPC2104,SPI LPC2104中模拟SPI实验C语言代码中遇到的问题!!

问
/****************************************************************************
* 名称:HC595_SendDat()
* 功能:向74HC595发送一字节数据
* 入口参数:dat 要发送的数据
* 出口参数:无
* 说明:发送数据时,高位先发送。
****************************************************************************/
void HC595_SendDat(uint8 dat)
{ uint8 i;
IOCLR = SPI_CS; // SPI_CS = 0
for(i=0; i<8; i++) // 发送8位数据
{ IOCLR = SPI_CLK; // SPI_CLK = 0
/* 设置SPI的DATA输出值 */
if( (dat&0x80)!=0 ) IOSET = SPI_DATA;
else IOCLR = SPI_DATA;
dat <<= 1;
IOSET = SPI_CLK; // SPI_CLK = 1
}
IOSET = SPI_CS; // SPI_CS = 1,输出显示数据
}
上程序中
if( (dat&0x80)!=0 ) IOSET = SPI_DATA;
else IOCLR = SPI_DATA;
dat <<= 1;
IOSET = SPI_CLK;
怎么理解?? 答 1: 我的理解软件模拟SPI接口,时序是自己送的,在SPI_CLK一个正跳变时送一个字节,因为,驱动数码管的595是串入并出。
所以,数据1bit1送,送8次就是1Byte,正好可以显示1个数字。
在CS=1时输出显示。
当然,你用SPI口的话,时序由硬件提供,就可以不要考虑时序。但,PINSEL需要考虑。
按照此思路,同样可以实现2个I/O口模拟I2C的程序,不过I2C的协议比较复杂,对编程的人要求教高,有兴趣的可以一试。 答 2: 谢谢祈祷之龙!我后来自己也想通了,但听你这么一说我有了更深的理解。我是初学者对硬件知识了解不够,以后请多多指教!!!
* 名称:HC595_SendDat()
* 功能:向74HC595发送一字节数据
* 入口参数:dat 要发送的数据
* 出口参数:无
* 说明:发送数据时,高位先发送。
****************************************************************************/
void HC595_SendDat(uint8 dat)
{ uint8 i;
IOCLR = SPI_CS; // SPI_CS = 0
for(i=0; i<8; i++) // 发送8位数据
{ IOCLR = SPI_CLK; // SPI_CLK = 0
/* 设置SPI的DATA输出值 */
if( (dat&0x80)!=0 ) IOSET = SPI_DATA;
else IOCLR = SPI_DATA;
dat <<= 1;
IOSET = SPI_CLK; // SPI_CLK = 1
}
IOSET = SPI_CS; // SPI_CS = 1,输出显示数据
}
上程序中
if( (dat&0x80)!=0 ) IOSET = SPI_DATA;
else IOCLR = SPI_DATA;
dat <<= 1;
IOSET = SPI_CLK;
怎么理解?? 答 1: 我的理解软件模拟SPI接口,时序是自己送的,在SPI_CLK一个正跳变时送一个字节,因为,驱动数码管的595是串入并出。
所以,数据1bit1送,送8次就是1Byte,正好可以显示1个数字。
在CS=1时输出显示。
当然,你用SPI口的话,时序由硬件提供,就可以不要考虑时序。但,PINSEL需要考虑。
按照此思路,同样可以实现2个I/O口模拟I2C的程序,不过I2C的协议比较复杂,对编程的人要求教高,有兴趣的可以一试。 答 2: 谢谢祈祷之龙!我后来自己也想通了,但听你这么一说我有了更深的理解。我是初学者对硬件知识了解不够,以后请多多指教!!!
共2条
1/1 1 跳转至页
回复
打赏帖 | |
---|---|
【Zephyr】使用Zephyr外设初始化过程解析被打赏30分 | |
【S32K146】S32DS watchdog 配置使用被打赏20分 | |
【Zephyr】使用 IAR 调试 Zephyr 镜像被打赏20分 | |
赚取电动螺丝刀+电源电路理论知识分享1被打赏5分 | |
我想要一部加热台+分享常见运算放大器电路的应用被打赏5分 | |
【Zephyr】MCXN947 Zephyr 开发入门适配shell被打赏20分 | |
我想要一部加热台+常见的MOS管驱动电路被打赏5分 | |
【我要开发板】6.联合MATLAB记录数据被打赏50分 | |
【换取手持数字示波器】MicrochipMPLABHarmony框架下串口调试printf输出记录被打赏29分 | |
【瑞萨RA2E1开发板】:使用ADC功能实现位移传感器采集方案被打赏20分 |