电子工程师提升计划-第4章 单片机编程【1.6】

        第6次单击按钮 ,软件执行第6行程序指令“LJMP LOOP”。由于该行指令的功能是跳转执行标号LOOP处的指令,所以该行指令执行完后,自动跳转执行第1行,执行完第1行后黄色箭头移到第2行。第6行指令的执行结果如图3-33所示。从图3-33中可以看出,第6行指令执行完后,累加器a的数据又变为0xd5,程序状态字寄存器psw中的数据也发生了变化。

        如果单击工具栏中的编辑按钮 ,软件马上切换到汇编显示窗口,如图3-34所示。在汇编显示窗口中,第1行为编写的第1行程序指令“LOOP: MOV A, #0D5H”;第2行的第1列为第1行指令在程序存储器中保存的地址,图3-34中指示出指令保存在0x0000地址开始的单元中(该指令是

        2B指令,保存在0x00和0x01单元中),第2列为指令的十六进制代码,该指令的十六进制代码为74D5,第3、4列是第1行指令的另一种编写形式。汇编显示窗口其他行的显示规律与第1、2行相同。
        当软件处于汇编显示状态时,单击工具栏上的仿真按钮 ,软件开始执行程序仿真,如图3-35所示。程序执行时的信息在汇编显示窗口和寄存器状态显示器中都可以观察到。

        在用软件对程序进行仿真运行时,如果观察到有关寄存器的状态不正常,可选择“Debug”→“Start/Stop Debug Session”菜单命令,让软件停止仿真来更改程序,更改(调试)完成后,再将调试后的程序重新汇编,然后再进行仿真,如此反复,直到程序运行符合要求为止。
        ③ 一些仿真工具的说明。前文用到了与仿真有关的几个工具,为了更好地进行仿真操作,这里再对其他一些仿真工具进行说明。常用的仿真工具按钮如图3-36(a)所示,各按钮的功能说明见图3-36(b)的标注。

2.硬件仿真
(1)仿真器
        软件仿真指在软件中让程序在模拟的单片机中运行,通过观察运行过程中有关寄存器的数据变化情况来判断程序是否正常。这样虽然方便,但却无法观察到程序在实际的单片机中运行的效果。
        要想知道编写的程序在单片机中运行时能否达到预期的效果,可以通过编程器将程序写入单片机,然后将写好程序的单片机插入实验板,观察程序在单片机内部运行时对实验板外围电路的实际控制效果。如果未达到预期的效果,就需要在软件中检查、修改程序,然后从实验板上取下单片机,放入编程器,将以前的程序擦除,再将修改后的程序写入,如此反复,直到程序在单片机中运行时能达到预期的控制效果。
        这样做的缺点是显而易见的:一是反复插拔单片机,易损坏单片机引脚;二是反复擦写单片机,易使内部的程序存储器(ROM)失效,毕竟ROM的擦写次数有限;三是程序写入单片机后,程序指令会从前往后运行,无法进行人为控制,因此当单片机产生的控制不正常时,无法判断是哪行程序出现问题造成的。
        硬件仿真可以很好地解决这个问题,而硬件仿真要用到仿真器。硬件仿真器可以看作是一个单片机。在使用时,要先将实验板上的单片机取下,再将仿真器插在单片机的位置上。由于仿真器较大,不方便直接插在实验板的单片机位置上,一般是通过多针双头插线(如MCS-51系列单片机采用40针插线),插线一端插在仿真器上,另一端插在单片机位置上,这样整个仿真器就相当于一个单片机。为了使程序能被随时写入仿真器,仿真器还通过接口插头与计算机连接。

        仿真器虽然相当于一个单片机,但在调试程序时较单片机有很多优点。一是它通过连接线始终与计算机连接,计算机可以随时将程序写入,不像单片机需要在实验板和编程器之间反复插拔;二是仿真器的擦写次数高达100万次,无须担心因擦写程序而使仿真器失效;三是在计算机软件中可以控制程序在仿真器中的运行进程,如可以让程序指令在仿真器中一条一条地运行,这样易找出有问题的程序指令,方便程序的修改。
        仿真器的外形如图3-37所示。从图3-37 中可以看出,仿真器实际上就是一块电路板,电路板上有仿真芯片和外围元件。仿真器上安插着一个40针的排线,该排线一端插在仿真器上,另一端是一个40针的插头(与单片机引脚排列相同),在仿真时,该插头取代单片机而插在实验板中单片机的位置上。仿真器还有两个接口:一个是USB接口,该接口通过USB线与计算机的USB接口相连,用于向计算机的USB接口取+5V的工作电压;另一个是COM接口,该接口通过COM线与计算机的COM接口相连,仿真器通过COM线与计算机进行数据传送。

