您现在所在的是:

单片机论坛

回帖:3个,阅读:1375 [上一页] [1] [下一页]
1672
lizijie
文章数:188
年度积分:50
历史总积分:1672
注册时间:2005/7/16
发站内信
发表于:2005/8/30 20:59:00
#0楼
ORG     0000H
               MOV    SP,#40H
               MOV    20H,#O
  MAIN:     CLR     P3.0
               JB       P3.1,BJ
               SETB   P3.0
               MOV    R0,#1FH
               DJNZ    R0,$
               AJMP   MAIN
   BJ:        CLR     P3.7
               CLR     P3.5
               MOV   R1,#0FFH
               DJNZ   R1,$
               AJMP   MAIN
               END
请问:为什么要设堆栈?不设可以吗?“$”为24H,两次执行DJNZ后分别跳转到哪一句?单片机为AT89C2051。P3.0接红外发射管的负极,P3.1接红外接收管的下极;P3.5、P 3.7分别接蜂鸣器、指示灯。我用Kei5.1编译后显示没有错误但有三处警告。在电路上运行时一直声光报警。遮挡红外发射管无效,用三用表测发射管、接收管负极电压为0V;两管损坏会产生这种现象吗?请指教,非常感谢!
971
lz_82414
文章数:16
年度积分:50
历史总积分:971
注册时间:2005/7/22
发站内信
发表于:2005/9/3 22:52:00
#1楼
堆栈设置是考虑在程序过程数据变量溢出后会出现错误而设置的,在你的程序里用到
DJNZ R,$
$本身的作用就是等待了,而你DJNZ R,  本身是一个延时程序,执行完了还有等待过程

改为DJNZ R, 标号
标号: AJMP  标号 试试

我也没写过程序,呵呵!!献丑了,以上是我个人觉得的问题
934
wfl10000
文章数:5
年度积分:50
历史总积分:934
注册时间:2003/9/19
发站内信
发表于:2005/9/4 1:47:00
#2楼
SP 为栈顶指针,调整堆栈指针是为了防止数据出入栈或子程序调用时发生溢出错误。
此小程序没有子程序调用与出入栈操作,不调整栈顶指针也可以
我想问题出在没有关掉报警。可改为:
ORG     0000H
               MOV    SP,#40H
               MOV    20H,#O
  MAIN:     CLR     P3.0
               MOV    R0,#1FH
               DJNZ    R0,$
               JB       P3.1,BJ
               SETB   P3.0
               SETB   P3.7
               SETB   P3.5
               AJMP   MAIN
   BJ:        CLR     P3.7
               CLR     P3.5
               MOV   R1,#0FFH
               DJNZ   R1,$
               AJMP   MAIN
               END
992
wuhui690613
文章数:36
年度积分:50
历史总积分:992
注册时间:2002/8/22
发站内信
发表于:2005/12/11 20:13:00
#3楼
以下是引用lizijie在2005-8-30 20:59:00的发言:
ORG     0000H
                MOV    SP,#40H
                MOV    20H,#O
   MAIN:     CLR     P3.0
                JB       P3.1,BJ
                SETB   P3.0
                MOV    R0,#1FH
                DJNZ    R0,$
                AJMP   MAIN
    BJ:        CLR     P3.7
                CLR     P3.5
                MOV   R1,#0FFH
                DJNZ   R1,$
                AJMP   MAIN
                END
请问:为什么要设堆栈?不设可以吗?“$”为24H,两次执行DJNZ后分别跳转到哪一句?单片机为AT89C2051。P3.0接红外发射管的负极,P3.1接红外接收管的下极;P3.5、P 3.7分别接蜂鸣器、指示灯。我用Kei5.1编译后显示没有错误但有三处警告。在电路上运行时一直声光报警。遮挡红外发射管无效,用三用表测发射管、接收管负极电压为0V;两管损坏会产生这种现象吗?请指教,非常感谢!

调转到这一句开始位置,即
$:djnz r1,$

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

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

93.6006