8051单片机模块化编程技巧

上传人:枫** 文档编号:486450092 上传时间:2022-08-02 格式:DOCX 页数:10 大小:23.09KB
返回 下载 相关 举报
8051单片机模块化编程技巧_第1页
第1页 / 共10页
8051单片机模块化编程技巧_第2页
第2页 / 共10页
8051单片机模块化编程技巧_第3页
第3页 / 共10页
8051单片机模块化编程技巧_第4页
第4页 / 共10页
8051单片机模块化编程技巧_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《8051单片机模块化编程技巧》由会员分享,可在线阅读,更多相关《8051单片机模块化编程技巧(10页珍藏版)》请在金锄头文库上搜索。

1、本文格式为Word版,下载可任意编辑8051单片机模块化编程技巧 目前在8051 单片机应用开发中主要有两种编程语言:汇编语言和C51 语言。C51 语言是一种结构化的编程语言,采纳C51 编写的应用程序结构清楚、模块化程度高、可读性强、并简单移植。但C51 语言也有缺点,就是编译后生成的目标代码空间要比汇编的大。 而且目前单片机的教材还是侧重于汇编语言。因此学习用单片机汇编语言程序进行结构化设计还是很有必要的。我们知道C51 语言是函数式语言,其程序由函数构成,每一个源程序有且只有一个主函数main() 和若干个函数组成。其中每一个函数都用于完成某一特定任务。也就是说,一个项目若具有几个功能

2、,实现这些功能就会需要由若干个任务来完成,那么它的源程序中就会有若干个或以上的函数。而在汇编语言中,源程序中只有程序和子程序。那么我们能否以子程序为基本单位,用一个子程序实现一种功能来做到模块化编程呢?实践证明是可行的。但在编制程序中不要遗忘汇编语言的特点,留意子程序之间对单片机资源的使用,避开不同子程序交叉共用同一资源引起程序的错误执行。子程序嵌套调用的级数等。本文以“60秒倒计时电路”为例谈一谈51 单片机汇编语言模块化编程的一点技巧。 一、60秒倒计时电路及编程 1. 功能要求 所谓倒计时,就是首先给定一个初始值,然后对初始值进行减“1”操作,直到该值为“0”为止。60 秒倒计时就是对给

3、定的初始值“60”每隔1 秒钟对其进行减“1”,始终减到该值为“0”为止。 该倒计时电路要求有两个按钮。一个是“复位”按钮,按下按钮设置倒计时初始值,并把指示灯熄灭;另一个是“开头”按钮,按下按钮开头倒计时。并用两位LED 数码管显示当前倒计时值。计时时间到,指示灯点亮。 2. 电路组成 实现上述功能要求的单片机接口电路如图1 所示。 图1单片机接口电路 图中用按钮SB1 作为“置初值”按钮,按钮SB2 作为“开头”按钮。按下SB1 按钮,将显示值设置为“60”。 按下按钮SB2,每隔一秒显示值减“1”,直到值为“0” 停止计数。按钮和指示灯接在P0 口上,P0.0 为初始按钮,P0.1 为开

4、头按钮,P0.7 为指示灯。十位LED 数码管接P2 口,个位LED 数码管接P1 口。图2 为单片机基本系统电路。 图2 单片机基本系统电路 3. 功能分析 依据60 秒倒计时的功能要求,需要单片机完成以下任务: 按键扫描。用来推断有没有键被按下,是哪个键被按下?依据不同的键,给出相应的键值。 计时显示。这里时间值使用的是两位数,故需要将被显示的时间值取出个位数和十位数,然后才能进行显示。 被显示数转换成7 段码。由于单片机中的数据都是以二进制形式存放或运算的。而这里输出显示使用了两位LED 数码管来显示计时数值的,一个被显示的数要点亮数码管的某几段才能显示出这个数,不同的数需要点亮数码管的

5、不同段。因此需要将被显示的这个数转换成相应的显示段码,才能被正确显示出来。 延时。包括1秒钟延时和按键消抖的10毫秒延时。 程序编制 程序按实现功能采纳模块化结构,有一个主程序和若干个子程序组成。每个子程序分别是完成某个任务的独立模块,有时会用到调用参数。本实例共有5 个子程序,分别是按键扫描子程序、10ms 延时子程序、1s 延时子程序、显示子程序、取段码子程序。 按键扫描子程序 按键扫描子程序完成对按键进行扫描,确定有没有键被按下,当有键被按下并抬起后将相关键值返回给主程序的任务。其流程如图3 所示。该子程序没有入口参数,但有一个出口参数,即按键的键值,存放在寄存器R3 中。寄存器R3 中

