中断源:





EA = 1; //开总中断
ET0 = 1; //开定时器中断
TR0 = 1; //开定时器0
51单片机的定时器不准,但是串口很准。
#include <REGX52.H>
#include "intrins.h"
#include "delay.h"
unsigned char m_t0;
unsigned char key_tim20ms_flag;
#define LED0 P2_0
#define KEY3 P3_2
void Init(void);
void main(void)
{
Init();
while(1)
{
}
}
void Init(void)
{
TMOD = 0x01;
//12MHz 1ms Tim0
TH0 = (65536 - 1000) / 256;
TL0 = (65536 - 1000) % 256;
EA = 1; //开总中断
EX0 = 1; //开外部中断0
IT0 = 1; //下降沿产生外部中断
ET0 = 1; //开定时器中断
TR0 = 1; //开定时器0
}
void ExternInterupt0(void)interrupt 0
{
key_tim20ms_flag = 1;
}
void Timer0(void)interrupt 1
{
TH0 = (65536 - 1000) / 256;
TL0 = (65536 - 1000) % 256;
if(key_tim20ms_flag == 1)
{
m_t0++;
if(m_t0 >= 20)
{
if(KEY3 == 0)
{
P2_0 = ~P2_0;
}
m_t0 = 0;
key_tim20ms_flag = 0;
}
}
}
这篇博客主要探讨了51单片机的中断系统,重点提到了定时器的精度问题以及串口的可靠性。虽然51单片机的定时器在某些应用中可能不够精确,但其串口通信保持了高度的准确性,这对于嵌入式硬件开发者来说至关重要。
542

被折叠的 条评论
为什么被折叠?



