51单片机的调试经验分享

eefocus · 电子工程世界·2021-06-10 00:00

1.5k

简介:一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;

片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。


一.单片机的组成:


CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;


RAM:用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据;


ROM:用以存放程序、一些原始数据和表格;


I/O口:四个8位并行I/O口,既可用作输入,也可用作输出;


T/C:两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式;


五个中断源的中断控制系统;


一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单片机与微机之间的串行通信;


片内振荡器和时钟产生电路,石英晶体和微调电容需要外接。最高振荡频率取决于单片机型号及性能。


二、I 2C串行总线的组成及工作原理


一开始出现灯没有亮的现象,产生原因是在写信号和读信号之间没有延时,添加delay1(100),注意此时间不能过短,然后在SDA及SCL的赋值后面也要添加delay1(1),此处时间似乎没有多大限制。


三、I 2C串行总线的组成及工作原理-断电保存显示程序的调试


1. 现警告AT24C02有问题,是由于编写时的输入法问题导致,此时应该注意是在英文格式下输入,另外数码管的位置显示不正确


2. LED显示十位出现闪烁不稳定现象,通过调整LED程序中的延迟时间现象得到一定缓解,但问题仍然存在。若将值修改到很小则出现问题3;


3. 显示十位数字出现跟个位数字一样的余辉?通过修改主函数中delay时间数问题得到解决,但是数字仍闪烁。


四、时钟程序


#include <>格式:引用标准库头文件,编译器从标准库目录开始搜索


#incluce ""格式:引用非标准库的头文件,编译器从用户的工作目录开始搜索


1. 液晶显示秒位变化过慢?


问题出现在while下面的if语句中写的是if(count==0),本应为if(count==20)


2. 液晶显示时间在有进位的时候不正确,在开始设置23:59:30走时,显示的却是按23:59:00开始走,并且在秒进位后,分显示的1,且时钟也没有进位?


问题原因:初始化显示不成功,它是默认按照00:00:00开始走的;


解决问题:初始化shi=23,fen=59,miao=30写在了display子函数中,应该将其写在主函数中。


五、时钟程序


1. 初步调试keyscan()没反应,因为没有将keyscan()写在大循环while(1)下


2. keyscan中if(s1num!=0)应写在与if(s1==0)平级的地方,如果写在if(s1==0)里头,将会出现要同时按两个键才会有变化,显然不符合要求,故不响应。


3. keyscan中miao.fen,shi,应该是在为-1的情况下再置为0,而开头把miao.fen,shi设置的是uchar型,故应改为char型。


4. 写完年月日显示函数后,在日期有进位的情况下,在23;59;59;进位时,产生花屏现象,估计是地址指针写完数据后没有及时设置的问题?有待解决?


问题出在自己写的年月日函数,不能正常读取数据?将写数据函数写成了写命令函数,即将lcdwrite_date()写成了lcdwrite_date();改后能显示出年月日,但是年份显示时间不正确。


年份是四位数,用uchar型显然无法正确表达,应改用unsigned long型,并且在write_nian()函数中也应该注意到date类型也应该为unsigned long型;


六、万年历时钟程序


1. 初始化后,初步调试年月日进位成功。


2. 分开写大小月的时候调试出现问题,光标在秒位上不断地闪烁且不移动。


关键字: 51单片机 调试经验 UART 编辑:什么鱼 引用地址: http://news.eeworld.com.cn/mcu/ic538276.html

广告

eefocus · 电子工程世界·2021-06-10 00:00

1.5k
  • 单片机
  • 发送器
  • 用户热评
    打开摩尔芯球APP,查看更多评论

    重大事件及时推送,更流畅的沉浸式阅读体验

    参与评论

    0/200字

    登录后即可发布评论

    发布评论

    请使用浏览器自带的分享按钮,
    将你这篇文章分享出去吧。
    +86
    获取验证码
    登 录

    邮箱登录

    未注册过的用户将直接为你创建摩尔账号