美文网首页
51单片机中断寄存器使用注意的问题

51单片机中断寄存器使用注意的问题

作者: 徒白劳 | 来源:发表于2019-10-05 19:00 被阅读0次

首先介绍一下51的寄存器组:

通过设置PSW寄存器的第3位和第4位可以任意切换寄存器组。在进入中断前,切换寄存器组,可以方便的保护原寄存器组的数据不被中断里的语句破坏,很方便。

RS1RS0 字节地址

000组寄存器00H~07H

011组寄存器08H~0FH

102组寄存器10H~17H

113组寄存器18H~1FH

RS1=PSW.4RS0=PSW.3

常见错误有三种:

1、为中断函数指定了第0组寄存器

C程序:voidint0()interrupt0using0

编译后的汇编如下:

PUSHACC

PUSHB

PUSHDPH

PUSHDPL

PUSHPSW

MOVPSW,#0x00

。。。。。。

因为main()函数使用的就是第0组寄存器,中断程序会改变寄存器组的数据。主程序运行时,随时都有可能产生中断,等中断返回主程序时,寄存器R0-R7的值已经被改变了。这是非常严重的错误。而且故障时有时无,错误也是莫明其妙。

2、中断优先级不同,寄存器组号相同

C程序:voidint0()interrupt0using1//低优先级中断

voidT0()interrupt1using1//高优先级中断

因为高优先级的中断可以打断正在执行的低级中断,转向持行高级中断。这就是所谓的中断的中断。与第1种错语一样,高级中断的程序,会改变低级中断正在使用的寄存器。

3、不写using。严格的说,这样写不能算是错误。但这是相当不好的习惯。

C程序:voidint0()interrupt0

编译后的汇编如下:

PUSHACC

PUSHB

PUSHDPH

PUSHDPL

PUSHPSW

MOV PSW,#0x00

PUSH0x00

PUSH0x01

PUSH0x02

PUSH0x03

PUSH0x04

PUSH0x05

PUSH0x06

PUSH0x07

。。。。。。

没用using指定寄存器组,编译器就默认分配了第0组寄存器,然后又用8条语句把第0组的R0-R7保存到栈中,退出中断时还需要8个弹栈。这样“笨拙”的写法,占用了程序空间32个字节、占有堆栈8个字节。也许高级版本的编译器会改进吧,搞单片机的还是规矩些好。

经验总结:

1、写中断程序一定要用using语句指定寄存器组。第1、2、3组都可以,不能是0.

2、51单片机的中断有两个优先级。一个中断不会打断另一个相同优先级的中断。这样相同级别中断可以使用同一个组。比如:低优先级的中断函数都用using1,高优先级的中断都用using2。这样不会冲突。

下面是一个正常的例子:

C程序:voidint0()interrupt0using1

编译后的汇编如下:

PUSHACC

PUSHB

PUSHDPH

PUSHDPL

PUSHPSW

MOV PSW,#0x08

。。。。。。

相关文章

  • 51单片机中断寄存器使用注意的问题

    首先介绍一下51的寄存器组: 通过设置PSW寄存器的第3位和第4位可以任意切换寄存器组。在进入中断前,切换寄存器组...

  • 51单片机常用波特率初值表(12M晶振)

    为什么51单片机的晶振一般使用11.0592? 用11.0592晶振的原因是51单片机的定时器导致的。用51单片机...

  • 向51单片机说再见!

    51单片机的辉煌过去 51单片机指MCS-51系列单片机,CICS指令集。由Intel公司开发,其结构增加了如乘(...

  • STM32位带区和位带别名区的浅谈

    1.首先谈下为什么要使用位带? 在学习51单片机时就已经使用过位操作,比如使用sbit对单片机IO口的定义,但是S...

  • 51单片机基本结构

    姓名:陈婧娴 学号:19021211245 【嵌牛导读】:51单片机是初学者常接触的单片机,本文着重介绍51单片机...

  • Mac下单片机开发环境的搭建

    先来简单介绍一下51单片机: 51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖...

  • 2019-09-24单片机有很多种

    1. 51单片机发展史 1.1、51单片机由Intel公司设计诞生 (1)1971年,Intel推出4位单片机I...

  • 51总线方式获取adc0809数值

    最近单片机有一个实验挺有意思的,使用51单片机以总线的方式读取adc0809的数据 先补充点关于单片机总线的预备知...

  • 命题_第十四章_简答

    51系列单片机串口工作在接收状态时,MOV A,SBUF什么情况下使用,功能是什么? 【答案】: (1)当51单片...

  • 对固件库的理解

    库函数 以前我在学习以及使用51的时候都是直接控制51单片机的寄存器,51的寄存器相对较少,容易记住,位数也比较少...

网友评论

      本文标题:51单片机中断寄存器使用注意的问题

      本文链接:https://www.haomeiwen.com/subject/aflypctx.html