关于51单片机编程的一些错误总结
扫描二维码
随时随地手机看文章
(1)这两天一直在受一个问题的干扰,那就是做单片机串口通信的时候,有些数据总是传得不对:当显示0~f这些数字的时候,显示没有错误,而显示其它8位数据的时候都错了,发送11(16进制)时,到单片机上居然是49(十进制),这显然是不对的,一直怀疑是程序的问题,反复地检查和修改之前编的一个数码管动态显示子程序,没有错,那只能是串口初始化和串口子程序有问题了……这么想太错了……先入为主,两天以来,都没解决(其实也没什么心情解决了,又是临近周末,都在看老友记),今天打定一定要解决了,就开始研究,刚开始一直在沿着老路,反复修改程序。。。。后来无意间一瞥,看到晶振上标着“12.000”,瞬间明白所有问题所在,立刻改为11.0592Mhz的晶振,这个开发板是别人的……居然还有人用12M的晶振!实在无语……
如果用12M的晶振,那么波特率只能用1200了,极慢无比的速度……想用其他的波特率(2400、4800、9600)等就等用11.0592M,具体为什么,看书去……
(2)第二个问题,还是串口通信的。编程的时候一直用的查询RI的方法,来接收数据,因为中断法就没成功过。。今天想了一下原因,参考了下别人的程序,把ET1=1给注释掉,发现可以了。。。这是因为利用定时器1作为波特率发生器时,是不用开启中断的(但要开启定时器,即置位TR1)。如果开启了中断,这时候定时器1的中断优先级会默认比串口的高,那样就有很大的可能进入不了串口的中断服务程序,也就无法接收数据了。
扩展阅读:单片机汇编程序设计之时间片