电子工程师提升计划-第2章 单片机硬件原理【1.5】

        ③ 在图3-7所示对话框左侧的选择区内选择单片机型号为 Atmel公司的“AT89S51”,然后单击“确定”按钮,会弹出图3-8所示的对话框,该对话框询问是否要把标准8051的启动代码添加到项目中。

        KeilC51既支持C语言编程也支持汇编语言编程,如果欲用汇编语言编写程序,则应单击“否”按钮;如果想用C语言编写程序,一般也单击“否”按钮;但是如果用到了某些增强功能需要初始化配置时,则可以单击“是”按钮。这里单击“否”按钮(即不添加启动代码),新建项目结束,在图3-9所示μVision2 软件窗口左边的项目管理器中新增了一个“Target 1”文件夹,该文件夹中还有一个
“Source Group 1”文件夹。

                        图3-9 新建项目完毕,在μVision2软件窗口中新增“Target 1”文件夹
(2)新建源程序文件
要编写程序,还需要新建一个源程序文件,再在该文件中编写程序。新建源程序文件的操作过程如下。
① 新建源程序文件。单击工具栏中的新建按钮 ,也可选择“File”→“New”菜单命令,即新建一个默认名为“Text 1”的空白文件,同时该文件在软件窗口中打开,如图3-10所示。

② 保存源程序文件。单击工具栏上的保存按钮 ,也可选择“File”→“Save As”菜单命令,弹出图3-11所示的“Save As”对话框。在对话框中打开之前建立的项目文件所在的文件夹,再将文件命名为“test1.asm”(扩展名.asm表示为汇编程序,不能省略),单击“保存”按钮即将该文件保存下来。

③ 建立源程序文件与项目关联。新建的源程序文件与新建的项目没有什么关联,需要将它加入到项目中。打开项目管理器的“SourceGroup 1”文件夹,右击该文件夹,弹出图3-12所示的快捷菜单,在该快捷菜单中选择“Add Files to Group’Source Group 1’”项,会出现图3-13所示的加载文件对话框。在该对话框中选文件类型为“AsmSource file”,找到新建的“test1.asm”文件,再单击“Add”按钮,test1.asm文件即被加入到项目中,此时对话框并不会消失,可以继续加载其他文件,单击“Close”按钮关闭对话框。在Keil软件项目管理器的“Source Group 1”文件夹中可以看到新加载的
“test1.asm”文件,如图3-14所示。

 3.编写程序
编写程序有两种方式:一是直接在 Keil 软件中编写;二是在其他软件中编写,再加载到 Keil软件中。

(1)在Keil软件中编写程序
在Keil软件的源程序文件中用汇编语言编写程序(也可以用C语言编写),如图3-15所示。

源程序文件中的汇编语言程序如下:
MAIN:
MOV  P3,#0FFH
LOOP:
MOV P1,P3
LJMP LOOP
END
有关程序的编写方法在后面的章节将专门介绍。
        (2)加载其他软件编写的程序Keil 软件源程序文件的文本框对中文的支持不是很好,在输入中文时,有时会出现文字残缺现象。编程时也可以使用其他文本编辑器(如 Windows 自带的记事本)编写程序,再将程序加载到Keil软件中进行编译、仿真和调试。加载其他软件编写的程序的过程如下。
        ① 用文本编辑器编写程序。打开Windows 自带的记事本,在其中编写程序,如图3-16所示。编写完后将该文件保存下来,文件的扩展名为.asm或.a51,这里将文件保存为test1S.asm。

        ② 将程序文件装载进 Keil 软件。加载程序文件的过程与图3-12~图3-14所示的过程相同,具体操作过程如下。打开Keil软件,在项目管理器中的“Source Group 1”文件夹上右击,弹出快捷菜单,选择其中的“Add Files to Group’SourceGroup 1’”项,会出现加载文件对话框,在对话框中选文件类型为“Asm Source file”,然后找到之前编写的“test1S.asm”文件,再单击“Add”按钮,test1S.asm文件即被加载进Keil软件中,单击“Close”按钮关闭对话框。
        加载程序结束后,可以在项目管理器的“Source Group 1”文件夹中看到加载进来的“test1S.asm”文件,如图3-17所示,双击可以打开该文件。

