版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
任务1控制单只LED闪烁发光1.1任务内容与分析1.2任务实施1.3任务相关知识1.1任务内容与分析
1.任务内容
在日常生活中经常看到有些电器上带有的LED(发光二极管)指示灯有节奏地闪动,任务1就以单片机控制一只LED闪烁(简称为闪烁灯)为例,简单介绍单片机。
2.任务分析
要用单片机控制LED闪烁,那么,LED必须和单片机的某个引脚相连,否则单片机就无法控制它,那么应和哪个引脚相连呢?89S51单片机有40个引脚,设计该芯片的Intel公司已经给每个引脚起好名字,且每个引脚都有具体功能,可以将LED和89S51单片机的1脚(P1.0)相连,如图1-1所示,图中,R1为限流电阻。图1-1闪烁灯示意图当P1.0输出低电平时,使发光二极管正向偏置,就会点亮LED;P1.0输出高电平时,LED就熄灭。如果P1.0输出电平在高低电平之间不停转换,则LED会产生闪烁。也就是说,先点亮LED一段时间之后熄灭LED,再延时一段时间后点亮LED,如此反复。计算机能听得懂的命令,称之为计算机的指令。在89S51单片机中,让一个引脚输出高电平的指令是SETB,让一个引脚输出低电平的指令是CLR。因此,要P1.0输出高电平,只要写SETBP1.0;要P1.0输出低电平,只要写CLRP1.0即可。但计算机怎样执行指令呢?第一,计算机看不懂SETB、CLR之类的指令,因此要把指令先翻译成计算机能懂的方式,再让计算机去读。计算机只能懂二进制数字0、1,因此,要把SETBP1.0变为(D2H,90H),把CLRP1.0变为(C2H,90H)。至于为什么是这样的数字,是由51芯片的设计者——Intel公司规定的,暂时先不去研究。第二步,在得到这些数字后,要把这些数字写进单片机的内部程序存储器中,这要借助于硬件工具——编程器。将编程器与电脑连好,运行编程器的软件,然后在编辑区内输入图1-2所示的目标代码,或者用仿真软件生成HEX文件(目标代码)再导入。取下单片机,将单片机插入做好的电路板,并接通电源。正常情况下,可见LED在闪烁。图1-2中地址栏后的c:表示存储器,OX表示十六进制,00表示空白。图1-2闪烁灯程序目标代码1.2任务实施
步骤1:把电路连接妥当,如图1-3所示。P1.0输出低电平(指令为CLRP1.0)时,所连接的LED点亮;输出高电平(指令为SETBP1.0)时,所连接的LED熄灭。如果P1.0输出电平在高低电平之间不停转换,则LED便会产生闪烁。图1-3闪烁灯电路原理图步骤2:有了电路,又有了思路,即可将思路画成流程图,如图1-4所示。其中延时用延时子程序来实现。在“任务5”中将详细讨论子程序的应用。图1-4闪烁灯程序流程图步骤3:除非是非常简单的程序,比较容易且保险的方法还是要根据流程图来编写程序。闪烁灯控制程序如下:
;//*****闪烁灯控制程序*************//
;程序名:闪烁灯控制程序xiaodeng.a
;程序功能:用单片机实现单只LED闪烁
ORG 0000H
;程序从地址0000H开始存放
AJMPSTART ;低端地址单元留给中断处理用
ORG 0030H
START:CLRP1.0 ;点亮LED
ACALL
DELAY_50MS ;延时50ms
SETB P1.0 ;熄灭LED
ACALLDELAY_50MS
;延时50ms
AJMPSTART ;重复闪烁
;***************延时子程序***************
DELAY_50MS: MOV R7,#200 ;延时子程序开始
DEL2: MOV R6,#123
DEL1: NOP
DJNZ R6,DEL1
DJNZ R7,DEL2
RET ;子程序返回
END ;汇编程序结束步骤4:通过仿真软件KeilμVision3将源程序生成HEX格式的目标文件。
①工程的建立。
首先点击KeilμVision3,进入KeilμVision3界面。点击工具栏“项目”选项中的“新项目”,准备开始建立自己的项目,如图1-5所示。图1-5建立项目给工程起一个名字,并选择保存工程文件的目录,然后单击“保存”即可,如图1-6所示。图1-6创建新工程进入下一步,选择目标CPU。Keil支持400余种以80C51为内核的单片机系列,这里选择Atmel公司生产的AT89S51。双击“Atmel”,找到“AT89S51”后点击,然后选择“确定”,如图1-7所示。图1-7选择目标CPU返回到主界面,此时会出现下面的对话框,询问是否要将8051标准启动代码的源程序拷贝到工程所在文件夹,并将这一文件加入到项目中。这是新版本Keil软件新增加的功能。在使用C语言编程且要修改启动代码时可以选择“是”,在使用汇编语言进行编程时可以选择“否”,如图1-8所示。选择好后回到主界面,此时工程已建立。图1-8询问界面
②新建、添加文件。接下来再为工程新建一个文件。一般应把工程与源文件建立在同一个文件夹中。可以将一个已在其他编辑器中写好的源程序加入工程,也可以从建立一个空白的源程序文件开始。
点击“文件/新建”创建源程序文件并输入程序代码,如图1-9所示。图1-9创建源程序文件在文本框中输入源程序。在此写入汇编程序,如图1-10所示。图1-10输入源程序然后点击“文件/另存为”保存文件,为文件起一个名字,这里命名为“xiaodeng.a”。注意文件的扩展名不能省略,且后缀必须是“.a”,如图1-11所示。图1-11保存文件点击“保存”,出现如图1-12所示的界面。图1-12保存后的源文件点击“视图”菜单栏中的“项目窗口”选项,弹出项目工作区(若已有项目工作区,则不用点击“视图”菜单栏中的“项目窗口”选项),将项目工作区中“目标1”前面的“+”号展开,在其下面的字符“源代码组1”上点击鼠标右键,再点击“添加文件到组‘源代码组1’”,如图1-13所示。图1-13为工程添加文件弹出如图1-14所示的对话框,在文件类型中点击“Asm源文件”,找到刚才新建的“xiaodeng.a”文件,然后点击
“添加”。
图1-14加入文件对话框只需要加入一次就够了,如果再次重复加入,将出现如图1-15所示的提示框,这时直接点击“确定”即可。
图1-15重复加入文件的提示添加文件完毕,文件夹“源代码组1”前面就有了一个
“+”号,点击该“+”号展开后,下面就出现了一个名为“xiaodeng.a”的文件,如图1-16所示,说明已经成功加入
文件。
图1-16成功加入文件
③工程的设置。工程建立好后,还要对工程进行进一步的设置,以满足每个工程的个性化要求。
其具体做法是:将鼠标移到“目标1”上,点击右键,
再点击“为目标‘目标1’设置选项”(如图1-17所示),弹出如图1-18所示的窗口。图1-17为目标设置选项图1-18为目标设置选项的界面点击“输出”菜单,在新弹出的如图1-19所示的窗口中,一定要确保“产生HEX文件”前面的小方格内有“√”,即选中该项。在“执行的名字”方框中为生成的HEX文件起名字,在此输入与源文件一样的名字“xiaodeng”,然后点击“确定”。图1-19“输出”菜单的设置点击“调试”菜单,如图1-20所示。在此菜单中可选择是使用硬件仿真,还是软件仿真。图1-20选择仿真模式
④编译、链接。在设置好工程后,即可进行编译、链接。有关编译、链接、工程设置的工具栏按钮如图1-21所示。图1-21有关编译、链接、工程设置的工具栏图1-21中,各按钮说明如下:
编译/汇编当前文件:使用A51汇编器或C51编译器对源程序进行编译/汇编处理,得到可浮动地址的目标代码。
建立目标文件:根据编译/汇编得到的目标文件调用有关库模块,链接产生绝对地址的目标文件。如果在上次编译/汇编过后,又对源程序做了修改,应先对源程序进行编译/汇编,然后再链接。重建全部:对工程中的所有文件先进行重新编译/汇编处理,再进行链接以产生目标代码。使用该按钮可以防止由于一些意外情况(如系统日期不正确)造成的源文件与目标代码不一致。
停止建立:在建立目标文件的过程中,可以单击该按钮停止这一工作。点击对项目文件进行编译时,将使用编译链接装载功能对源程序进行编译和语法检查,编译过程中的信息将出现在输出窗口中的Build页中。如果源程序中有语法错误,则会出现错误报告。双击错误报告行,可以定位到错误的源程序的相应行。应注意,若有错误时必须按提示排错。当出现图1-22所示的画面时,说明编译成功,目标文件“xiaodeng.hex”已经生成,结果中还给出了内部RAM使用量(8B)、外部RAM使用量(0B)、目标代码量的大小(68B)。图1-22编译、链接后得到正确的结果在这一过程中,还会生成一些其他文件,产生的目标
文件被用于Keil软件的仿真与调试,此时可进入下一步调试工作。
步骤5:程序固化(芯片烧录)。通过编译链接装载后形成的*.HEX目标文件,可通过编程器烧写到单片机中,然后将烧写好的单片机插到电路板上,一接通电源就可以工作了。步骤6:联机仿真调试。参照图1-23,将单片机仿真器、单片机应用系统、(目标板)及PC机连接起来。图1-23仿真器的连接方法在完成步骤4的基础上,即程序编译装载无误后,就可以进行程序的仿真调试运行了。
在“为目标‘目标1’设置选项”窗口中,点击“调试”菜单,可选择仿真模式,即硬件仿真或软件仿真。在此,因要连接目标板,故选择硬件仿真。点击硬件仿真选项后面的“设置”选项,在此对话框中选择串口和波特率。串口根据所连接的电脑来决定,如图1-24所示。图1-24硬件仿真模式的设置点击“调试”菜单下的“启动/停止调试”,进入调试界面,如图1-25所示。图1-25启动调试界面在调试界面中可选择调试程序的方式。调试程序的方式有三种:全速运行、单步运行、宏单步运行。单步运行与宏单步运行的区别在于前者步入调用的子程序运行,而后者不步入调用的子程序运行。点击图1-26所示的全速运行按钮,即可对程序进行全速运行的调试,这样就可以看到单只LED在闪烁了。图1-26调试界面
1.3任务相关知识
1.3.1微型计算机与单片机
一般来说,微型计算机包括中央处理器(CPU)、存储器(Memory)及输入/输出单元(I/O)三大部分,如图1-27所示。CPU就像是人的大脑,控制着整个系统的运行;存储器则存放系统运行所需要的程序及数据;I/O是微型计算机与外部沟通的通道,其中包括输出口与输入口。图1-27基本微型计算机结构何为单片机呢?将CPU、存储器、I/O口等全部放置在一块集成电路芯片中,这块芯片称为单片(单芯片)机,如图1-28所示。有一些单片机中除了上述部分外,还集成了其他部分如A/D、D/A等。单片机只要再配置几个小器件,如电阻、电容、石英晶体、连接器等,即成为完整的微型计算机。图1-28单片机微控制器结构1.3.2单片机产品分类
(1) 8051系列单片机产品繁多,主流地位已经形成。
MCS-51是Intel公司生产的一个单片机系列产品名称,人们习惯用8051来称呼MCS-51系列单片机。Intel公司把单片机的内核,即8051内核,以出售或互换专利的方式授权给一些公司,如Atmel、Philips、NEC等。
MCS-51单片机有以下两种分类方法:
①按芯片的半导体制造工艺划分,可以分为HMOS工艺型单片机和CHMOS工艺型单片机两类。在产品型号中凡带有字母“C”的,即为CHMOS芯片;不带有字母“C”的,即为HMOS芯片。HMOS芯片的电平与TTL电平兼容,如8051/8751/8031;而CHMOS芯片的电平既与TTL电平兼容,又与CMOS电平兼容,如80C51/87C51/80C31。
②按芯片内不同容量的存储器配置划分,可以分为51子系列单片机和52子系列单片机。52子系列可以说是51子系列的增强型,其最大的特色就是内部存储器容量更大,增加了一个定时器/计数器。51子系列单片机的最后一位数字以“1”作为标志,如8051/8751/8031、80C51/87C51/80C31为基本型。52子系列单片机的最后一位数字以“2”作为标志,如8052/8752/8032、80C52/87C52/80C32为增强型。
(2)非8051系列单片机不断推出,给用户提供了更为广泛的选择空间。
单片机芯片生产商也推出了一些非8051结构的产品,影响比较大的有:Intel公司推出的MCS-96系列16位单片机,Microchip公司推出的PIC系列RISC结构单片机,TI公司推出的MSP430F系列16位低电压、低功耗单片机,Atmel公司推出的AVR系列RISC结构单片机。1.3.38051的基本结构
8051单片机发展至今,虽然有许多厂商各自开发不同的兼容芯片,但其基本结构并没有多大的变动。标准的8051结构如图1-29所示。图1-298051内部基本结构示意图
8051为8位控制器,其中包括:
程序存储器ROM:内部有4KB、外部最多可扩展至
64KB。
数据存储器RAM:内部有128B、外部最多可扩展至
64KB。
4组可位寻址的8位输入/输出端口,即P0、P1、P2及P3。
1个全双工串行口,即UART;两个16位定时器/计数器。
5个中断源,即INT0、INT1、T0、T1、TXD/RXD。1.3.489S51的封装与引脚
PDIP40为40个引脚的双并排针脚式封装,刚好可插在面包板或40脚的底座上。其左上方有记号的为1脚,然后逆时针排序,分别为第2、3、…、40脚。相邻两个脚的间距为2.540mm,器件长度为52.578mm,而两排引脚的间距为15.875mm,器件厚度为4.826mm(不含引脚),特别适合高校和培训机构使用。图1-30所示为89S51单片机实物图(PDIP40封装),图1-31为89S51单片机PDIP40封装引脚图。图1-3089S51单片机实物图图1-3189S51单片机PDIP40封装引脚图
89S51型号的含义如图1-32所示。图1-3289S51型号的含义1.3.5单片机最小应用系统
89S51工作不可或缺的基本连接电路包括三部分,即电源电路、时钟电路和复位电路。
1.电源电路
没有电路不需要电源的,89S51电路也是如此。首先将第40脚接VCC,也就是 +5 V电源,第20脚接地GND。
2.时钟电路
8051内部已具备振荡电路,只要在GND引脚上方的两个引脚(第18、19脚)连接简单的石英振荡晶体(Crystal,简称晶振),就构成了自激振荡器并在单片机内部产生时钟脉冲信号,如图1-33所示。图中电容器C1和C2的作用是稳定频率和快速起振,电容值为5~30pF,典型值为30pF。89S51的工作频率为0~24MHz,而华邦电子(Winbond)提供了40MHz的版本。图1-33使用内部振荡器的时钟电路如果非得自行设计一个电路,或者要求多片单片机同时工作,可采用把外部已有的时钟信号引入到单片机内来实现,如图1-34所示。图1-34使用外部时钟脉冲产生电路
3.复位电路
单片机在启动运行前必须进行复位操作,使CPU和系统中其他部件都处于一个确定的初始状态,单片机从这个状态开始工作。89S51的复位引脚(RST)是第9脚,当此引脚连接高电平超过两个机器周期(1个机器周期包含12个时钟脉冲,在“时序分析”环节会再学习)时,即可产生复位操作。复位操作有两种基本形式,一种是上电复位(见图1-35(a)),另一种是上电与按键均有效的复位(如图1-35(b)所示)。图1-35复位操作的两种基本形式接上电源的瞬间,电容C上没有电荷,相当于短路,所以第9脚直接连接到VCC,即89S51执行复位操作。然后电源通过电阻R对电容C充电,电容上的电压逐渐增加,而第9脚上的电压逐渐下降。当第9脚上的电压降至低电平时,89S51即恢复正常状态,称之为上电复位(PowerOnReset)。在此使用10kΩ电阻、10μF电容,其时间常数远大于1μs,所以第9脚上的电压可保持2μs以上的高电平,足以使系统复位。当然,只要时间常数大于2μs即可,而不一定非要使用10kΩ电阻和10μF电容。通常还会在电容两端并接一个按钮开关,如图1-35(b)所示,此按钮开关就是一个手动的复位开关(强制复位)。单片机实质上是一个芯片。图1-36所示为最小的单片机应用系统。在实际应用中,通常很难将单片机直接和被控对象进行电气连接,必须外加各种扩展接口电路、外部设备、被控对象等硬件和软件,才能构成一个单片机应用系统,如图1-37所示。单片机应用系统的设计人员必须从硬件和软件两个角度来深入了解单片机,并能够将二者有机结合起来,才能形成具有特定功能的应用系统或整机产品。图1-36最小的单片机应用系统
图1-37单片机应用系统1.3.6单片机的特点与应用
1.单片机的特点
(1)有优异的性能价格比。
(2)集成度高、体积小、可靠性高。单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。
(3)控制功能强。单片机的逻辑控制功能及运行速度均高于同一档次的微机。
(4)低功耗、低电压,是一种便于生产的便携式产品。
(5)外部总线增加了IC(Inter-IntegratedCircuit)及SPI
(Serial
Peripheral
Interface)等串行总线方式,进一步缩小了体积,简化了结构。
(6)单片机的系统扩展和系统配置较典型、规范,容易构成各种规模的应用系统。
2.单片机的应用
(1)在智能化家用电器中的应用。洗衣机、空调、电视机、录像机、微波炉、电冰箱、电饭煲、电子玩具等家用电器产品配上单片机后,提高了智能化程度,增加了功能,深受人们喜爱。
(2)在智能仪器、仪表中的应用。在结合不同类型的传感器后,单片机可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度和压力等物理量的测量。由于单片机具有超小型化的特点,并且有无可比拟的高性价比,从而为仪器、仪表的智能化提供了可能。
(3)在实时控制中的应用。在工厂测控、航空航天、机器人等方面都可以用单片机作为控制器。单片机可使系统保持在最佳工作状态,从而大大提高了系统的工作效率和产品质量。
(4)在商业营销设备中的应用。在商业营销系统中已广泛使用的电子秤、收款机、条形码阅读器、IC卡刷卡机、出租车计价器,以及仓储安全监测系统、商场保安系统、空气调节系统、冷冻保险系统等都采用了单片机进行控制。
(5)在汽车电子产品中的应用。现代汽车的集中显示系统、动力监测控制系统、自动驾驶系统、通信系统和运行监视器等都离不开单片机。1.3.78051应用系统的开发制作过程与工具
1. 8051应用系统的开发制作过程
当完成软件设计后,即可应用在线仿真器(In-CircuitEmulator,ICE)加载该可执行程序,然后在目标板上进行在线仿真。若硬、软件设计无误,则可利用IC烧录器,将其可执行码烧录到89S51,最后将该89S51插入目标板,即完成设计。8051应用系统开发制作过程如图1-38所示。图1-388051应用系统开发制作过程
2. KeilμVision3开发环境
用于8051单片机的汇编软件有早期的A51。Keil公司的KeilμVision3整合式开发环境是一套相当好用的8051开发软件。KeilμVision3提供了包括C编译器、宏汇编、链接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,我们可从建立设计项目(Project)开始,进而编辑源程序(C语言或汇编语言)、编译、组译、链接,再进行调试。
3.编程器的使用
第1步:
将被烧写的单片机芯片按照正确的方向插入烧写卡座(芯片缺口对准卡座的扳手)。
第2步:将配套的电缆分别插入计算机的串口与编程器的通信口。
第3步:打开编程器的电源。
第4步:运行编程器软件,程序会自动监测通信端口。图1-39是多功能编程器的显示界面。第5步:选择芯片。以AT89C52芯片为例,如图1-39
所示。
第6步:调入烧录文件,即调入提前准备好的被烧写文件(hex文件或bin文件)。
第7步:开始烧写。编程器开始烧写程序到芯片中,烧写结束后编程器会提示烧写完成,这时关闭编程器电源,取下芯片即可。图1-39多功能编程器的显示界面
4. 89S51的在线下载功能
Atmel公司提供的在线下载功能(In-SystemProgrammable,ISP)可让用户通过个人计算机的USB端口或串行口(RS232C)直接将可执行文件下载到89S51。如此一来,我们几乎可以跟IC编程器说再见了,甚至也不一定需要昂贵的在线仿真器!这样不但节省了不少开发工具与设备,而且非常适合初学者使用。任务2进位指示灯控制2.1任务内容与分析
2.2任务实施2.3任务相关知识
2.1任务内容与分析
1.任务内容
在单片机的实际应用系统中,经常涉及数据的运算,而进位标志位则用于标识算术运算过程是否产生了进位。任务2以进位指示灯控制为例,介绍一般传送类指令、算术运算类指令、伪指令及顺序结构程序等内容。
2.任务分析
如做一道简单的加法运算“98 + 250”,通过发光二极管指示有无进位。若有进位,则发光二极管闪烁;若无进位,则发光二极管熄灭。图2-1是进位指示灯控制电路图。图2-1是进位指示灯控制电路图。
图2-1进位指示灯控制电路图在日常的十进制算法中,进位是指个位满十,在十位中加一,十位满十,在百位中加一,百位满十,在千位中加一……而对8位单片机来说,进位则是指操作结果在最高位D7位有进位(加法)或者借位(减法),则该位为1,否则为0。加法运算“98+250”是否有进位呢?由于8位单片机一次只能做8位的数学运算,8位运算的范围只有0~255,而“98+250”的结果为348,已超出255,所以有进位。那单片机又是如何完成加法运算“98 + 250”呢?其实单片机有代替人脑运算功能的部件,即“运算器”;有能起到纸和笔作用的记忆器件,即“存储器”,它能记住为使单片机自动进行运算而编制的各种命令及运算过程中的数据;还有能代替人控制功能的“控制器”,可根据事先给定的命令发出各种控制信号,使整个计算过程能一步步地进行。
2.2任务实施
下面一起实现进位指示灯控制。
步骤1:先简单点,不需硬件,通过在Keil仿真软件查看PSW寄存器的CY位状态来判断是否有进位。若CY位为1,则有进位;若CY位为0,则无进位。源程序如下:
;*****************加法运算程序****************
;程序名:进位指示灯控制程序ARITH.A
;程序功能:加法运算
ORG0000H ;程序从地址0000H开始存放
AJMPSTART ;低端地址单元留给中断处理用
ORG0030H
START: CLRC ;进位标志清0
MOVA,#98
ADDA,#250 ;加法运算
MOVR3,A ;保存结果
END参考“任务1”建立工程,写入源程序,并编译源程序,但在此不用连接目标板,所以在“为目标‘目标1’设置选项”中点击“调试”菜单,在此菜单中选择“软件仿真”,如图2-2所示。图2-2选择使用软件仿真器点击“调试”下的“启动/停止调试”进入调试界面,如图
2-3所示。在调试界面中可以运行程序,运行程序时可以观看常用寄存器的状态变化,如图2-4所示。图2-3调试界面
图2-4常用寄存器状态若要查看一些内部数据,则点击“视图/存储器窗口”,如图2-5所示。图2-5内部数据界面在此地址框中,输入不同的指令查看内部数据。
c:0X地址——显示程序存储区中数据。
x:0X地址——显示数据存储器区中数据。
d:0X地址——显示CPU内部存储区中数据。
步骤2:设计硬件电路,由发光二极管指示是否进位,进位指示灯控制电路图如图2-6所示。图2-6进位指示灯控制电路图程序流程图如图2-7所示。图2-7进位指示灯控制程序流程图步骤3:根据程序流程图,编写源程序。具体如下:
;***********进位指示灯控制******************
;程序名:进位指示灯控制程序ARC.A
;程序功能:指示加法运算是否有进位
ORG0000H ;程序从地址0000H开始存放
AJMPSTART ;低端地址单元留给中断处理用
ORG0030H
START: CLRC
MOVA,#98
ADDA,#250
LOOP: JCYJW ;判断是否有进位
SETBP1.0 ; LED灯熄灭
AJMPLOOP ;继续判断
YJW:SETBP1.0 ; LED灯闪烁
ACALLDELAY_50MS
CLRP1.0
ACALLDELAY_50MS
AJMPLOOP ;继续判断
;********************延时子程序******************
DELAY_50MS: MOVR7,#200
DEL2: MOVR6,#123
DEL1: NOP
DJNZR6,DEL1
DJNZR7,DEL2
RET
END
2.3任务相关知识
2.3.1单片机中常用的基本术语
1.数制
计算机由逻辑电路组成。逻辑电路通常只有两个状态,比如开关的通与断,电机的启与停,这两种状态正好可以用“1”和“0”表示。二进制数就是用“0”和“1”两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”。下面看一个例子,用于照明的灯有两种状态,即“亮”和“灭”。如果规定灯亮为“1”,灭为“0”,那么两盏灯的亮和灭状态可以有“灭灭”、“灭亮”、“亮灭”和“亮亮”四种状态,即“00”、“01”、“10”和“11”。而二进制数00、01、10、11相当于十进制数的0、1、2、3,故两盏灯共有22 = 4种状态。因此,灯的状态可以用数学方法来描述;反之,数值也可以用电子元件的不同状态组合来表示。如果表示八盏灯的状态,就要用8位二进制数表示;如果表示十六盏灯的状态,就要用16位二进制数表示。这样就存在用二进制数书写起来较长的问题,而十六进制可以解决该问题。在编写单片机程序时,用十六进制数更为方便简洁。十六进制数用0,1,…,9和A~F来表示。它的基数为16,进位规则是“逢十六进一”,借位规则是“借一当十六”。
4位二进制数可用1位十六进制数表示,如00111010B可用3AH表示。为了区分数的不同进制,可在数的结尾以一个字母标识。十进制(Decimal)书写时结尾用字母D(或不带字母),如89D或89;二进制(Binary)结尾用字母B,如1100101B;十六进制(Hexadecimal)结尾用字母H,如1FH。实际使用中多采用十进制或十六进制数,数据送入机器后由机器转换成二进制数,在数字系统进行运算,运算结束后再将二进制数转换为十进制数或十六进制数供人们阅读。
部分自然数的三种常用进制表示如表2-1所示。
2.位
一盏灯的亮与灭,可以分别用0和1来代表。实际上,这就是一个二进制位,一盏灯就是一“位”。当然这只是一种帮助记忆的说法。位(Bit)表示一个二进制数码0或1,是计算机存储处理信息的最基本单位。
3.字节
相邻的8位二进制数构成一个字节(Byte),用B表示。一个字节可以表示28(即256)个不同的值(0~255)。字节中的位号从右至左依次为D0~D7。目前,计算机上多使用《美国国家信息交换标准代码》——ASCII编码(由美国国家标准委员会制定),如字符“A”的二进制编码是“0100
0001”,即41H或65D;“#”的二进制编码是“0010
0011”,即23H或35D。
字节是一个比较小的单位,常用的还有KB和MB等,它们的关系是:
1KB=1024B,1MB=1024KB=1024×1024B
4.字和字长
16位二进制数构成一个字(Word)。字可以表示216(即65536)个不同的值(0~65535)。字节中的位号从右至左依次为D0~D15,通常称16位是一个字,32位是一个双字,64位是两个双字。
CPU在单位时间(同一时间)内能一次处理的二进制数的位数称为字长。字长的长度是不固定的,对于不同的CPU,字长的长度也不一样。8位的CPU一次只能处理1个字节,而32位的CPU一次就能处理4个字节,64位的CPU一次可以处理8个字节。一般而言,字长越长,CPU的性能越好。8051单片机是8位机,即指其字长是8位,其内部的运算器等都是8位的,每次参加运算的二进制位只能是8位。2.3.28051存储器的基本结构
1.程序存储器
ROM(Read-OnlyMemory)是只读内存的简称,是一种只能读出事先所存数据的固态半导体存储器。ROM所存数据一般是装入整机前事先写好的,整机工作过程中只能读出,而不像随机存储器那样能快速地、方便地加以改写。ROM所存数据稳定,断电后所存数据也不会改变,因而常用于存储各种固定程序和数据。按芯片内的ROM分,MCS-51系列可分为无ROM型(8031/8032)、MaskROM型(8051/8052)、EPROM型(8751/8752)、EEPROM型(89C51/89C52、89S51/89S52)。MaskROM型直接将程序放入芯片中的程序存储器,不能烧录。这种类型的单片机芯片必须制作其独有的光罩(Mask),必须批量生产。如键盘里所用的单片机8048就是MaskROM型单片机。EPROM型单片机需用紫外光长时间照射才能清除ROM里的数据,使用很不方便。
EEPROM型单片机可以将程序“加载”到芯片中的程序存储器,所不同的是89C51/89C52用5 V及12V电压烧录与清除ROM里的数据,而89S51/89S52只要5V电压即可烧录与清除。这种芯片可以重复写入与清除成千上万次!目前,又开发出一种新型的、存储单元结构同EEPROM型相似的快闪存储器,其集成度高、功耗低、体积小,又能在线快速擦除,因而获得飞速发展。对单片机进行编程时,一般先在计算机中用软件编写程序,再通过烧录器(编程器)将编好的程序写入程序存储器ROM中。8051程序存储器结构如图2-8所示。当CPU复位后,单片机系统将从程序存储器0000H单元开始取指令并执行程序。根据脚外接电平的不同,选择使用内部ROM还是外部ROM。图2-88051程序存储器结构
(1)当= 0(接地)时,单片机只能使用外部程序存储器。
(2)当= 1(接+5V电源)时,单片机先使用内部程序存储器,容量不够时自动使用外部程序存储器。对于初学者而言,4KB的程序存储器已是绰绰有余。程序存储器0003H~002BH单元被固定地用作中断服务程序入口地址单元,详见“任务6”。
2.数据存储器
8051数据存储器结构如图2-9所示。8051的数据存储器除内部RAM外,还可扩展外部RAM,这两部分的RAM可以并存。不过,访问时采用的指令不一样,如访问内部RAM(后面称之为片内RAM),采用MOV指令;而访问外部RAM(后面称之为片外RAM),则使用MOVX指令。图2-98051数据存储器结构最常用的是片内RAM,其结构如图2-10所示。从图中可看出,片内RAM分为四个区:工作寄存器区、位寻址区、通用数据区和特殊功能寄存器(SFR)区。图2-10片内RAM结构
00H~7FH之间的128B为可直接寻址或间接寻址的存储器,该区又可分为三部分,说明如下:
(1)工作寄存器区(00H~1FH的32个地址空间)。00H~07H为寄存器组0(即RB0),08H~0FH为寄存器组1(即RB1),10H~17H为寄存器组2(即RB2),18H~1FH为寄存器组3(即RB3)。每个寄存器组都包含R0,R1,…,R7八个寄存器,而任何一个时间只能使用其中一个寄存器组。寄存器组的切换可由特殊功能寄存器的程序状态字寄存器(ProgramStatusWord,PSW)中的RS1与RS0来决定,如表2-2所示。当CPU复位后,系统的堆栈指针(SP)指向07H地址,故数据存入堆栈时,将从08H开始,也就是寄存器组1中的R0地址。为了避免冲突或不必要的错误,通常会把堆栈指针移到30H以后的地址。
(2)可位寻址区(20H~2FH的16个地址空间)。通常访问存储器以字节为单位,可位寻址区还可以指定访问某个位。如表2-3所示,可位寻址区有128个位,可以直接指定为位0到位127。如果要把20H存储器地址的bit5设为1,则可以使用下列指令:
SETB20H.5或SETB05
同理,若要把25H存储器地址的bit2清0,则可以使用下列指令:
CLR25H.2或CLR42
(3)通用RAM区(30H~7FH的80个地址空间)。通常RAM区可以作为数据缓冲器使用,用来存放工作时用到的一些数据,使用非常频繁,但只能以字节为单位存取。另外,为了确保数据的安全与程序执行的正确,在程序之中使用了PUSH、POP命令,最好能把堆栈指针改至本区。
(4)特殊功能寄存器(80H~FFH的128个地址空间)。特殊功能寄存器(SpecialFunctionRegister,SFR)也称为专用寄存器,反映8051单片机的运行状态。很多时候也通过特殊功能寄存器来定义和控制程序的执行。
8051有21个特殊功能寄存器,它们被离散地分布在内部RAM的80H~FFH地址中,这些寄存器的功能已做了专门的规定,用户不能修改其结构。字节地址能被8整除的单元是具有位地址的寄存器。表2-4是特殊功能寄存器分布一览表,有具体位符号的是可以位寻址的SFR,如P0、P1、P2、P3、SCON等;反之,如SP、DPL、DPH、TH0、TL0等只能以字节访问。2.3.3有关指令与程序的基本概念
1.汇编指令的格式
所有这些取数、送数、相加、存数等都是一种操作,把要求执行的各种操作用命令的形式写下来,这就是指令。但是怎样才能辨别和执行这些指令呢?这是由设计人员设计的指令系统所决定的。一条指令对应一种基本操作。单片机所能执行的全部指令,就是该单片机的指令系统。不同种类的单片机,其指令系统亦不同。8051单片机具有111条汇编指令,这些汇编指令格式如下:
[标号:]操作码助记符[目的操作数][,源操作数][;注释]
其中:
[
]:括号中的内容是可选项,其包含的内容可有可无。标号:用于表示该指令所在的地址。标号由以字母开始的1~8个字符或数字串组成,以“:”结尾。不能使用该汇编语言已定义了的符号作为标号,如指令助记符、寄存器符号名称等。
操作码助记符:由英文缩写组成的字符串,它规定了CPU应当执行何种操作。在一条指令中这部分一定存在。操作数部分:规定了参与指令操作的数据、数据存放的存储单元地址或寄存器等。有些指令没有操作数,有些指令有1个、两个或3个操作数。如果有1个以上的操作数,各操作数之间用“,”分开。
注释:编写程序时为该条指令作的说明,便于阅读和理解程序。
例如:
LOOP:MOVA,#12H ;将立即数12H送入累加器A
2.程序设计语言
(1)机器语言。计算机能直接识别的语言只有机器语言,即由0和1构成的代码。如果直接使用0和1二进制数来编写程序,那将十分不便,非常难于记忆和识别,所以通常人们编程时不采用机器语言。
(2)汇编语言。其实质和机器语言是相同的,都是直接对硬件操作,只不过指令采用了英文缩写的助记符,更容易识别和记忆。
下面分别是用机器指令和汇编指令编写的程序:
机器指令 汇编指令
7402 MOVA,#02H
2117 ADDA,#17H写指令使用汇编格式,而计算机只懂机器码格式,因此要将汇编格式的指令转换为机器码格式,这种转换有两种方法:手工汇编和机器汇编。手工汇编实际上就是查表,因为这两种方法仅仅是格式不同,实际是一一对应的,查一张表格就行了。用计算机软件来替代手工查表,由计算机软件完成从汇编程序到机器码的转换,称之为机器汇编。
(3)高级语言:它是目前绝大多数编程者的选择。和汇编语言相比,它不但将许多相关的机器指令合成为单条指令,而且去掉了与具体操作有关,但与完成工作无关的细节,如使用堆栈、寄存器等,这样就大大简化了程序中的指令。由于省略了很多细节,所以编程者也不需要具备太多的专业知识。高级语言主要是相对于汇编语言而言,并不是特指某一种具体的语言,而是包括了很多编程语言,如BASIC、C语言等,这些语言的语法、命令格式等都各不相同。目前市场上主流单片机均有C语言开发环境。
3.寻址方式
所谓寻址方式,就是单片机指令中提供的操作数形式,也就是寻找操作数或操作数所在地址的方式。在51系列单片机中,存放数据的存储器空间有4种:内部RAM、SFR、外部RAM和ROM。其中,内部RAM和SFR统一编址,外部RAM和ROM是分开编址的。对于两个操作数指令,源操作数有寻址方式,目的操作数也有寻址方式。若不特别声明,后面提到的寻址方式均指源操作数的寻址方式。
8051指令系统的寻址方式有7种:4种基本寻址方式,即立即数寻址、直接寻址、寄存器寻址和寄存器间接寻址;3种扩展寻址方式,即变址寻址、相对寻址和位寻址。扩展寻址方式将在后面具体指令中介绍。
(1)立即数寻址。指令中直接给出操作数的寻址方式称为立即数寻址。在51系列单片机指令系统中,立即数用前面加“#”号的8位数#data(如#35H)表示或16位数#data16(如#2000H)表示。例如:
MOVA,#35 ;将数据35H传送到累加器A
MOVDPTR,#2000H ;将数据2000H传送到DPTR
(2)直接寻址。指令中直接给出操作数地址(Direct)的寻址方式称为直接寻址。寻址对象为:内部RAM,在指令中以直接地址表示;SFR,在指令中用寄存器名称表示。例如:
MOVA,35H;将片内RAM中35H的内容传送到累加器A
(3)寄存器寻址。通用寄存器包括A、B、DPTR、R0~R7。其中B寄存器仅在乘法、除法指令中为寄存器寻址,在其他指令中为直接寻址。A寄存器可以寄存器寻址,也可以直接寻址(此时写作ACC)。直接寻址和寄存器寻址的差别在于:直接寻址是操作数所在的字节地址(占1B),寄存器寻址是寄存器编码出现在指令码中。例如:
MOVA,R0 ;将寄存器R0的内容传送到累加器A
(4)寄存器间接寻址。以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址。能够进行寄存器间接寻址的寄存器有:R0、R1、DPTR,需在前面加@表示为@R0、@R1、@DPTR。例如:
MOVA,@R0
;将R0的内容作为地址,到这个地址中
取数,然后送到A寄存器间接寻址的存储空间包括内部RAM和外部RAM。由于内部RAM共有128B,因此用R0或R1可间接寻址整个空间。而外部RAM最大可达64KB,仅R0或R1无法寻址整个空间,为此需要由P2端口提供外部RAM高8位地址,由R0或R1提供低8位地址,由此共同寻址64KB范围。也可用16位的DPTR寄存器间接寻址64KB存储空间。【例2-1】请将片内RAM的从30H单元开始的20个单元内容依次送入累加器A中。
解要从30H单元取数,用“MOVA,30H”指令,下一个数在31H单元中,用“MOVA,31H”指令。因此,取20个数,就要用20条指令才能写完,可见用这种方法过于繁琐,而用寄存器间接寻址就会简便很多。程序如下:
MOVR7,#20 ;设置循环初始值
MOVR0,#30H ;地址指针指向30H单元
LOOP: MOVA,@0 ;传送数据
INCR0 ;地址指针加1,指向下一个单元
DJNZR7,LOOP ;判断是否结束,没有结束,
继续循环
4.汇编指令及其注释中常用的符号
汇编指令及其注释中常用的符号及其含义如表2-5所示。2.3.4数据传送类指令
数据传送类指令是指在指令系统中最基本的、编程时使用最频繁的一类指令。数据传送类指令可分为如下两类:
(1)一般传送指令:采用MOV操作符。包括:
8位传送:
MOVA,#40H
16位传送:
MOVDPTR,#1234H
(2)特殊传送指令:采用非MOV操作符。包括:MOVC、MOVX、PUSH、POP、XCH、XCHD及SWAP。其中,PUSH与POP、MOVC、MOVX将分别安排在“任务5”、“任务8”、“任务11”中介绍。
1.一般传送指令
一般传送指令采用的指令助记符为MOV(Move),不影响标志寄存器PSW的状态。其格式为:
MOV[目的操作数],[源操作数]
其功能是将源操作数传送到目的操作数,而源操作数的内容保持不变,主要用于对片内RAM的操作。
1) 8位数据传送
8位数据传送指令属于字节传送,源操作数可以是A、Rn、direct、@Ri、#data五种形式,为了便于记忆,列举如下:
(1)以A为目的操作数:【例2-2】(R0) = 31H,(31H) = 40H,分别执行下列命令后,结果如注释所示。
MOVA,R0 ;(A)=31H
MOVA,@R0 ;(A)=40H
MOVA,31H ;(A)=40H
MOVA,#1FH ;(A)=1FH
(2)以Rn为目的操作数:【例2-3】(A) = 33H,(23H) = 49H,分别执行下列命令后,结果如注释所示。
MOVR7,A ;(R7)=33H
MOVR6,#27H ;(R6)=27H
MOVR0,23H ;(R0)=49H
(3)以direct为目的操作数:【例2-4】(A) = 30H,(R0) = 22H,(22H) = 56H,分别执行下列命令后,结果如注释所示。
MOV50H,A ;(50H)=30H
MOV50H,R0 ;(50H)=22H
MOV50H,@R0 ;(50H)=56H
MOV50H,22H ;(50H)=56H
MOV50H,#23H ;(50H)=23H
(4)以@Ri为目的操作数:【例2-5】(20H)=47H,(A)=34H,(R0)=45H,分别执行下列命令后,结果如注释所示。
MOV@R0,A ;(45H)=34H
MOV@R0,20H ;(45H)=47H
2) 16位数据传送指令
16位数据传送指令为
MOVDPTR,#data16 ;DPTR←data16
【例2-6】请将16位数1234H送入DPTR中。
解可以用一条指令:
MOVDPTR,#1234H ;(DPH)=12H,(DPL)=34H也可以用两条指令:
MOVDPH,#12H
;DPH作为高8位,(DPH)=12H
MOVDPL,#34H
;DPL作为低8位,(DPL)=34H
从结构上看DPTR是由特殊功能寄存器DPH和DPL组成的,DPH为高8位,DPL为低8位。这样DPTR既可以作为一个16位的寄存器来处理,也可以作为两个独立的8位寄存器来使用。
2.特殊传送指令
(1)字节交换指令:【例2-7】设(A)=23H,(R0)=45H,(23H)=36H,(45H)=17H,分别执行下列命令后,结果如注释所示。
XCHA,R0
;(A)=45H,
(R0)=23H
XCHA,45H
;(A)=17H,(45H)=17H
XCHA,@R0 ;(A)=17H,(45H)=23H
XCHA,@R0 ;(A)=27H,(45H)=13H
SWAPA
;(A)=32H2.3.5算术运算类指令
8051具有强大的加、减、乘、除四则算术运算指令。
算术运算的结果将对程序状态字寄存器(PSW)中的CY、AC、OV位产生影响,只有加1和减1操作不影响这些标志位。
程序状态字寄存器(PSW)用来保存指令执行结果的标志,供程序查询和判别。PSW是特殊功能寄存器中的一个,其标志位如表2-6所示。
CY:进位标志。如果操作结果在最高位D7位有进位输出(加法时)或借位输入(减法时),置位CY,否则清“0”。
AC:辅助进位(半进位)标志。如果操作结果的低4位有进位(加法时)或向高4位借位(减法时),置位AC,否则清“0”。AC主要用于二-十进制数加法调整。
F0:用户标志位。F0可作为软件标志,其作用和内部RAM位寻址区的各位相似。
RS1、RS0:指示当前使用的工作寄存器区。
OV:溢出标志。有溢出时OV=1,否则OV=0。
--:保留位。通常,对它的操作无效。
P:累加器A的奇偶标志位。当累加器ACC中“1”的个数为奇数时,P=1;若为偶数,P=0。
1.加法指令
(1)不带进位的加法指令:这四条指令的功能是将A中的值与其后面的变量相加,最终结果送回到A中。这些指令的执行将影响标志位AC、CY、OV、P。
当和的第3位有进位时,将标志位AC置1;否则为0。
当和的第7位有进位时,将标志位CY置1;否则为0。对于无符号数,进位标志位CY=1,表示溢出;CY=0,表示无溢出。带符号数运算的溢出取决于第6、7位中有一位产生进位,而另一位不产生进位,溢出标志位OV置“1”,否则被清“0”。OV=1表示两个正数相加,和变为负数;或两个负数相加,和变为正数的错误结果。【例2-8】若(A)=84H,(30H)=8DH,执行指令“ADDA,30H”之后,得即(A)=11H,(CY)=1,(AC)=1,(OV)=1(D7有进位,D6无进位),(P)=0。
(2)带进位的加法指令:
这四条指令的功能是将A中的值和其后面的值相加,并且加上当前CY标志位的值,结果存于累加器A中。其主要用于多字节加法中除最低字节外其余字节的加法。
(3)加1指令:
INC指令将指定的内容加1,结果仍存放于原A或原单元中。如原值为0FFH,加1运算后将变成00H,运算结果不影响标志位。【例2-9】若(31H)=22H,(DPTR)=1234H,则执行下面的指令:
INC31H
INCDPTR
结果为:(31H)=23H,(DPTR)=1235H。
(4)十进制调整指令。这样,当用单片机进行计算时,必须先把十进制数转换成二进制数,然后再进行二进制数的计算,计算结果又转换为十进制数输出。为了便于十进制数的计算,提供了一组十进制数调整指令。这组指令在二进制计算的基础上,给予十进制数调整后可以直接得到十进制的结果。
DAA ;调整A的内容为正确的BCD码若累加器A中的低4位数出现了非压缩型BCD码(1010~1111)或低4位产生进位(AC=1时),则会在低4位加6调整,以产生低4位正确的BCD结果。
若累加器A中的高4位数出现了非压缩型BCD码(1010~1111)或高4位产生进位(CY=1时),则会在高4位加6调整,以产生高4位正确的BCD结果。【例2-10】请分析下列指令执行情况:
MOVR5,#81H
MOVA,#91H
ADDA,R5
DAA
解首先81H+91H=112H,此时(AC)=0,(CY)=1,(A)=12H,所以DAA后(A)=12H+60H=72H,(AC)=0,(CY)=1,结果为172H,当然运算应该理解为81D+91D=
172D。这样,十进制调整前是二进制运算,调整后则为十进制运算。
2.减法指令
(1)减法指令:带借位减法指令SUBB,从累加器A中减去进位标志位CY和指定的变量,结果在累加器A中,若第7位有借位,则CY置1,否则CY清0;若第3位有借位,则置位辅助进位标志AC,否则清0。若第7和第6位中有一位需借位,而另一位不借位,则置位溢出标志OV。溢出位OV用于带符号的整数减法,表示(OV=1)一个正数减负数结果为负数,或一个负数减正数结果为正数的错误结果。
(2)减1指令:
DEC指令把所指的寄存器内容减1,结果仍送回原寄存器。若原寄存器的内容为00H,则减1后将为FFH,运算结果不影响任何标志位。
3.乘法指令
MULAB
;累加器A与寄存器B相乘
本指令的功能是将A和B中的两个8位无符号数相乘。两数相乘结果一般比较大,因此,最终结果用1个16位数来表达,其中高8位放在B中,低8位放在A中。在乘积大于FFFFH(65535)时,OV置1(溢出),不然OV为0,而CY总是0。【例2-11】若(A)=4EH,(B)=5DH,执行指令MULAB后,乘积是1C56H,所以在B中放的是1CH,而A中放的则是56H。
4.除法指令
DIVAB ;累加器A除以寄存器B本指令的功能是将A中的8位无符号数除以B中的8位无符号数(A/B)。除法一般会出现小数,但单片机中无法直接表达小数,它用的是小学生还没接触到小数时所用的商和余数的概念,如13/5,其商是2,余数是3。经过运算后,商放在A中,余数放在B中。CY和OV都是0。如果在做除法前B中的值是00H,也就是除数为0,那么OV=1。2.3.6伪指令
1.起始地址设定伪指令ORG
格式:
ORG16位地址
举例:任务1闪烁灯控制程序为
ORG0000H ;程序从地址0000H开始存放
AJMPSTART
;低端地址单元留给中断处理用
ORG0030H
START:SETBP1.0;点亮LED单片机的复位操作使单片机进入初始化状态,其中包括使程序计数器PC=0000H,这表明程序从0000H地址单元开始执行。但是0003H~002BH地址单元一般留给中断处理用,所以在0000H地址单元存放一条跳转指令,将主程序在002BH地址单元以后开始存放。上面的程序是从0030H地址单元存放的,即SETBP1.0是存放在0030H地址单元。
2.汇编结束伪命令END
格式:
END
作用:通知汇编程序结束汇编。在END之后的汇编语言指令均不予以汇编。
3.赋值伪指令EQU
格式:
标号EQU操作数
作用:将操作数赋值于标号,使两边的两个量等值。
4.位地址赋值伪指令BIT
格式:
字符名BIT位地址
作用:将位地址赋予字符名,经赋值后就可用指令中BIT左面的字符名来代替BIT右边所指出的位。
举例:
LED
BIT P1.0
BUZZER
BITP3.7
5.数据地址赋值伪指令DATA
格式:
字符名称DATA表达式
作用:将表达式指定的数据地址赋予规定的字符名称。
6.字节数据定义伪指令DB
格式:
[标号:]DB字节数据表
作用:用于存放数据表格,从标号指定的地址单元开始,在程序存储器中定义字节数据。
举例:
ORG0100H
TAB: DB3FH,06H,5BH,4FH
则ROM的数据存放格式如图2-11所示。图2-11ROM的数据存放格式
7.字数据定义伪指令DW
格式:
[标号:]DW字或字串
作用:用于定义字数据(将字数据存入ROM)。
举例:
ORG0100H
TAB: DB324AH,3CH
汇编后,(0100H)=32H,(0101H)=4AH,(0102H)=00H,(0103H)=3CH。
8.定义存储空间伪指令DS
格式:
DS表达式
作用:从定义地址开始保留DS之后表达式的值所规定的存储单元,以备后用。
举例:ORG1000H
DS08H
DB30H,8AH
汇编以后,从1000H保留8个单元备用,然后从1008H开始给内存赋值,即(1008H)=30H,(1009H)=8AH。2.3.7程序设计基本步骤
1.完成任务的分析
首先,要对单片机应用系统要完成的任务进行深入的分析,明确系统的设计任务、功能要求和技术指标。其次,要对系统的硬件资源和工作环境进行分析。这些都是单片机应用系统程序设计的基础和条件。
2.确定算法
算法是解决具体问题的方法,简单地说就是计算机能够实现的有限的解题步骤。我们知道,计算机只能进行最基本的算术运算和逻辑运算,要完成较为复杂的运算和控制操作,必须选择合适的算法,这是正确编程的基础。若任务涉及某种运算,则必须写出适合程序设计的正确算法;若任务要完成的功能未涉及运算,也要写出编程思想。
3.设计流程
将提出的算法或编程思想用流程图的方式画出来。所谓流程图,就是用各种符号、图形、箭头把程序的流向及过程用图形表示出来。程序流程图常用符号如图2-12所示。图2-12程序流程图常用符号
4.根据流程图编写程序
根据程序流程图编写程序,若是用汇编语言编写的程序,之后要进行汇编,即要把编写的源程序汇编成机器语言,这种机器语言就是十六进制文件,后缀名为*.HEX文件。以前,还有把它转换成二进制文件,即后缀名为*.BIN文件。不过,现在的编程器都能直接读入十六进制文件,就不需要转换了。最后用编程器把程序写入单片机。
5.程序的校验
程序编写好以后,必须经过书面检查和上机调试,以便说明程序是否正确。
6.编写说明文件
一个完整的软件应有相应的说明文件。这不仅便于用户使用,也便于对程序的维护和扩充。2.3.8基本程序结构1——顺序结构
【例2-12】在带进位加法指令中提到“1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科学应对传染病构建健康堡垒小学健康教育班会课件
- 客户场景产品使用指导书
- 专业能力与技能水平考核表
- 科学探索创新思维小学主题班会课件
- IT系统维护响应时间考核表
- 勇敢与智慧的旅行:探险主题班会课件
- 规范会议议程编制标准通知函6篇
- 小学主题班会课件:走进健康生活方式
- 市场专员活动策划执行考核KPI绩效评定表
- 确认办公家具采购价格函(5篇)
- 2026江西吉安市吉水县城控人力资源服务有限公司招聘劳务外包1人备考题库(一)有完整答案详解
- 给排水及采暖工程作业活动风险分级管控清单-双重预防
- 邮政企业精英人才和骨干人才试题及答案
- 2026年银行系统运维岗招聘笔试模拟题含答案
- DB11∕T 2398-2025 水利工程巡视检查作业规范
- 外研版(2024)八年级上册英语期末复习:各单元考点汇编
- 中国高考评价体系全面解析
- 2025年辽北技师学院高中考试题及答案
- 税务风险培训课件
- 电气维修技术介绍
- 2025年高纯金属铬行业研究报告及未来行业发展趋势预测
评论
0/150
提交评论