定时器T0模式0控制LED灯闪烁_AD,Allegro,pads,PCB设计,电源模块,硬件,stm32,嵌入式,单片机,小北设计 Allegro,pads,PCB电路板设计,硬件及芯片资料分享—小北设计

定时器T0模式0控制LED灯闪烁

51单片机 by AD,Allegro,pads,PCB设计,电源模块,硬件,stm32,嵌入式,单片机,小北设计

//IE寄存器:EA,-,ET2,ES,ET1,EX1,ET0,EX0.字节地址A8H
//EX0:外部中断INT0允许位,置1,开,置0,关
//ET0:定时器T0允许位
//EX1:外部中断INT1允许位
//ET1:定时中断T1允许位
//ES:串口中断允许位
//ET2:外部定时器T2允许位(89C52)
//EA: 总中断允许位。控制所有中断使能的总开关
////////////////////////////////////////////////
//TCON:中断请求标志寄存器,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0字节地址88H
//IT0:外部中断INT0的触发方式控制位。置0为低电平触发,置1为下降沿触发
//IE0:外部中断INT0的请求标志位,硬件自动轩1,响应后自动为0
//IT1:外部中断INT1 的触发方式控制位。
//IE1:外部中断INT1的请求标志位。
//TR0:定时器T0的运行控制位,置1为开始运行,置0停止运行
//TF0:定时器T0的溢出中断请求标志位。发生溢出中断请求时,硬件自动置1,响应需要要手动置0
//TR1:定时器T1的运行控制位
//TF1:定时器T1的溢出中断请求标志位
/////////////////////////
//TMOD定时器:GATE,C/T,M1,M0,GATE C/T M1 M0
//GATE 定时器置1,只有在INT1脚为高,及TR为1时,才可以打开
//C/T 控制定时器1定时或计时器,清零则定时器(内部系统时钟入)置1用作计数器(从T1/P3.5输入) 2^13=8192,最高为8192
//M1,M0,定时器定时,计数器 2^16=65536 ,最高为65536
//M1=0,M0=0 13位定时器/计数器,TL只用低5位,TH1全用
//M1=0,M0=1  16位定时器,TL1,TH1全用
//M1=1,M0=0   8位自动重装载定时器,当溢出时将TH1存入的值自动重装入TL1
//M1=1,M0=1   定时器/计数器1此时无效
//GATE 定时器置1,只有在INT0脚为高,及TR为1时,才可以打开
//C/T 控制定时器0定时或计时器,清零则定时器(内部系统时钟入)置1用作计数器(T0/P3.4输入)
//M1,M0,定时器定时,计数器
//M1=0,M0=0 13位定时器/计数器,TL0只用低5位,TH0全用
//M1=0,M0=1  16位定时器,TL0,TH0全用
//M1=1,M0=0   8位自动重装载定时器,当溢出时将TH0存入的值自动重装入TL0
//M1=1,M0=1   定时器/计数器1此时无效
//定时器控制单只LED灯闪烁
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned  int
sbit LED=P2^0;
uchar zongshu=0;
//主程序
void main()
{
TMOD=0X00;//开器定时T0,模式0,
// 机器周期=12*(1/12MHz)=1μs 初值=(8192-5ms/1μs)=3192
TH0=(8192-5000)/32;//初值设为8192-5000=3192,则定时器每计数满8192次(即溢出)时,实际耗时约5秒。
TL0=(8192-5000)%32;
IE=0x82;//开总中断EA=1,开定时器中断ET0=1;
TR0=1;//开定时器T0中断,也可以写成TCON=0X10;
while(1);
}
void zhongduan_T0() interrupt 1
{
TH0=(8192-5000)/32;//需要重新装载初始值
TL0=(8192-5000)%32;
zongshu++;
if(zongshu==100)//可以写成if(++zongshu==100)
{
LED=~LED;
zongshu=0;
}
}




通过网盘分享的文件:定时器中断0模式0

链接: https://pan.baidu.com/s/1VkFAM-s-e290qlOFHUx6cA 提取码: b23g

    Message:

    Name:
    Email:
    Content:
PgUP ...
Allegro,pads,PCB电路板设计,电源模块件及芯片资料分享—小北设计