问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-11-09 11:46

我来回答

1个回答

热心网友 时间:2023-09-16 16:49

首先介绍一下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

。。。。。。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
说课包括哪些方面 说课内容包括()。 如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 补考过了还算挂科吗? 小米枪战和荒野行动iOS哪个好玩 怎样在自己喜欢的照片或图片上加上字 请问民生信用卡怎样提额度? 请问怎么民生申请信用卡额度? 广汽传祺gs8胎压传感器ld怎么看 胎压监测怎么区分1号到4号传感器 广气传祺GS4胎压传感器怎么查找ID码- 问一问 潮州咸菜的制作材料 兰州特产有哪些可以带,兰州特产有哪些可以当礼物的 如何给掌上学工授权地理位置 没一点音乐基础,学什么乐器好 奶茶店是怎么加盟的 郑州金多银多珠宝广场营业时间 学python有什么用处呢 请打开了系统和微信的地理位置是什么意思 梦见好多虾是什么预兆 京东小程序需要单独入驻吗 说小孩过年会抢红包我该回什么好点? 苹果12多长时间发布? 梦见战争,周公解梦梦到战争是什么意思,做梦梦见战争好不好 《小鸭子爬楼梯》的启示 鸭子走路的作文 我不设置钉钉号可以吗 梦见自己几年后成为职场精英成为老总了? 梦见自己当家人老板了 问卷调查在手机上如何回答 泰国客户这句话是什么意思... 泰国客户为什么喜欢做CIF价 毕业生登记表班级鉴定200篇 车坏了开不了能注销吗 火锅为什么嘌呤高,怎样吃火锅能避免痛风 手机号注销后,可以重新注册新的手机号吗? 七月初二是哪位菩萨的生日 从地坛西门到十里河居然之家怎么坐公交车,最快需要 从地坛体育馆到十里河怎么走 从地坛西门到十里河怎么走 十里河桥到天坛东门地铁站B口怎么走 从北京市朝阳区十里河怎么坐车到天坛医院? 首都图书馆到地坛公园的乘车路线