mov r7,#8
main:mov r0,#8 ;一个循环需要移动8位
mov p1,#01111111b ;初始为P0.7灯点亮
loop: clr p2.3
acall ds1ms ;延时,以便人眼可以观察到
setb p2.3
acall ds1ms
mov a,p1 ;读P0口当前显示的数据送到A
rr a ;将A中的数据循环右移1位
mov p1,a ;再将A中右移过的数据送到P0
djnz r0,loop
djnz r7,main ;移动不够8位,跳到LOOP处循环,
ljmp rel ;流动1遍跳转到MAIN处循环流。
;---显示延时----------
ds1ms: mov r1,#1
ds1lo: mov r2,#200
ds2lo: mov r3,#200
djnz r3,$
djnz r2,ds2lo
djnz r1,ds1lo
ret ;延时返回
rel:end
单片机写的汇编程序如下,我想问的是程序是有结束的地方END,可是为什么...
end 只代表文本代码的结束,你这样用是不对的,编译器可能会将跳转到end变为跳转到程序初始区,你可以用KEil的反编译功能,调试一下这个程序,看程序跳转到哪里,不过调试之前,先将你的延时程序中的r1,r2,r3,还有r0,r7的值变小,否则单步调试很麻烦。如果想停止程序,去掉 ljmp rel ...
单片机汇编程序中MAIN里可以什么都不写么?MAIN必须有么?
入口后程序当然可以什么都不写,那就是说单片机只执行复位程序 可以是可以,但这样是死循环,程序无法结束
单片机执行完程序后会怎么样
正常的程序,应该是个循环结构,没有完结的时候。如果没有编写的很完善,CPU执行到ROM的末尾后,也会自动再从第一条开始执行。
单片机里面的一个小问题 程序最末尾为什么要加上 sjmp $ end 为什么...
单片机程序 end 这条伪指令 表示程序到这里结束,也是编译软件判断程序结束的标志。sjmp $ 是一条转移指令 $ 表示为 本条指令的地址,就是循环执行 本条指令,并不是一定要的,主要看程序 需要 处理 些 什么任务而定,有这种 sjmp $ 指令 一般是很简单的 程序才会用。
单片机汇编程序 看不懂了
LOOP1: MOV TH0,#0D8H MOV TL0,#0F0H SETB TR0 JNB TF0,CLR TF0 CPL P0.0 DJNZ R4,LOOP1 RETI 中断返回 END 结束 问题补充:开头少加了一句 ORG 00H 我大概看了看,写了一些。程序的功能和硬件联系在一块的,单独看程序无法知道实现什么功能。程序实现的中断方式计时器,...
keil模拟单片机延时汇编程序执行,显示的运行时间为什么和理论不一样...
仿真模拟 与 电脑速度有关,不可能达到和理论不一样,只有 在 实际单片机上 运行,才会与 计算理论值一致。
汇编语言怎么实现在程序中按一下暂停 再按从暂停的地方继续?
可以用外部中断来控制;如果单片机中断是低有效,将按钮设置成按下时为低电平,触发中断,在中断中设置一个标志位,然后退出中断;主程序来判断这个标志位,如果为1,则退出led跑灯程序;如果为0,则继续跑灯。如果单片机中断是高有效,将按钮设置成按下时为高电平,同理。设置一个全局变量a,并且赋值a...
单片机 ret和 end结尾的区别
RET是汇编语言指令,有相应的一系列操作,用于子程序返回;END是伪指令,没有相应操作,只是向编译器提示代码结束。
单片机编程中,END\\AJMP $\\SJMP $,有什么区别?
就是一个死循环,使程序停在这里。两者都是2字节2周期指令,在这里没有什么区别。AJMP的最大转跳范围是当前2K页面,而SJMP则是本指令前127字节后128字节。是一个(也是唯一一个)不需要定义的地址标号,代表当前行命令的地址。END代表汇编程序到此结束,编译程序对END以后的内容不作编译。
单片机程序扫描到end后是否继续扫描
不会。单片机程序扫描工作方式是循环扫描程序,反复执行的,每个程序以END指令作为程序的结尾,执行到END指令后,会返回从头开始再次执行,不会继续进行检查。单片机是一种集成电路芯片。