定时器每秒翻转灯状态

#include <reg52.h>

sbit led = P3^7;

void main(){
	int count = 0;
	led = 0;
	
	TMOD = 0x01;	//置定时器工作模式
	
	TH0 = 0xDC;
	TL0 = 0x03;	//给初值,从哪里开始计数
							//此处定义 10 ms
							//16位定时器可以跳65536次,每次1.085 us
							//10 ms/1.085 us = 9216,10ms需要跳9216下
							//65536-9216 =56323,所以从56323开始到65536就是10 ms
							//将56323化为16进制是:0xDC03,高八位给TH0,低八位给TL0
	
	TF0 = 0;	//清空中断标志位
	TR0 =	1;	//开始计数
	
	while(1){
		if(TF0 == 1){	//溢出后
			TF0 = 0;  //将溢出标志位清零
			count++;	//每跳9216下就是10 ms,跳完10 ms累加次数
			
			TH0 = 0xDC;
			TL0 = 0x03;	//将跳为65536的定时器设置为56323
									//使每次计数都是10 ms
			
			if(count == 100){	//累加到100后就是1 s
				led = !led; //每到1 s 翻转灯的状态
				count = 0; //计数到100后清零,开始下一次计数
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值