51单片机的调试经验分享

2021-06-10来源: eefocus关键字:51单片机  调试经验  UART

简介:一个全双工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

上一篇:扩展存储器电路图设计
下一篇:51单片机如何模拟串口之计数法

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

51单片机最小系统设计
简介:AT89S51单片机最小系统,就是使单片机正常运行的最低配置:它有一系列模块组成。1)复位系统: 当引脚9出现2个机器周期以上高电平时,单片机复位,程序从头开始运行.2)时钟系统:有振荡器电路产生频率等于晶振频率,这时用的是外界晶振。也可以又外部单独输入,此时XTAL2脚接地,时钟信号由XTAL1输入.3)电源系统:VCC,和 GND引脚,供电电压4--5.5V.程序的烧入引脚:flash存储器由串行ISP接口编程,计算机和单片机烧写由专用的烧入软件完成如AVR_fighter for usb asp.
发表于 2021-05-17
<font color='red'>51单片机</font>最小系统设计
Proteus仿真51单片机C语言程序实例-开关控制报警器
简介:51单片机C语言程序实例-开关控制报警器(用K1开关控制报警器,程序控制P1.0输出两种不同频率的声音,模拟很逼真的报警效果)。
发表于 2021-05-17
Proteus仿真<font color='red'>51单片机</font>C语言程序实例-开关控制报警器
51单片机是冯诺依曼结构还是哈佛结构?
的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。程序指令存储和数据存储分开,可以使指令和数据有不同的数据宽度,如Microchip公司的PIC16芯片的程序指令是14位宽度,而数据是8位宽度。目前使用哈佛结构的中央处理器和微控制器有很多,除了上面提到的Microchip公司的PIC系列芯片,还有摩托罗拉公司的MC68系列、Zilog公司的Z8系列、ATMEL公司的AVR系列和安谋公司的ARM9、ARM10和ARM11,51单片机也属于哈佛结构冯·诺伊曼结构也称普林斯顿结构,是一种将程序指令存储器和数据存储器合并在一起的存储器结构。程序指令
发表于 2021-05-17
<font color='red'>51单片机</font>是冯诺依曼结构还是哈佛结构?
简述51单片机延时函数
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。扩展阅读:汇编延时程序算法详解一. 500ms延时子程序程序:void delay500ms(void){unsigned char i,j,k;for(i=15;i>0;i--)for(j=202;j>0;j--)for(k=81;k>0;k--);}计算分析:程序共有三层循环一层循环n:R5*2 = 81*2 = 162us DJNZ 2us二层
发表于 2021-05-17
51单片机串口通信1602显示
简介:本文章是关于51单片机串口通信1602显示。/*-----------------------------------------------名称:LCD1602论坛:编写:日期:2009.5修改:无内容:通过标准程序静态显示字符引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK------------------------------------------------*/#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#include<intrins.h>void
发表于 2021-05-14
51单片机学习感悟与51单片机上拉电阻心得
1、我从不说51是基础,如果我这么说,也请把这句话理解为微机原理是基础。2、对51单片机的操作本质上就是对寄存器的操作,对其他单片机也是如此。库只是一个接口,方便使用者使用而已。3、汇编语言在工作中很少用到,了解就好。4、51单片机的P0口很特别。5、C语言就是C语言,51单片机就是51单片机,算法就是算法,外围电路就是外围电路,传感器就是传感器,通信器件就是通信器件,电路图就是电路图,PCB图就是PCB图,仿真就是仿真。当你以后再也不使用51了,C语言的知识还在,算法的知识还在,搭建单片机的最小系统的技能还在,传感器和通信器件的使用方法还在,还会画电路图和PCB图,当然也会仿真。6、51单片机是这个:7、当程序调试不如人意
发表于 2021-05-14
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved