单片机小程序初步入门

单片机小程序初步入门
上一次我们的程序实在是没什么用,要灯亮还要重写一下片子,下面我们要让灯持续地闪烁,这就有一定的实用价值了,比如能把它当成汽车上的一个信号灯用了。怎样才能让灯持续地闪烁呢?实际上就是要灯亮一段时间,再灭一段时间,也就是说要p10持续地输出高和低电平。怎样实现这个要求呢?请考虑用下面的指令是否可行:
setb p10
clr p10 ……
这是不行的,有两个问题,第一,计算机执行指令的时间很快,执行完setb p10后,灯是灭了,但在极短时间(微秒级)后,计算机又执行了clr p10指令,灯又亮了,所以根本分辨不出灯曾灭过。第二,在执行完clr p10后,不会再去执行setb p10指令,所以以后再也没有机会让灭了。
为了解决这两个问题,我们能做如下设想,第一,在执行完setb p10后,延时一段时间(几秒或零点几秒)再执行第二条指令,就能分辨出灯曾灭过了。第二在执行完第二条指令后,让计算机再去执行第一条指令,持续地在原地兜圈,我们称之为循环,这样就能完成任务了。
以下先给出程序(后面括号中的数字是为了便于讲解而写的,实际不用输入):
;主程序:
loop: setb p10 ;(1)
lcall delay ;(2)
clr p10 ;(3)
lcall delay ;(4)
ajmp loop  ;(5)
;以下子程序
delay: mov r7,#250;(6)
d1: mov r6,#250  ;(7)
d2: djnz r6,d2  ;(8)
djnz r7,d1 ;(9)
ret ;(10)
end ;(11)
按上面的设想分析一下前面的五条指令。
第一条是让灯灭,第二条应当是延时,第三条是让灯亮,第四条和第二条一模一样,也是延时,第五条应当是转去执行第一条指令。第二和第四条实现的原理稍后谈,先看第五条,ljmp是一条指令,意思是转移,往什么地方转移呢?后面跟的是loop,看一下,什么地方还有loop,对了,在第一条指令的前面有一个loop,所以很直观地,我们能认识到,它要转到第一条指令处。这个第一条指令前面的loop被称之为标号,它的用途就是给这一行起一个名字,便于使用。是否一定要给它起名叫loop呢?当然不是,起什么名字,完全由编程序的人决定,能称它为a,x等等,当然,这个时候,第五条指令ljmp后面的名字也得跟着改了。
第二条和第四条指令的用途是延时,它是怎样实现的呢?指令的形式是lcall,这条指令称为调用子程序指令,看一下指令后面跟的是什么,delay,找一下delay,在第六条指令的前面,显然,这也是一个标号。这条指令的作用是这样的:当执行lcall指令时,程序就转到lcall后面的标号所标定的程序处执行,如果在执行指令的过程中遇到ret指令,则程序就返回到lcall指令的下面的一条指令继续执行,从第六行开始的指令中,能看到确实有ret指令。在执行第二条指令后,将转去执行第6条指令,而在执行完6,7,8,9条指令后将遇到第10条令:ret,执行该条指令后,程序将回来执行第三条指令,即将p10清零,使灯亮,然后又是第四条指令,执行第四条指令就是转去执行第6,7,8,9,10条指令,然后回来执行第5条指令,第5条指令就是让程序回到第1条开始执行,如此周而复始,灯就在持续地亮、灭了。
在标号delay标志的这一行到ret这一行中的所有程序,这是一段延时程序,大概延时零点几秒,至于具体的时间,以后我们再学习如何计算。 程序的最后一行是end,这不是一条指令,它只是告诉我们程序到此结束,它被称为伪指令。
单片机内部结构分析:为了知道延时程序是如何工作的,我们必需首先了解延时程序中出现的一些符号,就从r1开始,r1被称之为工作寄存器。什么是工作寄存器呢?让我们从现实生活中来找找答案。如果出一道数学题:123+567,让你回答结果是多少,你会马上答出是690,再看下面一道题:123+567+562,要让你要上回答,就不这么不难了吧?我们会怎样做呢?如果有张纸,就不难了,我们先算出123+567=690,把690写在纸上,然后再算690+562得到结果是1552。这其中1552是我们想要的结果,而690并非我们所要的结果,但是为了得到最终结果,我们又不得不先算出690,并记下来,这其实是一个中间结果,计算机中做运算和这个类似,为了要得到最终结果,一般要做很多步的中间结果,这些中间结果要有个地方放才行,把它们放哪呢?放在前面提到过的rom中能吗?显然不行,因为计算机要将结果写进去,而rom是不能写的,所以在单片机中另有一个区域称为ram区(ram是随机存取存储器的英文缩写),它能将数据写进去。 特别地,在mcs-51单片机中,将ram中分出一块区域,称为工作寄存器区

非线性磁性材料干扰脉冲检测电路和有源滤波器的设计与调试
电磁兼容(EMC)问题
三代锐龙曝光 平均加速3.6GHz功耗105W
谁在为工业以太网的稳定可靠保驾护航
关于家用光伏系统并网规范,你不得不知道的那些事儿
单片机小程序初步入门
如何选择适合测试短路电流的示波器探头
除了vivo X9Plus,这些手机也有大电池+闪充
基于UTXO去中心化区块链构建的应用程序协议尤里卡介绍
不同形式的组件排布,哪种收益更高?
我国集成电路对外商依赖严重 自主之路依然很漫长
STM32的AD9854 DDS模块调试总结
大电流弹片微针模组在手机锂电池测试中的应用
万用表电压档的工作原理
IGBT模块赋能马达驱动应用
Polar将可能会成为2019年下半年的币圈黑马
汇顶科技和OPPO关系交恶 获OPPO 5年“封杀令”
山东中车电机有限公司正式成立啦!
无线电基础知识
dvi接口是什么_以及其优点介绍