湖北大学 单片机实验5 定时计数器控制系统设计

实验目的:

 

利用定时计数器控制LED灯周期性亮灭

实验器材:

Keil、protues

实验原理(给出硬件电路图):

 

实验原理:

  1. 定时器TMOD

 2、定时器/计数器的工作方式

 

 3、TF标志位

 4、延时时间

5、TR0

实验步骤:

  1. 绘制protues中的原理图;
  2. 利用原理写汇编和C语言

程序代码及实验结果(含汇编语言代码和C语言代码): 

C语言:

#include <reg52.h>
unsigned char num=0; //全局变量num
sbit led=P0^0;//p0.0口控制led灯
void main()
{
	led=0;//led初始为亮
	TMOD=0x01; //设置TMOD为0000 0001 ,使定时器工作在工作模式1,工作方式为16位计数器
	TH0=(65536-50000)/256;//高四位,计算初值,x为需要的计数次数,定时器/计数器T0为工作方式1,则TH0=(65536-50000)/256;TL0=(65536-50000)%256
	         //0xFF00(16)=65280(10)
 	TL0=(65536-50000)%256; //低四位,延时50ms
	EA = 1;//打开总中断允许
 	ET0 = 1;//定时器溢出,定时器T0允许中断,调用T0定时器的中断函数
	TR0 =1;//启动T0立即开始计数
while(1)
	{
	 	if(num==1) //如果到了1次,说明到了50ms时间
		{
		  led=~led; //让发光管状态取反,亮时转灭,灭时转亮
		  num=0; 
		}
	
	}
}
	void time()interrupt 1 //调用TO定时器的中断函数 
{ 
	TH0=(65536-50000)/256; //中断之后重新装载初值 
	TL0=(65536-50000)%256; 
	num++; 
}

汇编语言:

ORG 0000H
START: MOV P0,#0xfe ;初始值为亮
       MOV TMOD,#01H;设置TMOD为0000 0001 ,使定时器工作在工作模式1,工作方式为16位计数器
       ;设置初值,设置延时时间
       MOV TL0,#0b0H
       MOV TH0,#03CH
	   SETB EA ;打开总中断允许
       SETB TR0; 启动T0立即开始计数
	   
LOOP1: JBC TF0, LOOP2 ;判断TF0是否为0.为0则跳转,不为0则为顺序执行,
                       ;TF=0为关闭中断溢出标志位,防止产生中断
       SJMP LOOP1; TF不为0时,一直循环,直到TF=0
	   
LOOP2: CPL P0.0;对灯的状态取反
       MOV TL0,#0b0H; 
       MOV TH0,#03CH
       SJMP LOOP1;
       END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值