首先我跟大家说下我的一下代码需要实现的功能,非常简单就是在定时其溢出也就是进入中断之后单片机通过串口给我的上位机发送一个验证字符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,所以导致定时器一直无法溢出去执行定时器中断函数。相信我说道这里单价应该明白怎么回事了吧!
以本人所犯之错,希望大家引以为戒!!!