1,用汇编指令2种方法实现点灯+闪烁效果
汇编语言多重循环
汇编语言实现电灯思路为,灯亮=>延迟1s=>灯灭。
我们实现汇编代码的方式为一步一步实现,首先实现灯亮,如果你看过我上篇博客(51单片机学习),那么你就应该知道地址90H连接着LED1,我们通过改变90H的存储值可实现LED1灯亮灯灭
接着我们写一个LCALL+函数名,这是一条三字节指令,在51单片机中三字节指令比较少,111条指令中有17条是三字节指令,这条LCALL指令的作用是跳转到子程序,子程序运行完后再执行下一行的指令,相当于C语言中的调用函数,我们在这里使用LCALL指令调用延迟函数。延迟函数我们采用减法操作,使用DJNZ+寄存器+函数名,寄存器首先存一定数值,DJNZ指令是让寄存器里面的数减一,当寄存器里面的数不等于0时,跳转到函数名所在函数,等于0时则执行DJNZ下一行指令,当我们把函数名放在DJNZ之前,比如D1: DJNZ R7,D1,就相当于C++中的while循环,当R7不等于0时,R7减一,DJNZ每运行一次消耗的时间为2微秒(与晶振频率和指令有关)
实现灯灭也是改变地址90H值,具体如何改变可以看我上篇博客(51单片机学习)
具体代码实现如下,由于寄存器最大只能存储255的值,我们要采用多个DJNZ实现多重循环的效果
最后一条AJMP LOOP的含义是跳转到LOOP函数,也就是最开始的地方,以实现不断循环灯亮灯灭的过程(效果图如下)
如何让DELAY函数到达1