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 引用地址:51单片机的调试经验分享

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

推荐阅读最新更新时间:2024-11-04 19:06

基于51单片机的电梯控制系统设计
一.系统概述 系统使用的模块有AT89C51单片机+LCD1602显示屏+ADC0832+按键+小灯。 本次设计的智能路灯控制系统以AT89C51单片机为控制核心,使用LCD1602显示屏显示ADC采集回来的光照强度的数字电压信号,系统程序内设置光照强度阈值,在默认状态下为自动模式,此时调节电位器就能实现光照强度的调节,按下自动按键就会切换到手动模式,此时按下手动开和手动关按键就能控制小灯的亮灭。 二.仿真概述 1.使用LCD1602显示光照强度电压信号值。 2.为电梯的内外都设置了上下楼按键,按下就开始执行上下楼程序,左侧的指示灯会根据电梯上行和下行高亮,到达指定楼层后状态灯会直接亮起。 3.当按下上下楼按键后
[单片机]
基于<font color='red'>51单片机</font>的电梯控制系统设计
51单片机实现呼吸灯
一、概述 使用51单片机控制LED,实现其由暗变亮,再由亮变暗的渐变过程。 二、程序 #include STC15F2K60S2.H #include MacroAndConst.h sbit LED = P1^5; #define LED_ON() LED = 0; //LED亮 #define LED_OFF() LED = 1; //LED灭 #define LED_PWM_LIMIT_MAX 99 #define LED_PWM_LIMIT_MIN 0 static u8 s_u8TimeCounter = 0; //中断计数 static u8 s_u8LedDirection = 0;
[单片机]
80C51单片机程序(2)
//80C51程序 单片机的流水灯显示 //发光二极管的闪烁 ------------------------------------------------------------------- #include reg52.h //包含reg52.h头文件 #define uint unsigned int //宏定义uint的数据类型为unsigned int型 sbit D1=P1^2; //定义P1^2位 void main() { uint num=50000; //定义num数据类型,并附初值 D1=0; //点亮发光二极管 while(num--);
[单片机]
解决51单片机复位触发的4种方法
51内核的单片机有个比较恼人的特性就是复位期间,IO口呈高电平状态,万一IO口控制的设备是使用高电平触发的话,在复位的瞬间会造成设备触发。 总结一下接触过的解决方法: 1、把MCU换成别的体系的,譬如AVR、PIC等,这些单片机复位时IO口呈浮空高阻状态,不会造成触发。 2、使用反相驱动,MCU输出低电平反相成高电平再去控制设备。复位时的高电平反相后变成低电平,不会触发。这是比较常用的方法,稳定,但布线复杂了不少。 3、使用光耦隔离。光耦隔离后MCU也是输出低电平打开光耦再驱动被控设备,复位时的高电平不会打开光耦,不会造成误触发。 4、使用多余的IO口锁定,这种方法比较奇怪,在没用的IO口里挑一个出来接到NPN管的基极,
[单片机]
解决<font color='red'>51单片机</font>复位触发的4种方法
51单片机的定时器中断(寄存器)
中断是为使单片机具有对外部或内部随机发生的事件进行处理而设置的。51单片机有5种中断源,即有5种对应的情况发生时会使单片机去处理中断程序(中断函数)。 此篇主要整理定时器中断笔记。采用定时器中断会涉及中断寄存器,定时器/计数器相关寄存器(TCON,TMOD),中断函数等知识点。 其中,中断寄存器,定时器/计数器相关寄存器本身或者相关位用来做初始化,中断函数的内容主要是体现发生中断后所需要的操作(在中断函数内写代码)。 1.中断允许寄存器IE 图1.中断寄存器IE 中断寄存器用来设定各个中断源的打开和关闭,IE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H~AFH,该寄存器运行位寻址,即可对该
[单片机]
<font color='red'>51单片机</font>的定时器中断(寄存器)
基于51单片机的蓝牙电子秤设计
一.硬件方案 本设计硬件主要由51单片机+最小系统+LCD1602液晶显示模块+HX711模块+LED模块+蜂鸣器模块+矩阵按键模块+10kg压力传感器;如图: 二.设计功能 (1)LCD1602显示屏显示当前的重量,单位是g。 (2)有去皮功能,有微调校准重量功能。 (3)最大称重9.999kg。 (4)AD采用24位AD模块HX711 三.设计原理图 (1)原理图主要采用AD软件进行设计,如图: 四.软件设计 (1)程序流程图 (2)主程序源码 //**************************************************** //主函数 //*******************
[单片机]
基于<font color='red'>51单片机</font>的蓝牙电子秤设计
51单片机-温度控制-PID算法-DS18B20-C语言
#include reg51.h #include intrins.h #include math.h #include string.h struct PID { unsigned int SetPoint; // 设定目标 Desired Value unsigned int Proportion; // 比例常数 Proportional Const unsigned int Integral; // 积分常数 Integral Const unsigned int Derivative; // 微分常数 Derivative Const unsigned int LastError; // Error u
[单片机]
红外遥控电机调速+普中51单片机+江科大自化协
1 实验现象   基于STC89C52单片机设计一个红外遥控直流电机调速系统。一上电,数码管上显示0,此时直流电机不转动。当按下红外遥控器上的“1”键时,数码管显示1,直流电机开始转动。电机转速分为4个挡位,每升高一个挡位,数码管都会显示对应的挡位数字同时提高电机的转速。 2 实验原理   该系统整体采用红外遥控器控制,红外接收模块接收到遥控器键码信号后,向单片机送入中断信号并由单片机译码,单片机开始进行相应挡位的数据处理和挡位的改变。通过模拟PWM模块产生不同的PWM矩形波来控制直流电机调速,最后显示挡位到数码管上。 3 系统设计 4 硬件设计(略) 5 软件设计 5.1 主函数 #include REGX52
[单片机]
红外遥控电机调速+普中<font color='red'>51单片机</font>+江科大自化协
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved