永发信息网

我想通过串口通信发送1的时候第一个LED灯亮,第二个LED灯灭,第三个LED等闪烁三十次 这个程序哪里错了啊?

答案:2  悬赏:80  手机版
解决时间 2021-02-27 18:06
#include
#include
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
unsigned char flag,i,a;
unsigned int x;
unsigned char code table[]="DONE";
void start()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}
void delay(unsigned int y)
{
for(;y>0;y--)
for(x=0;x++;x<1000);
}
void main()
{
start();
while(1)
{
if(flag==1)
{
ES=0;
if(a==1)
{
P1_0=0;
for(i=0;i<30;i--)
{
P1_2=0;
delay(1000);
P1_2=1;
delay(1000);
}
for(i=0;i<4;i++)
{
SBUF=table[i];
while(!TI);
TI=0;
}
flag=0;
ES=1;
}
}
}
}
void ver() interrupt 4
{
RI=0;
a=flag;
flag=1;
}
最佳答案
void ver() interrupt 4
{
RI=0;
a=flag;
flag=1;
}
这个中断程序有问题,无论你发的是1还是其他任何数,在中断函数里面的a和flag的值都没有发生改变,我想你要表达的意思应该是a=SBUF;
然后你可以在主程序里面用
switch....case语句,这样你就可以通过发不同的数据,控制不同的LED灯状态了
全部回答
电脑上,你是用什么软件发送数据的看用串口调试助手就行,网上到处可以下载。也好用。关键问题是在电脑上发送的0,1,是以什么数据格式发送的,通常以字符格式发送的,即是ascii码。所以,单片机接收时,也要按字符格式发才行。而你的程序是按十六进制数的格式判断的,也就是二进制数,所以,发送和接收格式不统一,单片机就不能正常接收控制led0,也就不能正常返回数据。 if(sbuf==0) //这是按二进制数接收的 if(sbuf==1) //这也是按二进制数接收的 这样写程序,要求电脑上,要按二进制数即十六进制数发送才行。 还是按字符格式收发比较好。 这样,程序改一下就行了。 if(sbuf==‘0’) //这就是按字符接收的 if(sbuf==‘1’) //这也是按字符接收的 其它行不用动。 这样,收发比较可靠。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
建设银行南通.鲁班龙卡初始密码是什么
百丰棋牌茶艺在哪里啊,我有事要去这个地方
求一小说名字。开头女主在男主的婚宴上威胁他
顺丰发一个行李箱从武汉到内蒙赤峰要多少钱
荣事达净水器值水慢的原因?
海尔冰柜断电放置三个月后再通电使用。对冰柜
天水哪家银行可以兑换外币?
天刀里的江湖身份工具在哪看
【笔的拼音】笔的拼音(bi)是几声调啊?
坤厚食府怎么去啊,有知道地址的么
钢化用英语怎么说
女友洗澡时让我给她按摩,后来她把我脱光了!
five hundred and fifteen thousand那个and是
我姐没结婚有房,能把我儿子户口上到姐的名下
中兴为什么干不过华为
推荐资讯
鼓浪屿海天堂构导游词
所有预言家都预言了什么?
鹏飞跆拳道白山分校地址在什么地方,想过去办
冀州市金丰工矿胶管有限责任公司地址在哪,我
我要一听起来很妖媚的狐狸精名字,我要写小说
去泰国旅游最好带多少泰铢
取名字【2-3字的】
用两台摄像机录制一节课,用什么软件整理成一
其实东北人看似好爽,内在是完全没什么同情
法兰和管道连接有什么办法可以直?
昨天看了一下鬼子来了,终于知道为什么被禁
e我们的爱情雨中漫步在此时此刻意境深远方的
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?