打印

菜鸟请教com问题

[复制链接]
1448|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangqi412|  楼主 | 2007-3-5 19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
菜鸟请教com问题
看到的例子都用查询法,自己想尝试下中断法。不知道为什么,使用中断法处理串口就会出问题
用单片机实验发现数码管乱跳,说明跑飞了,用keil软件断点仿真发现reti后就跑飞了。请教各位怎么

回事。谢谢
ORG 0000H    ;
LJMP main    ;跳到main

org 0023h    ;串口调试入口
ljmp buf1

main:lcall chsh
ddd:ljmp ddd

chsh:clr p2.0  ;开一个数码管显示
mov sp,#50h   ;堆栈
MOV TMOD,#21H ;T1自动加载波特
MOV TL1,#0fdH ;波特9600定时初值
MOV TH1,#0fdH ;
mov pcon,#0   ;不倍增
      
SETB EA       ;总中断开放
setb es       ;开串口中断
setb ps       ;串口优先
mov scon,#70h ;允许接受  
      
setb tr1       ;开启T1定时器
ret            ;只开放了串口一个中断



buf1:push acc     ;压栈
     push psw

     clr es       ;关闭串口中断
     clr ri       ;清串口标志位     
        
     mov a,sbuf
     mov p0,a

bufout:setb es          ;开串口退出
    push psw
    push acc
    reti




相关帖子

沙发
huangqi412|  楼主 | 2007-3-5 19:19 | 只看该作者

如果我要接受一个字符后做一些处理,必须关闭串口一段时

使用特权

评论回复
板凳
huangqi412|  楼主 | 2007-3-5 20:14 | 只看该作者

请指点一下啊,

使用特权

评论回复
地板
mcu_xray| | 2007-3-5 20:16 | 只看该作者

堆栈处理错了。

最后应该是:
        POP PSW
        POP ACC
        RETi。

使用特权

评论回复
5
huangqi412|  楼主 | 2007-3-5 20:20 | 只看该作者

请问这个怎么会影响到pc指针呢,现在是地址飞了,跑老远了

使用特权

评论回复
6
huangqi412|  楼主 | 2007-3-5 20:33 | 只看该作者

明白了,谢谢

把后面压的acc栈弹给了pc,所以跑飞了,
那这样的话也就是说可以用这种方法随便的改变pc指针了??

使用特权

评论回复
7
twz8858877| | 2007-3-5 20:34 | 只看该作者

PC是硬件自动弹出的

即执行reti指令时将栈顶弹出到pc,你在reti时将psw及acc压栈,中段返回时会执行到psw与acc所决定的pc值,当然会跑飞了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

622

主题

24960

帖子

18

粉丝