DELAY:MOV R7,#250 第一层循环250次
DEL1:MOV R6,#100 第二层循环100次
DEL2:MOV R5,#10 第三层循环10次
DJNZ:R5,$ 如果R5不等于0,则跳转到本行,也就是空转10次
DJNZ:R6,DL2 如果R6不等于0,则跳到DL2行,给R5赋值
DJNZ R7,DL1 如果R7不等于0,则跳到DL1行,给R6赋值
所以总的空转循环次数是25010010=250000次,通过调节R5,R6,R7值来控制延时时间
单纯看程序没啥意思
逐行解释吧:
void main()
{
uchar k,t,Key_State;
P0 = 0xff;
P1 = 0xff
while(1)
{
t = P1;;//t=(11111111)2
{
DelayMS(10);//系统延时10个指令周期
if(t != P1)
continue;
Key_State = ~t >> 4;//t按位取反再逻辑右移4位,key_state=(000000000)2
k = 0;
while(Key_State != 0)
{
k++;//k作为计数器计算高位取反后最高位在第几位
Key_State >>= 1;
}
我不明白该程序段的总体意义
因为key_state===0
这样永远进入不了while(Key_State != 0)
的循环
K代表10进制,由于T0的单位是ms,所以30就是3秒钟
H代表16进制
B代表2进制
当然K也有别的意思,具体要参照编程手册
比如movb h1111 k4m0 这里的K4代表的是16位,K1代表的是4位,意思就是把1111这个十六进制数的十六位分别存放在M0-M15中
push cx先把cx推进栈以保存cx原来的值。然后用mov cx,0ffh赋值,loop循环每执行一次cx自减一,到cx为0为止,此时循环共执行0ffh次即255次。再将栈中cx原来的值d出给cx寄存器。
如果CUP主频为40mHz,则时钟周期为1/40=0025微秒。
在808X中,一条LOOP指令如果实现跳转的话需要18个时钟周期,退出时需要5个时钟周期。所以这个延时子程序循环部分的延时(002518255+5)微秒,其他语句的延时基本可以忽略
就是为了延时啊,譬如说你让数码管从1变到10,一秒跳一下这就需要用到延时啊当然你可能会说用定时器就行了,但是定时器有限,而且他是通过中断来控制,但我不需要延时时间那么精准的时候用起中断就不够直接用延时程序方便了
延时目的:mcu本身只做计算,工作时需要外部设备辅助,延时就是让外设和单片机时序同步、等待外设响应结束;
举例:(单片机:老板;外设:员工;)
老板让员工去买东西:买东西是需要时间,
假设只要1min,但是这1min做不了
其他事,只能干等着!
假设需要30min,可以趁着30min开个会,也可以干等着!
所以,单片机可以按需延时。
以上就是关于求解释!!!汇编语言:延时程序全部的内容,包括:求解释!!!汇编语言:延时程序、下面这段延时程序是什么意思,请高手解释下、plc延时程序中k是什么意思例如:t0 k30是延时多少秒等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)