且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《例说8051:单片机程序设计案例教程》——1-4 实例演练

更新时间:2022-04-19 02:30:13

本节书摘来自异步社区《例说8051:单片机程序设计案例教程》一书中的第1章,第1-4节,作者 张义和,陈敌北,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1-4 实例演练

单片机系统的设计中,软件与硬件息息相关,采用不同的电路设计,程序可能就不太一样。因此,在编写程序之前,必须确定电路的连接状态,例如要利用8051的Port 2来控制8个LED,让这8个LED分成两组(高四位与低四位),交互闪烁,其设计步骤如下:

  1. 如图1-19所示的电路中,当Port 2的引脚输出低电平(0)时,其所连接的LED因正向导通而亮;若将引脚输出高电平(1)时,其所连接的LED因反向截止而不亮。因此,我们的程序设计就要让Port 2输出为“00001111”,使左边四个LED亮,右边四个LED不亮。隔一段时间后,再将输出反相,即左边四个LED不亮,右边四个LED亮,……如此周而复始。
  2. 有了电路和思路后,随即可画出流程图,如图1-20所示。


《例说8051:单片机程序设计案例教程》——1-4 实例演练


《例说8051:单片机程序设计案例教程》——1-4 实例演练

  1. 除简单的程序外,根据流程图来编写程序是一个较容易且保险的方法。若要编写程序,则进入文本编辑程序后,按行输入,其中每行“;”右边的部分是注释,是对该条指令的说明,只提供备注信息,不会影响源程序运行。在此建议尽量要求自己对自己所编写的程序进行注释,一方面可以增加该程序的可读性,另一方面则可养成良好的程序编写习惯。
ORG   0    ;程序从0地址开始

START: MOV   A, #0FH   ;让ACC的内容为00001111
LOOP: MOV   P2, A   ;从Port 2输出ACC的内容
     CPL   A    ;对ACC的内容取补码(即反相)
     CALL  DELAY   ;调用延迟子程序
      JMP   LOOP   ;跳到LOOP处执行
;=======================================================
DELAY:      ;延迟子程序
        MOV   R7, #20   ;R7寄存器加载次数20
D1:  MOV   R6, #25   ;R6寄存器加载次数25
     DJNZ   R6, $   ;本行执行R6次
     DJNZ   R7, D1   ;D1循环执行R7次
     RET     ;返回主程序
     END     ;结束程序

ch1.asm

  1. 通常我们会将所有开发工具都放在一个文件夹里(如D:8051),包括PE2、X8051、LINK、AVSIM51、TEST.BAT(前面所介绍的自动批处理文件),以及所编辑的源程序。当源程序编辑完成且存盘(ch1.asm)后,在命令提示符下输入:


《例说8051:单片机程序设计案例教程》——1-4 实例演练

屏幕将出现一连串操作,最后停止,如图1-21所示。


《例说8051:单片机程序设计案例教程》——1-4 实例演练

  1. 此时产生了*.hex文件,可进一步进行软件仿真,同样是在命令提示符下输入:


《例说8051:单片机程序设计案例教程》——1-4 实例演练

屏幕出现如图1-22所示画面。


《例说8051:单片机程序设计案例教程》——1-4 实例演练

  1. 紧接着载入刚才编译完成的文件,按、键,再输入ch1.hex,按键即可载入ch1.hex,如图1-24所示。


《例说8051:单片机程序设计案例教程》——1-4 实例演练

《例说8051:单片机程序设计案例教程》——1-4 实例演练