我刚参加工作时使用最普通的AT89C51单片机,汇编编程。调试过程中系统出现奇怪的问题,十有**都是以下地方处理有误,收集整理的系统除错流程,供新手参考学习
如果单片机系统出现问题,检修流程如下:
一、对硬件电路的检查
1、检查电源(40脚)
2、检查振荡(18、19脚)
3、检查地(20脚)
3、检查复位电路(9脚)
4、检查中断允许(31脚)
5、然后再检查是否有信号
6、信号是否正确
二、软件编写规则
1、只被调用一次的不要写成子程序
2、不比自己定义太多的ORG地址入口,只需定义两个,一个0000H,还有一个主程序入口,
3、中断程序需定义自己的程序入口地址,
中断源有INT0,定时器T0,INT1,定时器T1,串行口中断,共5种中断,
入口地址分别为,INT0 = 0003H, 定时器T0 = 000BH,
INT1 = 0013H, 定时器T1 = 001BH
串口 = 0023H
从0003H开始,彼此相差8个存储单元,在此处中断程序是放不下的,需要跳转到其他地址,
4、一般的跳转和调用都使用LJMP 和 LCALL
三、串口控制寄存器的设置
SCON sm0,sm1,sm2,ren,tb8,rb8,ti,ri
一般不能对TB8、RB8 设置,这样会影响串口中断位 RI,即在发生中断的时候,数据还没有完全接收完,但是此时因为设置了RB8位,有可能把RI置位使得数据丢失。对于TI存在同样情况。
发送与接收数据都可以有两种方式
1、查询 (查询RI,TI)2。中断设定入口地址 (ORG 0023H)
2、对于外部中断,有两种触发方式,一是低电平触发,一是下降沿触发,看情况选则触发方式。在以上的两种触发方式下,IE0、IE1都能被CPU自动复位成0,但是在电平触发方式下,必须保证INT1、INT0上的电平在中断被CPU响应以后立即变为高电平,否则会再次触发中断。
触发方式控制位 IT1 IT0
SETB IT1
SETB IT0 下降沿触发
CLR IT1
CLR IT0 低电平触发
四、防止程序混乱的软处理方法
1.利用软件狗来处理
2.软件陷阱技术
3.刷新寄存器
定时时间长度计算(方式1):
定时器初值 = FFFF - ( 定时时间长度/( 1/f*12 ))
用户1602177 2011-10-10 16:56