您现在所在的是:

单片机论坛

回帖:5个,阅读:912 [上一页] [1] [下一页]
1059
woodyxue
文章数:66
年度积分:50
历史总积分:1059
注册时间:2006/2/5
发站内信
发表于:2006/7/10 17:16:00
#0楼
我的这个程序其实很简单,就是P1,P2口述出不同的两种状态,然后互相交替。
但是我的程序出现了一个问题,就是我的TIME子程序,我本来是想用定时加循环,
来完成一个长定时(30S),但是现在是TIME1没有中断循环,而是执行了一次后
就直接到了TIME2,还请各位大虾帮帮小弟会诊一下,看看我的程序到底病在哪里?

各位大哥请帮帮我啊,小弟第一次写出的完整程序,有很多地方都用很多毛病,还请各位大哥耐心看完,多给建议和批评,小弟在着多谢各位高人指点了.


ORG 0000H
LJMP MAIN
ORG 1000H
ORG 000BH
LJMP LOOP
ORG 001BH
LJMP LOOP1
ORG 1000H


MAIN:MOV TMOD,#11H              设定定时器的工作状态
    MOV A,#00H                
    MOV P1,A
    MOV P2,A
XS1:MOV A,#36H                  P1,P2进入第一个显示状态
   MOV P1,A
   MOV A,#1BH
   MOV P2,A
   LCALL time1                 调用子程序TIME1,定时30S
ZHUAND1:MOV A,#2DH              P1,进入显示状态2
             MOV P1,A
             LCALL time2             调用子程序TIME2

XS2:MOV A,#1BH                  P1,P2进入第二显示状态
     MOV P1,A
     MOV A,#36H
     MOV P2,A
     LCALL TIME1                 调用子程序TIME1
ZHUAND2:MOV A,#2DH
             MOV P2,A
             LCALL TIME2
             AJMP XS1                循环P1,P2第一显示状态

TIME1:SETB EA                   子程序开中断
     SETB ET0
     SETB ET1
     MOV 60H,#0D0H             装定时中断循环的次数
CZ:MOV TL0,#0DCH                给定时器装初值
  MOV TH0,#0BH
  setb tr0                     开定时器
LOOP:MOV A,60H                  定时器循环
    DEC A
    MOV 60H,A
    JNZ CZ                    
    RET




TIME2:SETB EA
     SETB ET0
     SETB ET1
     MOV 50H,#18H
CZ1:MOV TL1,#0DCH
   MOV TH1,#0BH
   SETB TR1
LOOP1:MOV A,50H
     DEC A
     MOV 50H,A
     JNZ CZ1
     RET



end
1185
85880527
文章数:136
年度积分:50
历史总积分:1185
注册时间:2006/1/16
发站内信
发表于:2006/7/19 13:57:00
#1楼
定时器不是你这样用的,你把它一直开着好了,让它一个劲的在那里扫描,象PLC那样.需要及时处理的事情都放里面,我常用2ms,它能做很多事情了,大部分的PLC的扫描周期都比这个长.那些需要消耗时间的事情你放主程序的大循环里好了,一个定时器就够了.具体怎样由这么短的2ms得到你那个30s不要说不知道怎么办吧.还有中断你没保护现场,第三行的那句ORG 1000H我没明白
1059
woodyxue
文章数:66
年度积分:50
历史总积分:1059
注册时间:2006/2/5
发站内信
发表于:2006/7/28 11:12:00
#2楼
多谢了!你说的中断保护是不是我在程序开始的时候加一句设指针的语句就可以了???我知道我的程序有些麻烦了,其实用一个固定的时间然后用不同的循环次数就可以达到想要的时间了,ORG 1000H我的意思是让程序从1000H地址开始!!

994
weiwei00
文章数:42
年度积分:50
历史总积分:994
注册时间:2006/7/22
发站内信
发表于:2006/7/28 13:37:00
#3楼
你这直接用延时就可以了,反正等待的时间也不干别的事情,程序更简洁
1185
85880527
文章数:136
年度积分:50
历史总积分:1185
注册时间:2006/1/16
发站内信
发表于:2006/7/30 21:36:00
#4楼
loop1和loop2都用了A和PSW,要保护,第三句ORG 1000H和第四句的ORG 000BH不知道会产生什么样的编译结果,我没试过
1059
woodyxue
文章数:66
年度积分:50
历史总积分:1059
注册时间:2006/2/5
发站内信
发表于:2006/7/31 10:54:00
#5楼
多谢大家的帮助,ORG 1000H我在防真的时候看了,执行后的结果是程序直接从地址为1000的地方开始了,不是程序开始的时候都要跳过中断入口的吗??????另外的则是让程序从中断的地方开始执行了啊!!!!!另外楼上的大哥说的保护是不是就是要设栈底啊,是不是我直接设个栈底就可以了,还是要一些其他的操作,这位大哥可不可以给个应用事例啊.还有我这里中断了也没有干别的事,不保护是不是也可以执行,要是我还有其他的事那就一定要保护了.

还请大侠耐心指点,多谢了!!!

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

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

46.8003