摘要:难点就在于各个端口的理解与定义,这个程序用到的端口有
TMOD是判断选定为定时器模式还是计数模式,
工作方式1;仅用TR0打开(这一段话为给定程序的注释,暂时没有理解)
对CMOD赋值,以确定T0,T1的工作方式
计算初值,并将其写入TH0、TL0或TH1、TL1//前者高八位,后者低八位
ET0=1; //打开定时器0中断允许
EA=1; //打开总中断
TR0=1; //定时器 / 计数器启动 C/T=0表示定时器模式,C/T=1表示计数器模式
在编写中断函数时,**为1时,需要填写以下代码,为3则不必
TH0=0XFC; //给定时器赋初值,定时1ms
TL0=0X18;
代码如下:
#include "reg52.h"
typedef unsigned int u16; //int类型才可以有16;
typedef unsigned char u8; //u8为char类型
sbit led=P2^0; //不要忘了定义端口!!!!!!
void Timer0Init()
{
TMOD|=0x01; //选定为定时器模式,工作方式1;仅用TR0打开
TH0=0xFC; //TH0为高八位
TL0=0X18; //TL0为低八位
ET0=1; //打开定时器0中断允许
EA=1; //打开总中断
TR0=1; //定时器 / 计数器启动 C/T=0表示定时器模式,C/T=1表示计数器模式
}
void main()
{
Timer0Init(); //定时器初始化
while(1);
}
void Timer0() interrupt 1
{
static u16 i;
TH0=0XFC;
TL0=0X18;
//i++; //少了这一句,i为0或1皆不亮,
if(i==1000)
{
i=1; //少了这一句D1小灯会长亮
led=~led;
}
}