6、的值为“60H”表示SB1 键被按下;寄存器R3 中的值为“00H”表示SB2 键被按下。 图3 按键扫描子程序流程图 根据图3 的流程图和51 单片机的指令系统编制的子程序如下: ;- 按键扫描描- ; 出口参数键值存放在寄存器R3 中,用于识别哪个键。 ;R3=60H, 说明SB1 被按下;R3=00H, 说明SB2 被按下 key_scan: jnb kb_init, k1check ; SB1 按下转移 jnb kb_begin, k2check ; SB2 按下转移 sjmp ksr ; k1check: acall del10 ; 调用毫秒延时,去抖 jb kb_init, ksr

7、 ; 干扰,返回 jnb kb_init,$ ; 等待按键释放 mov r3, #60h; 是SB1,键值“60H”送寄存器R3 sjmp ksr ; 是,不进行任何操作返回 k2check: acall del10 ; 调用毫秒延时,去抖 jb kb_begin, ksr ; 干扰,返回 jnb kb_begin,$ ; 等待按键释放 mov r3, #00h; 是SB2,键值“00H”送寄存器R3 ksr: ret ; 返回 ;- 显示子程序 显示子程序完成从被显示值中取出十位数将其转换成显示断码,并送单片机的P2 口;从被显示值中取出个位数将其转换成显示断码,并送单片机的P1 口任务。其

8、流程如图4 所示。该子程序有一个入口参数,即被显示的值,存放在寄存器R2 中。 图4 显示子程序流程图 根据图4 的流程图和51 单片机的指令系统编制的子程序如下: ;- 显示子程序- ; 入口参数存放在寄存器R2 中 display:mov a, r2 ; 取被显示值 mov b, #10; 取被显示值的十位数 div ab; acall seg7; 调用转换子程序,取显示断码 mov p2, a ; 十位数段码送P2 口 mov a, b; 取个位数 acall seg7 ; 调用转换子程序,取显示断码 mov p1, a ; 个位数段码送P1 口 ret ; 返回 ;- 取段码子程序 取

9、段码子程序完成将被显示的数转换成7 段共阳LED 数码管对应数的段码的任务。其流程如图5 所示。 图5 取段码子程序流程图 该子程序有一个入口参数和一个出口参数。入口参数就是被显示的数,出口参数就是该数的段码(相应位=0表示亮),都存放在累加器A 中。 根据图5 的流程图和51 单片机的指令系统编制的子程序如下: ;- 取段码- ; 对累计器A 中的值由查表得到显示断码 ; 入口和出口参数存放在累计器A 中 seg7: inc a ; 取被显示数,累加器A 加1 movc a, a+pc ; 查表 ret ; 返回 db 0c0h,0f9h,0a4h,0b0h;0123 db 99h,92h,

10、82h,0f8h;4567 db 80h,90h,88h,83h;89AB db 0c6h,0a1h,86h,8eh;cdEF ;- 延时子程序 延时子程序完成肯定的延时时间任务。这里有两个延时时间不同的子程序(也可以调用100 次10mS 做1S 延迟),其流程如图6 所示。延时子程序没有入口和出口参数。 图6 延时子程序流程图 根据图6 的流程图和51 单片机的指令系统编制的子程序如下; ;- 延时10ms 程序- ; 用到寄存器组1 中的R6 和R7 寄存器 del10: setb psw.3 ; 切换至第1 组寄存器 mov r7, #0bh ; dl1: mov r6, #0ffh

11、; dl2: djnz r6, dl2 ; djnz r7, dl1; clr psw.3 ; 切换至第0 组寄存器 ret ; ;- ;- 延时1s 程序- ; 用到寄存器组1 中的R1、R2 和R3 寄存器 del1s: setb psw.3 ; 选用寄存器区1 mov r1 , #46; 马上数46 送寄存器R1 del0: mov r2 , #100; 马上数100 送寄存器R2 del1: mov r3 , #100 ; 马上数100 送寄存器R3 djnz r3 , $ ; 寄存器R3 中的内容减1,不为零转移到当 前指令 djnz r2 , del1; 寄存器R2 中的内容减1,

12、不为零转移到 del1 djnz r1 , del0; 寄存器R1 中的内容减1,不为零转移到 del0 clr psw.3 ; 选用寄存器区0 ret ; 子程序返回 ;- 主程序编制 主程序需要实现的功能是:完成单片机端口定义;初始化任务;调用键扫描子程序,依据按键状态实现置初值或进行倒计时,并调用显示子程序等。其流程如图7 所示。 图7 主程序编制流程图 根据图7 的流程图和51 单片机的指令系统、以上编制的各子程序,主程序如下: ;* ; 文件名:counter.asm 功能:60 秒倒计时 ; 说明:p2 和p1 口分别接一个LED 数码管, 显示两位 十进制数。 ; p0.0 和p0.1 口接置初值按钮和开头倒计时按钮,p0.7 接提示LED。 ; 晶振频率11.0592MHz. ;* ;- 端口定义- kb_init bit p0.0 ; 置初值按钮定义 kb_begin bit p0.1 ; 开头按钮定义 warn bit p0.7 ; 提示 ;- org 0000h ajmp begin ;= 主

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号