跪求c51单片机c语言大神,用c51语言写一段基于串口通信的投票统计器程序,要求如下,谢谢大神们,谢谢谢谢

21ic官方微信-->
后使用快捷导航没有帐号?
请完成以下验证码
查看: 556|回复: 22
关于51单片机串口通信的问题,请各位大神指教
&&已结帖(30)
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
本帖最后由 #THANKYOUKOBE 于
17:06 编辑
题目:由上位机发送1给单片机时,蜂鸣器以400ms频率发声,发2时以200ms频率发声,发3时以100ms频率发声,发4时关闲蜂鸣器。
#include&reg52.h&
#define uchar unsigned char
#define uint unsigned int
sbit d1=P2^3;
uchar a,flag,om,
#include&reg52.h&
#define uchar unsigned char
#define uint unsigned int
void init()
& && &&&TMOD=0x21;
& && &&&TH1=0
& && &&&TL1=0
& && &&&TH0=()/256;
& && &&&TL0=()%256;
& && &&&SM0=0;
& && &&&SM1=1;
& && &&&REN=1;
& && &&&EA=1;
& && &&&ES=1;
& && &&&ET0=1;
& && &&&TR1=1;
/*delay(uchar xms)
& && &&&uint i,j;
& && &&&for(i=i&0;i--)
& && && && && & for(j=110;j&0;j--);
void main()
& && &&&init();
& && &&&while(1)
& && &&&if(flag==1)
& && && && && & flag=0;
& && && && && & ES=0;
& && && && && & om=a;
& && && && && & SBUF=a;
& && && && && & while(!TI);
& && && && && & TI=0;
& && && && && & ES=1;
& && && && && & TR0=1;
& && &&&switch (om)
& && && && && & case 1:
& && && && && && && && &if(temp==8)
& && && && && && && && &{
& && && && && && && && && && &&&temp=0;
& && && && && && && && && && &&&d1=~d1;
& && && && && && && && &}
& && && && && && && && &
& && && && && & case 2:
& && && && && && && && &if(temp==4)
& && && && && && && && &{
& && && && && && && && && && &&&temp=0;
& && && && && && && && && && &&&d1=~d1;
& && && && && && && && &}
& && && && && && && && &
& && && && && & case 3:
& && && && && && && && &if(temp==2)
& && && && && && && && &{
& && && && && && && && && && &&&temp=0;
& && && && && && && && && && &&&d1=~d1;
& && && && && && && && &}
& && && && && && && && &
& && && && && & case 4:
& && && && && && && && &d1=1;
& && && && && && && && &
void ser() interrupt 4
& && &&&RI=0;
& && &&&a=SBUF;
& && &&&flag=1;
void timer0() interrupt 1
& && &&&TH0=()/256;
& && &&&TL0=()%256;
& && &&&temp++;
数据能正常发送给单片机,并且能将发送的数据正常返回给上位机,但蜂鸣器不响,想不通是什么问题&&求大神指教!!
满意回复+30
temp初值要给,而且要定义成volatile;不过现在很多嵌入式的编译器都带初始化的,比如iar就自带全局变量初始化,一般为0,除非定义为_NO_INIT_,这个要看编译器属 ...
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:97%打赏:0.00受赏:38.00
主题帖子积分
你先别整那么复杂,先调试收到数据开始叫,再收到数据停,然后再调什么几百mS的问题。
++++看NE5532教学视频,炼就工程技术研发功力++++++++++
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
你先别整那么复杂,先调试收到数据开始叫,再收到数据停,然后再调什么几百mS的问题。 ...
void main()
& & & & init();
& & & & while(1)
& & & & if(flag==1)
& & & & & & & & flag=0;
& & & & & & & & ES=0;
& & & & & & & & om=a;
& & & & & & & & SBUF=a;
& & & & & & & & while(!TI);
& & & & & & & & TI=0;
& & & & & & & & ES=1;
& & & & & & & & TR0=1;
& & & & & & & & switch(om)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & case 1:
& & & & & & & & & & & & & & & & & & & & aa=8;
& & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 2:
& & & & & & & & & & & & & & & & & & & & aa=4;
& & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 3:
& & & & & & & & & & & & & & & & & & & & aa=2;
& & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & case 4:
& & & & & & & & & & & & & & & & & & & & TR0=0;
& & & & & & & & & & & & & & & & & & & & d1=1;
& & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & }
void ser() interrupt 4
& & & & RI=0;
& & & & a=SBUF;
& & & & flag=1;
void timer0() interrupt 1
& & & & TH0=()/256;
& & & & TL0=()%256;
& & & & temp++;
& & & & & & & & if(temp==aa)
& & & & & & & & {& & & &
& & & & & & & & & & & & temp=0;
& & & & & & & & & & & & d1=~d1;
& & & & & & & & }& & & & & & & &
但我把主程序和中断程序改成这样就没有问题了,麻烦问一下我刚开始的做法哪里错了
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:96%打赏:9.18受赏:100.00
主题帖子积分
void main()
& & & & init();
应该都可以吧
21ic公开课,21ic网友共同的学习圈子!
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
应该都可以吧
第一个运行的时候能收到数据&&但是蜂鸣器不响
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
主题帖子积分
专家等级:结帖率:0%
主题帖子积分
实习生, 积分 3, 距离下一级还需 47 积分
实习生, 积分 3, 距离下一级还需 47 积分
问题出在你的循环函数里,你的第一个程序你把temp置零,判断中断及上位机发过来的信息全部被置零,而后一个程序你置temp时,aa没有置零
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
问题出在你的循环函数里,你的第一个程序你把temp置零,判断中断及上位机发过来的信息全部被置零,而后一个 ...
第一个程序temp置零是为了让蜂鸣器以一定的频率响,跟上位机发送过来的信息没有啥关系吧........
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:97%打赏:0.00受赏:38.00
主题帖子积分
void main()
& & & & init();
我只能告诉你方法,错,你自己找。
++++看NE5532教学视频,炼就工程技术研发功力++++++++++
主题帖子积分
主题帖子积分
专家等级:结帖率:46%打赏:135.80受赏:158.50
主题帖子积分
我只能告诉你方法,错,你自己找。
潜规则不是代码不看么?
还没有注释...
自己都不愿意写注释的代码,人家也不愿意看滴。&
←← +→→←←
主题帖子积分
主题帖子积分
专家等级:结帖率:46%打赏:135.80受赏:158.50
主题帖子积分
1.temp 初值是多少?为什么是这个数?
2temp 为啥不是 volatile?
第二个程序就算能用.也是玩具级.建议初学者先学读代码,然后写代码.步子大了肯定扯了蛋.
这种积累只会写玩具级程序.连初值都没有就用++之类,嵌入式编译器是不会报错的.但高版本 vc 是肯定报错
←← +→→←←
主题帖子积分
中级工程师, 积分 4369, 距离下一级还需 631 积分
中级工程师, 积分 4369, 距离下一级还需 631 积分
主题帖子积分
专家等级:结帖率:88%
主题帖子积分
中级工程师, 积分 4369, 距离下一级还需 631 积分
中级工程师, 积分 4369, 距离下一级还需 631 积分
你用的是什么蜂鸣器,电路是怎么接的。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
助理工程师, 积分 1715, 距离下一级还需 285 积分
助理工程师, 积分 1715, 距离下一级还需 285 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
助理工程师, 积分 1715, 距离下一级还需 285 积分
助理工程师, 积分 1715, 距离下一级还需 285 积分
temp初值要给,而且要定义成volatile;不过现在很多嵌入式的编译器都带初始化的,比如iar就自带全局变量初始化,一般为0,除非定义为_NO_INIT_,这个要看编译器属性;
楼主的问题 应该出在判断的地方,
第一个程序:如果om=1,判断为if(temp==8);此时如过中断速度过快,temp=8时,循环来不及判断,或者没有运行到判断这个地方的时候又进入了中断进行++,这个时候temp=9判断就会不通过,除非把判断改成if(temp&=8),不过可能造成频率跟你设想的不一致,所以这是不可靠的判断;而第二个程序不会出现这个问题;
中断与主循环内存共享的时候需要注意的地方很多,最好不要这样用,或者增加内存共享判断,或者内存块权限来做;
贫僧为取经而来
主题帖子积分
技术总监, 积分 40103, 距离下一级还需 9897 积分
技术总监, 积分 40103, 距离下一级还需 9897 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40103, 距离下一级还需 9897 积分
技术总监, 积分 40103, 距离下一级还需 9897 积分
temp的处理有问题,中断与主程序不同步造成的
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
主题帖子积分
专家等级:结帖率:46%打赏:135.80受赏:158.50
主题帖子积分
temp初值要给,而且要定义成volatile;不过现在很多嵌入式的编译器都带初始化的,比如iar就自带全局变量初 ...
你说的方法就稳定好多了.让 lz 好好理解自己写的为啥是玩具级
←← +→→←←
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
NE5532 发表于
我只能告诉你方法,错,你自己找。
好的,谢谢您的指教
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
icecut 发表于
潜规则不是代码不看么?
还没有注释...
实在不好意思,我起码应该加个注释的...&&新人不懂规矩望见谅
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
本帖最后由 #THANKYOUKOBE 于
13:23 编辑
icecut 发表于
<font color="#.temp 初值是多少?为什么是这个数?
2temp 为啥不是 volatile?
我是看郭天祥的教程自学的51单片机,感觉比较有兴趣但没有方向 层主能不能给指条路,感激不尽!
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
temp初值要给,而且要定义成volatile;不过现在很多嵌入式的编译器都带初始化的,比如iar就自带全局变量初 ...
非常感谢!&&我大概明白是什么原因了
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
ayb_ice 发表于
temp的处理有问题,中断与主程序不同步造成的
谢谢您! 我明白了!
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 30, 距离下一级还需 20 积分
实习生, 积分 30, 距离下一级还需 20 积分
xuyaqi 发表于
你用的是什么蜂鸣器,电路是怎么接的。
我用的是郭天祥的板子...
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
终身成就奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
核心会员奖章
等级类勋章
荣誉元老奖章
等级类勋章
湍急之河流
发帖类勋章
突出贡献奖章
等级类勋章
时间类勋章
技术导师奖章
人才类勋章
欢快之小溪
发帖类勋章
时间类勋章
技术奇才奖章
人才类勋章
社区建设奖章
等级类勋章
热门推荐 /3}

我要回帖

更多关于 c51单片机c语言 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信