
照着书上写的一个spi控制595的程序,为什么有问题呢?哪位高手能指点一下呢? 5
#include"lpc21xx.h"voidIOInit(void);voidSPIInit(void);voidSendData(unsignedintdata);v...
#include "lpc21xx.h"
void IOInit(void);void SPIInit(void);
void SendData(unsigned int data);
void Delay(unsigned int dly);
int main(void){
IOInit();
SPIInit();
SendData(0xa4);
Delay(10);
while(1);
}
void IOInit(void){
PINSEL1=0x000002a8;//595的SPI功能选择
PINSEL2=0;//数码管位选端的I/O功能
IO0DIR=1<<20;//CS
IO1DIR=1<<16;//LED位选
IO1CLR=1<<16;//LED位选选通
}
void SPIInit(void){
S1SPCCR=0x52;//SCK频率
S1SPCR=0x30;//主机模式,SCK为低有效,第一个沿采样
}
void SendData(unsigned int data){
IO0CLR=1<<20;//片选CS,拉低
S1SPDR=data;//数据发到数据寄存器中
while(0==(S1SPSR&0x80)); //检测发送完毕没有
IO0SET=1<<20;//片选CS,拉高
}
void Delay(unsigned int dly)
{
unsigned int i;
for(;dly>0;dly--)
for(i=0;i<5000;i++);
}
这个程序用j-link下载时经常出现看门狗复位的情况,而且下载进去以后位选功能正常,但数码管显示的效果不对 展开
void IOInit(void);void SPIInit(void);
void SendData(unsigned int data);
void Delay(unsigned int dly);
int main(void){
IOInit();
SPIInit();
SendData(0xa4);
Delay(10);
while(1);
}
void IOInit(void){
PINSEL1=0x000002a8;//595的SPI功能选择
PINSEL2=0;//数码管位选端的I/O功能
IO0DIR=1<<20;//CS
IO1DIR=1<<16;//LED位选
IO1CLR=1<<16;//LED位选选通
}
void SPIInit(void){
S1SPCCR=0x52;//SCK频率
S1SPCR=0x30;//主机模式,SCK为低有效,第一个沿采样
}
void SendData(unsigned int data){
IO0CLR=1<<20;//片选CS,拉低
S1SPDR=data;//数据发到数据寄存器中
while(0==(S1SPSR&0x80)); //检测发送完毕没有
IO0SET=1<<20;//片选CS,拉高
}
void Delay(unsigned int dly)
{
unsigned int i;
for(;dly>0;dly--)
for(i=0;i<5000;i++);
}
这个程序用j-link下载时经常出现看门狗复位的情况,而且下载进去以后位选功能正常,但数码管显示的效果不对 展开
1个回答
展开全部
没说是什么问题!
【1】HC595输出不对头?...解决办法:选择了某位八段,要要延迟一段时间,大约1us这样的,以便保证SPI输出的数据的前沿在SPI_CS之后。另外一个产生错误的可能是“不断检测SPI_READY位”!建议不要接着检测,而是估计发送一个字节所花的时间,再考虑一个延迟。例如,发送一个字节为10us,则检测之前先延迟6us左右,再检测SPI_READY标志,不影响你的发送速率。这样做的原因是很多SPI核设计不是很好,还有可能是ARM7的IO速率与指令速率匹配。一个IO_R/W周期很长,而一个指令周期很短;
【2】位码不对?...................解决办法:严格检查PORT_DIR,保证引脚配置正确。
--------
长时间不鼓捣这东西了,具体还得请你自己细致测验。
【1】HC595输出不对头?...解决办法:选择了某位八段,要要延迟一段时间,大约1us这样的,以便保证SPI输出的数据的前沿在SPI_CS之后。另外一个产生错误的可能是“不断检测SPI_READY位”!建议不要接着检测,而是估计发送一个字节所花的时间,再考虑一个延迟。例如,发送一个字节为10us,则检测之前先延迟6us左右,再检测SPI_READY标志,不影响你的发送速率。这样做的原因是很多SPI核设计不是很好,还有可能是ARM7的IO速率与指令速率匹配。一个IO_R/W周期很长,而一个指令周期很短;
【2】位码不对?...................解决办法:严格检查PORT_DIR,保证引脚配置正确。
--------
长时间不鼓捣这东西了,具体还得请你自己细致测验。
追问
谢谢你的回答,不过貌似还是没能解决问题,呵呵。这个程序用j-link下载时经常出现看门狗复位的情况,而且下载进去以后位选功能正常,但数码管显示的效果不对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2025-01-03 广告
单片机串口通信的原理是利用单片机的串口通信模块,通过把数据转化为一位一位的用时序方式传送数据,实现单片机与外部设备之间的数据通信。
串口通信的概念非常简单,串口按位(bit)发送和接收字节。尽管比按字节(byte)的并行通信慢,但是串口可以...
点击进入详情页
本回答由迪凯特科技(北京)有限公司_提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询