定时器T0模式1,控制P0,P1,LED灯滚动显示
//使用定时器中断TMER0,控制P0,P1,LED灯滚动显示。
//本例设TMOD=0x01,使TIMERO 工作于模式1,最大计数位为16位,累加到65536时即产生计数溢出,
//本例晶振仍为12MHz,下面两行代码可实现40ms定时:
//TH0 = (65536 - 40000)/ 256;
//TL0 = (65536 - 40000)%256;
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//主程序
void main()
{
uchar zongshu=0;
P0=0XFE;
P2=0XFE;//LED低电平点亮,初始化LED灯
TMOD=0X01;//模式1,M1=0,M0=1 16位定时器,TL0,TH0全用
TH0=(65536-40000)/256;
TL0=(65536-40000)%256;
TR0=1;
// EA=1;
// ET0=1;
while(1)
{
if(TF0==1) //中断溢出标志位。定时器T0的溢出中断请求标志位。
//发生溢出中断请求时,硬件自动置1,响应后手动置0
{
TF0=0;//手动置1
TH0=(65536-40000)/256;
TL0=(65536-40000)%256;
zongshu++;
if(zongshu==5)
{
zongshu=0;
P0=_crol_(P0,1);
P2=_crol_(P2,1);
}
}
}
//本例设TMOD=0x01,使TIMERO 工作于模式1,最大计数位为16位,累加到65536时即产生计数溢出,
//本例晶振仍为12MHz,下面两行代码可实现40ms定时:
//TH0 = (65536 - 40000)/ 256;
//TL0 = (65536 - 40000)%256;
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//主程序
void main()
{
uchar zongshu=0;
P0=0XFE;
P2=0XFE;//LED低电平点亮,初始化LED灯
TMOD=0X01;//模式1,M1=0,M0=1 16位定时器,TL0,TH0全用
TH0=(65536-40000)/256;
TL0=(65536-40000)%256;
TR0=1;
// EA=1;
// ET0=1;
while(1)
{
if(TF0==1) //中断溢出标志位。定时器T0的溢出中断请求标志位。
//发生溢出中断请求时,硬件自动置1,响应后手动置0
{
TF0=0;//手动置1
TH0=(65536-40000)/256;
TL0=(65536-40000)%256;
zongshu++;
if(zongshu==5)
{
zongshu=0;
P0=_crol_(P0,1);
P2=_crol_(P2,1);
}
}
}
}
通过网盘分享的文件:定时器中断0模式1
链接: https://pan.baidu.com/s/1LeuL2vbn469EaffkqQyGSQ 提取码: f9ff








最新发布