用 C学习51单片机——记录 4、中断系统 (2)定时/计数器中断

用 C学习51单片机——记录 4、中断系统

用 C 学习51单片机过程与自我拓展——记录(STC89C52芯片)
前言——其实51并不太难,多看 多写代码,多调试,就一定会有所感悟。
所以我在此留下一些代码以供自己重复记忆,也希望能够帮到你!

今天又找到时间更新了,来! 😀☞

(2)定时/计数器中断

定时/计数器中断是51中十分重要和基础的内容,大家一定要学习好这部分!

一、简单认识:
1、51单片机有2个16位定时/计数器

定时/计数器0定时/计数器1
引脚:T0 (P3^4)引脚:T1 (P3^5)

2、定时/计数器独立于CPU外,CPU可与其同时工作
3、定时/计数器需要用到寄存器;
4、定时/计数器设定的时间最大值在71ms左右(若需要更大的时间间隔,需要自己在程序配置进制)

二、定时/计数器中断步骤:

说明: 要学会通过查看芯片手册完成以下步骤

1、初始化:
(1)启动定时/计数器(配置TCON控制器)
(2)选择其工作模式(配置TMOD)
常用的两种模式有 (以定时器0为例) :

TMOD = 0x01TMOD = 0x10
16位定时/计数器8位自动重装载定时器

(3)设置中断允许寄存器IE (eg:ET0 = 1、ET1 = 0 )
(4)设置定时/计数时间(eg:TH0 = 0x4b、TL0 = 0xfd)

⏰:设定定时/计数时间方法:
eg: 设定50ms
①把50ms 转化成微秒:50 000微秒
②50 000/1.085 =46082 (1.085微秒是每执行一次程序所需时间)
③65536 -46082的结果可以化成16进制,高两位放在TH0,低两位放在TL0
可以像示例程序那样写

2、写中断函数 ( 格式如:void timer1 ( ) interrupt 3 )

三、示例程序:
程序说明:每隔一秒蜂鸣器响一次

#include <reg52.h>
sbit beep = P2^3;
void timer0Init()	  //定时器0中断初始化
{
	EA = 1;//打开总中断
	ET0 = 1;//允许定时器0中断
	TR0 = 1; //打开定时器0
	TMOD = 0x01;//选择定时器0的工作模式(16位定时器模式)
	TH0 = (65536-46082)/256;//设置50ms中断一次
	TL0 = (65536-46082)%256;			
}

void main ()
{
  	timer0Init(); //定时器0中断初始化
  	while(1);
}

void timer0 () interrupt 1  //定时器0中断函数
{	
	static unsigned char temp;//静态变量
	TH0 = (65536-46082)/256;//设置50ms中断一次
	TL0 = (65536-46082)%256;
	temp++;
	if(temp == 20) //够1秒响一次
		beep = 0; 
	if(temp == 40) //再过一秒后关闭蜂鸣器
	{
		temp = 0; //清零,重新计数
		beep = 1;	
	}	 
}

定时/计数器1的设定过程与上基本相同,只是配置时的参数不同,读者可参考芯片手册配置。🙂

如果有什么说错的地方还希望大家能够指出,也希望这对大家有所帮助!😀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值