3.2.2 编译或汇编程序

        用汇编语言写好程序后,程序还不能直接写入单片机,因为单片机只接受二进制数,所以要将汇编语言程序转换成二进制或十六进制代码(又称机器代码)。将汇编语言程序或其他程序(如 C语言程序)转换成二进制或十六进制代码的过程称为汇编或编译。
        汇编要用到汇编器,汇编器可以将汇编语言程序转换成二进制或十六进制代码;编译要用到编译器,编译器可以将高级语言程序(如C语言程序)转换成二进制或十六进制代码。不同类型的单片机需要使用不同的汇编器或编译器,MCS-51系列单片机对汇编语言程序汇编时采用A51汇编器,而对C语言程序编译时采用C51编译器。
        KeilC51 软件本身带有汇编器和编译器,在对程序进行汇编或编译时,会自动调用相应的汇编器或编译器。下面以汇编test1.asm程序为例,说明汇编和编译的过程。
(1)汇编或编译前的设置
        在汇编或编译程序前需要对项目进行一些设置。设置时,选择“Project”→“Options for Target ’Target 1’”菜单命令,弹出图3-18所示的对话框。该对话框中有 10 个选项卡,每个选项卡中
都有一些设置内容,其中“Target”和“Output”选项卡较为常用,默认打开“Target”选项卡,这里保持默认值。

        单击“Output”选项卡即可切换到该选项卡,该选项卡的内容如图3-19所示。这里只选中“Create HEX Fi”复选框,选中该复选框后在汇编或编译时会生成扩展名为.hex的十六进制文件。

(2)进行汇编或编译
        在图3-19所示的“Options for Target’Target 1’”对话框中设置完成后,单击“确定”按钮,返回到Keil软件界面,然后单击编译或汇编按钮 ,软件就开始对test1.asm文件中的程序进行编译或汇编,完成后,在软件窗口下方的输出窗口中可看到有关的编译或汇编信息。如图3-20所示,如果出现“0 Error(s),0 Warning(s)”,则表示程序没有问题(至少在语法上不存在问题);如果存在错误或警告,则要认真检查程序,修改后再编译或汇编,直到通过为止。

        图3-20 程序汇编或编译结束出现有关的汇编或编译信息
编译或汇编完成后,打开项目文件所在的文件夹,会发现生成了一个“test1.hex”文件。该文件是由汇编器将汇编语言程序汇编成的十六进制代码,用记事本程序打开它,可以看见该文件的具体内容,如图3-21所示。通过编程器可以将test1.hex文件中的内容写入到单片机中。

3.2.3 仿真、调试程序

        编写的程序能顺利编译成功,只能说明程序语法上没有问题,不能保证该程序写入单片机后一定能达到预期的效果。为了让程序写入单片机后能达到预期的效果,可以对程序进行仿真和调试。当然如果认为编写的程序没有问题,也可以不进行仿真、调试,而直接用编程器将程序写入单片机。
        仿真有软件仿真和硬件仿真两种。软件仿真是指在软件中(如Keil μVision2)运行编写的程序,通过观察程序运行的情况来分析、判断程序是否正常。硬件仿真是指将实验板、仿真机和个人计算机(PC)连接起来,在软件中将程序写入仿真器,让程序在仿真器中运行,同时观察在实验板上是否实现了预期的效果。
        在仿真的过程中,如果发现程序出现了问题,就要找出问题的所在,并改正过来,然后再编译、仿真,有问题再改正,如此反复,直到程序完全达到要求,这个过程称为仿真、调试程序。因为这两个步骤是交叉进行的,所以一般将它们放在一起说明。
        由于仿真、调试程序涉及的知识面很广,如果阅读时理解有困难,可稍微浏览一下本部分内容再去学习后面的知识,待掌握后面一些章节的知识后再重学这部分内容。
1.软件仿真
        程序是由一条条指令组成的,前面的“MOV P3,#0FFH”就是一条指令。单片机在执行程序指令时,一般会改变数据存储器中的值。软件仿真就是让软件模拟单片机来一条一条执行程序指令,再在软件中观察相应寄存器中值的变化,以此来分析判断程序能否达到预期的效果。
        在Keil μVision2软件中除了可以编写、编译程序外,还能仿真、调试程序,仿真、调试程序时可按下面的步骤进行。
