登录
首页 单片机论坛
回帖 发帖
正文

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

点击:1366 回复:8

程序如下:请大家帮忙仿真一下!
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进行仿真时的录像
11-01-06 22:19
jbc ti,usbcont能继续吗?
11-01-07 13:52
串口中断是23H.
你定义的中断是2bh brownout.
sbuf,a的下一句应该进入中断23h,但没有,等于程序飞出.
11-01-07 15:06
哇!
汇编语言~!曾经读书时学过,工作后改用C了~
11-01-07 17:51
pqsh大佬发现了这个问题了
我也发现了,也更改了,之后真的程序就没有问题了
现在的问题是,为什么飞出后它的值会变呢?
而且变得与ACC的值是相同的,因为在其它有程序中也类发现了类似的情况,特别是几个中断都开了的时候
11-01-07 18:30
http://zhidao.baidu.com/question/212486904.html
也请大佬到这里看下问题是不是如我所说?
因为我现在出现的问题都是反复的。
之前用的IO口模拟串口中已完成了测试,但后来又不行了
又不是全部不行,而是每次上电后的第一次通讯是正常的
之后的全部不行
只能从基础中来回再搞了!
谢谢大佬!
11-01-07 18:35
还是一样的问题.开了中断,就一定要有中断处理程序.不要中断的话,把中断屏蔽掉.
你用调试软件,逐句(step over或者step into)调试就可以看到程序去哪里了.
在sbuf填入的时候,发生串口中断.程序自动跳到23h.如果你什么也没写,那从23H到100H的数据是乱的,多数是00或者FF,00是nop,ff或者ffff,我没查指令表.这样的话,就从23H一直执行这些乱码到100H,就又回到你程序的main开始.
11-01-07 19:20
刚才查了一下,ff的指令正是mov r7,a
所以,正是你的程序从中断开始到main执行了很多个ff.
11-01-07 19:32
大佬是好样的
终于解开了其中一个疑团!
11-01-07 20:39

工控新闻

更多新闻资讯