就在今天好好的一个程序,语发基本上都没有任何错误,和官方的资料都对照了也没有什么问题但是原本好好的程序就是定时器打不开了。为什么呢?今天又大概6个小时的时间都浪费在这个不起眼的自己曾经不知道也没注意的问题上。
首先我跟大家说下我的一下代码需要实现的功能,非常简单就是在定时其溢出也就是进入中断之后单片机通过串口给我的上位机发送一个验证字符H55,但是调试了一个下午就是没法实现。大家先看看以下程序!
void main(void)
{
main_init();
}
//-----------------主函数初始化------------------------------------
void main_init(void)
{
EA=1;//开总中断
uart_init();
timer0_init();
}
//-------------------串行口中断--------------------------
void uart_rec() interrupt 4
{
if(RI)
{
RI=0;
Uart_RD=SBUF;
uart_send(Uart_RD);
}
}
//------------------定时器0初始化函数----------------------------
void timer0_init(void)
{
EA=1;
ET0 =1 ;
TR0 =1 ;
AUXR|=0X80;
TMOD|=0x01;
TH0 =0x00;
TL0 =0x00;
}
//------------------定时器0中断服务函数----------------------------
void timer0() interrupt 1
{
TH0 =0xff;
TL0 =0x00;
uart_send(0x55);
}
相信大家程序也看完了,我敢保证单片机C编程基础比较差的肯定找不这问题的所在!其实整个程序的问题主要是出在主函数没有一个while(1);死循环而程序一直循环执行主函数循环一次的时间小于定时器的定时时间00~65536,故而每次循环都会给定时器的高低八位重新初始化赋值h00、h00,所以导致定时器一直无法溢出去执行定时器中断函数。相信我说道这里单价应该明白怎么回事了吧!
以本人所犯之错,希望大家引以为戒!!!
飞言走笔 2012-10-30 22:55