定时器方式2的使用方法
与定时器方式1的不同点
- 计数长度不同 256us
- 自动重置初值 TL0 =初值 TH0=初值 记满溢出后系统自动把TH0的值赋值给TL0
- .uchar k à uint k (unsigned char只能存256个数字 )
外部中断,按键,led灯
以INT0为例
使用杜邦线连接起来(江科大stc89c52 P3.2和INT0在一起 不需要连接)
再看独立按键
1.中断允许 EA = 1
2.中断请求 低电平触发(慎用 由于按键抖动) K3按下 P3.2 =0 ->IE0 = 1
下降沿触发 (按键响应更精准)
TCON寄存器
设置为下降沿触发 IT1=1 IT0=1
低电平触发 IT1=0 IT0 =0
#include <REGX52.H>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
uchar k=0;
void Delayms(uchar n)
{
unsigned char i, j;
while(n--)
{
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void Timer0Init(void)
{
TMOD = 0x01; //设置定时器工作开关模式
TH0 =(65536-50000)/256;
TL0 =(65536-50000)%256;
TR0 = 1; //定时器开始计时
EA = 1; //总开关
ET0 =1; //中断允许标志位
}
void Int0Init()
{
EA = 1; //总开关
EX0 = 1; //允许外部中断
IT0 =1 ; //下降沿触发
}
void main()
{
uchar n = 0x01;
Timer0Init();
Int0Init();
while(1)
{
P2=~n;
while(k<20);
k=0;
if(n ==0x80){n=0x01;}
else {n<<=1;}
}
}
void timer0() interrupt 1
{
TH0 =(65536-50000)/256;
TL0 =(65536-50000)%256;
k++;
}
void int0() interrupt 0
{
Delayms(10); //消抖
if(P3_2==0){TR0 = ~TR0;}
}