(1)软件设置

        软件仿真指用软件模拟单片机逐条执行程序指令。为了让软件仿真更接近真实的单片机,要求在仿真前对软件进行一定的设置。为了更好地说明软件仿真的效果,下面以仿真的test2.asm文件为例进行介绍,如图3-22所示。

        软件仿真设置的操作过程如下。
        ① 选择“Project”→“Options for Target’Target 1’”菜单命令,弹出图3-23所示的设置对话框,切换到“Target”选项卡,再将其中的“Xtal(MHz)”(单片机时钟频率)项设为12.0MHz,然后单击“Output”选项卡,切换到图3-24所示的对话框。

② 在图3-24所示的对话框中选中“Create HEX Fi”(建立HEX文件)复选框,这样在编译时可以生成扩展名为.hex 的十六进制的文件,然后单击“Debug”选项卡,切换到图3-25所示的对话框。

        ③ 在图3-25所示的对话框中选中“Use Simulator”(使用仿真)单选按钮,再单击“确定”按钮,退出设置对话框。
(2)编译或汇编程序
        软件设置好后,还要将程序文件(.asm格式)编译或汇编成十六进制.hex格式的文件,因为仿真器只认识这种机器语言文件。在图3-26所示的软件窗口中单击编译或汇编按钮 ,系统开始对test2.asm文件进行编译或汇编。完成后,如果在窗口下方的区域显示“"2" - 0Error(s),0 Warning(s)”,则表明程序编译或汇编时没有出现错误。编译或汇编生成的test.hex文件会自动放置在项目文件中,在软件窗口无法看到,但在仿真、调试时,软件会自动执行该文件。
(3)仿真、调试程序
        程序编译或汇编完成后,就可以开始仿真、调试。通常先在软件中启动仿真、调试,然后根据需要进行各种仿真、调试操作。

        ① 启动仿真、调试。选择“Debug”→“Start/Stop DebugSession”菜单命令,软件马上进入图3-27所示的仿真等待状态。从图3-27 中可以看出,软件窗口左侧的项目管理器自动由文件管理器切换成寄存器状态显示器,在窗口中间还悬浮着P0端口寄存器状态显示框(如果该显示框没有出现,可以通过选择“Peripherals”→“I/OPorts”→“Port 0”菜单命令将它调出来)。

        ② 进行仿真、调试。单击工具栏上的仿真按钮 ,软件开始执行程序进行仿真。
第1 次单击该按钮时,软件执行第1 行程序指令“MOV A,#0D5H”,该行指令执行完后,黄色箭头移到第2行。第1行程序指令的执行结果如图3-28所示。从图3-28中可以看出,第1行指令执行完后,软件窗口左侧寄存器状态显示框中累加器a的数据变为0xd5(这里0x的含义是说明它后面的d5是十六进制数),同时程序状态字寄存器psw中的数据变为0x01,它的奇偶校验位p由“0”变为“1”。

        第2次单击仿真按钮 ,软件执行第2行程序指令“MOV R1,#0F7H”,该行指令执行完后,黄色箭头移到第3行。第2行程序指令的执行结果如图3-29所示。从图3-29中可以看出,第2行指令执行完后,软件窗口左侧状态显示框中寄存器r1的数据变为0xf7。

        第3次单击仿真按钮 ,软件执行第3行程序指令“MOV A,#00H”,该行指令执行完后,黄色箭头移到第4行。第3行程序指令的执行结果如图3-30所示。从图3-30中可以看出,第3行指令执行完后,软件窗口左侧状态显示框中累加器a的数据变为0x00,程序状态字寄存器psw中的数据变为0x00,它的奇偶校验位p由“1”变为“0”。

        第4次单击仿真按钮 ,软件执行第4行程序指令“MOV P0,#00H”,该行指令执行完后,黄色箭头移到第5行。第4行程序指令的执行结果如图3-31所示。从图3-31中可以看出,第4行指令执行完后,软件窗口中悬浮的P0端口寄存器状态显示框中的7~0位都变为“0”(0x00)。

        第5次单击仿真按钮 ,软件执行第5 行程序指令“SETBP0.2”,该行指令执行完后,黄色箭头移到第6行。第5行程序指令的执行结果如图3-32所示。从图3-32中可以看出,第5行指令执行完后,P0端口寄存器状态显示框的第2位(P0.2)变为“1”(0x04)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

BinaryStarXin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值