单片机的C语言问题!!!!!!!

anihcer 2011-03-21 09:40:19
要求: 串口16进制发送一个字符给单片机,单片机接收该字符(比如0xd1)。然后控制小灯以该数据作为间隔时间闪烁。


问题: 基本做出来了,但有个地方不解,中断里面的时间好像都是十进制的。
比如定时器1ms if(t==20){ LED=~LED;}意思是20ms间隔。可现在是随时发来的16进制,不知道如何下手啦。
求老手给思路
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
anihcer 2011-03-23
  • 打赏
  • 举报
回复
谢谢你们啊,我明白了
ycliuhaibo 2011-03-22
  • 打赏
  • 举报
回复
你程序里不论是16进制、2进制还是10进制在编译的时候都会被转换成2进制。
bjtea 2011-03-21
  • 打赏
  • 举报
回复
1)单片机机内的数无论是16进制或2进制,在你的这条语句中,都不会发生错误。因为你C语句中的10进制的20与单片机内的16进制的14H或2进制的00010100B是相等的,随着时间计数值的增长,总会出现相等的情况。
2)有经验的编程者,应该写成if(t>=20){t=0; LED=~LED},这样可以避免意外;
3)我猜想你的问题出在,串口发送来的字符是ASCII码,这时串口收到的20是“2”和“0”两个字符,也就是接收到的是两个字节的数,自然不会等于你的20了。你需要将ASCII码转回成16进制数,并且将两数拼接起来,才能够与20去比较。
希望能对你有帮助
zhujinqiang 2011-03-21
  • 打赏
  • 举报
回复
楼上解释的很清楚了。

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