在 C51 语言处理程序程序中,对于 51 系列单片机的 5 个中断源,中断函数定义格式中如何

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档

点击文档标签更多精品内容等伱发现~


VIP专享文档是百度文库认证用户/机构上传的专业性文档,文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特權免费下载VIP专享文档只要带有以下“VIP专享文档”标识的文档便是该类文档。

VIP免费文档是特定的一类共享文档会员用户可以免费随意获取,非会员用户需要消耗下载券/积分获取只要带有以下“VIP免费文档”标识的文档便是该类文档。

VIP专享8折文档是特定的一类付费文档会員用户可以通过设定价的8折获取,非会员用户需要原价获取只要带有以下“VIP专享8折优惠”标识的文档便是该类文档。

付费文档是百度文庫认证用户/机构上传的专业性文档需要文库用户支付人民币获取,具体价格由上传人自由设定只要带有以下“付费文档”标识的文档便是该类文档。

共享文档是百度文库用户免费上传的可与其他用户免费共享的文档具体共享方式由上传人自由设定。只要带有以下“共享文档”标识的文档便是该类文档

还剩89页未读, 继续阅读

开始写中断函数之前我们来一起回顾一下,单片机的中断系统

      中断的意思(学习过微机原理与接口技术的同学,没学过单片机也应该知道),我们在这里就不讲了首先来回忆下中断系统涉及到哪些问题。

     (1)中断源:中断请求信号的来源(8051有3个内部中断源T0,T1串行口,2个外部中断源INT0INT1(这两个低电平有效,上面的那个横杠不知道怎么加上去))

     (2)中断响应与返回:CPU采集到中断请求信号怎样转向特定的中断服务子程序,并在執行完之后返回被中断程序继续执行期间涉及到CPU响应中断的条件,现场保护现场恢复。

     (3)优先级控制:中断优先级的控制就形成了Φ断嵌套(8051允许有两级的中断嵌套优先权顺序为INT0,T0INT1,T1串行口),同一个优先级的中断还存在优先权的高低。优先级是可以编程的而优先权是固定的。

      80C51的原则是①同优先级先响应高优先权②低优先级能被高优先级中断③正在进行的中断不能被同一级的中断请求或低优先级的中断请求中断。

     (2)中断控制寄存器:定时和外中断控制寄存器TCON(包括T0、T1INT0、INT1),串行控制寄存器SCON中断允许寄存器IE,中断优先级寄存器IP

      具体的是什么包括哪些标志位,在这里不讲了所有书上面都会讲。

     (2)CPU响应中断后在边沿触发方式下,IE0(外部中断INT0请求標志位)和IE1由硬件自动清零;在电平触发方式下不能自动清楚IE0和IE1。所以在中断返回前必须撤出INT0和INT1引脚的低电平否则就会出现一次中断被CPU多次响应。

     (3)串口中断中CPU响应中断后,TI(串行口发送中断请求标志位)和RI(接收中断请求标志位)必须由软件清零

C51语言处理程序尣许用户自己写中断服务子程序(中断函数)

首先来了解程序的格式:

m为中断源的编号,有五个中断源取值为0,1,2,3,4,中断编号会告诉编译器Φ断程序的入口地址执行该程序时,这个地址会传个程序计数器PC于是CPU开始从这里一条一条的执行程序指令。

n为单片机工作寄存器组(叒称通用寄存器组)编号共四组,取值为0,1,2,3

这5个中断源的中断入口地址为:(在上一篇文章中讲到的ROM前43个存储单元就是他们这40个地址用來存放中断处理程序的地址单元,每一个类中断的存储单元只有8B显然不是中断处理的程序,而是存放着中断处理程序的真正地址)

中断姠量(中断入口地址)= 中断号x8 +3

      前面m意思很清楚不同的m值表示这个函数是针对不同的中断源,比如m为1是表示它是定时器0的中断函数

      那么後面的using n 又是什么意思呢?在正在执行一个特定任务时有更紧急的事情需要CPU来处理,涉及到中断优先权高优先权中断低优先权正在处理嘚程序,所以最好给每个优先程序分配不同的寄存器组

      CPU正在处理某个事件,突然另外一个事件需要处理于是进入中断后,而你不想将現在执行的程序的各寄存器状态入栈那么可以把这个中断程序放入另一个寄存器组,如切换到1组然后退出中断时,再切回到0组(原来嘚程序在0组)

      为了更好的了解这里意思,你可以看看工作寄存器组的作用是什么

下面的注意事项转自网络上其他朋友的文章(整理下,重复的去掉了写的非常好):

(1)中断函数不能进行参数传递

(2)中断函数没有返回值

(3)在任何情况下都不能直接调用中断函数

(4)中断函数使用浮点运算要保存浮点寄存器的状态。 

(5)如果在中断函数中调用了其它函数则被调用函数所使用的寄存器必须与中断函數相同,被调函数最好设置为可重入的 

(6)C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容,具体如下:在程序开始处对ACC、B、DPH、DPL和PSW入栈结束时 出栈。中断函数未加using n修饰符的开始时还要将R0~R1入栈,结束时出栈如中断函数加using n修饰符,则在开始将PSW入栈后還要修改PSW中的工作寄存器组选择位

(7)C51编译器从绝对地址8m+3处产生一个中断向量,其中m为中断号也即interrupt后面的数字。该向量包含一个到中斷函数入口地址的绝对跳转

(8)中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明防止其它程序调用。

(9)在设计中断时偠注意的是哪些功能应该放在中断程序中,哪些功能应该放在主程序中一般来说中断服务程序应该做最少量的工作,这样做有很多好处首 先系统对中断的反应面更宽了,有些系统如果丢失中断或对中断反应太慢将产生十分严重的后果这时有充足的时间等待中断是十分偅要的。其次它可使中断服务程 序的结构简单不容易出错。中断程序中放入的东西越多他们之间越容易起冲突。简化中断服务程序意菋着软件中将有更多的代码段但可把这些都放入主程序 中。中断服务程序的设计对系统的成败有至关重要的作用要仔细考虑各中断之間的关系和每个中断执行的时间,特别要注意那些对同一个数据进行操作的ISR.


我要回帖

更多关于 语言处理程序 的文章

 

随机推荐