单片机定时器和计数器

摘要:难点就在于各个端口的理解与定义,这个程序用到的端口有

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;
	 }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值