(2)硬件仿真过程
        硬件仿真的过程一般是:首先连接仿真器,然后进行仿真设置,再进行仿真。仿真时若发现问题要进行调试,程序仿真通过后就可以用编程器将程序写入单片机。
        ① 连接仿真器。进行硬件仿真,首先要将仿真器、实验板和计算机连接好。以图3-37所示的仿真器为例,先将实验板上的单片机取下,将仿真器的40针插头插入实验板中单片机的位置上,然后用COM线将仿真器COM接口和计算机的COM接口连接起来,最后用USB线将仿真器的USB接口与计算机的USB接口连接起来。
        ② 仿真设置。与软件仿真一样,硬件仿真也要进行设置,设置过程如下。选择“Project”→“Options for Target’Target 1’”菜单命令,弹出图3-38所示的仿真设置对话框。在该对话框中对“Target”和“Output”选项卡内容的设置与软件仿真设置一样,而“Debug”选项卡的设置有些不同,单击“Debug”选项卡,切换到该选项卡,如图3-39所示。

        在图3-39所示的“Debug”选项卡中选中“Use”单选按钮,再在后面的下拉列表框中选择仿真器设备类型为“Keil Monitor-51Driver”,因为所连接的仿真器就是这种类型。然后单击“Settings”按钮,弹出图3-40所示的“Target Setup”对话框,在“Port”下拉列表框中选择计算机连接仿真的COM接口,因为仿真器连接的是计算机的COM1接口,所以选择“COM1”,再在“Baudrate”下拉列表框中选择 COM1接口的数据传送速率,这里选择“38400”,然后单击“OK”按钮,关闭对话框,回到图3-39所示的对话框,在该对话框中单击“确定”按钮,关闭对话框,设置完毕。

        ③ 进行仿真。仿真设置完成后,单击编译按钮 对程序文件进行编译或汇编,完成后,如果在窗口下方的区域显示“0 Error(s), 0Warning(s)”,则表明程序汇编时没有出现错误,然后选择“Debug”→“Start/Stop Debug Session”菜单命令,软件立刻进入图3-41所示的仿真等待状态。

        后面的仿真操作过程与软件仿真基本相同。硬件仿真与软件仿真的不同之处在于:软件仿真时只能在软件中观察到程序执行时各寄存器的数据变化情况;而在硬件仿真时,不但可以在软件中观察到各寄存器的状态,而且在软件中执行的程序指令会同步通过计算机的 COM接口送入仿真器,还可以在实验板上观察到程序在仿真器(相当于单片机)中运行时对外围元件的控制效果。
        在硬件仿真时,如果在软件中发现有关寄存器的状态不正常,或者实验板控制不正常,则要找出是程序问题还是实验板的电路问题,再进行改正。如果是程序问题,改正后还要对改正后的程序重新编译,再进行仿真,否则仿真的还是修改前的程序。

3.2.4 用编程器将程序写入单片机

        编写的单片机程序经编译、仿真和调试完成后,如果确定没有问题,就可以用编程器将程序写入单片机。
1.编程器
        编程器的主要功能有两个:一是擦除单片机中的程序,二是向单片机中写入程序。不同类型的单片机一般需要不同的编程器,也有些编程器可以擦写多种类型的单片机,但其价格较贵。
        图3-42所示是SP-51pro编程器的外形,它主要用于擦写MCS-51系列单片机,支持的类型有最为经典和市场占有量最大的 Atmel 公司51 系列 AT89C51、AT89C52、AT89C55、AT89C1051、AT89C2051、AT89C4051、AT89S51、AT89S52、AT89LV52、AT87F51等单片机和华邦公司的W78E51、W78E52单片机及串行存储芯片AT24C02等。购买编程器时,可以查看该编程器附带的说明书,以了解它是否支持自己所使用的单片机。

2.用编程器擦写单片机程序
        用编程器擦写单片机程序,首先要将编程器与计算机连接起来,再在编程器的插座中插入要擦写的单片机,然后启动编程软件,在软件中对单片机进行擦写操作。
(1)连接编程器
        在连接编程器时,先将编程器的COM接口(用作数据通信)与计算机的COM接口连接好,如图3-43所示。然后将要擦写的单片机安插在编程器相应的插座中,再用一根USB线将编程器的USB接口与计算机的USB接口连接起来,让计算机通过这根USB线向编程器提供+5V的工作电压。

