中国自动化学会专家咨询工作委员会指定宣传媒体
免费注册 登录 广告服务 | 客服中心
您现在所在的是:

单片机论坛

抖音 德嘉 泓格论坛 FLIR红外热像论坛
工控论坛首页 单片机论坛 → 浏览主题: 为什么工作寄存器R7会在中断时产生了变化,其值变为了寄存器A的值了
发表新帖 回复该主题
回帖:8个,阅读:1312 [上一页] [1] [下一页]
* 帖子主题:

为什么工作寄存器R7会在中断时产生了变化,其值变为了寄存器A的值了

分享到
1000
sunsoncheng
文章数:109
年度积分:50
历史总积分:1000
注册时间:2010/5/25
发站内信
发表于:2011/1/6 22:19:57
#0楼
程序如下:请大家帮忙仿真一下!
ORG 0000H
LJMP MAIN
org 002BH
Ljmp comreti
ORG 0100H
comreti:
reti
MAIN:
       mov R7,#01H
mydelay:         ;等检测
       lcall usbdelay
       djnz r7, mydelay
               
       MOV SP,#60H  ;设置堆栈指针
MOV TMOD,#20H  ;计数器1工作在方式2
MOV TH1,#0FAH  ;晶振频率为11.0592MHZ,波特率为9600
MOV TL1,#0FAH
mov ie,#90H
MOV PCON,#80H  ;smod为1
SETB TR1  ;启动计时
MOV SCON,#40H

       mov DPTR,#Detect
MOV r7,#66  ;发送66个字节数据
MOV R0,#00H  ;计数
usbLOOP:
       CLR A
MOV A,R0
MOVC A,@A+DPTR  ;查表得到要发送的数据
MOV SBUF,A  ;发送数据
NOP
NOP
NOP
NOP

usbWAIT:
       JBC TI,usbCONT  ;等待发送完毕
SJMP usbWAIT
usbCONT:
       INC R0
DJNZ r7,usbLOOP
RET

;====================================================
; 延时子程序
;====================================================
usbDELAY: mov R6,#06H
usbloop3: MOV R5,#0FFH
usbLOOP2: MOV R4,#0FFH
usbLOOP1: NOP
 DJNZ R4,usbLOOP1
 DJNZ R5,usbLOOP2
 djnz r6,usbloop3
RET

;====================================================
Detect:    ;检测u盘命令
DB 0AAH,0BBH,01H
DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H
DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H

END

http://www.tudou.com/programs/view/CW_8DwTkv0Y/
这是使用伟福6000进行仿真时的录像
18701
pqsh 版主
文章数:7350
年度积分:531
历史总积分:18701
注册时间:2006/8/22
发站内信
2018论坛解答高手
发表于:2011/1/7 13:52:35
#1楼
jbc ti,usbcont能继续吗?
如果我忘了我
请帮忙记得我
pqsh@163,326199298@v&q同号
18701
pqsh 版主
文章数:7350
年度积分:531
历史总积分:18701
注册时间:2006/8/22
发站内信
2018论坛解答高手
发表于:2011/1/7 15:06:31
#2楼
串口中断是23H.
你定义的中断是2bh brownout.
sbuf,a的下一句应该进入中断23h,但没有,等于程序飞出.
如果我忘了我
请帮忙记得我
pqsh@163,326199298@v&q同号
6080
fzl_115
文章数:488
年度积分:59
历史总积分:6080
注册时间:2007/1/24
发站内信
发表于:2011/1/7 17:51:50
#3楼
哇!
汇编语言~!曾经读书时学过,工作后改用C了~
1000
sunsoncheng
文章数:109
年度积分:50
历史总积分:1000
注册时间:2010/5/25
发站内信
发表于:2011/1/7 18:30:56
#4楼
pqsh大佬发现了这个问题了
我也发现了,也更改了,之后真的程序就没有问题了

现在的问题是,为什么飞出后它的值会变呢?
而且变得与ACC的值是相同的,因为在其它有程序中也类发现了类似的情况,特别是几个中断都开了的时候
1000
sunsoncheng
文章数:109
年度积分:50
历史总积分:1000
注册时间:2010/5/25
发站内信
发表于:2011/1/7 18:35:25
#5楼
http://zhidao.baidu.com/question/212486904.html
也请大佬到这里看下问题是不是如我所说?
因为我现在出现的问题都是反复的。

之前用的IO口模拟串口中已完成了测试,但后来又不行了

又不是全部不行,而是每次上电后的第一次通讯是正常的
之后的全部不行
只能从基础中来回再搞了!

谢谢大佬!
18701
pqsh 版主
文章数:7350
年度积分:531
历史总积分:18701
注册时间:2006/8/22
发站内信
2018论坛解答高手
发表于:2011/1/7 19:20:18
#6楼
还是一样的问题.开了中断,就一定要有中断处理程序.不要中断的话,把中断屏蔽掉.
你用调试软件,逐句(step over或者step into)调试就可以看到程序去哪里了.
在sbuf填入的时候,发生串口中断.程序自动跳到23h.如果你什么也没写,那从23H到100H的数据是乱的,多数是00或者FF,00是nop,ff或者ffff,我没查指令表.这样的话,就从23H一直执行这些乱码到100H,就又回到你程序的main开始.
如果我忘了我
请帮忙记得我
pqsh@163,326199298@v&q同号
18701
pqsh 版主
文章数:7350
年度积分:531
历史总积分:18701
注册时间:2006/8/22
发站内信
2018论坛解答高手
发表于:2011/1/7 19:32:13
#7楼
刚才查了一下,ff的指令正是mov r7,a
所以,正是你的程序从中断开始到main执行了很多个ff.
如果我忘了我
请帮忙记得我
pqsh@163,326199298@v&q同号
1000
sunsoncheng
文章数:109
年度积分:50
历史总积分:1000
注册时间:2010/5/25
发站内信
发表于:2011/1/7 20:39:31
#8楼
大佬是好样的
终于解开了其中一个疑团!
工控学堂推荐视频:

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004