版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
单片机技术及应用——基于
汇编及C51程序设计
第1章微型计算机与单片机基础知识2026/4/251主要内容:1.1微型计算机与单片机1.2计算机硬件的基本组成1.3微型计算机的硬件构成1.4计算机中信息的表示1.5单片机概述2026/4/2521.1微型计算机与单片机计算机产生:1946年
美国ENIAC发展:电子管、晶体管、中小规模集成电路和大规模、超大规模集成电路微型计算机:微处理器(Microprocessor)单片微型计算机:单片机,把CPU、存储器、I/O接口电路、定时器/计数器以及串行口等制作在一块芯片中的计算机。2026/4/2531.2计算机硬件的基本组成冯·诺依曼结构硬件组成:运算器、控制器、存储器、输入和输出设备计算机系统:硬件和软件2026/4/2541.3微型计算机的硬件构成微型计算机:微处理器CPU、存储器、输入输出设备和总线2026/4/25580X87存储器ROM存储器RAMI/O设备I/O接口80X86CPU硬盘软驱显示器RS232……中央处理器协处理器地址总线(AB)控制总线(CB)数据总线(DB)1.4计算机中信息的表示信息:数值信息
数字类数据
非数值信息
字符、图形、图像和声音等表示
二进制编码一、无符号数
二进制形式4500101101B2026/4/2561.4计算机中信息的表示二、有符号数2026/4/257机器数原码表示法、反码表示法和补码表示法1.4计算机中信息的表示1、原码2026/4/2582、反码正数负数1.4计算机中信息的表示3、补码2026/4/259正数负数【例1-3】求+78、-23的补码(设机器字长8位)。[+78]反=01001110B[-23]反=11101000B因为[+78]补=01001110B[-23]补=11101000B+1=11101001B所以1.4计算机中信息的表示三、十进制数的表示BCD码:压缩BCD码和非压缩BCD码2026/4/2510十进制符号压缩BCD编码十进制符号压缩BCD编码00000501011000160110200107011130011810004010091001例如:十进制数54的压缩BCD码为01010100(54H)四、字符的表示ASCII码数字符号0~9:30H~39H英文大写字母A~Z:41H~5AH英文小写字母a~z:61H~7AH比较大小、排序2026/4/25111.5单片机概述一、单片机的典型硬件结构2026/4/25121.5单片机概述二、单片机的应用领域1、测控系统中的应用2、智能仪表中的应用3、智能产品
4、在智能计算机外设中的应用2026/4/25131.5单片机概述三、单片机发展概况(1)4位单片机(2)8位单片机(3)16位单片机(4)32位单片机2026/4/2514习题3、8、92026/4/2515单片机技术及应用——基于
汇编及C51程序设计第2章
单片机的结构及工作原理主要章节2.151系列单片机的内部结构2.251单片机的存储器组织2.351系列单片机的引脚及功能2.4时钟电路与CPU时序2.551单片机的工作方式2.651系列单片机最小系统12026/4/25172.151系列单片机的内部结构一、51单片机的基本组成12026/4/25182.151系列单片机的内部结构二、中央处理器(CPU)1.算术/逻辑运算部件ALU2.定时控制部件3.专用寄存器组
⑴累加器A ⑵通用寄存器B
⑶程序状态字PSW ⑷程序指针计数器PC
⑸数据指针寄存器DPTR⑹堆栈指针寄存器SP2026/4/251912.151系列单片机的内部结构⑷程序状态字PSWPSW7PSW6PSW5PSW4PSW3PSW2PSW1PSW02026/4/25201CYACFORS1RS0OVP进位标志辅助进位标志用户标志工作寄存器区选择位溢出标志奇偶标志(偶)2.151系列单片机的内部结构RS1RS0工作寄存器组000组(00H~07H)011组(08H~0FH)102组(10H~17H)113组(18H~1FH)2026/4/25211⑷程序状态字PSW2.151系列单片机的内部结构2.1.3
存储器2.1.4I/O端口
四个8位双向I/O端口(P0、P1、P2、P3),每一条I/O线都能独立地用作输入或输出。P0口为三态双向口。P1、P2、P3口为准双向口2026/4/252212.1.4I/O端口1)P0端口2026/4/25231①P0口作地址/数据复用总线功能:②P0口作通用I/O端口使用2.1.4I/O端口2)P1口2026/4/25241功能:①P1口作通用I/O端口使用②P1口其他功能2.1.4I/O端口3)P2口2026/4/25251功能:①P2口作通用I/O端口使用②
P2口作地址总线口使用2.1.4I/O端口4)P3口2026/4/25261功能:①P3口作通用I/O端口使用②
P3口作第二功能使用2.1.4I/O端口端
口
功
能第
二
功
能P3.0RXD---串行输入(数据接收)口P3.1TXD---串行输出(数据发送)口P3.2---外部中断0输入线P3.3---外部中断1输入线P3.4T0
---定时器0外部输入P3.5T1---定时器1外部输入P3.6---外部数据存储器写选通信号输出P3.7---外部数据存储器读选通信号输入2026/4/25271P3口的第二功能2.251单片机的存储器组织一、存储器组织
哈佛体系结构
程序存储器
由只读存储器芯片,简称为ROM,存放程序、固定常数和数据表格。
数据存储器
用随机存储器构成,简称为RAM,工作区及存放数据完全独立,寻址空间、寻址方式和控制系统各不相同2026/4/252812.251单片机的存储器组织二、程序存储器总空间为64KB,地址0x0000~0xFFFF,通过程序计数器PC访问。物理结构上分为片内程序存储器和片外程序存储器。8031和8032内部没有ROM,8051和8751内部有4KB的ROM,地址空间为0000H~0FFFH,8052和8752内部有8KB的ROM,地址空间为0000H~1FFFH。片外最多扩展64KB,地址0x0000~0xFFFF。2026/4/25291二、程序存储器2026/4/25301二、程序存储器7个特殊地址2026/4/25311名称地址系统复位地址0000H外部中断0中断服务程序入口地址0003H定时/计数器0中断服务程序入口地址000BH外部中断1中断服务程序入口地址0013H定时/计数器1中断服务程序入口地址001BH串行口入口地址中断服务程序0023H定时/计数器2中断服务程序入口地址(仅52子系列有)002BH2.251单片机的存储器组织2.2.3数据存储器物理结构上,数据存储器分为片内数据存储器和片外数据存储器。两者完全独立,有不同的存储空间,访问方式上也各不相同2026/4/253212.2.3数据存储器1) 片内数据存储器分:片内的随机存储块和特殊功能寄存器(SFR)块片内的随机存储块,51子系列128字节,编址为00H~7FH,52子系列256字节,编址为00H~FFH特殊功能寄存器(SFR)块也有128字节,编址为80H~FFH;2026/4/253311) 片内数据存储器片内的随机存储块2026/4/253411) 片内数据存储器(1) 工作寄存器组区00H~1FH单元,共32个字节,分4组:0组(00H~07H)、1组(08H~0FH)、、2组(10H~17H)、和3组(18H~1FH)。每组8个寄存器,依次用R0~R7表示。由程序状态寄存器PSW中的RS0和RS1两位来选择,选择情况见前面。2026/4/253511) 片内数据存储器(2) 位寻址区
20H~2FH单元2026/4/25361字节单元地址D7D6D5D4D3D2D1D020H070605040302010021H0F0E0D0C0B0A090822H171615141312111023H1F1E1D1C1B1A191824H272625242322212025H2F2E2D2C2B2A292826H373635343332313027H3F3E3D3C3B3A393828H474645444342414029H4F4E4D4C4B4A49482AH57565554535251502BH5F5E5D5C5B5A59582CH67666564636261602DH6F6E6D6C6B6A69682EH77767574737271702FH7F7E7D7C7B7A79781) 片内数据存储器(3) 一般RAM区(4) 堆栈区与堆栈指针存储区域“先入后出、后入先出”堆栈指针SP管理。堆栈主要是为子程序调用和中断调用而设立的,用于保护断点地址和保护现场状态。堆栈有入栈和出栈两种操作,入栈时先改变堆栈指针SP,再送入数据,出栈时先送出数据,再改变堆栈指针SP。2026/4/253711) 片内数据存储器根据入栈方向堆栈一般分两种:向上生长型和向下生长型。按处理数据的多少可分为单字节、双字节等。2026/4/25381向上生长型1) 片内数据存储器2026/4/25391向下生长型51单片机是单字节向上生长型堆栈,SP的初值为07H,复位时堆栈从08H开始。1) 片内数据存储器(5) 特殊功能寄存器除PC外,51子系列有18个特殊功能寄存器,其中3个为双字节,共占用21个字节;52子系列有21个特殊寄存器,其中5个为双字节,共占用26个字节。CPU专用寄存器:累加器A(E0H),寄存器B(F0H),程序状态寄存器PSW(D0H),堆栈指针SP(81H),数据指针DPTR(82H、83H)并行接口:P0~P3(80H、90H、A0H、B0H)。2026/4/254011) 片内数据存储器串行接口:串口控制寄存器SCON(98H),串口数据缓冲器SBUF(99h),电源控制寄存器PCON(87H)。定时/计数器:方式寄存器TMOD(89H),控制寄存器TCON(88H),初值寄存器TH0、TL0(8CH、8AH)/TH1、TL1(8DH、8BH)。中断系统:中断允许寄存器IE(A8H),中断优先级寄存器IP(B8H)。定时/计数器2相关寄存器:定时/计数器2控制寄存器T2CON(CBH),定时/计数器2自动重装寄存器RLDL、RLDH(CAH、CBH),定时/计数器2初值寄存器TH2、TL2(CDH、CCH)(仅52子系列有)。2026/4/254111) 片内数据存储器字节地址能被8整除的特殊功能寄存器,既能按字节方式处理,也能按位方式处理。2026/4/254212) 片外数据存储器总空间64KB,地址范围为0000H~0FFFFH,通过DPTR作指针间接寻址方式访问对于低端的256字节,可用两位十六进制地址编址,地址范围为00H~0FFH,由R0和R1间接方式访问。2026/4/254312.351系列单片机的引脚及功能2026/4/254412.3.151单片机的引脚分类⑴主电源引脚⑵外接晶体或外部振荡器引脚⑶控制信号线RST/VPD(9脚):复位信号输入端ALE/
(30脚):地址锁存允许/编程脉冲输入。(29脚):外部程序存储器读选通信号/VPP(31脚):访问外部存储器允许/编程电压输入2026/4/254512.3.2三总线结构1.地址总线地址总线宽度为16位,寻址范围都为64KB。由P0口经地址锁存器提供低8位(A7~A0),P2口提供高8位(A15~A8)而形成。可对片外程序存储器和片外数据存储器寻址。2.数据总线数据总线宽度为8位,由P0口直接提供。3.控制总线控制总线由第二功能状态下的P3口和4根独立的控制线RST、EA、ALE和PSEN组成。2026/4/254612.4时钟电路与CPU时序一、
振荡器和时钟电路2026/4/25471(a)内部时钟方式(b)HMOS工艺外接时钟(c)CHMOS工艺外接时钟2.4时钟电路与CPU时序二、
CPU时序时序就是在执行指令过程中,CPU产生的各种控制信号在时间上的相互关系。1.时钟周期、机器周期和指令周期2026/4/254812.4时钟电路与CPU时序2026/4/25491(b)单字节单周期指令(c)双字节单周期指令(d)单字节双周期指令2.4时钟电路与CPU时序2.访问外部ROM的时序2026/4/255012.4时钟电路与CPU时序3.访问外部RAM的时序2026/4/255112.5单片机的工作方式2.5.1复位方式RST输入两个机器周期(24个时钟周期)以上的高电平,两种:上电复位和按钮复位2026/4/25521复位后内部各寄存器的内容2026/4/25531特殊功能寄存器初始内容特殊功能寄存器初始内容A00HTCON00HPC0000HTL000HB00HTH000HPSW00HTL100HSP07HTH100HDPTR0000HSCON00HP0~P3FFHSBUFXXXXXXXXBIPXX000000BPCON0XXX0000BIE0X000000BTMOD00H2.5单片机的工作方式2.5.2程序执行方式2.5.3单步执行方式2.5.4掉电和节电方式1、HMOS单片机的掉电方式2、CHMOS的节电运行方式2.5.5编程和校验方式2026/4/255412.651系列单片机最小系统2026/4/25551习
题2、4、6、82026/4/25561单片机技术及应用——基于
汇编及C51程序设计第3章51单片机指令系统及汇编程序设计主要章节3.1指令系统概述3.251单片机的寻址方式3.351单片机的指令系统3.451单片机汇编程序设计概述3.551单片机常用汇编程序设计2026/4/255813.1指令系统概述一、51单片机汇编指令格式[标号:]操作码[操作数1][,操作数2][;注释](1) 操作码指明指令的功能(2) 操作数给指令操作提供数据、数据的地址或指令的地址(3) 标号是指令的符号地址,后面需带冒号(4) 注释是对指令的解释,前面需带分号2026/4/255913.1指令系统概述二、51单片机汇编指令常用符号(1) Ri和Rn (2) #data(3) #data16 (4) rel(5) addr16和addr11 (6) direct(7) bit (8) (X)(9) /和→符号2026/4/256013.251单片机的寻址方式一、立即寻址操作数是常数,直接在指令中给出常数以“#”符号作前缀例如:MOVA,#30H2026/4/256113.251单片机的寻址方式二、寄存器寻址操作数存放在寄存器中指令中直接给出寄存器名称寄存器:八个通用寄存器R0~R7、累加器A、寄存器B和数据指针寄存器DPTR(DPH和DPL)例如:MOVA,R12026/4/256213.251单片机的寻址方式三、直接寻址操作数存放在存储单元中指令中直接提供存储单元的地址访问对象:片内数据存储器和特殊功能寄存器。例如:MOVA,30H2026/4/256313.251单片机的寻址方式四、寄存器间接寻址操作数存放在存储单元中,存储单元的地址又存放在寄存器中指令中通过相应的寄存器来提供的存储单元的地址间接寻址用到的寄存器:通用寄存器R0、R1和数据指针寄存器DPTR。访问的对象为:片内数据存储器和片外数据存储器
片内数据存储器:用R0和R1作指针(MOV)
片内数据存储器:用R0和R1访问低端的256字节; (MOVX) 用DPTR访问整个64K;2026/4/256413.251单片机的寻址方式访问形式:@寄存器名例如:1) MOVR1,#30H MOVA,@R12) MOVDPTR,#2000H MOVA,@DPTR2026/4/256513.251单片机的寻址方式五、变址寻址操作数存放在存储单元中操作数的地址由指令中提供的基址寄存器和变址寄存器中的内容相加得到基址寄存器是:数据指针寄存器DPTR和程序计数器PC;变址寄存器:累加器A访问的对象只能是程序存储器(MOVC)格式只有两种: MOVCA,@A+DPTR MOVCA,@A+PC2026/4/256613.251单片机的寻址方式六、指令寻址操作对象是地址1.绝对寻址直接提供目的位置的地址或地址的一部分2.相对寻址以当前程序计数器PC值加上指令中给出的偏移量rel得到目的位置的地址(1) 当前PC值是指转移指令执行时的PC值,它等于转移指令的地址加上转移指令的字节数。(2) 偏移量rel是8位有符号数,以补码表示,它的取值范围为-128~+127。
相对寻址的目的地址为:目的地址=当前PC+rel=转移指令的地址+转移指令的字节数+rel2026/4/256713.251单片机的寻址方式七、位寻址位处理操作位的寻址方式位地址的表示:(1) 直接位地址(00H~0FFH)。例如:20H。(2) 字节地址带位号。例如:20H.2表示20H单元的2位。(3) 特殊功能寄存器名带位号。例如:P0.1表示P0口的1位。(4) 位符号地址。例如:TR0是定时/计数器T0的启动位。2026/4/256813.351单片机的指令系统3.3.1数据传送类指令
三组:普通传送指令、数据交换指令、堆栈操作指令。用到的助记符有:MOV、MOVX、MOVC、XCH、XCHD、PUSH、POP和SWAP。1.普通数据传送指令1)片内数据存储器传送指令MOV
指令格式:MOV目的操作数,源操作数2026/4/256911.普通数据传送指令1)片内数据存储器传送指令MOV2026/4/25701ARn@RidirectARn@RidirectDPTR#data[16]总共16条注意:MOVA,A指令没有意义源操作数和目的操作数中的Rn和@Ri不能相互配对1.普通数据传送指令2) 片外数据存储器传送指令MOVX
四条,格式:MOVXA,@DPTR ;A←(DPTR)MOVX@DPTR,A ;(DPTR)←AMOVXA,@Ri ;A←(Ri)MOVX@Ri,A ;(Ri)←A2026/4/257111.普通数据传送指令3) 程序存储器传送指令MOVC两条:一条是用DPTR基址变址寻址,一条是用PC基址变址寻址。格式如下: MOVCA,@A+DPTR ;A←(A+DPTR) MOVCA,@A+PC ;A←(A+PC)2026/4/257212.数据交换指令有3个助记符XCH、XCHD和SWAP,5条指令,格式如下:XCHA,Rn ;A<=>RnXCHA,direct ;A<=>(direct)XCHA,@Ri ;A<=>(Ri)XCHDA,@Ri ;A0~3<=>(Ri)0~3SWAPA ;A0~3<=>A4~7
2026/4/257313.堆栈操作指令堆栈操作有两种:
“入栈”,助记符PUSH;
“出栈”,助记符POP;
格式如下:PUSHdirect ;SP←SP+1,(SP)←(direct)POPdirect ;(direct)←(SP),SP←SP-12026/4/257413.3.2算术运算类指令1.加法指令1)一般的加法指令ADD四条,格式如下:ADDA,Rn ;A←A+RnADDA,direct ;A←A+(direct)ADDA,@Ri ;A←A+(Ri)ADDA,#data ;A←A+#data2026/4/257511.加法指令2) 带进位加法指令ADDC四条,格式如下:ADDCA,Rn ;A←A+Rn+CADDCA,direct ;A←A+(direct)+CADDCA,@Ri ;A←A+(Ri)+CADDCA,#data ;A←A+#data+C2026/4/257611.加法指令3) 加1指令INC5条,格式如下:
INCA ;A←A+1INCRn ;Rn←Rn+1INCdirect ;(direct)←(direct)+1INC@Ri ;(Ri)←(Ri)+1INCDPTR ;DPTR←DPTR+12026/4/257712.减法指令1) 带借位减法指令SUBB四条,格式如下:SUBBA,Rn ;A←A-Rn-CSUBBA,direct ;A←A-(direct)-CSUBBA,@Ri ;A←A-(Ri)-CSUBBA,#data ;A←A-#data-C2026/4/257812.减法指令2)减1指令DEC四条,格式如下:DECA ;A←A-1DECRn ;Rn←Rn-1DECdirect ;direct←(direct)-1DEC@Ri ;(Ri)←(Ri)-12026/4/257913.3.2算术运算类指令乘法指令MUL:(无符号数)MULAB;A×BBACY复位。对于OV:当积大于255时,OV为1;否则,OV为0
除法指令DIV:(无符号数)DIVAB ;A÷B商放A,余数放B
一般情况下CY和OV都清0,只有当B寄存器中的除数为0时,CY和OV才被置12026/4/258013.3.2算术运算类指令5) 十进制调整指令
十进制调整指令只有一条:
DAA
调整过程为:(1) 若累加器A的低四位为十六进制的A~F或辅助进位标志AC为1,则累加器A中的内容做加06H调整。(2) 若累加器A的高四位为十六进制的A~F或进位标志CY为1,则累加器A中的内容做加60H调整。2026/4/258113.3.3逻辑操作指令1.逻辑与指令ANLANLA,Rn ;A←A
RnANLA,direct ;A←A
(direct)ANLA,@Ri ;A←A
(Ri)ANLA,#data ;A←A
dataANLdirect,A ;(direct)←(direct)
AANLdirect,#data ;(direct)←(direct)
data2026/4/258213.3.3逻辑操作指令2.逻辑或指令ORL
ORLA,Rn ;A←A
RnORLA,direct ;A←A
(direct)ORLA,@Ri ;A←A
(Ri)ORLA,#data ;A←A
dataORLdirect,A ;(direct)←(direct)
AORLdirect,#data ;(direct)←(direct)
data2026/4/258313.3.3逻辑操作指令3.逻辑异或指令XRLXRLA,Rn ;A←A
RnXRLA,direct ;A←A
(direct)XRLA,@Ri ;A←A
(Ri)XRLA,#data ;A←A
dataXRLdirect,A ;(direct)←(direct)
AXRLdirect,#data ;(direct)←(direct)
data2026/4/258414.清零和求反指令(1) 清零指令:CLRA ;A←0(2) 求反指令:CPLA ;A←2026/4/258515.循环移位指令(1) 累加器A循环左移RL: RL A(2) 累加器A循环右移RR: RR A(3) 带进位的循环左移RLC: RLC A(4) 带进位的循环右移RRC: RRCA2026/4/258613.3.4控制转移指令1.无条件转移指令1) 无条件长转移指令LJMP指令格式:LJMPaddr16 ;PC←PC+2;PC←addr16可以转移到程序存储器64KB空间的任意位置缺点是:执行时间长,字节数多。2) 无条件绝对转移指令AJMP指令格式:AJMPaddr11 ;PC10~0←addr11当前位置2KB范围以内转移2026/4/258711.无条件转移指令3) 无条件相对转移指令SJMP指令格式:SJMPrel ;PC←PC+2;PC←PC+rel转移范围为-128~+127HERE:SJMPHERE或SJMP$4) 无条件散转指令JMP指令格式:JMP@A+DPTR ;PC←A+DPTR2026/4/258812.条件转移指令1) 累加器A判零条件转移指令判0指令JZ: JZrel ;PC←PC+2 ;若A=0,则PC←PC+rel;否则,顺次执行下一条指令判非0指令JNZ: JNZrel ;PC←PC+2 ;若A
0,则PC←PC+rel;否则,顺次执行下一条指令2026/4/258912) 比较转移指令CJNE有四条,格式如下:
CJNEA,#data,rel ;PC←PC+3 ;若A>data,则C=0,PC←PC+rel,转移 ;若A<data,则C=1,PC←PC+rel,转移 ;若A=data,不转移,顺次执行下一条指令CJNERn,#data,rel ;PC←PC+3 ;若Rn>data,则C=0,PC←PC+rel,转移 ;若Rn<data,则C=1,PC←PC+rel,转移 ;若Rn=data,不转移,顺次执行下一条指令2026/4/259012) 比较转移指令CJNECJNE@Ri,#data,rel ;PC←PC+3 ;若(Ri)>data,则C=0,PC←PC+rel,转移 ;若(Ri)<data,则C=1,PC←PC+rel,转移 ;若(Ri)=data,不转移,顺次执行下一条指令CJNEA,direct,rel ;PC←PC+3 ;若A>(direct),则C=0,PC←PC+rel,转移 ;若A<(direct),则C=1,PC←PC+rel,转移 ;若A=(direct),不转移,顺次执行下一条指令2026/4/259113) 减1不为零转移指令DJNZ
两条,格式如下:DJNZRn,rel ;PC←PC+2,Rn←Rn-1 ;若Rn
0,PC←PC+rel,转移;否则,顺次执行下一条指令DJNZdirect,rel ;PC←PC+2,(direct)←(direct)-1 ;若(direct)
0,PC←PC+rel,转移;否则,顺次执行下一条指令2026/4/259213.子程序调用及返回指令1) 长调用指令指令格式:
LCALLaddr16 ;PC←PC+3 ;SP←SP+1 ;(SP)←PC7~0 ;SP←SP+1 ;(SP)←PC15~8 ;PC←addr16,转移到子程序去执行2026/4/259312) 绝对调用指令指令格式:ACALLaddr11 ;PC←PC+2 ;SP←SP+1 ;(SP)←PC7~0 ;SP←SP+1 ;(SP)←PC15~8 ;PC10~0←addr11,转移到子程序去执行2026/4/259413) 子程序返回指令指令格式:RET ;PC←PC+1 ;PC15~8←(SP) ;SP←SP-1 ;PC7~0←(SP) ;SP←SP–1;返回执行调用指令的下一条指令2026/4/259513) 中断返回指令指令格式:RETI ;PC←PC+1 ;PC15~8←(SP) ;SP←SP-1 ;PC7~0←(SP) ;SP←SP–1;返回执行中断断点位置的下一条指令
返回前先清除中断的优先级触发器2026/4/259613.3.5位操作类指令1.位传送指令MOV MOVC,bit ;C←(bit) MOVbit,C ;(bit)←C2.位逻辑操作指令1) 位清0 CLRC ;C←0 CLRbit ;(bit)←02) 位置1
SETBC ;C←1 SETBbit (bit)←12026/4/259712.位逻辑操作指令3) 位取反 CPLC ;C←/C CPLbit ;(bit)←(bit)4) 位与 ANLC,bit ;C←C∧(bit) ANLC,/bit ;C←C∧(/bit)5) 位或 ORLC,bit ;C←C∨(bit) ORLC,/bit ;C←C∨(/bit)2026/4/259813.位转移指令1) 以C为条件的位转移指令 JCrel ;PC←PC+2 ;若C=1,PC←PC+rel,转移;否则,顺次执行下一条指令 JNCrel ;PC←PC+2 ;若C=0,PC←PC+rel,转移;否则,顺次执行下一条指令2026/4/259912) 以bit为条件的位转移指令JBbit,rel ;PC←PC+3 ;若(bit)=1,PC←PC+rel,转移;否则,顺次执行下一条指令JNBbit,rel ;PC←PC+3 ;若(bit)=0,PC←PC+rel,转移;否则,顺次执行下一条指令
JBCbit,rel ;PC←PC+3 ;若(bit)=1,PC←PC+rel,且(bit)←0,转移;否则,顺次执行下一条指令4.空操作指令NOP
NOP ;PC←PC+12026/4/2510013.451单片机汇编程序设计概述3.4.151单片机汇编程序设计过程(1)明确课题的具体内容,对程序功能、运算精度、执行速度等方面的要求及硬件条件。(2)把复杂问题分解为若干个模块,确定各模块的处理方法,画出程序流程图(简单问题可以不画)。对复杂问题可分别画出分模块流程图和总的流程图。(3)存储器资源分配,如各程序段的存放地址、数据区地址、工作单元分配等。(4)编制程序,根据程序流程图精心选择合适的指令和寻址方式来编制源程序。(5)对程序进行汇编、调试和修改。将编制好的源程序进行汇编,检查修改程序中的错误,执行目标程序,对程序运行结果进行分析,直至正确为止。2026/4/2510113.4.251单片机汇编程序常用伪指令1.ORG伪指令格式:ORGaddr ;通常用十六进制数表示地址2.DB伪指令格式:
[标号:]DB项或项表3.DW伪指令格式:
[标号:]DW项或项表2026/4/2510214.DS伪指令格式:[标号:]DS数值表达式5.EQU伪指令格式:符号EQU项6.DATA伪指令格式:
符号DATA直接字节地址2026/4/2510317.XDATA伪指令格式:
符号XDATA直接字节地址8.BIT伪指令格式:
符号BIT位地址9.END伪指令格式: END2026/4/2510413.551单片机常用汇编程序设计3.5.1数据传送程序【例3-18】把片内RAM的30H~3FH的16个字节的内容传送到片外RAM的1000H单元位置处。2026/4/251051程序如下:
ORG0000HLJMPMAINORG1000HMAIN:MOVR2,#16MOVR0,#40HMOVDPTR,#2000HLOOP:MOVA,@R0 ;@R0
@DPTRMOVX@DPTR,AINCR0INCDPTRDJNZR2,LOOPSJMP$END2026/4/2510613.5.2运算程序【例3-20】两个两字节无符号数相乘,其中:被乘数的高字节放在R7中,低字节放在R6中;乘数的高字节放在R5中,低字节放在R4中。乘得的积有4个字节,按由低字节到高字节的次序存于片内RAM中以ADDR为首地址的区域中。2026/4/251071R3R2R1@R02026/4/251081程序如下:ORG0000HLJMPMAINORG0100HMAIN:MOVR0,#ADDRMUL1:MOVA,R6MOVB,R4MULAB;R6
R4,结果的低字节直接存入积的第一字节单元MOV@R0,A ;结果的高字节存入R3中暂存起来MOVR3,BMUL2:MOVA,R7MOVB,R4MULAB ;R7R4,结果的低字节与R3相加后,再存入R3中ADDA,R3MOVR3,AMOVA,B ;结果的高字节加上进位位后存入R2中暂存起来ADDCA,#00MOVR2,A2026/4/251091MUL3:MOVA,R6MOVB,R5MULAB ;R6
R5,结果的低字节与R3相加存入积的第二字节单元ADDA,R3INCR0MOV@R0,AMOVA,R2ADDCA,B ;结果的高字节加R2再加进位位后,再存入R2中MOVR2,AMOVA,#00ADDCA,#00 ;相加的进位位存入R1中MOVR1,AMUL4:MOVA,R7MOVB,R5MULAB ;R7
R5,结果的低字节与R2相加存入积的第三字节单元ADDA,R2INCR0MOV@R0,AMOVA,BADDCA,R1 ;结果的高字节加R1再加进位位后存入积的第四字节单元INCR0MOV@R0,ASJMP$END3.5.3代码转换程序【例3-22】一位十六进制数转换成8段式数码管共阴极显示码。设数放在R2中,查得的显示码也放于R2中。2026/4/2511011)用MOVCA,@A+DPTR构造的查表程序段:ORG0200HCONVERT:MOVDPTR,#TAB;DPTR指向表首地址MOVA,R2;转换的数放于AMOVCA,@A+DPTR;查表指令转换MOVR2,ARETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,67H,77H,7CH,39H,5EH,79H,71H;显示码表2026/4/2511112)用“MOVCA,@A+PC”构造的查表程序段:ORG0200HCONVERT:MOVA,R2;转换的数放于A
ADDA,#03H ;加查表指令相对于表首的位移量 MOVCA,@A+PC;查表指令转换 MOVR2,A RETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07HDB7FH,67H,77H,7CH,39H,5EH,79H,71H;显示码表3.5.4分支程序1.一般分支程序【例3-23】从片外RAM的1000H单元开始放了200个英文符号,要求统计它们当中字符“A”的个数,放于R7中。2026/4/251121程序段如下:ORG0000HLJMPMAINORG0100HMAIN:MOVR2,#200MOVDPTR,#1000HMOVR7,#0LOOP:MOVXA,@DPTRCJNEA,#41H,NEXTINCR7NEXT:INCDPTRDJNZR2,LOOPSJMP$END2.多分支程序JMP@A+DPTR实现多分支程序过程如下:先用无条件转移指令(“AJMP”或“LJMP”)按顺序构造一个转移指令表,通过转移指令表中的指令可转移到各个分支。将转移指令表的首地址装入DPTR中,用分支信息形成变址装入累加器A。执行多分支转移指令JMP@A+DPTR实现转移。2026/4/251131【例3-24】现有10路分支,分支号分别为0~9,要求根据R2中的分支号转向各个分支的程序。2026/4/251141程序段如下:ORG1000HMOVA,R2RLA ;分支信息乘2形成变址值放入累加器AMOVDPTR,#TAB ;DPTR指向转移指令表的首地址JMP@A+DPTR ;转向形成的散转地址RETTAB:AJMPOPR0;转移指令表 AJMPOPR1
AJMPOPR9
OPR0:…OPR1:…
OPR9:…3.5.5延时程序【例3-25】下面是延时500us的程序,设系统时钟频率12MHZ。
DEL500us:MOVR7,#124 ;1个机器周期 NOP ;1个机器周期LOOP:NOP ;1个机器周期 NOP ;1个机器周期 DJNZR7,LOOP ;2个机器周期RET ;2个机器周期
系统时钟频率12MHZ,机器周期1us。延时时间计算如下:
延时时间=[1+1+124
(1+1+2)+2]
1us=500us2026/4/251151习
题2、3、5、6、7、9、10、122026/4/251161单片机技术及应用——基于
汇编及C51程序设计第4章51单片机C程序设计主要章节4.1C语言与51单片机4.2C51的数据类型4.3C51的变量与存储类型4.4绝对地址的访问4.5C51中的函数2026/4/2511814.1C语言与51单片机一、C语言的特点1) 语言简洁、紧凑,使用方便、灵活2) 运算符丰富3) 数据结构丰富,具有现代化语言的各种数据结构4) 可进行结构化程序设计5) 可以直接对计算机硬件进行操作6) 生成的目标代码质量高,程序执行效率高7) 可移植性好2026/4/2511914.1C语言与51单片机二、C语言程序的结构
函数结构2026/4/2512014.1C语言与51单片机三、C51与标准C语言(1) C51中的数据类型与标准C语言的数据类型有一定的区别。(2) C51在变量定义与使用上与标准C语言不一样。(3) 为了方便对51单片机硬件资源进行访问,C51在绝对地址访问上对标准C语言进行了扩展。(4) C51中函数的定义与使用与标准C语言也不完全相同。(5) C51的主函数main()内部格式与标准C语言也有一定的区别。2026/4/2512114.2C51的数据类型2026/4/251221基本数据类型名称长
度取值范围unsignedchar无符号字符型1字节0~255signedchar有符号字符型1字节-128~+127unsignedint无符号整型2字节0~65535signedint有符号整型2字节-32768~+32767unsignedlong无符号长整型4字节0~4294967295signedlong有符号长整型4字节-2147483648~+2147483647float浮点型4字节
1.175494E-38~
3.402823E+38bit位型1位0或1sbit特殊位型1位0或1sfr8位特殊功能寄存器型1字节0~255sfr1616位特殊功能寄存器型2字节0~65
5354.2C51的数据类型2026/4/251231一般数据类型与标准C语言的区别特殊有数据类型一、特殊功能寄存器型sfr和sfr16sfr:字节型特殊功能寄存器类型,占一个内存单元,访问51内部的字节型特殊功能寄存器;sfr16:双字节型特殊功能寄存器类型,占两个字节单元,访问51内部的双字节型特殊功能寄存器;2026/4/251241二、位类型bit型和sbit型bit定义的位变量在用C51编译器编译时,在不同的时候位地址是可以变化的。sbit定义的位变量必须与51单片机的一个可以寻址位单元或可位寻址的字节单元中的某一位联系在一起,在C51编译器编译时,其对应的位地址是不可变化的。2026/4/2512514.3C51的变量与存储类型一、C51的普通变量及定义格式如下:[存储种类]数据类型说明符[存储器类型]变量名1[=初值],变量名2[=初值]…;1.数据类型说明符
数据类型说明符来指明变量的数据类型2.变量名C51区分不同变量,为不同变量取的名称2026/4/2512613.存储种类
指明变量在程序执行过程中的作用范围。分别是自动(auto)、外部(extern)、静态(static)和寄存器(register)。4.存储器类型2026/4/251271存储器类型描
述data直接寻址的片内RAM低128B,访问速度快bdata片内RAM的可位寻址区(20H~2FH),允许字节和位混合访问idata间接寻址访问的片内RAM,允许访问全部片内RAMpdata用Ri间接访问的片外RAM低256Bxdata用DPTR间接访问的片外RAM,允许访问全部64KB片外RAMcode程序存储器ROM
64KB空间存储模式:(默认存储器类型)SMALL模式
函数参数和变量被默认在片内RAM中,存储器类型为data。COMPACT模式
函数参数和变量被默认在片外RAM的低256B空间,存储器类型为pdataLARGE模式
参数和变量被默认在片外RAM的64B空间,存储器类型为xdata2026/4/2512814.3C51的变量与存储类型二、特殊功能寄存器变量
通过sfr或sfr16类型说明符进行定义,格式如下:sfr或sfr16特殊功能寄存器变量名=地址;sfr用于单字节,sfr16用于对双字节。地址为特殊功能寄存器的地址。变量名一般用大写字母表示。取名时一般与相应的的特殊功能寄存器名相同。2026/4/251291【例4-3】特殊功能寄存器的定义。sfrACC=0xE0;sfrPSW=0xd0;sfrTMOD=0x89;sfrP0=0x80;sfrDPL=0x82;sfrDPH=0x83;sfr16DPTR=0x82;sfr16T0=0X8A;2026/4/2513014.3C51的变量与存储类型三、位变量1.一般位变量bit定义,格式如下:bit[存储器类型]位变量名;存储器类型只能是bdata、data、idata不能指定地址,只能由编译器自动分配。2026/4/2513112.特殊功能位变量sbit定义,格式如下:sbit位变量名=位地址;sbit通常对51单片机的特殊功能寄存器中的特殊功能位进行定义
后面必须带位地址,可直接地址,可可位寻址变量带位号或特殊功能寄存器名带位号位变量名一般取成大写,而且名称与相应的特殊功能位名称相同。2026/4/251321【例4-5】sbit型变量的定义。
sbitOV=0xd2;sbitCY=0xd7;unsignedcharbdataflag;sbitflag0=flag^0;sfrP0=0x80;sbitP0_0=P0^0;sbitP0_1=P0^1;sbitP0_2=P0^2;sbitP0_3=P0^3;sbitP0_4=P0^4;sbitP0_5=P0^5;sbitP0_6=P0^6;sbitP0_7=P0^7;2026/4/251331“reg51.h”或“reg52.h”“#include<reg51.h>”四、指针变量1.存储器型指针定义时指明了所指向的数据的存储器类型格式:
数据类型说明符
存储器类型
*[存储器类型]指针变量名;2026/4/251341所指向的数据的存储器类型指针变量自身的存储器类型例如:charxdata*datap2;charxdata*p1;2026/4/2513512.一般指针
定义时没有指明所指向的数据的存储器类型
一般指针在存储器中占3个字节,其中第1个字节为指针所指向数据的存储器类型代码。4.4绝对地址的访问一、使用C51运行库中预定义宏absacc.h文件#defineCBYTE((unsignedcharvolatile*)0x50000L)#defineDBYTE((unsignedcharvolatile*)0x40000L)#definePBYTE((unsignedcharvolatile*)0x30000L)#defineXBYTE((unsignedcharvolatile*)0x20000L)
#defineCWORD((unsignedintvolatile*)0x50000L)#defineDWORD((unsignedintvolatile*)0x40000L)#definePWORD((unsignedintvolatile*)0x30000L)#defineXWORD((unsignedintvolatile*)0x20000L)访问形式如下:
宏名[地址]2026/4/251361一、使用C51运行库中预定义宏2026/4/251371【例4-6】绝对地址对存储单元的访问。#include<absacc.h> #include<reg52.h> #defineucharunsignedchar#defineuintunsignedintvoidmain(void){ucharvar1;uintvar2;var1=XBYTE[0x7f00]; var2=XWORD[0x7f02]; while(1);}二、通过指针访问2026/4/251381【例4-7】通过指针实现绝对地址的访问。#defineucharunsignedchar #defineuintunsignedint voidfunc(void){uchardatavar1;ucharpdata*k1; uintxdata*k2;
uchardata*k3;
k1=0x40; k2=0x7F00; *k1=0x4f; *k2=0x2233; k3=&var1; *k3=0x30; }使用C51扩展关键字_at_2026/4/251391【例4-8】通过_at_实现绝对地址的访问。#defineucharunsignedchar #defineuintunsignedint dataucharx1_at_0x30; xdatauintx2_at_0x7F00; voidmain(void){x1=0xff;x2=0x1234;while(1);}格式如下:[存储器类型]数据类型说明符变量名_at_地址常数;4.5C51中的函数一、C51函数的参数传递
两种
一种是通过寄存器R0~R7传递参数;第二种是通过固定存储区传递。2026/4/251401参数类型charintlong/float通用指针第1个R7R6、R7R4~R7R1、R2、R3第2个R5R4、R5R4~R7R1、R2、R3第3个R3R2、R3无R1、R2、R3二、C51函数的返回值返回值通常用寄存器传递2026/4/251411返回值类型寄存器说
明BitC由位运算器C返回(unsigned)charR7在R7返回单个字节(unsigned)intR6、R7高位在R6,低位在R7(unsigned)longR4~R7高位在R4,低位在R7floatR4~R732位IEEE格式通用指针R1、R2、R3存储类型在R3,高位在R2,低位在R1三、C51的中断函数interruptm修饰符m的取值为0~31,对应的中断情况如下:0——外部中断01——定时/计数器T02——外部中断13——定时/计数器T14——串行口中断5——定时/计数器T22026/4/251421注意:(1) 中断函数不能进行参数传递(2) 中断函数没有返回值(3) 在任何情况下都不能直接调用中断函数(4) 如果在中断函数中调用了其他函数,则被调用函数所使用的寄存器必须与中断函数相同,否则会产生不正确的结果。(5) C51编译器对中断函数编译时会自动在程序开始和结束处加上相应的内容(6) C51编译器从绝对地址8m+3处产生一个中断向量(7) 中断函数最好写在文件的尾部,并且禁止使用extern存储类型说明2026/4/251431【例4-10】编写一个用于统计外中断0的中断次数的中断服务程序。
externintx;voidint0()interrupt0{x++;}2026/4/251441四、C51函数的寄存器组usingn修饰符n的取值为0~3:0组、1组、2组和3组注意:(1) 加入usingn后,C51在编译时自动在函数的开始处和结束处加入相应指令(2) usingn修饰符不能用于有返回值的函数2026/4/251451五、C51的重入函数reentrant修饰符重入函数的参数和局部变量是通过C51生成的模拟栈来传递和保存,递归调用或多重调用时参数和变量不会被覆盖注意:(1) 用reentrant修饰的重入函数被调用时,实参表内不允许使用bit类型的参数(2) 编译时,系统为重入函数在内部或外部存储器中建立一个模拟堆栈区,称为重入栈(3) 在参数的传递上,实际参数可以传递给间接调用的重入函数2026/4/251461习
题1、2、3、4、6、72026/4/251471单片机技术及应用——基于
汇编及C51程序设计第5章51单片机中断系统主要章节5.1中断的基本概念5.251单片机的中断系统5.351单片机中断系统的编程与应用2026/4/2514915.1中断的基本概念1中断的概念
什么是中断?2中断源及中断请求3中断优先权控制4中断允许与中断屏蔽5中断响应与中断返回2026/4/251501断点地址5.251单片机的中断系统5.2.151单片机的中断系统总体结构2026/4/2515115.2.251单片机的中断源1.外部中断
和
外部引脚P3.2和P3.3两种触发方式:电平触发及跳变(边沿)触发定时/计数器控制寄存器TCONIT0(IT1):触发方式控制位。0:电平触发方
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025-2030中国塔式服务器行业应用动态与发展趋势预测报告
- 2025-2030中国唇部护理行业需求规模预测与竞争战略规划报告
- 大班小学生的早晨
- 七年级数学教学工作总结7篇
- 周口师范学院就业指导服务
- 2026年贵州高考历史解析含答案
- 2025年广西壮族自治区百色市八年级地生会考考试题库(附含答案)
- 2025年湖南省怀化市八年级地理生物会考真题试卷(含答案)
- 2025年广东省中山市初二学业水平地理生物会考试卷题库及答案
- 2025年广东省深圳市初二学业水平地生会考试题题库(答案+解析)
- 2026河北省国控商贸集团有限公司招聘备考题库及一套答案详解
- (2026版)医疗保障基金使用监督管理条例实施细则的学习与解读课件
- 挖机租赁合同计时
- 浙江省2024浙江省药品监督管理局所属3家事业单位招聘15人笔试历年参考题库典型考点附带答案详解
- 社会团体内部规章制度
- 2025年国家药品监督管理局药品审评中心考试真题(附答案)
- 国家艾滋病随访指南
- 证人证言(模板)
- 【高二物理(人教版)】静电的防止与利用-课件
- DB32∕T 2975-2016 水运工程建设管理用表
- 危险废弃物处置合同范本
评论
0/150
提交评论