
中断响应的时间3~8个机器周期。
发生了中断申请,CPU 用一个机器周期即可检测到,然后用两个机器周期进行长转移,
转入中断程序。这是最简短的响应时间:3个机器周期。
如果当前指令耗时较长,响应时间,就会超过3个机器周期。
如果当前指令,恰好是针对中断系统寄存器(IE、IP) *** 作,则不会立即响应,而是再执行完一条之后,再响应。
楼主的程序,就是这样的情况。
CPL TF1 ;中断申请
SETB EA ;不响应
SETB ET1 ;不响应
SETB TR1 ;执行完这条,再响应。
楼主可以搜:中断响应的时间3~8个机器周期。
看看有关的解释。
389行开始,而不是
JZ T0K
AJMP L0
T0K:的LJMP FUNCION0;传递函数子程序
L0:DEC一个
JZ T1K
AJMP L1
T1K:LJMP FUNCION1
(T0,T1是一个关键字,不能用作标签)
423线出现乱码,删除,保留: T8:LJMP FUNCION8
644线,“#256”已溢出,排名第255
编译可以通过,但不知道该功能是正确的。疑问,请百度SMS或IH
对的,这个算法的确有点迷惑人。
首先,你要明确51内核的SP是自下向上的增长方式。还有,它的压栈是先加指针,再将数据放入SP指向单元,出栈是先将SP指向单元数据d出,再将SP指针减1。
30个的数据对应的地址是20H~~3DH,使用SP指针读取数据的命令只有POP指令,它只能从3DH向前“读取”数据,这就是这个方法的迷惑之处。
所以指针要先指向3DH,这样就可以依次向前读取30个单元的值了。
能力有限,肯能讲解的不够清楚,希望对你有帮助。
这么简单的要求,不用大动干戈。
看看下面的程序,是不是最简单:
ORG 0000H
SETB TR0 ;启动T0
MOV R2, #250 ;定时计数初值
LOOP:
MOV TH0, #(8192 - 8000) / 32 ;定时8ms
MOV TL0, #(8192 - 8000) MOD 32
JNB TF0, $ ;等待8ms
CLR TF0
DJNZ R2, LOOP ;每隔8ms,R2减一次一
CPL P10 ;R2为0则LED亮灭转换
LJMP 0000H
END
本程序,已经实验成功。
ORG 0000H;以下汇编代码存放到ROM的0000H开始的连续单元内(主程序入口)
LJMP START;转主程序
ORG 001BH;以下汇编代码存放到ROM的001BH开始的连续单元内(中断服务程序入口)
KKKK:INC A;A加1
CJNE A,#100,KKKK;没有加到100转KKKK
RETI;加到100中断返回
ORG 0030H;主程序
START:MOV TMOD #50H;设置T1方式1计数
REPEAT: MOV TH1, #73H;
MOV TL1, #98H;设置定时初值(50ms)
MOV IE #82H;开中断,允许T1溢出中断
SETB TR1;启动T1计数
LOOP:JNB TF1,$;等待溢出中断
CLR TF1;清T1溢出中断标志位
MOV TH1, #73H
MOV TL1, #98H;设置定时初值(50ms)
SJMP LOOP;循环继续
END;汇编结束
以上就是关于单片机的汇编程序全部的内容,包括:单片机的汇编程序、求高手解析单片机汇编程序、单片机汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)