51单片机中断系统与计时器

中断相关寄存器

(1)中断允许控制

image-20230425164112949

  • 外部中断0的引脚为P3.2,外部中断1的引脚为P3.3,PX0,PT0默认0

    • 中断允许寄存器

image-20230426110825401

  • 中断触发的条件

image-20230426111035275

(2)中断请求标志TCON

image-20230426121212722

  • IE0或IE1自动完成,当有外部中断的时候置为1 。

  • 计数器溢出后TF1或TF0置1。

  • 中断优先级

image-20230426114100985

  • 中断号

image-20230426114324797

  • 中断响应条件

image-20230426114629767

  • 外部中断后去执行的代码

    image-20230426115237254

    计时器介绍

    单片机/计数器的工作方式

    (1)方式0(计数器一共8+5=13位)

    image-20230426142234331

(2)方式1(计数器一共16位,一般用这个方式)

image-20230426142515515

(3)定时器配置(T0或T1)

TMOD 工作模式寄存器:当M1 M0分别设为0 1时,采用工作方式:模式1

image-20230426143431118

定时器0 (T0) 初始化代码(定时1ms)

我的开发板的晶振频率是11.0592Mhz

使用定时器初值设置辅助工具,把得出计时器高8位=0xFC,低8位=0x66

image-20230426153101698

#include <REGX52.H>
void time0_Init()	//计时器初始化函数
{
	TMOD=0x01;		//设置工作方式为模式1,16位计时器
	EA=1;				//CPU开放所有中断(全体)
	ET0=1;				//允许T0发生中断(T0是全体内的一个中断)
	TR0=1;				//允许T0开始计数
	TL0=0x66;			//低8位计数器赋初值
	TH0=0xFC;			//高8位计数器赋初值
	PT0=0;				//其实默认为0了
	TF0=0;
}
void main()
{
	time0_Init();	//进行初始化
	P2_1=0;
	while(1)
	{
		
	}
}
int i=1;
void tax0() interrupt 1		//计时器中断程序,让LED灯亮灭间隔一秒
{

	i++;
	TL0=0x66;		//低8位计数器赋初值
	TH0=0xFC;		//高8位计数器赋初值
	if(i>=1000)
	{
		i=0;
		P2_4=~P2_4;
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值