《51单片机应用开发从入门到精通》——2.3 流水灯实例-阿里云开发者社区

开发者社区> 异步社区> 正文

《51单片机应用开发从入门到精通》——2.3 流水灯实例

简介:
+关注继续查看

本节书摘来异步社区《51单片机应用开发从入门到精通》一书中的第2章,第2.3节,作者:张华杰 ,更多章节内容可以访问云栖社区“异步社区”公众号查看

2.3 流水灯实例

51单片机应用开发从入门到精通
本节基于上一节的硬件电路,首先介绍关于寻址方式的基础知识,然后给出了运用查表法实现的流水灯实例程序。

2.3.1 基础知识

寻址方式是指寻找、确定参与操作的数据地址的方式,8051单片机的寻址方式包括寄存器寻址、直接寻址、寄存器间接寻址、立即寻址以及基址寄存器加变址寄存器间接寻址,这5种寻址方式的功能见表2-7。下面将详细介绍基址寄存器加变址寄存器间接寻址的寻址方式。

3120d61440113c0ab6e7e3f5ed673484cc6a69ed

基址寄存器加变址寄存器间接寻址方式一般用于访问程序存储器中的数据表格,这种寻址方式,是以DPTR或PC作基址寄存器,以累加器A作变址寄存器,并以两者内容相加形成的16位地址作为操作数的地址,以达到访问数据表格的目的。若累加器A中原有内容为05H,程序存储器0405H单元的内容为0C4H,执行如下指令后,程序存储器0405H单元的内容将被传送到累加器A,即执行后累加器A中的内容为0C4H。

 MOV DPTR,#0400H
 MOV A,#05H
 MOVC A,@A + DPTR```

####2.3.2 软件程序设计
本实例直接给出完整的流水灯实例,并解释程序实例中新出现的指令。

1.程序全貌
以下为流水灯实例的软件程序。

;-----------------------------------
; 流水灯实例
;功能:点亮发光管LED并闪烁
;-----------------------------------
ORG 0000H ;伪指令,指定程序从0000H开始存放
LJMP  MAIN ;跳转指令,程序跳转到MAIN处

ORG 0100H ;伪指令,指定以下程序从0100H开始存放
MAIN:
MOV SP,#60H ;给堆栈指针赋初值
MOV P1,#0FFH ;给P1赋初值,LED全灭
;以下为查表程序
MOV DPTR,#LED_TABLE
LIGHT:
MOV R7,#42
LOOP:
MOV A,#42
SUBB A,R7 ;(1)
MOVC A,@A + DPTR
MOV P1,A ;输出显示
LCALL DELAY ;调延时子程序
DJNZ R7,LOOP
SJMP LIGHT ;跳转,程序继续

;延时子程序
DELAY:
MOV R7,#10H
DELAY0:
MOV R6,#7FH
DELAY1:
MOV R5,#7FH
DJNZ R5,$
DJNZ R6,DELAY1
DJNZ R7,DELAY0
RET

;表格数据
LED_TABLE:
DB 0FFH ;全部熄灭
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH ;依次逐个点亮
DB 0FEH,0FCH,0F8H,0F0H,0E0H,0C0H,080H,000H ;依次逐个叠加
DB 080H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH ;依次逐个递减
DB 07EH,0BDH,0DBH,0E7H,0E7H,0DBH,0BDH,07EH ;两边靠拢后分开
DB 07EH,03CH,018H,000H,000H,018H,03CH,07EH ;从两边叠加后递减
DB 000H ;全部点亮

END`
程序(1)为带进位的减法指令,该指令从累加器A中减去源操作数内容和进位标志,结果存入A。如果位7有借位,则PSW寄存器的Cy位置1,否则清0;如果位3有借位,则PSW寄存器的Ac位置1,否则清0;如果位6有借位而位7没有借位,或者位7有借位而位6没有借位,则PSW寄存器的溢出标志位OV置1,否则溢出标志位清0。

2.运行结果
程序运行后,将依次循环出现8只LED依次逐个点亮、依次逐个叠加、依次逐个递减、从两边靠拢后分开、从两边叠加后递减的流水灯效果。

2.3.3 技巧总结

通过本实例可以看到:

查表指令可用于复杂代码转换显示,通过查表指令实现复杂的显示效果,并可以减少程序代码。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
《例说8051:单片机程序设计案例教程》——导读
从8048开始,“单片机”即成为广受欢迎的代名词,8051更成为电机、电子类专业必修的课程。当然,应用单片机制作电子系统项目,既简单又经济实惠,早已成为学生的最爱。在电路设计方面,需求量较大、电路较复杂的系统可采用为客户专用而设计的IC(即ASIC),如芯片组、控制芯片等,虽然ASIC的单位成本不高,但总体成本很高、开发时间也比较长。
857 0
ArcGIS API for Javascript 3.21地图开发实例(一、图形绘制和删除及popup弹出层)
前言 Arcgis是一个地理系统的平台,可用来进行数据数据展示或二次开发。这里我们所使用的是Arcgis对于JavaScript的api,也就是web端的api进行开发。
9604 0
带你读《区块链开发实战: 基于JavaScript的公链与DApp开发》之三:Asch——区块链应用开发平台
本书用三个部分讲解了区块链技术以及Asch的相关实践,第一部分讲解了区块链技术的基本概念,并用300行代码实现了一个最小的、可运行的区块链;第二部分分析Asch的源码,讲解Asch的实现原理;第三部分介绍了基于Asch的侧链技术的DApp开发实战。
1566 0
+关注
异步社区
异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
12049
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载