版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机原理与接口技术教育科学“十五〞国家规划课题研究成果〔第2版〕主编李全利
2023/11/301课程特点:实践性强,旨在应用硬件、软件结合紧密学习方法:课前预习,课后复习软硬兼顾,上机实践广阅书刊,用好网络2023/11/302第1章绪论电子计算机概述1.1单片机的开展过程及产品近况1.2单片机的特点及应用领域1.3单片机应用系统开发过程1.4µVision集成开发环境简介1.52023/11/3031.1电子计算机概述1.1.1电子计算机的经典结构1946年2月15日,第一台电子数字计算机问世。标志着计算机时代的到来,对人类的生产和生活方式产生了巨大的影响。ENIAC2023/11/304冯·诺依曼提出“程序存储〞和“二进制运算〞的思想,构建了计算机经典结构:2023/11/305电子计算机经历了五个年代结构仍然没有突破冯·诺依曼提出的计算机的经典结构框架。电子管计算机晶体管计算机集成电路计算机大规模集成电路计算机超大规模集成电路计算机
2023/11/3061.1.2微型计算机的组成及其应用形态
微处理器
1971年1月,INTEL将:运算器控制器一些存放器集成在一个芯片上--------微处理器4004微处理器2023/11/307微处理器+存储器+I/O接口=微型计算机
微型计算机
2023/11/308
微型计算机的应用形态
分为3种:多板机〔即系统机〕工业PC机也属于多板机。存储器I/O接口CPUI/O接口2023/11/309
单板机
早期的单板机当代的单板机CPU存储器I/O接口CPU存储器I/O接口I/O接口2023/11/3010单片机单片机单片机内含:CPU存储器I/O接口2023/11/3011系统机〔桌面应用〕属于通用计算机,主要用于数据处理、办公自动化及辅助设计。单片机〔嵌入式应用〕属于专用计算机,主要用于智能仪表及传感器、智能家电、智能办公设备、汽车及军事电子设备等系统。
单片机体积小、价格低、可靠性高,其非凡的嵌入式应用形态对于满足嵌入式应用需求具有独特的优势。系统机与单片机比较2023/11/30121.2单片机的开展过程及产品近况1.2.1单片机的开展过程3个主要阶段:
单片形成阶段1976年,Intel推出MCS-48列单片机:8位CPU、1K字节ROM、64字节RAM、27根I/O线和1个8位定时/计数器。特点:存储器容量小,寻址范围小〔不大于4K〕,无串行接口,指令系统功能不强。2023/11/3013特点:结构体系完善,性能已大大提高,面向控制的特点进一步突出。现在,MCS-51已成为公认的单片机经典机种。
结构成熟阶段
1980年,Intel推出MCS-51系列单片机:8位CPU、4K字节ROM、128字节RAM、4个8位并口、1个全双工串行口、2个16位定时/计数器。寻址范围64K,并有控制功能较强的布尔处理器。2023/11/3014性能提高阶段特点:控制性能优异、种类繁多。“微控制器〞的称谓更能反响单片机的本质。近年来,不断有单片机新品出现。如ATMEL公司推出的单片机AT89C51RD2:8位CPU;64K字节ROM(有ISP能力〕;256字节RAM+1K字节的XRAM+2K字节EEPROM;1个全双工串行口;3个16位定时/计数器;7个中断源,4个优先级;硬件看门狗等。2023/11/30151.2.2单片机产品近况ATMEL公司,AT89系列,Flash存储器技术Philips公司,80C552系列,含ADC华邦公司,W78C51系列,高速低价ADI公司,ADµC8xx系列,高精度ADCLG公司,GMS90/97系列,低压高速Maxim公司,DS89C420系列,高速〔50MIPS〕Cygnal公司,C8051F系列,高速SOC
80C51兼容产品:80C51主流地位已形成,与其兼容的主要产品有:2023/11/3016
非80C51结构产品:给用户提供了更为广泛的选择空间,主要产品有:
Intel公司,MCS-96系列,16位
Microchip公司,PIC系列,RISC
TI公司,MSP430F系列,16位低功耗1.2.2单片机产品近况2023/11/30171.3单片机的特点及应用领域1.3.1单片机的特点结构上突出控制功能
可直接操作I/O端口;位操作能力突出;CPU、存储器及I/O接口集成在同一芯片内,数据在传送时受干扰的影响小,且不易受环境条件的影响。使用上易于产品设计单片机品种和型号多;引脚少,体积小〔印制板减可以较小〕,产品结构灵活精巧。2023/11/30181.3.2单片机的应用领域智能仪器仪表机电一体化产品实时工业控制分布式系统的前端模块家用电器2023/11/30191.4单片机应用系统开发过程1.4.1指令及目标码单片机自身无开发能力,须借助开发机完成:
排除硬件故障和软件错误程序固化到程序存储器芯片中。正确的硬件设计和良好的软件功能设计是一个实用的单片机应用系统的设计目标。完成该目标的过程称为单片机应用系统的开发。2023/11/3020指令的表示形式指令是让单片机执行某种操作的命令,按一定的顺序以二进制码的形式存放于程序存储器。如:04H:累加器A的内容加1,难记!00000100B04HINCA,记忆容易。称为符号指令。2023/11/3021汇编或编译,将符号指令转换成机器码的过程称为汇编。常用的汇编方法有三种:手工汇编驻留汇编〔利用开发机的驻留汇编程序〕交叉汇编〔利用普通的PC机〕现在还常采用高级语言〔如C51〕进行单片机应用程序的设计。2023/11/30221.4.2开发过程电路板制作
使用Protel99SE软件设计制版、安装器件、焊接2023/11/3023目标文件生成利用µVision生成目标文件
仿真:软件仿真、硬件仿真软件界面硬件仿真器2023/11/3024目标程序烧写利用编程器
编程器1.4.3单片机开发技术的进展在系统编程技术单片机可以先焊在电路板上。如:AT89S52
在应用编程技术具有ISP及IAP能力。如:SST89E58
2023/11/30251.5µVision集成开发环境简介1.5.1µVision的界面2023/11/30261.5.2目标程序的生成
建立工程、配置工程、编译工程2023/11/30271.5.3仿真调试软件模拟---用于算法模拟
硬件仿真---用于硬件调试调试步骤:Debug菜单,单击Start/StopDebugSession选择Debug菜单的Run或Step等命令观察存储器、存放器、片内外设等状态*灵活利用虚拟串口与单片机串口交互信息2023/11/30281.5.4例如步骤建立文件夹lx1编辑以下文件,lx1.asm存盘ORG0000HMAIN:MOVA,#0FEH;LOOP:MOVP2,AAJMPLOOPEND建立工程,以lx1存盘〔工程扩展名自动添加〕在project菜单,单击OptionsforTarget‘Target1’设置器件、晶振频率,选EXE选项和Simulator选项单击RebuildallTargetfiles完成汇编,然后调试。2023/11/3029第2章80C51的结构和原理80C51系列概述2.180C51的根本结构与应用模式2.280C51典型资源配置与引脚封装2.380C51单片机的CPU2.480C51的存储器组织2.580C51的并行口结构与操作2.62023/11/30302.1
80C51系列概述2.1.1MCS-51系列
8051/8751/80318052/8752/803280C51/87C51/80C3180C52/87C52/80C32等
MCS-51是Intel公司生产的一个单片机系列名称。这一系列的单片机有多种,如:2023/11/3031生产工艺有两种:在产品型号中凡带有字母“C〞的即为CHMOS芯片,CHMOS芯片的电平既与TTL电平兼容,又与CMOS电平兼容。如87C51。一是HMOS工艺〔高密度短沟道MOS工艺〕。二是CHMOS工艺〔互补金属氧化物的HMOS工艺〕。2023/11/3032功能上,有根本型和增强型2大类:增强型:8052/8752/803280C52/87C52/80C32根本型:8051/8751/803180C51/87C51/80C312023/11/3033在片内程序存储器配置上,有3种形式,即掩膜ROM、EPROM和ROMLess。如:80C51有4K字节的掩膜ROM87C51有4K字节的EPROM
80C31在芯片内无程序存储器。2023/11/30342.1.280C51系列各厂商以8051为基核开发出的CMOS单片机统称为80C51系列。常用产品有:Intel:80C31、80C51、87C51,80C32、80C52、87C52等;ATMEL:89C51、89C52、89C2051等;Philips、华邦、Dallas、Siemens等公司的许多产品。2023/11/30352.280C51的根本结构与应用模式2.2.180C51的根本结构2023/11/30362.2.280C51的应用模式
带总线扩展引脚的产品扩展总线的应用模式不扩展总线的应用模式
2023/11/3037没有总线扩展引脚的产品引脚数减少、体积减小。对于不需进行并行外围扩展,装置的体积要求苛刻且程序量不大的系统极其适合。典型产品,如:AT89S2051/AT89S4051。2023/11/30382.3
80C51典型产品资源配置与引脚封装2.3.180C51典型产品资源配置2023/11/3039由表可见:增强型与根本型的几点不同:片内ROM:从4K增加到8K
片内RAM:从128增加到256
定时/计数器:从2个增加到3个中断源:从5个增加到6个。
2023/11/3040无ROM型,要在片外扩展程序存储器;掩膜ROM型,程序由芯片生产厂写入;EPROM型,程序通过写入装置写入;FlashROM型,程序可电写入〔常用〕。片内ROM的配置形式:还有OTPROM型,具有较高的可靠性。2023/11/30412.3.280C51的引脚封装2023/11/30422.480C51的CPU2023/11/30432.4.1CPU的功能单元运算器累加器ACC存放器BPSW控制器程序计数器PC指令存放器IR定时与控制逻辑其他存放器程序计数器PC数据指针DPTR堆栈指针SP工作存放器R0~R72023/11/3044存放器及其存储器映射如以下图:2023/11/30452.4.280C51的时钟与时序时钟产生方式内部时钟方式外部时钟方式
2023/11/3046
80C51的时钟信号1个机器周期:12个晶荡周期〔或6个时钟周期〕指令的执行时间称作指令周期〔单、双、四周期〕2023/11/304780C51的典型时序单字节指令双字节指令
单周期指令2023/11/3048双周期指令
2个机器周期中ALE有效4次,后3次读操作无效。
2023/11/3049访问外部RAM的双周期指令时序
第二机器周期无读操作码的操作,而是进行外部数据存储器的寻址和数据选通。ALE信号会出现非周期现象。
2023/11/30502.4.380C51单片机的复位复位可使单片机或系统部件处于确定的初始状态。
复位电路上电复位电路按键与上电复位2023/11/3051单片机复位后的状态PC=0000HRAM:随机值〔运行中复位不改变RAM内容〕
SFR:
P0~P3=FFHSP=07HIP、IE和PCON:有效位为0PSW=00H2023/11/30522.580C51的存储器组织80C51存储器可以分成两大类:RAM,CPU在运行时能随时进行数据的写入和读出,但在关闭电源时,其所存储的信息将丧失。用来存放暂时性的输入输出数据、运算的中间结果或用作堆栈。ROM,写入信息后不易改写的存储器。断电后,其中的信息保存不变。用来存放固定的程序或数据,如系统监控程序、常数表格等。2023/11/30532.5.180C51单片机的程序存储器配置片内与片外程序存储器的选择
EA引脚接高电平---片内2023/11/3054
EA引脚接高地---片外2023/11/3055程序存储器低端的几个特殊单元2023/11/3056程序存储器中的指令代码及其观察2023/11/30572.5.280C51单片机数据存储器配置片内、片外数据存储器概况片内RAM及SFR片外RAM2023/11/3058工作存放器区〔含存放器组0~3〕存放器组0:地址00H~07H存放器组1:地址08H~0FH存放器组2:地址10H~17H存放器组3:地址18H~1FH当前工作存放器组选择PSW存放器中:2023/11/3059片内RAM详图2023/11/3060位寻址区字节地址位地址D7D6D5D4D3D2D1D020H07H06H05H04H03H02H01H00H21H0FH0EH0DH0CH0BH0AH09H08H22H17H16H15H14H13H12H11H10H23H1FH1EH1DH1CH1BH1AH19H18H24H27H26H25H24H23H22H21H20H25H2FH2EH2DH2CH2BH2AH29H28H26H37H36H35H34H33H32H31H30H27H3FH3EH3DH3CH3BH3AH39H38H28H47H46H45H44H43H42H41H40H29H4FH4EH4DH4CH4BH4AH49H48H2AH57H56H55H54H53H52H51H50H2BH5FH5EH5DH5CH5BH5AH59H58H2CH67H66H65H64H63H62H61H60H2DH6FH6EH6DH6CH6BH6AH69H68H2EH77H76H75H74H73H72H71H70H2FH7FH7EH7DH7CH7BH7AH79H78H2023/11/3061通用RAM区
30H~7FH,共80字节
数据缓冲
堆栈
SP指示栈顶复位时SP=07H
系统初始化通常重新设置2023/11/3062RAM内容查看2023/11/30632.5.380C51单片机的特殊功能存放器〔SFR〕根本型单片机有21个SFR离散地分布在80H~FFH空间。与运算器相关3个
ACC
B
PSW与定时/计数器相关6个
TH0,TL0
TH1,TL1
TMODTCON指针类3个
SP
DPH,DPL与口相关7个
P0,P1,P2,P3
SBUFSCON
PCON与中断相关2个
IE
IP2023/11/30642.680C51的并行口结构与操作P0口结构
P0作通用I/O口(当EA=1或“MOV”传送时C=0)输出时2.6.1P0、P2口的结构2023/11/3065输入时读锁存器〔“读-修改-写〞类指令,如ANLP0,A〕读引脚〔“MOV〞类指令,如MOVA,P0〕,要先写“1〞10P0作通用I/O时为:准双向口!2023/11/3066
P0作地址数据总线(当EA=1或“MOVX”类传送时C=1)
输出时,地址/数据信息分时出现在输出引脚。
输入时,先输出地址,然后自动向锁存器写1,再读引脚。此时为真正双向口。2023/11/3067P2口结构
P2作通用I/O口〔未扩片外存储器,或虽扩RAM但采用“MOVX@Ri〞传送时C=0〕P2作通用I/O时为:准双向口!P2作地址总线高8位〔C=1〕2023/11/3068P1口结构
P1仅能为通用的准双向口!2.6.2P1、P3口的结构2023/11/3069P3口结构
第一功能:通用I/O口〔对口寻址时〕2023/11/3070第二功能〔不对口寻址时〕
P3.0:RXD(串行口输入)
P3.1:TXD(串行口输出)
P3.2:INT0(外部中断0输入)
P3.3:INT1(外部中断1输入)
P3.4:T0(定时器0的外部输入)
P3.5:T1(定时器1的外部输入)
P3.6:WR(片外数据存储器“写”选通控制输出)
P3.7:RD(片外数据存储器“读”选通控制输出)2023/11/30712.6.3并行口驱动简单外设并行口的负载能力〔AT89S52)每根口线最大可吸收10mA的〔灌〕电流P0口吸收电流的总和不能超过26mAP1、P2和P3每个口吸收电流的总和限制在15mA4个口所有口线的吸收电流总和限制在71mA2023/11/3072
驱动简单的输出设备驱动LED(发光二极管〕LED典型工作点:1.75V,10mA。单个LED驱动特性如以下图:2023/11/3073多个LED驱动如以下图:并口直接驱动经缓冲器驱动〔亮度不理想〕(245:单根线<25mA,总和<75mA)2023/11/3074
驱动LED数码管公共电阻限流各路分别限流2023/11/3075dpgfedcba00000110共阴极字形“1〞编码例如:06H2023/11/3076
驱动蜂鸣器有源蜂鸣器:接额定电压就可连续发声
无源蜂鸣器:接入变频方波,可得到不同音调的声音
两种蜂鸣器驱动电路相同,仅程序不同2023/11/3077
驱动简单的输入设备
简单开关及输入接口2023/11/3078
开关闭合与断开时的抖动及去抖电路
按键较少时:去抖电路
按键较多时:软件延时,通常为10ms2023/11/3079第3章80C51的指令系统指令格式及常用符号3.180C51的寻址方式3.2数据传送指令〔29条〕3.3算数运算指令〔24条〕3.4逻辑运算与循环类指令〔24条〕3.5控制转移类指令〔17条〕3.6位操作类指令〔17条〕3.72023/11/30803.1指令格式及常用符号3.1.1机器指令的字节编码形式
8位编码仅为操作码单字节指令〔49条〕机器指令:计算机能直接识别和执行的指令。
位号76543210字节opcode如:INCA编码为:00000100即:04H8位编码含操作码和存放器编码位号76543210字节opcoderrr如:MOVA,R0编码为:11101000即:E8H2023/11/3081双字节指令〔45条〕位号76543210字节opcodedata或direct三字节指令〔17条〕位号76543210字节opcodedata或directdata或direct如:MOVA,#50H编码为:0111010001010000即:74H50H如:MOV20H,#50H编码为:011101010100000001010000即:75H20H50H2023/11/3082书写格式注意:操作助记符不能缺少操作数个数可为:1、2、3个2个操作数的指令,目的操作数在左边一般格式操作助记符[目的操作数][,源操作数][;注释]3.1.2符号指令的书写格式2023/11/3083描述符号Rn〔n=0~7〕-当前工作存放器组中的存放器R0~R7之一Ri〔i=0,1〕-当前工作存放器组中的存放器R0或R1@----------间址存放器前缀#data------8位立即数/#data16-----16位立即数direct------片内低128个RAM单元地址及SFR地址addr11------11位目的地址addr16------16位目的地址rel---------8位地址偏移量,范围:-128~+127bit---------片内RAM位地址、SFR的位地址〔×〕------表示×地址单元或存放器中的内容/----------位操作数的取反操作前缀2023/11/30843.2.1存放器寻址寻址方式:寻找〔源〕操作数或指令转移地址的方式80C51单片机有7种寻址方式3.2
80C51的寻址方式操作数在存放器中寻址空间:R0~R7、A、B(AB形式〕和DPTR特点:传送和执行速度快【例】假设〔R0〕=30H,执行MOVA,R0后,〔A〕=30H2023/11/30853.2.2直接寻址操作码后字节存放的是操作数的地址寻址空间:片内RAM低128字节SFR〔符号形式〕另一类直接寻址是转移目标地址的寻址。如:LJMPADDR16【例】假设〔50H〕=3AH,执行MOVA,50H后,〔A〕=3AH2023/11/30863.2.3存放器间接寻址存放器中的内容是操作数的地址寻址空间:片内RAM〔@Ri、SP〕片外RAM〔@Ri、@DPTR〕【例】假设〔R0〕=30H,〔30H〕=5AH执行MOVA,@R0后,〔A〕=5AH片内:MOV片外:MOVX2023/11/30873.2.4立即寻址操作数在指令编码中寻址空间:ROM对于MOVDPTR,#2100H指令,立即数高8位“21H〞装入DPH【例】执行MOVA,#50H
结果:〔A〕=50H2023/11/30883.2.5变址寻址操作数地址:基地址+偏移量寻址空间:ROM变址寻址还用于跳转指令,如JMP@A+DPTR
【例】〔A〕=0FH〔DPTR〕=2400H执行MOVA,@A+DPTR〞后结果:〔A〕=88H2023/11/30893.2.6相对寻址用于跳转指令,实现程序分支Rel常用符号地址表示,离源地址不要超过〔-128~+127〕【例】假设rel为75H,PSW.7为1,JCrel存于1000H开始的单元。执行JCrel指令后,程序将跳转到1077H单元取指令并执行。2023/11/30903.2.7位寻址寻址位数据寻址空间片内RAM位空间SFR位空间【例】位地址00H内容为1,MOVC,00H执行后,位地址PSW.7的内容为1。位寻址方式实质属于位的直接寻址。
2023/11/30913.3数据传送类指令〔29条〕一般不影响标志存放器PSW的状态。传送类指令有两大类一般传送〔MOV〕特殊传送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP2023/11/30923.3.1一般传送指令16位传送〔仅1条〕MOVDPTR,#data16;DPTR←data16例:执行指令MOVDPTR,#1234H后〔DPH〕=12H,〔DPL〕=34H。8位传送通用格式:MOV<目的字节>,<源字节>;2023/11/3093以A为目的【例3-9】假设〔R1〕=20H,〔20H〕=55H。执行指令MOVA,@R1后,〔A〕=55H。2023/11/3094以Rn为目的【例3-10】执行指令MOVR6,#50H后,〔R6〕=50H2023/11/3095以direct为目的【例3-11】假设〔R1〕=50H,〔50H〕=18H,执行指令MOV40H,@R1后,〔40H〕=18H2023/11/3096以@Ri为目的【例3-12】假设〔R1〕=30H,〔A〕=20H,执行指令MOV@R1,A后,〔30H〕=20H。2023/11/30973.3.2特殊传送指令
以DPTR内容为基址读ROM中常数表项指令MOVCROM中可以存放程序代码,还经常存放常数表
MOVCA,@A+DPTR;A←〔〔A〕+〔DPTR〕〕
以PC内容为基址MOVCA,@A+PC;A←〔〔A〕+〔PC〕〕常数表存放约束小,称为远程查表指令。占用DPTR
常数表存放约束大,称为近程查表指令。不占用DPTR
2023/11/3098
读片外RAM读片外RAM及接口单元数据的指令MOVX片外RAM中经常存放数据采集与处理的中间数据
MOVXA,@DPTR;A←〔〔DPTR〕〕MOVXA,@Ri;A←〔〔Ri〕〕
写片外RAMMOVX@DPTR,A;〔〔DPTR〕〕←AMOVX@Ri,A;〔〔Ri〕〕←A注意:用@Ri寻址时,高8位地址由P2口提供
2023/11/3099
入栈指令PUSH堆栈操作指令PUSH和POP堆栈是一片存储区,遵循“后进先出〞原那么,栈顶由SP指示。80C51的堆栈设在片内RAM低端的128个单元,向上生长。PUSHdirect;SP←〔SP〕+1,〔SP〕←〔direct〕出栈指令POPPOPdirect;〔direct〕←〔〔SP〕〕,SP←〔SP〕-1注:堆栈用于子程序调用时保护返回地址,或者用于保护子程序调用之前的某些重要数据〔即保护现场〕,还可以用于数据交换。2023/11/30100利用堆栈完成40H与50H单元内容的交换的例如MOVSP,#6FH;将堆栈设在70H以上RAM空间PUSH40H;①将40H单元的“23H〞入栈,之后〔SP〕=70HPUSH50H;②将50H单元的“45H〞入栈,之后〔SP〕=71HPOP40H;③将SP指向的71H单元的内容弹到40H单元,之后〔SP〕=70HPOP50H;④将SP指向的70H单元的内容弹到50H单元,之后〔SP〕=6FH〔a〕初始状态〔b〕2条PUSH指令执行后〔c〕2条POP指令执行后2023/11/30101
字节交换指令XCH数据交换指令XCH、XCHD和SWAP数据交换属于同时进行的双向传送【例3-20】假设〔R0〕=80H,〔A〕=20H。执行指令XCHA,R0后,〔A〕=80H,〔R0〕=20H。2023/11/30102
半字节交换指令XCHD【例3-21】假设〔R0〕=30H,〔30H〕=67H,〔A〕=20H。执行指令XCHDA,@R0指令后,〔A〕=27H,〔30H〕=60H。XCHD是间址操作数的低半字节与A的低半字节互换。SWAP是累加器的上下4位互换【例3-22】假设〔A〕=30H,执行指令SWAPA后,〔A〕=03H。2023/11/301033.4算数运算类指令〔24条〕算数运算结果要影响PSW中标志位CY为1,无符号数〔字节〕加减发生进位或借位OV为1,有符号数〔字节〕加减发生溢出错误AC为1,十进制数〔BCD码〕加法的结果应调整P为1,存于累加器A中操作结果的“1〞的个数为奇数标志位意义标志位与相关指令影响指令标志ADD、ADDC、SUBBDAMULDIVCY√√00AC√√××OV√×√√P√√√√2023/11/30104算数运算影响标志位例如【例3-23】有2个参与相加的机器数,一个是84H,另一个是8DH。试分析运算过程及其对状态标志的影响。结果:CY为1;AC为1;OV为1;P为0
2023/11/301053.4.1加法不带进位加法【例3-24】假设有2个无符号数存于累加器A和RAM的30H单元,即〔A〕=84H,〔30H〕=8DH,试分析执行指令ADDA,30H后的结果。由于对无符号数相加,要考察CY。由上页图可知,CY=1,因此知道运算的结果发生了进位,即实际值应该是100H+11H。所以,编程者应确保单字节无符号数运算结果不要超过255
2023/11/30106【例3-25】假设有2个有符号数存于累加器A和RAM的30H单元,即〔A〕=84H,〔30H〕=8DH,试分析执行指令ADDA,30H后的结果。有符号数相加,只需考察溢出标志OV即可。由上图可见OV=1,因此可知运算的结果发生了溢出,这说明累加器A中的结果已经不是正确的值了。
编程者应确保单字节有符号数运算结果不超过-128~127。否那么,就要将数据用多字节表示或在程序运行中对状态标志进行判断:无符号数用JNC或JC,有符号数要用JNB或JB。2023/11/30107带进位加法〔这组指令方便了多字节加法的实现〕加12023/11/30108十进制调整DAA;调整A的内容为正确的BCD码两个压缩的BCD码按二进制相加后,必须经过调整方能得到正确的和。
当A中低4位出现了非BCD码〔1010~1111〕或低4位的进位AC=1,那么应在低4位加6调整。当A中高4位出现了非BCD码〔1010~1111〕或高4位的进位CY=1,那么应在高4位加6调整。执行十进制调整指令后,PSW中的CY表示结果的百位值2023/11/30109【例3-24】若(A)=01101001B,表示的BCD码为(R2)=01011000B,表示的BCD码为,执行指令:ADDA,R2DAA(A)=00100111B,即且(CY)=1,即正确的结果为:127
2023/11/301103.4.2减法带借位减法用此组指令完成不带借位的减法,只需先清CY为0即可CY为1,表示D7位需借位AC为1,表示D3位需借位OV为1,表示“D6有借位D7无借位〞或“D7有借位D6无借位〞2023/11/30111【例3-25】假设〔A〕=C9H,〔R2〕=54H,〔CY〕=1,试分析指令SUBBA,R2执行后,累加器的内容及状态标志。(A):11001001(201)-(CY):
1(1)11001000-(R2):01010100(84)结果:01110100(116)即:〔A〕=74H,〔CY〕=0,〔AC〕=0,〔OV〕=1,〔P〕=0。分析:数据为无符号类型。该指令执行前CY=1,说明此指令不是运算的最低字节,即在此指令执行之前,一定执行过低字节的减法并产生了借位。因此,本次相减〔201-1-84=116=74H〕结果为74H。2023/11/30112减1这组指令仅DECA
影响P标志。其余指令都不影响标志位的状态。2023/11/301133.4.3乘法仅有一条乘法指令MULAB;A与B相乘无符号结果:B中为积的高8位,A中为积的低8位。
CY总是被清0;OV=1表示积大于FFH
3.4.4除法仅有一条除法指令DIVAB;A除以B
无符号结果:A中为商的整数局部,B中为余数CY总是被清0;OV=1表示除数为02023/11/301143.5逻辑运算与循环类指令〔24条〕3.5.1逻辑与逻辑:与、或、异或、清0和取反循环:左、右移,带进位位左、右移【例】〔A〕=C3H,〔R0〕=AAH,执行指令ANLA,R0后,〔A〕=82H与操作常用于对某些不关心位进行“清0〞,同时“保存〞另一些关心位2023/11/301153.5.2逻辑或【例】〔A〕=C3H,〔R0〕=55H,执行指令ORLA,R0后,〔A〕=D7H或操作常用于对某些关心位进行“置1〞,不关心位保持不变2023/11/301163.5.3逻辑异或【例】〔A〕=C3H,〔R0〕=AAH,执行指令XRLA,R0后,〔A〕=69H异或操作常用于对某些关心位进行“取反〞,不关心位保持不变2023/11/301173.5.4逻辑清0和取反3.5.5累加器循环移位2023/11/301183.6控制转移类指令〔17条〕3.6.1无条件转移短跳转AJMPaddr11;PC←〔PC〕+2,PC10~0←addr112023/11/30119长跳转LJMPaddr16;PC←addr16相对转移SJMPrel;PC←〔PC〕+2,PC←〔PC〕+rel目标地址rel
对应范围为+127~-128。
2023/11/30120【例】假设“NEWADD〞为地址1022H,PC的当前值为1000H。执行指令SJMPNEWADD后,程序将转向1022H处执行〔rel=20H=1022H-1000H-2〕。解析如下:2023/11/30121散转移JMP@A+DPTR;PC←〔PC〕+1,PC←〔A〕+〔DPTR〕
可完成多条判跳指令的功能【例】功能:当〔A〕=00H时,程序将转到ROUT0处执行;当〔A〕=02H时,程序将转到ROUT1处执行;……。
MOVDPTR,#TABLEJMP@A+DPTRTABLE:AJMPROUT0AJMPROUT1AJMPROUT2AJMPROUT32023/11/301223.6.2条件转移累加器判0转移比较不等转移2023/11/30123减1不为0转移2023/11/30124【例】有一段程序如下,该程序执行后,〔A〕=10+9+8+7+6+5+4+3+2+1=37HMOV23H,#0AHCLRALOOPX:ADDA,23HDJNZ23H,LOOPXSJMP$2023/11/301253.6.3调用与返回调用指令执行时将返回地址入栈SP应设为适宜值〔默认值07H〕2023/11/30126【例3】假设〔SP〕=07H,标号“XADD〞表示的实际地址为0345H,PC的当前值为0123H。执行指令ACALLXADD后:返回地址为:〔PC〕+2=0125H。其低8位的25H压入堆栈的08H单元,其高8位的01H压入堆栈的09H单元〔低地址对应于低字节〕。〔PC〕=0345H,程序转向目标地址0345H处执行。2023/11/30127返回RETI专用于中断效劳程序返回,它具有去除内部相应的中断状态触发器〔以保证正确的中断逻辑〕的功能。3.6.4空操作NOP;PC←〔PC〕+1,占1个周期、一个字节2023/11/301283.7位操作类指令〔17条〕位操作是以位为单位进行的各种操作。位操作指令中的位地址有4种表示形式:直接地址〔如,0D5H〕;点操作符〔如,0D0H.5、PSW.5等〕;位名称〔如,F0〕;伪指令定义〔如,MYFLAGBITF0〕。以上几种形式表示的都是PSW中的位5。位操作指令中,位累加器要用“C〞表示〔注:而CY与具体的直接位地址D7H对应〕。试比较:A与ACC的关系?2023/11/301293.7.1位传送MOVbit,C;bit←〔CY〕MOVC,bit;CY←〔bit〕3.7.2位状态设置位清0位置位2023/11/301303.7.3位逻辑运算位逻辑与位逻辑或位取反2023/11/30131判CY转移判bit转移3.7.4位判跳〔条件转移〕;假设〔CY〕=1,PC←〔PC〕+2+rel,否那么顺次执行。;假设〔CY〕=0;PC←〔PC〕+2+rel;否那么顺次执行。;〔bit〕=1,PC←〔PC〕+3+rel,否那么顺次执行。;〔bit〕=1,PC←〔PC〕+3+rel,bit←0,否那么顺次执行;〔bit〕=0,PC←〔PC〕+3+rel,否那么顺次执行2023/11/30132第4章80C51的汇编语言程序设计程序编制的方法和技巧4.1源程序的编辑和汇编4.2根本程序结构4.3子程序及其调用4.4简单I/O设备的并口直接驱动例如4.52023/11/30133
单片机应用系统由硬件系统和应用程序构成
汇编语言高级语言
应用程序设计方法
汇编语言,生成的目标程序占内存空间少、运行速度快,具有效率高、实时性强。
高级语言,对系统的功能描述与实现简单,程序阅读、修改和移植方便,适合于编写复杂的程序。2023/11/301344.1程序编制的方法和技巧4.1.1程序编制的步骤
明确任务:功能要求、技术指标运行环境调研
任务分析将实际问题转化为计算机处理的程序算法算法比较与优化〔内存需求与运行速度〕
算法设计2023/11/30135
流程描述
流程图符号“超级循环〞框架2023/11/30136强化模块观念使程序占用空间减少、结构清晰循环初值和结束条件,防止“死机〞现象子程序的现场保护〔注意栈平衡、存放器内容〕程序模块〔主程序模块、各种子程序模块〕模块化优点:分块设计、便于阅读、调试方便4.1.2程序编制的方法和技巧采用循环和子程序对中断子程序还有注意保护PSW的内容2023/11/301374.1.3汇编语言的语句格式非数字字符开头,后跟字母、数字、“-〞、“?〞等不能用已定义的保存字〔指令助记符、伪指令等〕后跟英文冒号“:〞Keil的汇编器A51可以识别的语句形式为:标号〔即符号地址〕[标号:]指令助记符
[操作数1,][操作数2,][操作数3,][;注释]指令助记符是指令功能的英文缩写。2023/11/30138数据:二进制〔B〕十进制〔D或省略D〕十六进制〔H〕,注意A~F开头时要加“0〞ASCII码,如‘A’,‘1245’符号:符号名、标号或“$〞〔PC的当前值〕表达式:由运算符和数据构成〔见表4.1〕操作数注释英文分号“;〞开头2023/11/30139优先级运算符功能表达式及其结果示例高↓↓↓↓↓↓↓低·()括号4*(5+6)即44NOT、HIGH、LOW取反、取高字节、取低字节NOT55H即AAH;HIGH1234H即12H+、-正号、负号+5、-6*、/、MOD乘、除(取商)、取余数17/5即3;17MOD5即2+、-加、减5+4即9;5-4=即1SHL、SHR左移、右移2SHL2即8;8SHR2即2AND、OR、XOR与、或、异或45HAND0FH即05H<、>、=、<>、<=、>=比较运算符MOVA,X>8;若X>8为真,则为MOVA,01H若X>8为假,则为MOVA,00H表4.12023/11/301404.2源程序的编辑和汇编目标程序的产生过程如以下图:2023/11/301414.2.1源程序的编辑和汇编源程序的编辑
ORG0000HLJMPMAIN
ORG0040HMAIN:MOVR7,#16MOVR0,#60HMOVA,#55HLOOP:MOV@R0,AINCR0DJNZR7,LOOPSJMP$
END依据汇编语言规那么用好伪指令符号不用中文SJMP$用于调试以.ASM存盘2023/11/30142源程序的汇编汇编源程序转为目标程序的过程叫汇编汇编通常在Windows下的集成开发环境完成用A51.EXE汇编生成.OBJ、.LIB及.LST目标程序的连接.OBJ、.LIB经BL51.EXE生成无扩展名的绝对地址目标文件绝对地址目标文件可以用于仿真器调试调试无误的目标文件用OH51.EXE转换为.HEX文件.HEX文件经编程器写入单片机存储器2023/11/301434.2.2伪指令伪指令,也叫汇编命令。仅对汇编过程进行指示伪指令无对应的单片机可执行代码起始地址设定伪指令ORGORG表达式表达式通常为十六进制地址,例:
ORG8000HSTART:MOVA,#30H……ORG可屡次使用,但地址值的顺序要由小到大结束汇编伪指令ENDEND该伪指令位于源程序的最后一行。2023/11/30144定义字节数据表伪指令DB定义字数据表伪指令DW1000H[标号:]DB字节数据表如:ORG1000HDB-2,-4,-6,8,10,18FEHFCHFAH08H0AH12H1001H[标号:]DW字数据表ORG1400HDATA1:DW324AH,3CH……1400H32H4AH00H3CH1401H1402H1403H大端模式2023/11/30145定义常值为符号名伪指令EQU符号名EQU常值表达式
LEN
EQU10
SUM
EQU21HBLOCK
EQU22HCLRAMOVR7,#LENMOVR0,#BLOCKLOOP:ADDA,@R0INCR0DJNZR7,LOOPMOVSUM,A符号名为:地址常数段名字符串存放器名位名比较:标号只能是地址2023/11/30146定义位地址为符号名伪指令BIT符号名BIT位地址表达式如:STBITP1.0;将P1.0的位地址赋给符号名STCFBIT0D7H;将位地址为D7H的位定义为符号名用BIT定义的“符号名〞一经定义便不能重新定义和改变其它一些伪指令参见教材表4.22023/11/301474.3根本程序结构一般不影响标志存放器PSW的状态。传送类指令有两大类一般传送〔MOV〕特殊传送,如:MOVCMOVXPUSH、POPXCH、XCHDSWAP2023/11/301484.3.1顺序程序〔无分支、无循环〕4.3根本程序结构【例4-1】片内RAM的21H单元存放一个十进制数据十位的ASCII码,22H单元存放该数据个位的ASCII码。编写程序将该数据转换成压缩BCD码存放在20H单元。2023/11/30149ORG0040HSTART:MOVA,21H;取十位ASCII码ANLA,#0FH;保存低半字节SWAPA;移至高半字节MOV20H,A;存于20H单元MOVA,22H;取个位ASCII码ANLA,#0FH;保存低半字节ORL20H,A;合并到结果单元SJMP$END2023/11/301504.3.2分支程序〔单分支、双分支、多分支〕【例4-2】设变量x以补码的形式存放在片内RAM的30H单元,变量y与x的关系是:当x大于0时,y=x;当x=0时,y=20H;当x小于0时,y=x+5。编制程序,根据x的大小求y并送回原单元。2023/11/30151ORG0040HSTART:MOVA,30H;取x至累加器JZNEXT;x=0,转NEXTANLA,#80H;否,保存符号位JZDONE;x>0,转结束MOVA,#05H;x<0处理ADDA,30HMOV30H,A;X+05H送YSJMPDONENEXT:MOV30H,#20H;x=0,20H送YDONE:SJMPDONEEND2023/11/30152【例4-3】根据R7的内容x〔转移序号〕转向相应的处理程序。设R7内容为0~4,对应的处理程序入口地址分别为PP0~PP4。2023/11/30153START:MOVR7,#3;以转移序号3为例
ACALLJPNUMAJMPSTARTJPNUM:MOVDPTR,#TAB;置分支入口地址表首址
MOVA,R7
ADDA,R7;乘2,调整偏移量
MOVR3,AMOVCA,@A+DPTR;取地址高字节,暂存于R3XCHA,R3INCAMOVCA,@A+DPTR;取地址低字节
MOVDPL,A;处理程序入口地址低8位送DPLMOVDPH,R3;处理程序入口地址高8位送DPHCLRA
JMP@A+DPTR
2023/11/30154TAB:DWPP0DWPP1DWPP2DWPP3DWPP4PP0:MOV30H,#0;转移序号为0时,置功能号“0〞于30H单元RETPP1:MOV30H,#1;转移序号为1时,置功能号“1〞于30H单元RETPP2:MOV30H,#2;转移序号为2时,置功能号“2〞于30H单元RETPP3:MOV30H,#3;转移序号为3时,置功能号“3〞于30H单元RETPP4:MOV30H,#4;转移序号为4时,置功能号“4〞于30H单元RET 2023/11/301554.3.3循环程序〔2种:先执行,后判断;先判断,后执行〕【例4-4】将内部RAM的30H至3FH单元初始化为00H。MAIN:MOVR0,#30H;置初值
MOVA,#00H;MOVR7,#16;LOOP:MOV@R0,A;循环处理
INCR0;DJNZR7,LOOP;循环修改,判结束
SJMP$;结束处理2023/11/30156【例4-5】将内部RAM起始地址为60H的数据串传送到外部RAM中起始地址为1000H的存储区域,直到发现‘$’字符停止传送。MAIN:MOVR0,#60H;置初值
MOVDPTR,#1000HLOOP0:MOVA,@R0;取数据CJNEA,#24H,LOOP1;循环结束?SJMPDONE;是LOOP1:MOVX@DPTR,A;循环处理
INCR0;循环修改
INCDPTRSJMPLOOP0;继续循环DONE:SJMPDONE;结束处理2023/11/301574.4子程序及其调用完成通用功能、反复使用的程序设计成子程序。使应用程序结构清晰紧凑,便于阅读和调试
执行要由其它程序来调用,执行完后要返回到调用程序
结构上仍然采用一般程序的3种结构调用时注意:一是现场的保护和恢复;二是主程序与子程序间的参数传递。2023/11/301584.4.1现场保护与恢复在主程序中实现〔结构灵活〕PUSHPSW;保护现场〔含当前工作存放器组号〕PUSHACC;PUSHB;MOVPSW,#10H;切换当前工作存放器组LCALLaddr16;子程序调用,POPB;恢复现场POPACC;POPPSW;含当前工作存放器组切换2023/11/30159在子程序中实现〔程序标准、清晰〕SUB1:PUSHPSW;保护现场〔含当前工作存放器组号〕PUSHACC;PUSHB;MOVPSW,#10H;切换当前工作存放器组……POPB;恢复现场POPACC;POPPSW;内含当前工作存放器组切换RET2023/11/301604.4.2参数传递利用累加器或存放器〔简单、快速,但参数个数不多〕【例4-6】实现两个8位的十六进制无符号数求和的子程序。SADD:MOVA,R3;取加数〔在R3中〕CLRCADDA,R4;被加数〔在R4中〕加AJCPP1MOVR3,#00H;结果小于255时,高字节R3内容为00HSJMPPP2PP1:MOVR3,#01H;结果大于255时,高字节R3内容为01HPP2:MOVR4,A;结果的低字节在R4中RET入口:〔R3〕=加数;〔R4〕=被加数。出口:〔R3〕=和的高字节;〔R4〕=和的低字节。2023/11/30161利用存储器〔个数多,用R0或R1及DPTR为参数表指针〕【例4-7】将内部RAM中两个4字节无符号整数相加,和的高字节由R0指向。数据采用大端模式存储。入口:〔R0〕=加数低字节地址;〔R1〕=被加数低字节地址。出口:〔R0〕=和的高字节起始地址。NADD:MOVR7,#4;字节数4送计数器
CLRC;NADD1:MOVA,@R0;利用指针,取加数低字节
ADDCA,@R1;利用指针,被加数低字节加AMOV@R0,A;DECR0DECR1DJNZR7,NADD1INCR0;调整指针,指向出口
RET2023/11/30162利用堆栈
【例4-8】将内部RAM中20H单元中的1个字节十六进制数转换为2位ASCII码,存放在R0指示的两个单元中。入口:预转换数据〔低半字节〕在栈顶出口:转换结果〔ASCII码〕在栈顶HEASC:MOVR1,SP;借用R1为堆栈指针
DECR1DECR1;R1指向被转换数据
XCHA,@R1;取被转换数据
ANLA,#0FH;取一位十六进制数
ADDA,#2;偏移调整,所加值为MOVC与DB间总字节数
MOVCA,@A+PC;查表
XCHA,@R1;1字节指令,存结果于堆栈中
RET;1字节指令ASCTAB:DB30H,31H,32H,33H,34H,35H,36H,37HDB38H,39H,41H,42H,43H,44H,45H,46H2023/11/30163验证程序段MAIN:MOVA,20H;SWAPAPUSHACC;预转换的数据〔在低半字节〕入栈ACALLHEASCPOPACC;弹出栈顶结果于ACC中MOV@R0,A;存转换结果高字节INCR0;修改指针PUSH20H;预转换的数据〔在低半字节〕入栈ACALLHEASCPOPACC;弹出栈顶结果于ACC中MOV@R0,A;存转换结果低字节SJMP$2023/11/301644.4.3常用子程序例如〔略〕2023/11/301654.5简单I/O设备的并口直接驱动例如4.5.1独立式键盘与LED显示例如【例4-17】数据端与P0口正序连接。编写程序,分别实现功能:上电后数码管显示“P〞,按下任何键后,显示从“0〞开始每隔1秒加1,加至“F〞后,数码管显示“P〞,进入等待按键状态。2023/11/30166TEMPEQU30H ORG0000H JMPSTARTORG0100HSTART:MOVSP,#5FHMOVP0,#8CH;显示"P" MOVP3,#0FFHNOKEY:MOVA,P3 CPLA JZNOKEY;无键按下
MOVTEMP,P3;有键按下
CALLD10ms MOVA,P3 CJNEA,TEMP,NOKEY;去抖
MOVR7,#16 MOVR2,#0LOOP:MOVA,R2MOVDPTR,#CODE_P0MOVCA,@A+DPTRMOVP0,AINCR2SETBRS0;切换组CALLD_1SCLRRS0DJNZR7,LOOP JMPSTARTD_1S:〔子程序〕D10ms:〔子程序〕CODE_P0:DB0C0H,0F9H,0A4H,0B0HDB99H,92H,82H,0F8HDB80H,90H,88H,83H,DB0C6H,0A1H,86H,8EH2023/11/30167有时为方便走线而采用逆序连接,显示段码要进行调整:CODE_P2:DB03H,9FH,25H,0DH,99H,49H,40H,1FHDB01H,09H,11H,0C1H,63H,85H,61H,71HCODE_P0:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8HDB80H,90H,88H,83H,0C6H,0A1H,86H,8EH试比较:2023/11/301684.5.2矩阵式键盘与LED显示例如步骤:判有无键按下、判按下哪个键、依键号进入相应程序2023/11/30169判有无键按下行线接输入口,列线接输出口。置所有列线为低电平,然后读行线状态,假设行线均为高电平,那么没有键按下;假设行线状态不全为高电平,那么可断定有键按下。判按下哪个键先让C0列为低电平,其余列线为高电平,读行线状态,如行线状态不全为“1〞,那么说明所按键在该列;否那么所按键不在该列,再使C1列线为低电平,其它列为高电平,判断C1列有无按键按下。
进入相应程序键号=行首号+列号。根据键号进入相应的功能程序。〔程序略〕2023/11/30170列数多时可用线反转法(依据键号与键值的对应关系)。如“D〞号键,先使行线输出全“0〞,读列线,结果为D0H;再使列线输出全“0〞,读行线,结果为07H。2次读的结果拼成一个字节,即D7H,该值称为键值。将键值与键号的对应关系列成一个有序表,并设置一个计数器,将所按键值用线反转法求出后,将其作为关键字在键值表中从表首开始计数查找,查到匹配处时相应的计数值就是键号,根据键号就可以进入相应的处理程序了。2023/11/30171第5章80
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年福建省邵武市高二生物下册期末考试试卷【轻巧夺冠】附答案
- 燃气管网设施项目节能评估报告
- 探索量子光学在宇宙大尺度结构研究中的应用-洞察与解读
- 中国文学作品的文化趋势预测-洞察与解读
- 消费者行为驱动的竞品品牌定位策略-洞察与解读
- 研究PSA在老年痴呆预防中的潜在角色-洞察与解读
- 技术升级与创新在并购整合中的作用-洞察与解读
- 基于增强现实的舞台表演虚拟现实交互体验-洞察与解读
- 纳米药物肝代谢-洞察与解读
- 多动症儿童神经影像学技术进展及应用前景-洞察与解读
- SMT贴片机操作安全标准手册
- 真空钎焊及热处理操作指导书
- 商道融绿:中国责任投资年度报告2025
- 芯片工厂安全培训课件
- 钢结构人行天桥工程设计方案
- 聚酰亚胺气凝胶的结构调控及其隔热性能研究
- 2024-2025学年辽宁省沈阳市皇姑区五年级(下册)期末数学试卷含答案
- 入场安全教育考核试题、答案(电焊工)
- 学堂在线医学英语词汇进阶(首医)作业单元测验答案
- 电力营销业务知识培训课件
- 职业病诊断医师资格培训考试试题(附答案)
评论
0/150
提交评论