51单片机学习——中断系统

51单片机学习——中断系统,第1张

51单片机必学系列——中断系统

51单片机学习——中断系统

51单片机学习——存储器详解(程序存储器、片内RAM、拓展RAM、EEPROM)

更新ing


单片机学习——中断系统
  • 51单片机必学系列——中断系统
  • 前言
  • 一、我们为什么需要中断?
    • 1.中断驱动 2.轮询
  • 二、中断怎么用
    • 1.定时器/计数器初始化
    • 2.定时器0中断初始化
    • 2.中断例程
  • 总结


前言

这是我真正意义上结合自己理解所写的第一篇博客,如有错误,请您赐教。


一、我们为什么需要中断?

此时此刻,你正在用键盘打字或者滑动鼠标滚轮观看这篇文章。想一想当你使用键盘打字的时候,是不是通过键盘输入,显示屏输出。哪怕是最简单的I/O设备也至少需要两个寄存器,一个保存传输的数据,另一个指示状态信息。当你每次打一个字的时候,这个字的ASCII码便存入键盘的寄存器中,然后CPU执行装载指令,读取数据。但是CPU速度多快啊,我可不相信你一秒钟能打上万个字,能打一百个都不错了。
我们一般会设置一个标志位,检测到有字符的时候CPU才会读取它,读取完就清0(不然会一直读取)。
除此之外我们还可以通过硬件设置为定期读取一次输入寄存器,这样就不需要那个标志位了。
那我说的这些和中断究竟有什么关系呢?有关系!!!打字员输入的数据必须给CPU处理,两个人任务不一样,但需要交互,交互的两种基本方式就是

1.中断驱动 2.轮询

轮询是个很无脑的 *** 作,这个时候CPU是主动的,CPU一直问打字员,你好了没?歪!好了吗?歪…几十ns问一次,这样不断读取寄存器,这样CPU会一直傻等,什么都不干就等你输入
所以就出现了我们常用的中断,中断是由打字员这边主导,想输入就输入,输入了告诉CPU,歪!我好了,给爷读!

二、中断怎么用

在单片机中,一般使用中断服务函数,
中断服务函数定义的一般形式是:

函数类型 函数名(形式参数表)[interrupt n] [using m]
//n是中断号,对应串口、定时器等不同的中断,最后这个m是寄存器组
例如:void timer0( ) interrupt 1

这就可以开始中断了?肯定不是啊,一个函数怎么可能开启中断,咱们要中断多久,总要有个时间吧,所以我们需要先对

1.定时器/计数器初始化

也就是对TMOD赋值,确定T0和T1的工作方式,计算初值,写入TH0和TL0或者TH1和TL1之间。刚开始定时器/计数器不会自己开启,所以我们要使TR0或TR1置位,启动定时/计数器定时或计数。当然还要

2.定时器0中断初始化

中断刚开始肯定不会自己开的,我们要对EA(enable all)赋值,开启总中断,而且要对ET0定时器0中断允许位赋值,允许定时器0有中断请求,同时还要开启定时器T0中断,而且这样就开启定时器T0的中断了。

例如:
TMOD=0x01; \设定工作方式为16位定时器
TH0=(65536-50000)/256; \赋定时器T0高四的值为50MS(对256求模)
TL0=(65536-50000)%256; \赋定时器T0低四的值为50MS(对256求余)
ET0=1; \开定时器T0中断
TR0=1; \启动定时器T0
EA=1; \开总中断

除了ET0(定时器0允许位),还有IE0(外部中断0中断申请标志位),EX0(外部中断0允许位)等等等等
大家应该注意到了外部中断还要有个申请标志位,定时器没,直接允许就好了。外部中断0就像是上课,这个老师是可以允许你举手的,然后你举手(外部中断0允许位为1)说要出去上厕所。
那定时器0呢,为啥不理老师,其实定时器0还有个TF0,当定时器0计满溢出时,使TF0置1,并且申请中断,意思就是,上课老师看你憋不住了,直接让你去厕所,不会有不允许的情况。

2.中断例程
void Timer0Init()
{
	TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。

	TH0=0XFC;	//给定时器赋初值,定时1ms
	TL0=0X18;	
	ET0=1;//打开定时器0中断允许
	EA=1;//打开总中断
	TR0=1;//打开定时器			
}
void main()
{	
	Timer0Init();  //定时器0初始化
	while(1);		
}
void Timer0() interrupt 1
{
	static u16 i;
	TH0=0XFC;	//给定时器赋初值,定时1ms
	TL0=0X18;
	//此处添加要运行的代码
	i++;
	if(i==1000)
	{
		i=0;
		led=~led;	
	}	
}
总结

本人也是初学中断,谨以此文,纪念我的第一篇总结博客。希望大家共同进步!冲冲冲!!!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/707226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存