(2)擦写单片机
        欲使编程器能够擦写单片机中的程序,需要相配套的软件,购买编程器时会附带这种软件。在计算机中安装该软件后,再启动它,启动后的 SP-51pro 编程器软件窗口如图3-44所示。软件启动后会自动检测连接计算机 COM 接口的编程器,检测到编程器后,在软件窗口右边的窗口中会显示“编程器:就绪”字样。如果检测失败,可单击软件窗口下方的“设置”项进行设置。

        启动编程软件并检测到编程器后,再在软件窗口左上角的下拉列表框中选择要擦写的单片机型号。若想擦除单片机中的程序,可单击窗口左侧的“(自动)擦除器件”项,即可将单片机中的程序擦除。在向有程序的单片机中写新程序时,要先擦除其中的旧程序。
        如果要将程序写入单片机,可单击窗口左侧的“(自动)打开文件”项,在弹出的图3-45所示的对话框中选择要写入单片机的程序文件“test1.hex”,再单击“打开”按钮,软件窗口右侧的窗口中会出现“读入文件……”字样,如图3-46所示。

        图3-46 单击“(自动)写器件”项开始将程序写入单片机单击软件窗口左侧的“(自动)写器件”项,编程器开始将test1.hex文件中的内容写入单片机,程序完全写入单片机后,在软件窗口左下方的进度条上会出现“写器件完成”字样,如图3-47所示。

        程序写入单片机后,将单片机从编程器插座上取下,再将它安装在实验板的单片机插座上,给实验板通电,单片机工作,内部的程序开始运行,通过 I/O 接口控制外围电路工作,从而实现预定的控制功能。

第4章 单片机编程

4.1 编程基础知识

4.1.1 指令和程序

        欲使单片机工作,必须给它“下命令”,这里的“命令”称作指令,单片机执行不同的指令就可以完成不同的操作。对于一些简单任务,单片机执行一两条指令就可以完成,而一些复杂的任务则需要执行很多条指令才能完成。能使单片机完成特定控制任务的指令集合称为程序。编写这些指令集合的过程称为程序设计。
        程序设计的过程就像是写文章,如果把程序比作文章,那么指令则是文章中的词语。要写好一篇文章,不但要了解词语的含义和用法,还要掌握将词语组合成文章的规则。同样,要设计单片机程序,除了要了解单片机指令的含义和用法外,还要掌握指令组合成程序的规则。

4.1.2 编程语言

        写相同内容的文章时,可以采用汉语,也可以采用英语,还可以采用阿拉伯语。同样,在进行单片机的程序设计时,也可以采用不同的语言。单片机常用的编程语言有机器语言、汇编语言和 C语言。
1.机器语言
        单片机是一种大规模的数字集成电路,它只能识别“0”和“1”这样的二进制代码。在早期的单片机开发过程中,人们用二进制代码编写程序,再把这些二进制代码程序写入单片机,单片机执行这些二进制代码程序就可完成相应的任务。

        用二进制代码编写的程序称为机器语言程序。在用机器语言编程时,不同的指令用不同的二进制代码代表,这种二进制代码构成的指令称为机器指令。在用机器语言编写程序时,由于需要记住大量二进制代码指令及这些代码代表的功能,很不方便且非常容易出错,所以现在很少有人用机器语言编写程序。
2.汇编语言
        由于机器语言编程不方便,人们便用一些有意义且容易记忆的符号来表示不同的二进制代码指令,这些有意义且容易记忆的符号称为助记符。用有意义的助记符表示的指令称为汇编语言指令,用助记符编写出来的程序称为汇编语言程序。
下面的两行程序分别是机器语言程序和汇编语言程序:
01110100 00000010
MOV A, #02H
        这两行程序的功能是一样的,都是将二进制数据00000010送到累加器A中。可以看出,机器语言程序要比汇编语言程序难写,并且容易出错。
        单片机只能识别机器语言,所以汇编语言程序要先汇编(翻译)成机器语言程序,再写入单片机中。将汇编语言程序汇编成机器语言程序有手工汇编和软件汇编两种方式,手工汇编是指用人工的方法将汇编指令逐个翻译成机器指令,软件汇编是利用汇编软件(汇编器)自动将汇编指令翻译成机器指令。
3.高级语言
        高级语言是一种近似于日常会话的语言,这些语言是依据数学语言而设计的,在用高级语言编程时不用过多考虑单片机的内部结构。与汇编语言相比,高级语言更易学、易懂,而且通用性很强。高级语言种类很多,如Basic语言、Pascal语言、C语言和Java语言等,单片机常用C语言作为高级编程语言。

        单片机不能识别高级语言编写的程序,因此用高级语言编写完程序后,还要用编译器将高级语言程序翻译成机器语言程序,再写入单片机中。
        在上面3种编程语言中,高级语言编程较为方便,但实现相同的功能,汇编语言代码少,运行效率更高;另外对于初学者,学习汇编语言编程有利于更好地理解单片机的结构与原理,也能为以后学习高级语言编程打下扎实的基础。

  • 26
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值