单片机的汇编程序

单片机的汇编程序,第1张

中断响应的时间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;汇编结束

以上就是关于单片机汇编程序全部的内容,包括:单片机的汇编程序、求高手解析单片机汇编程序、单片机汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9357820.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存