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

主题:各位老师请问这个程序有什么问题?初学单片机

点击:1404 回复:3

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;两管损坏会产生这种现象吗?请指教,非常感谢!
05-08-30 20:59
堆栈设置是考虑在程序过程数据变量溢出后会出现错误而设置的,在你的程序里用到
DJNZ R,$
$本身的作用就是等待了,而你DJNZ R,  本身是一个延时程序,执行完了还有等待过程
改为DJNZ R, 标号
标号: AJMP  标号 试试
我也没写过程序,呵呵!!献丑了,以上是我个人觉得的问题
05-09-03 22:52
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
05-09-04 01:47

引用 lizijie 在 2005-8-30 20:59:00 发言【内容省略】

调转到这一句开始位置,即
$:djnz r1,$
05-12-11 20:13

工控新闻

更多新闻资讯