接收串行数据
时间:10-02
整理:3721RD
点击:
由图所示,第一个脉冲唤醒作用,后面8个脉冲下降沿时发送数据。 我现在要写个程序来接收这串数据,用51单片机的INT0中断, 第一个唤醒脉冲的下降沿触发中断,进入中断后,在每个时间下降沿时读取数据口的电平。 程序如下:(i注:P3_2就是CLK,music_data就是DATA。
static uchar temp;
uint rec_data_delay;
uchar i=0;
EX0=0;
rec_data_delay=0;
P3_2=1;
do
{
rec_data_delay++;
}
while((!P3_2)&&(rec_data_delay<65000));
for(i=0;i<8;i++)
{
temp<<=1;
rec_data_delay=0;
P3_2=1;
do
{
rec_data_delay++;
}
while((P3_2)&&(rec_data_delay<3000));
music_data=1;
if(music_data)
temp|=0x01;
rec_data_delay=0;
P3_2=1;
do
{
rec_data_delay++;
}
while((!P3_2)&&(rec_data_delay<3000));
}
num=temp;
EX0=1;
以上的程序接收不到正确的数据,全是0,不知道确在哪?有没有人指点一下? 非常感谢
static uchar temp;
uint rec_data_delay;
uchar i=0;
EX0=0;
rec_data_delay=0;
P3_2=1;
do
{
rec_data_delay++;
}
while((!P3_2)&&(rec_data_delay<65000));
for(i=0;i<8;i++)
{
temp<<=1;
rec_data_delay=0;
P3_2=1;
do
{
rec_data_delay++;
}
while((P3_2)&&(rec_data_delay<3000));
music_data=1;
if(music_data)
temp|=0x01;
rec_data_delay=0;
P3_2=1;
do
{
rec_data_delay++;
}
while((!P3_2)&&(rec_data_delay<3000));
}
num=temp;
EX0=1;
以上的程序接收不到正确的数据,全是0,不知道确在哪?有没有人指点一下? 非常感谢
对了,P3_2就是51的INT0管脚
谢谢,小编分享!
怎么没人指点一下呀
你中断触发方式设置是对的?
看看。51
是对的,每次发数据过来时,都有接收到时, 但我把这接收的数发到电脑上来看, 全是0
是对的,每次发数据过来时,都有接收到时, 但我把这接收的数发到电脑上来看, 全是0
是对的,每次发数据过来时,都有接收到时, 但我把这接收的数发到电脑上来看, 全是0
如果你的CLK接到了外部中断引脚,按你的程序当然接不到数据。记住:每次进入中断都会将中断程序从头至尾执行一次。按句话去检查你的程序,你就知道错误所在了