51外部中断 和定时器方式2

                              定时器方式2的使用方法

与定时器方式1的不同点

  1. 计数长度不同     256us
  2. 自动重置初值   TL0 =初值 TH0=初值 记满溢出后系统自动把TH0的值赋值给TL0
  3. .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;}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值