资源预览内容
第1页 / 共251页
第2页 / 共251页
第3页 / 共251页
第4页 / 共251页
第5页 / 共251页
第6页 / 共251页
第7页 / 共251页
第8页 / 共251页
第9页 / 共251页
第10页 / 共251页
亲,该文档总共251页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
MCS-51 单片机原理及应用教程单片机原理及应用教程 清华大学出版社清华大学出版社刘迎春刘迎春 主编主编本书主要内容本书主要内容l单片机基础知识l单片机的组成与结构分析lMCS-51 单片机的指令系统l单片机的程序设计lMCS-51单片机的中断系统l定时/计数器l单片机的串行通信及接口lMCS-51单片机的系统扩展l接口技术lMCS-51兼容机及串行总线扩展第第1章章 单片机的基础知识单片机的基础知识微型计算机的系统组成微型计算机的系统组成单片机概述单片机概述不同计数制之间的转换数的表示方法数的表示方法思考练习题思考练习题1.1 微型计算机的系统集成微型计算机的系统集成1.1 微型计算机的系统组成微型计算机的系统组成1.1.1 主机主机主机一般由运算器、控制器和主存储器组成。1.运算器运算器是进行算术和逻辑运算的部件,它由完成加法运算的加法器、存放操作数和运算结果的寄存器和累加器等组成。2.控制器它是整个计算机硬件系统的指挥中心,根据不同的指令产生不同的动作,指挥整个机器有条不紊地自动地进行工作。3.主存储器主存储器又称为内存储器,它由大量的存储单元组成,用以存储大量的数据及程序。1.1.2外部设备1.输入设备目前常用的有键盘、软驱、磁带机、光驱等2.输出设备常用的有显示器、打印机、绘图仪等3.外存储器常用的外存有磁带、磁盘、光盘,其中磁盘又可分为硬盘及软盘。1.2 单片机概述单片机概述1.2.1单片机的发展概况第一阶段(19711976)第二阶段(19761979)第三阶段(19791982)第四阶段(19821990)第五阶段(1990至今)1.2.2 1.2.2 单片机的应用单片机的应用1. 在工业测控中的应用2. 在智能产品中的应用3. 在计算机网络与通信技术中的应用1.2.3 1.2.3 单片机的发展趋势单片机的发展趋势1.3 不同计数制之间的转换不同计数制之间的转换1.3.1 1.3.1 十进制数十进制数一个十进制数,它的数值是由数码0,1,2,8,9来表示的。数码所处的位置不同,代表数的大小也不同。 例如:53478=5104+3103+4102+7101+8100,对应于:1.3.2 1.3.2 二进制数二进制数二进制是按“逢二进一”的原则进行计数的。二进制数的基为“2”,即其使用的数码为0、1,共两个。二进制数的权是以2为底的幂。 例如:10110100=127+026+125+124+023+122+021+020,对应于:其各位的权为1,2,4,8,即以2为底的0次幂、1次幂、2次幂等。(10110100)2127+026+125+124+023+122+021+020=1801.3.3 1.3.3 十六进制数十六进制数十六进制数的基为16,即基数码共有l6个:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F。其中A,B,C,D,E,F分别代表值为十进制数中的10,11,12,13,14,15。十六进制的权为以16为底的幂。例如:4F8E=4163+F162+8161+E160=20366,对应于:常用计数制表示数的方法比较常用计数制表示数的方法比较十进制二进制十六进制0 00 1 11 2 102 3 113 4 1004 5 1015 6 1106 7 1117 8 10008 9 10019 10 1010A 11 1011B 12 1100C 13 1101D 14 1110E 15 1111F 16 1000010 1.3.4 1.3.4 不同进制数之间的转换不同进制数之间的转换1. 十进制数转换成二进制数的方法就是用2去除该十进制数,得商和余数,此余数为二进制代码的最小有效位(LSB)或最低位的值;再用2除该商数,又可得商数和余数,则此余数为LSB左邻的二进制代码(次低位)。依此类推,从低位到高位逐次进行,直到商是0为止,就可得到该十进制数的二进制代码。 除二取余法除二取余法1.3.4 1.3.4 不同进制数之间的转换不同进制数之间的转换例如:将(67)10转换成二进制数,过程如下:即:(67)10=(1000011)2。1.3.4 1.3.4 不同进制数之间的转换不同进制数之间的转换1. 十进制数转换成二进制数的方法将已知十进制的小数乘以2之后,可能有进位,使整数位为1(当该小数大于0.5时),也可能没有进位,其整数位仍为零。该整数位的值为二进制小数的最高位。再将乘积的小数部分乘以2,所得整数位的值为二进制小数的次高位。依此类推,直到满足精度要求或乘2后的小数部分为0为止。 乘二取整法乘二取整法例如:将(0.625)10转换成二进制数,其过程如下:即:(0.625)10=(0.101)21.3.4 1.3.4 不同进制数之间的转换不同进制数之间的转换2. 二进制数转换为十进制数的方法将二进制数转换成十进制数时,只要将二进制数各位的权乘以各位的数码(0或1)再相加即可。例如:将(1101.1001)2制转换成十进制数:(1101.1001)2123+122+021+120+12-1+02-2+02-3+12-48+4+0+1+0.5+0+0+0.0625=(13.5625)101.3.4 1.3.4 不同进制数之间的转换不同进制数之间的转换3. 二进制与十六进制数之间的转换方法1)二进制数转换成十六进制数2)例如:把(101101101.1100101)2转换成十六进制数。即:(101101101.1100101)2=(16D.CA)16。1.3.4 1.3.4 不同进制数之间的转换不同进制数之间的转换2)十六进制数转换成二进制数将十六进制数转换成二进制数时,只要将每1位十六进制数用4位相应的二进制数表示即可完成转换。例如:将(ECA16)16转换成二进制数。即:(ECA16)16=(11101100101000010110)2。1.3.5 1.3.5 二进制数的算术运算规则二进制数的算术运算规则1. 二进制加法基本规则0+0=00+1=1+0=11+1=0向邻近高位有进位1+1+1=1向邻近高位有进位2. 二进制减法基本规则0-0=01-1=01-0=10-1=1向邻近高位有借位3. 二进制乘法基本规则00=001=10=011=14. 二进制除法基本规则1/1=10/1=01. 逻辑与运算基本规则00=010=01=011=12. 逻辑或运算基本规则00=010=01=111=11.3.6 1.3.6 逻辑运算逻辑运算3. 逻辑非运算基本规则/0=1/1=04. 逻辑异或运算基本规则00=11=010=01=11.4.1 1.4.1 真值与机器数真值与机器数单片机用来表示数的形式称为机器数,也称为机器码。而把对应于该机器数的算术值称为真值。 设:N1=+1010101N2=-1010101这两个数在机器中表示为:N1:01010101N2:110101011.4 数的表示方法数的表示方法在计算机中还有一种数的表示方法,即机器中的全部有效位均用来表示数的大小,此时无符号位,这种表示方法称为无符号数的表示方法。 1.4.2 1.4.2 原码、反码、补码原码、反码、补码1. 原码表示法原码表示法是最简单的一种机器数表示法,只要把真值的符号部分用0或1表示即可。例如:真值为+34与-34的原码形式为:+34原=00100010-34原=101000100的原码有两种形式:+0原=00000000-0原=100000001.4 数的表示方法数的表示方法8位二进制数原码的表示范围为:1111111101111111,对应于-127+127。2. 反码表示法反码是二进制数的另一种表示形式,正数的反码与原码相同;负数的反码是将其原码除符号位外按位求反。即原来为1变为0,原来为0变为1。例如:+34反=+34原=00100010-34原=10100010,-34反=110111010的反码也有两种形式:+0反=00000000-0反=111111118位二进制数反码的表示范围为:1000000001111111,对应于-127+127。 1.4 数的表示方法数的表示方法3. 补码表示法1.4 数的表示方法数的表示方法正数的补码表示方法与原码相同,负数的补码表示方法为它的反码加1。例如:-21原=10010101-21反=11101010-21补=111010110的补码只有一种表示方法,即+0补=-0补=00000000。8位二进制数的补码所能表示的范围为1000000101111111,对应于-128+127。1.4.3 BCD1.4.3 BCD码码十进制8421BCD码二进制0 000000001 000100012 001000103 001100114 010001005 010101016 011001107 011101118 100010009 1001100110 0001 0000101011 0001 0001101112 0001 0010110013 0001 0011110114 0001 0100111015 0001 010111111.4.4 ASCII1.4.4 ASCII码码ASCII码是一种8位代码,最高位一般用于奇偶校验,用其余的7位代码来对128个字符编码,其中32个是控制字符,96个是图形字符。1.5 思考练习题思考练习题(1)微型计算机由哪几部分组成?(2)什么是单片机?它与一般微型计算机在结构上有什么区别?(3)单片机主要应用在哪些方面?(4)将下面的一组十进制数转换成二进制数:56742319896814276.87 0.375 9.325 83.625134.0625(5)将下面的二进制数转换成十进制数和十六进制数:101100111010010111101001100111101000010111000101111011101000110011011.11101.01101(6)原码已经在下面列出,试写出各数的反码与补码:1000110110101100111010111000100111111111011000010111000111111001第第2章章 单片机的组成与结构分析单片机的组成与结构分析MCS-51单片机的内部结构单片机的内部结构CPU的结构和功能的结构和功能存储器的组织结构存储器的组织结构MCS-51单片机的并行输入输出端口单片机的并行输入输出端口MCS-51 单片机的外部引脚及功能单片机的外部引脚及功能单片机指令时序单片机指令时序思考练习题思考练习题2.1 MCS-51单片机的内部结构单片机的内部结构2.1 MCS-51单片机的内部结构单片机的内部结构其基本特性如下:8位CPU,含片内振荡器;4KB的程序存储器ROM;128B的数据存储器RAM;64KB的外部程序存储器寻址能力;64KB的外部数据存储器寻址能力;32根输入输出(I/O)线;2个16位定时/计数器;1个全双工异步串行口;21个特殊功能寄存器;5个中断源,2个优先级;具有位寻址功能。2.2 CPU的结构和功能的结构和功能2.2.1 2.2.1 运算器运算器8051单片机的运算器由算术/逻辑运算单元ALU、累加器A、寄存器B、暂存器1、暂存器2以及程序状态字寄存器PSW组成。 图2.2 PSW寄存器各位的标志符号表2.1 寄存器PSW各位的功能、标志符号与相应的位地址功能标志符号位地址进位标志(又是C寄存器)CYPSW.7辅助进位标志ACPSW.6用户标志FOPSW.5工作寄存器组选择RS1PSW.4工作寄存器组选择RS0PSW.3溢出标志OVPSW.2保留PSW.1奇偶标志PPSW.02.2.2 2.2.2 控制器控制器2.3 存储器的组织结构存储器的组织结构存储器的功能是存储信息(即程序与数据)。存储器是组成计算机的主要部件,目前所使用的存储器以半导体存储器为主。从功能上来划分,半导体存储器可分为两大类:即只读存储器(ROM),和随机存储器(RAM)。8051单片机的控制器由指令寄存器、指令译码器、堆栈指针SP、程序计数器PC、数据指针DPTR、RAM地址寄存器以及16位地址缓冲器等组成。2.3.1 MCS-512.3.1 MCS-51单片机的存储器结构单片机的存储器结构图2.3 8051存储器配置图2.3.2 2.3.2 程序存储器程序存储器程序是控制计算机运行的一系列命令。计算机能够识别并执行的命令是由代码“0”和“1”组成的一组机器指令。 2.3.3 2.3.3 数据存储器数据存储器单片机的数据存储器由可读可写的存储器RAM组成,最多可扩展到64KB,用于存储数据。 2.3.4 MCS-512.3.4 MCS-51单片机的内部数据存储器单片机的内部数据存储器MCS-51单片机的内部数据存储器由地址00HFFH共有256个字节的地址空间组成,这256个字节的地址空间被分为两部分,其中内部数据RAM地址为00H7FH(即0127)。图2.4 内部数据存储器地址空间1. 内部数据RAM单元内 部 数 据RAM分 为工 作 寄 存器 区 、 位寻 址 区 、通 用 RAM区 三 个 部分。图2.5 RAM位地址(低128位在00H7FH)(a)系统复位后,未改变SP初值时的堆栈操作(设(A)=0ABH)(b)系统复位后,改变SP初值为60H时的堆栈操作图2.6 堆栈操作示例2. 特殊功能寄存器特殊功能寄存器SFR的地址空间是80HFFH。表2.3 特殊功能寄存器的名称、符号与地址特殊功能寄存器名称符号位地址与位名称字节地址D7D6D5D4D3D2D1D0B寄存器BF7F6F5F4F3F2F1F0F0H累加器AE7E6E5E4E3E2E1E0E0H程序状态字PSWD7D6D5D4D3D2D1D0D0HCACF0RS1RS0OVP中断优先级控制IPBFBEBDBCBBBAB9B8B8HPSPT1PX1PT0PX0D7D6D5D4D3D2D1D0P3口P3B7B6B5B4B3B2B1B0B0HP3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.02. 特殊功能寄存器中断允许控制IEAFAEADACABAAA9A8A8HEAESET1EX1ET0EX0P2口P2A7A6A5A4A3A2A1A0A0HP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0串行数据缓冲器SBUF99H串行控制SCON9F9E9D9C9B9A999898HSM0SM1SM2RENTB8RB8TIRIP1口P1979695949392919090HP1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0定时/计数器1高字节TH18DH定时/计数器0高字节TH08CH2. 特殊功能寄存器定时/计数器1低字节TL18BH定时/计数器0低字节TL08AH定时/计数方式控制TMODGATEC/TM1M0GATEC/TM1M089H2. 特殊功能寄存器特殊功能寄存器名称符号位地址与位名称字节地址D7D6D5D4D3D2D1D0定时器控制寄存器TCON8F8E8D8C8B8A898888HTF1TR1TF0TR0IE1IT1IE0IT0电源控制PCONSMOD87H数据指针高字节DPH83H数据指针低字节DPL82H堆栈指针SP81HP0口P0878685848382818080HP0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.02.4 MCS-51单片机的并行输入输出端口单片机的并行输入输出端口2.4.1 P02.4.1 P0口结构口结构1. P0用作通用I/O口2. P0用作地址/数据总线分时复用方式2.4.2 P22.4.2 P2口结构口结构1. P2口用作地址总线2. P2口用作通用I/O口2.4.3 P32.4.3 P3口结构口结构2.4.4 P12.4.4 P1口结构口结构2.5 MCS-51单片机的外部引脚及功能单片机的外部引脚及功能2.5.1 2.5.1 电源引脚电源引脚(b)双列直插式封装(a)方形封装2.5.2 2.5.2 外接晶振或外部时钟信号输入端外接晶振或外部时钟信号输入端 (a)内部振荡器方式(b)外部振荡器方式图2.12 8051单片机的振荡器方式表2.4 按不同工艺制造的单片机芯片外接振荡器时的接法芯片类型接法XTAL1XTAL2CHMOS接外部振荡器脉冲输入端(带上拉电阻)悬浮HMOS接地接外部振荡器脉冲输入端(带上拉电阻)2.5.3 2.5.3 输入输出引脚输入输出引脚P0.0P0.7:通道0是一个8位漏极开路的双向输入输出通道。在外接存储器或者扩展I/O接口时,P0口作为复用的低8位地址总线和双向数据总线。在不扩展存储器或者I/O接口时,作为准双向输入输出接口。P1.0P1.7:只有一种功能,即准双向I/O口。P2.0P2.7:可作为准双向I/O口使用;但在接有片外存储器或扩展I/O接口范围超过256B时,则该口一般只能作为高8位地址总线使用。P3.0P3.7:该口除了作为准双向口外,还具有第二功能。2.5.4 2.5.4 控制线控制线1.ALE/2.3./VPP4.RST(a)上电复位(b)电平开关复位图2.13复位电路2.6 单片机指令时序单片机指令时序2.7 思考练习题思考练习题(1)MCS-51单片机包含哪些主要逻辑功能部件?(2)程序状态字寄存器PSW包含哪几个标志位?各位的含义是什么?各有何作用?(3)什么叫单片机?(4)MCS-51单片机的存储结构有何特点?(5)单片机的端有何作用?在8031组成的单片机应用系统中,其端怎样处理?为什么?(6)单片机内部RAM分为哪几个部分?各有何作用?(7)MCS-51单片机的堆栈SP在操作中遵循什么原则?在开机复位时,其初值是多少?是否可以通过程序重新设置?(8)怎样确定和改变单片机当前的工作寄存器组?(9)简要说明单片机的位地址分配。(10)试画出常用的单片机复位电路,并说明复位后各个寄存器的状态。第3章MCS-51单片机的指令系统u 汇编语言的指令格式及符号简介汇编语言的指令格式及符号简介u 寻址方式u 数据传送类指令u算术运算类指令u逻辑运算类指令u位操作类指令u控制转移类指令u思考练习题3.1 汇编语言的指令格式及符号简介汇编语言的指令格式及符号简介3.1.1 指令格式指令格式标号:操作码助记符第一操作数,第二操作数,第三操作数;注释例如:LOOP:MOVA,#50H;(A)50HDECR0;(R0)(R0)-1DJNZR0,LOOP ;(R0)-10,则程序转移到LOOP地址;否则顺序执行END;结束3.1.2 本章中符号的定义本章中符号的定义3.2 寻寻 址址 方方 式式MCS-51单片机有7种寻址方式,见表3.1。表3.17种寻址方式的比较序号寻址方式利用的寄存器和存储空间1立即寻址程序存储器ROM2直接寻址内部RAM、特殊功能寄存器SFR3寄存器寻址寄存器R0R7、A、B、DPTR和C(布尔累加器)4寄存器间接寻址内部RAM(R0、R1、SP)、外部RAM(R0、R1、DPTR)5变址寻址程序存储器ROM(A+DPTR、A+PC)6相对寻址程序存储器ROM(PC+偏移量)7位寻址内部RAM的20H2FH单元和部分SFR3.2.1 立即寻址立即寻址例如:MOVA,#23H;(A)23H,即累加器A的内容被替换为立即数23H。图3.1MOVA,#23H的执行示意图该指令的功能是将8位的立即数23H传送到累加器A中。如图3.1所示。其中,目的操作数采用寄存器寻址,源操作数采用立即寻址。3.2.2 直接寻址直接寻址直接寻址是指在指令中包含了操作数的地址,该地址直接给出了参加运算或传送的单元或位。直接寻址方式可访问三种地址空间:特殊功能寄存器SFR(该空间只能采用直接寻址)。内部数据RAM的低128个字节单元(该空间还可以采用寄存器间接寻址)。221个位地址空间。例如例如:MOVA,40H;把40H单元的内容送到累加器中,即(A)(40H)。图3.2MOVA,40H的执行示意图3.2.3 寄存器寻址寄存器寻址寄存器寻址是指定某一可寻址的寄存器的内容为操作数。例如:MOVA,R0;(A)(R0)该指令的功能是将R0中的数据传送到累加器A中。源操作数与目的操作数都采用了寄存器寻址。在MCS-51单片机中,能够用来间接寻址的寄存器有:用户所选定的工作寄存器组的R0、R1,堆栈指针SP和16位的数据指针DPTR。内部数据RAM的寄存器间接寻址采用寄存器R0、R1;外部数据RAM的寄存器间接寻址有两种形式:一是采用R0、R1作间址寄存器,这时R0或R1提供低8位地址,而高8位地址则由P2端口提供;二是采用16位的DPTR作间址寄存器。3.2.4 寄存器间接寻址寄存器间接寻址例如:设R0的内容为60H,且(60H)=10H,即60H地址单元中的内容为10H,则语句MOVA,R0的执行过程如图3.3所示。执行后,(A)=10H,即累加器A的内容成为10H。图3.3MOVA,R0的执行示意图又如:MOVXA,R0;(A)(R0),用R0间接寻址的单元中的内容替换A的;内容。MOVXA,DPTR;(A)(DPTR),用DPTR间接寻址的单元中的内容替换;A的内容。3.2.5 变址寻址变址寻址这种寻址方式是以数据指针DPTR或程序计数器PC作为基址寄存器,以累加器A作为偏移量寄存器,将一个基址寄存器的内容与偏移量寄存器的内容之和作为操作数地址。例如:MOVCA,A+DPTR设(A)=10H,(DPTR)=1000H,程序存储器的(1010H)=45H,则上面程序语句的功能是将A的内容与DPTR的内容相加形成操作数地址(1010H),把该地址中的数据传送到累加器A。即(A)(A)+(DPTR)。结果:(A)=45H。图3.4MOVCA,A+DPTR的执行示意图相对寻址相对寻址是把指令中给定的地址偏移量rel与程序计数器PC的当前值(读出该双字节或三字节的跳转指令后,PC指向的下条指令的地址)相加,得到真正的程序转移地址。例如:JC80H若C=0,则PC值不变,若C=1,则以当前PC值为基地址,加上80H得到新的PC值。设该转移指令存放在1005H单元,取出操作码后PC指向1006H单元,取出偏移量后PC指向1007H单元,所以计算偏移量时PC当前地址为1007H,已经为转移指令首地址加2,这里的偏移量以补码给出,所以80H代表着-80H,补码运算后,就形成跳转地址0F87H。其过程如图3.5所示。3.2.6 相对寻址相对寻址3.2.6 相对寻址相对寻址图3.5JC80H的执行示意图3.2.7 位寻址位寻址MCS-51单片机可对片内RAM的两个区域进行位寻址:一个是20H2FH单元的128位,另一个是特殊功能寄存器的93位。在寻址时,同一个位地址可以有多种标识方式,读者可参看后面3.6节“位操作指令”的相关内容。3.3.1 通用传送指令通用传送指令格式:MOV目的操作数,源操作数功能:把第二操作数指定的字节内容传送到第一操作数指定的单元中。不影响源操作数内容,不影响别的寄存器和标志。1. 以累加器A为目的操作数的传送类指令3.3 数据传送类指令数据传送类指令指令助记符及功能说明如下:目的操作数源操作数功能说明源操作数寻址方式MOVA,direct;(A)(direct)直接寻址MOVA,Ri;(A)(Ri)寄存器间接寻址MOVA,Rn;(A)(Rn)寄存器寻址MOVA,#data;(A)data立即寻址例例1若(50H)=10H,则执行指令MOVA,50H之后,(A)=10H。例例2若(R0)=20H,(20H)=39H,则执行指令MOVA,R0后,(A)=39H。例例3若(R5)=55H,则执行指令MOVA,R5后,(A)=55H。2. 以Rn为目的操作数的传送类指令例例1若(A)=20H,则执行指令MOVR3,A后,(R3)=20H。例例2若(30H)=01H,则执行指令MOVR7,30H后,(R7)=01H。指令助记符及功能说明如下:目的操作数源操作数功能说明源操作数寻址方式MOVRn,A;(Rn)(A)寄存器寻址MOVRn,direct;(Rn)(direct)直接寻址MOVRn,#data;(Rn)data立即寻址例例1若(30H)=20H,(R0)=30H,则执行指令MOV90H,R0的结果为(90H)=20H。例例2若例1中的条件不变,而执行指令MOVP1,R0,则(P1)=20H。3. 以直接地址directX为目的操作数的传送类指令指令助记符及功能说明如下:目的操作数源操作数功能说明源操作数寻址方式MOVdirectX,A;(directX)(A)寄存器寻址MOVdirectX,Rn;(directX)(Rn)寄存器寻址MOVdirectX,directY;(directX)(directY)直接寻址MOVdirectX,Ri;(directX)(Ri)寄存器间接寻址MOVdirectX,#data;(directX)data立即寻址例例1若(R0)=50H,(50H)=20H,(A)=10H,则执行指令“MOVR0,A”后,50H单元的内容由原来的20H变为10H。4. 以寄存器间接地址Ri为目的操作数的传送类指令指令助记符及功能说明如下:目的操作数源操作数功能说明源操作数寻址方式MOVRi,A;(Ri)(A)寄存器寻址MOVRi,direct;(Ri)(direct)直接寻址MOVRi,#data;(Ri)data立即寻址5. 16位目标地址传送指令这条指令的功能是:把16位立即数送入DPTR中。而16位的数据指针DPTR由DPH与DPL组成,该指令执行后,16位立即数的高8位送入DPH中,低8位送入DPL中。该指令的执行,不影响程序状态寄存器PSW。指令助记符及功能说明如下:目的操作数源操作数功能说明源操作数寻址方式MOVDPTR,#data16;(DPTR)data16立即寻址3.3.2 外部数据存储器外部数据存储器(或或I/O口口)与累加器与累加器A传送指令传送指令例例1设(P2)=20H,现将A中数据存储到20FFH单元中去。可用以下程序实现:MOVR1,#0FFH;(R1)0FFHMOVXR1,A;(20FFH)(A)也可采用下述程序实现:MOVDPTR,#20FFH ;(DPTR)20FFHMOVXDPTR,A;(DPTR)(A),即(20FFH)(A)指令助记符与功能说明如下:目的操作数源操作数功能说明源操作数寻址方式MOVXA,DPTR;(A)(DPTR)寄存器间接寻址MOVXA,Ri;(A)(Ri)寄存器间接寻址MOVXDPTR,A;(DPTR)(A)寄存器寻址MOVXRi,A;(Ri)(A)寄存器寻址3.3.2 外部数据存储器外部数据存储器(或或I/O口口)与累加器与累加器A传送指令传送指令例例2将外部数据存储器7FF0H单元中的数据取出,存放到外部数据存储器2000H单元中去。MOVDPTR,#7FF0HMOVXA,DPTRMOVDPTR,#2000HMOVXDPTR,A例例1在外部程序存储器2000H单元开始存放了数字09的共阴极数码管的16进制数的字形代码3FH、06H、6FH。要求根据A中的值(09)来查找该数字所对应的代码以便显示。若用PC作基址寄存器,则需要在MOVCA,A+PC指令前用一加法指令对地址进行调整:ADDA,#dataMOVCA,A+PC3.3.3 程序存储器向累加器程序存储器向累加器A传送数据指令传送数据指令指令助记符与功能说明如下:目的操作数源操作数功能说明源操作数寻址方式MOVCA,A+PC ;(A)(A)+(PC)+1)变址寻址MOVCA,A+DPTR;(A)(A)+(DPTR)变址寻址 1. 字节交换指令例例1设(R1)=30H,(30H)=45H,(A)=7FH,则执行指令:XCHA,R1结果:(A)=45H,而(30H)=7FH,从而实现了累加器A与内部数据存储器RAM中30H单元的数据交换。3.3.4 数据交换指令数据交换指令指令助记符与功能说明如下:目的操作数源操作数功能说明源操作数寻址方式XCHA,direct(direct)直接寻址XCHA,Ri(Ri)间接寻址XCHA,Rn(Rn)寄存器寻址2. 半字节交换指令例例1设(30H)=6FH,(R0)=30H,(A)=0F6H,则执行指令:XCHDA,Ri结果:(A)=0FFH,(30H)=66H数据交换指令除了影响始终跟踪A中数据奇偶性的P标志外,对PSW中其他标志位均无影响。指令助记符与功能说明如下:目的操作数源操作数功能说明源操作数寻址方式XCHDA,Ri(Ri)间接寻址3. 累加器A中高四位与低四位交换指令SWAPA该指令所执行的操作是累加器A中的高4位与低4位的内容互换,其结果仍存放在累加器A中。例例1设(A)=0A5H(10100101B),则执行指令:SWAPA结果:(A)=5AH(01011010B)指令SWAP交换了A中高、低半字节(30和74),结果不影响标志寄存器PSW。3.3.5 堆栈操作指令堆栈操作指令堆栈操作指令只有2条,即:压入(PUSH)和弹出(POP)。压入指令:PUSHdirect;SPSP+1,(SP)(direct)弹出指令:POPdirect ;(SP)(direct),SPSP-1例1PUSHA ;保护A中数据PUSHPSW;保护标志寄存器中数据;执行服务程序POPPSW ;恢复标志寄存器中数据POPA;恢复A中数据例2PUSHAPUSHPSWPOPAPOPPSW例3PUSHDPHPUSHDPLPOPDPLPOPDPH3.4.1 加减运算指令加减运算指令1. 加法指令这类指令所完成的操作是把源操作数(立即数、直接地址单元内容、间接地址单元内容、工作寄存器内容)与累加器A的内容相加,将结果保存在累加器A中。3.4 算术运算类指令算术运算类指令指令助记符与功能说明如下:目的操作数源操作数功能说明源操作数寻址方式ADDA,#data;(A)(A)+data立即寻址ADDA,direct;(A)(A)+(direct)直接寻址ADDA,Ri;(A)(A)+(Ri)寄存器间接寻址ADDA,Rn;(A)(A)+(Rn)寄存器寻址例例1执行指令:MOVA,#0A9HADDA,#0B8H对程序状态寄存器的影响如图3.6所示。运算结果:(A)=61H,CY=1,AC=1,OV=1,P=1,(PSW)=0C5H例例2 8位数加法程序片断1:MOVA,#23HADDA,#5AH运算结果:(A)=7DH,CY=0,OV=0,AC=0,P=0,(PSW)=00H。例例38位数加法程序片断2:MOVA,#0ABHADDA,#9AH运算结果:(A)=45H,CY=1,OV=1,AC=1,P=1,(PSW)=0C5H。带进位加法指令与前述加法指令的区别仅为考虑进位位,其他与加法指令相同。2. 带进位加法指令指令助记符与功能说明如下:目的操作数源操作数功能说明源操作数寻址方式ADDCA,#data;(A)(A)+data+(C)立即寻址ADDCA,direct;(A)(A)+(direct)+(C)直接寻址ADDCA,Ri;(A)(A)+(Ri)+(C)寄存器间接寻址ADDCA,Rn;(A)(A)+(Rn)+(C)寄存器寻址例例3利用ADDC指令可以进行多字节的加法运算。设有两个16位数相加,被加数的高8位放在41H,低8位放在40H,加数的高8位放在43H,低8位放在42H,和的低8位存放在50H,高8位存放在51H,进位位存放在52H。可编程序如下:例例1设(A)=0AAH,(R0)=55H,C=1,则执行指令:ADDCA,R0运算结果:(A)=00000000B,AC=1,CY=1,OV=1。例例2设(A)=35H,(40H)=21H,C=0,则执行指令:ADDCA,40H运算结果:(A)=56H,AC=0,CY=0,OV=0。这与执行指令“ADDA,40H”的结果是一样的。SHJ:MOVA,40H;(A)被加数低8位ADDA,42H;与加数低8位相加MOV50H,A;和的低8位存入50HMOVA,41H;(A)被加数高8位ADDCA,43H ;被加数高8位与加数高8位以及低位来的进位相加MOV51H,A;和的高8位存入51H单元MOVA,#00H ;(A)00HADDCA,#00H ;(A)(A)+00H+高8位来的进位MOV52H,A;进位位C内容存入52H单元3. 带借位减指令指令助记符与功能说明如下:目的操作数源操作数功能说明源操作数寻址方式SUBBA,#data;(A)(A)-data-(C)立即寻址SUBBA,direct;(A)(A)-(direct)-(C) 直接寻址SUBBA,Ri;(A)(A)-(Ri)-(C)寄存器间接寻址SUBBA,Rn;(A)(A)-(Rn)-(C)寄存器寻址例例1设(40H)=0BAH,(41H)=98H,试编写40H内容减去41H内容后,结果再存入40H单元的程序。MOVA,40H ;(A)(40H)CLRC;进位位C清0SUBBA,41H ;(A)(A)-(41H)-(C)MOV40H,A ;(40H)(A)执行以上程序后,(40H)=22H,CY=0,OV=0。如果参与运算的两数为无符号数,则其溢出与否与OV状态无关,而是靠CY是否有借位来判断,OV仅仅表示带符号数运算时是否溢出。例例2设有两个16位数相减,被减数的高8位放在41H,低8位放在40H,减数高8位放在43H,低8位放在42H,差的低8位存放在50H,高8位存放在51H,借位位存放在52H。可编程序如下:SHJIAN:MOVA,40H;(A)被减数低8位CLRC;C位清0SUBB A,42H;减去减数低8位MOV 50H,A;差的低8位存入50HMOV A,41H;(A)被减数高8位SUBB A,43H;被减数高8位减去减数高8位与借位MOV 51H,A;差的高8位存入51H单元MOV A,#00H;(A)00HADDC A,#00H;(A)高8位的借位位MOV 52H,A;借位位C内容存入52H单元1. 乘法指令例例1设(A)=67H(103),(B)=0ADH(173),执行指令:MULAB运算结果:乘积为459BH(17819),(A)=9BH,(B)=45H。另外:OV=1,CY=03.4.2 乘除运算指令乘除运算指令 MULAB;(A)乘积低8位,(B)乘积高8位例例2设被乘数为16位无符号数,低8位存放在地址为K的单元,高8位存放在地址为K+1的单元。乘数为8位无符号数,存放在M单元。编程求出二者乘积,并将乘积的07位存放在R1,815位存放在R2,1623位存放在R3中。分析:16位无符号数与8位无符号数相乘的步骤示意如下:程序编制如下:MOVR0,#K ;设置被乘数地址指针MOVA,R0 ;被乘数送A中MOVB,M;乘数送B中MULAB;(K)(M)MOVR1,A;乘积的07位存入R1MOVR2,B;暂存积的815位INCR0;指向被乘数高8位地址MOVA,R0 ;取被乘数高8位MOVB,M;乘数送B中MULAB;(K+1)(M)ADDA,R2;求得乘积的815位MOVR2,A;乘积的815位存入R2MOVA,BADDCA,#00H;求得乘积的1623位MOVR3,A;乘积的1623位存入R32. 除法指令例例1设(A)=9AH,(B)=23H,执行指令:DIVAB则(A)=04H,(B)=0EH,OV=00H,CY=00H3.4.2 乘除运算指令乘除运算指令 DIVAB;(A)商,(B)余数3.4.3 增增1减减1指令指令1. 增1指令INCA;(A)(A)+1INCdirect ;(direct)(direct)+1INCRi ;(Ri)(Ri)+1INCRn;(Rn)(Rn)+1INCDPTR ;(DPTR)(DPTR)+1例例1设(A)=40H,(41H)=29H,则执行下列指令:INCA;(A)40H+1HINC41H;(41H)29H+1H结果:(A)=41H,(41H)=2AH例例2设(R0)=56H,片内RAM单元(56H)=0FFH,(57H)=50H,则执行下列指令:INCR0;(56H)00HINCR0;(R0)57HINCR0;(57H)51H结果:(56H)=00H,(R0)=57H,(57H)=51H例例3执行下述指令序列:MOVDPTR,#2FFEH;(DPTR)2FFEHINCDPTR;(DPTR)2FFFHINCDPTR;(DPTR)3000HINCDPTR;(DPTR)3001H则(DPTR)=3001H2. 减1指令DECA;(A)(A)-1DECdirect;(direct)(direct)-1DECRi;(Ri)(Ri)-1DECRn;(Rn)(Rn)-1例例1设(R0)=4FH,片内RAM单元(4FH)=40H,(4EH)=00H,执行指令:DECR0;(4FH)3FHDECR0;(R0)4EHDECR0;(4EH)0FFH结果:(R0)=4EH,(4EH)=0FFH,(4FH)=3FH3.4.4 二二/十进制调整指令十进制调整指令 DAA该指令的功能是对累加器A中的“二/十”进制(BCD码)加法结果进行调整。例例1执行下面的指令:MOVA,#86HADDA,#47H结果:(A)=0CDH,CY=0,AC=0所得结果并不是BCD码,若接着执行以下指令:DAA则结果:(A)=33H,CY=1,AC=11. 累加器A清0指令格式:CLRA功能:将00H送入累加器A中。3.5 逻辑运算指令逻辑运算指令3.5.1 单操作数指令单操作数指令2. 累加器A取反指令格式:CPLA功能:将累加器A中内容取反(将A中内容按位取反,即逻辑非运算)后再送回累加器A中。例例1设(A)=98H,执行指令CLRA;(A)0CPLA;(A)0FFH结果:(A)=0FFH3. 累加器A内容循环左移一位指令格式:RLA功能:将累加器A中的内容循环左移一位。即例例1设(A)=10001000,则执行指令“RLA”后,结果:(A)=000100014. 累加器A内容带进位位CY循环左移一位指令格式:RLCA功能:将累加器A中的内容与进位标志位CY一起循环左移一位。即:例例1设(A)=01010101,(CY)=1。则执行指令“RLCA”后,结果:(A)=10101011,(CY)=0。5. 累加器A内容循环右移一位指令格式:RRA功能:将累加器A中的内容循环右移一位。即:例例 1 设 (A)=00010001, 则 执 行 指 令 “RR A”后 , 结 果 :(A)=100010006. 累加器A内容带进位位CY循环右移一位指令格式:RRCA功能:将累加器A中的内容与进位标志位CY一起循环右移一位。即:例例1设(A)=10101011,(CY)=0。则执行指令“RRCA”后,结果:(A)=01010101,(CY)=1。3.5.2 双操作数指令双操作数指令1. 逻辑与指令逻辑与的规则定义为:(其中表示逻辑与)00=001=10=011=1例例1设(A)=0C3H,(R3)=0ADH,执行指令“ANLA,R3”。结果:(A)=81H(10000001B)。指令执行过程如下:2.逻辑或指令逻辑或的规则定义为:(其中表示逻辑或)00=000=10=111=1例例1设(A)=0C3H,(R3)=0ADH,执行指令“ORLA,R3”。结果:(A)=0EFH(11101111B)。指令执行过程如下:3. 逻辑异或指令逻辑异或的规则定义为(其中表示逻辑异或):00=11=010=01=1例例1设(A)=0C3H,(R3)=0ADH,执行指令“XRLA,R3”。结果:(A)=6EH(01101110B)。指令执行过程如下:例2试把分别保存在30H、31H单元中用ASCII码表示的两位数,转换成两位BCD码,并以压缩BCD码形式存入30H单元中。程序如下:ANL30H,#0FH;30H单元的ASCII码转换成BCD码MOVA,31H;取31H单元的ASCII码ANLA,#0FH;31H单元的ASCII码变成BCD码RLARLARLARLAORL30H,A;结果存入30H单元例例1要将20H位的内容传送给23H位,不能直接用“MOV20H,23H”,因为该指令执行的实际是字节传送,若要将20H位的内容传送给23H位,可用下述程序实现:MOVC,20H;(C)(20H)MOV23H,C;(23H)(C)3.6 位操作类指令位操作类指令3.6.1 位数据传送指令位数据传送指令指令助记符与功能说明如下:目的操作数源操作数功能说明MOV C, bit;(C)(bit)MOV bit, C;(C)(bit)指令格式如下:CLRC;(C)(0)CLRbit;(bit)(0)以上指令可使直接寻址位(bit)或位累加器C清0,不影响其他标志。例例1片内RAM单元26H的内容为0FFH,执行指令:CLR32H结果:(26H)=0FBH(11111011B),其中,32H为26H单元第二位的位地址。3.6.2 位状态控制指令位状态控制指令1. 位清0指令指令格式如下:CPLC;(C)(/C)CPLbit;(bit)(/bit)以上指令把位累加器C或者直接寻址位(bit)内容取反,不影响其他标志位。例例1执行下面的指令序列:MOVP1,#2FH;(P1)(2FH即00101111B)CPLP1.0;P1.0位求反CPLP1.2;P1.2位求反结果:(P1)=2AH(00101010B)。2. 位求反指令指令格式如下:SETBC;(C)1SETBbit;(bit)1以上指令把进位标志C或者任何可直接寻址位(bit)置1,不影响其他标志位。例例1假设进位标志C内容为0,输出口P1原来的内容为0FH(00001111B),则执行下面指令:SETBCSETBP1.7结果:(C)=1,(P1)=8FH(10001111B)。3. 位置1指令例例1当位地址(2AH)=1,(32H)=1,同时累加器中(ACC.7)=0时,进位位C=1,否则C清0,可编程序如下:MOVC,2AH;(C)(2AH)ANLC,32H;(C)(C)(32H)ANLC,/ACC.7;(C)(C)(/ACC.7)3.6.3 位逻辑操作指令位逻辑操作指令1. 位与指令指令助记符与功能说明如下:目的操作数源操作数功能说明ANLC,bit;(C)(C)(bit)ANLC,/bit;(C)(C)(/bit)指令助记符与功能说明如下:目的操作数源操作数功能说明ORLC,bit;(C)(C)(bit)ORLC,/bit;(C)(C)(/bit)位或指令的功能是将直接寻址位的内容或直接寻址位内容取反后(不改变原来位的内容)和位累加器C的内容相或,结果保存在C中。例例1写出位地址(2AH)=1和(32H)=1、累加器(ACC.7)=0相或的程序:MOVC,2AH;(C)(2AH)ORLC,32H;(C)(C)(32H)ORLC,ACC.7;(C)(C)(ACC.7)结果:(C)=1。2. 位或指令图3.7为判C转移指令的执行过程。3.6.4 位条件转移指令位条件转移指令1. 判C转移指令JCrel;若(C)=1,则(PC)(PC)+2+rel;若(C)=0,则(PC)(PC)+2JNCrel;若(C)=0,则(PC)(PC)+rel;若(C)=1,则(PC)(PC)+2(a) JC rel (b) JNC rel图3.7 判C转移指令的执行过程JBbit,rel;若(bit)=1,则(PC)(PC)+3+rel;若(bit)=0,则(PC)(PC)+3JNBbit,rel;若(bit)=0,则(PC)(PC)+3+rel;若(bit)=1,则(PC)(PC)+3JBCbit,rel;若(bit)=1,则(PC)(PC)+3+rel,而且(bit)清0;若(bit)=0,则(PC)(PC)+32. 判直接寻址位转移指令判直接寻址位转移指令的执行过程如图3.8所示。(a)JBbit,rel(b)JNBbit,rel(c)JBCbit,rel例例1假设前面的程序段一样,则分别执行下面三段程序。程序1:SETB32H;(32H)1JB32H,K1;(32H)=1转K1处执行K1:程序2:CLR32H;(32H)0JNB32H,K1;(32H)=0转K1处执行K1:程序3:SETB32H;(32H)1JBC32H,K1;(32H)=1转K1处执行K1:1. 长转移指令指令格式:LJMPaddr16;(PC)addr0153.7 控制转移类指令控制转移类指令3.7.1 无条件转移指令无条件转移指令例例1执行下述程序段:M:LJMPKK:2. 绝对转移指令指令格式:3. 相对短转移指令指令格式:4. 间接转移指令JMPA+DPTR;(PC)(A)+(DPTR)无条件转移指令跳转范围比较1. 累加器A判零转移指令3.7.2 条件转移指令条件转移指令JZrel;累加器为0转移,否则继续执行JNZrel;累加器不为0转移,否则继续执行例例1将内部RAM单元中起始地址为20H的数据传送到P1口,当RAM单元中内容为0时,不传送,接着传送下一单元内容。(a)JZrel(b)JNZrel图3.10累加器A判零转移指令的执行过程2. 比较转移指令指令格式:CJNE,rel图3.11 CJNE 指令的执行过程3. 循环减1转移指令指令格式:DJNZ,rel图3.12DJNZ指令的操作过程示意例例2在程序中,可以利用DJNZ指令实现软件延时。当晶振频率一定时,则延时的大小可根据程序的需要从几个微秒到几百微秒,甚至毫秒、秒等不同要求来设定。下面是一段当系统晶振频率为12MHz时,在P1.0口输出周期为1毫秒脉冲的延时程序。K2:MOV R2,#0F8HK1:DJNZ R2,K1CPL P1.0AJMP K21.长调用指令指令格式3.7.3 子程序调用和返回指令子程序调用和返回指令2.绝对调用指令指令格式:3.返回指令指令格式:4.中断返回指令指令格式:RETI该指令用于中断返回。执行过程类似于RET。RET与RETI指令应分别放在子程序和中断服务程序的最后。5.空操作指令指令格式:NOP;(PC)(PC)+1(1)MCS-51单片机有哪几种寻址方式?各寻址方式所对应的寄存器和存储空间有何不同?(2)MCS-51的指令系统按功能可分为哪几类?(3)分别说明以下指令的作用。MOVA,30HMOVA,R0MOVA,R7MOVA,#45HMOVR3,59HMOVR3,60HMOV40H,AMOV55H,R4MOV50H,30HMOV65H,R1(4)试说明MOVX指令与MOVC指令有何区别。3.8 思考练习题思考练习题(5)若(R1)=45H,(A)=40H,(45H)=06H,(40H)=80H。分析下面的程序段执行后,上述各单元内容有何变化?MOVA,R1MOVR1,40HMOV40H,AMOVR1,#35H(6)将存放在30H单元中的压缩BCD码拆分后,分别存放到31H、32H中。(7)试将存放于40H单元的数据0FH乘4,并仍然存放在40H单元中(要求分别用两种方法编程)。(8)若(50H)=40H,写出执行下面程序段后累加器A、寄存器R0、以及内部RAM的40H、41H、42H单元中的内容。MOVA,50HMOVR0,AMOVA,#00HMOVR0,AMOVA,3BHMOV42H,41HMOV42H,A(9)一个16位数的高字节存放在30H单元,低字节存放在31H单元,另一个16位数据的高字节存放在32H单元,低字节存放在33H单元,试编写程序完成这两个16位数据的减法运算,差的高8位存放入40H,低8位存放到41H单元。(10)编写一段程序,查找存放在30H50H单元中是否有数据34H,若有则将F0置1,否则将F0清0。(11)若单片机的晶体振荡器频率为12MHz,试编写一输出到P1.0口的脉冲,脉冲周期为100s。(12)说明RET与RETI指令的区别。第第4章章 单片机的程序设计单片机的程序设计 u伪指令伪指令 u汇编语言源程序的编辑与汇编 u汇编语言程序设计 有一些指令,如指定目标程序或数据存放的地址、给一些指定的标号赋值、表示源程序结束等指令,并不产生目标程序(机器码),也不影响程序的执行,仅仅产生供汇编用的某些命令,用来对汇编过程进行某种控制或操作,这类指令称为伪指令伪指令。4.1 伪伪 指指 令令4.1.1 定义起始地址伪指令定义起始地址伪指令格式:ORGaddr16功能:规定程序块或数据块存放的起始地址。addr16表示一个16位的程序存储器的空间地址,一般为一个确定的地址,也可以是事先定义的标号。例如:ORG2000HSTART: MOVA,30H4.1.2 定义汇编结束伪指令定义汇编结束伪指令格式:END功能:表示汇编结束4.1.3 标号赋值伪指令标号赋值伪指令格式:标号EQU表达式功能:将表达式的值赋给本语句中的标号。又称为等值指令。4.1.4 定义字节伪指令定义字节伪指令格式:标号:DB字节表功能:从标号指定的地址单元开始,在程序存储器中定义字节数据。4.1.5 定义字伪指令定义字伪指令4.1.6 预留存储区伪指令预留存储区伪指令格式:标号:DS表达式功能:从标号指定的地址单元开始,定义一个存储区,以备源程序使用。存储区内预留的存储单元数由表达式的值决定。例如:ORG3030HTIMER: DS10H格式:标号:DW字表功能:从标号指定的地址单元开始,在程序存储器中存储字数据。4.2 汇编语言源程序的编辑与汇编汇编语言源程序的编辑与汇编4.2.1 源程序的编辑源程序的编辑编写完成的源程序应以“.ASM”的扩展名保存,以备汇编程序调用。4.2.2 源程序的汇编源程序的汇编4.3 汇编语言程序设计汇编语言程序设计4.3.1 顺序程序顺序程序例1已知X、Y、Z分别为片内RAM30H、31H、32H单元的内容,设XY,试编程完成下式的算术运算:S=(X-Y)*Z,并将计算结果S存入片内RAM34H(高字节)、35H(低字节)单元中。由于XY,所以X-Y0,不需要借位;(X-Y)*Z的结果最多占用两个字节。实现该要求的程序流程图如图4.2所示。程序清单如下:ORG0030HSTART:MOVA,30H ;(A)XSUBBA,31H ;(A)(A)-XMOVB,32H ;(B)ZMULABMOV34H,B ;(34H)A*B的高字节MOV35H,A ;(35H)A*B的低字节SJMP$例2编写双字节无符号数乘法程序。被乘数高字节放在R2中,低字节存放在R3中,乘数高字节放在R6中,低字节放在R7中。乘积在R2、R3、R4、R5中。程序段如下:MOVA,R3;R3R7MOVB,R7MULABMOVR4,B;暂存部分积MOVR5,AMOVA,R3MOVB,R6;R3R6MULABADDA,R4;累加部分积MOVR4,ACLRAADDCA,BMOVR3,AMOVA,R2;R2R7MOVB,R7MULABADDA,R4;累加部分积MOVR4,AMOVA,R3ADDCA,BMOVR3,ACLRARLCAXCHA,R2;R2R6MOVB,R6MULABADDA,R3;累加部分积MOVR3,AMOVA,R2ADDCA,BMOVR2,A4.3.2 分支程序分支程序例例1在内部RAM单元的30H和31H中各有一无符号数,试比较其大小,大数存入40H单元,小数存入41H单元,若相等则存入42H单元。程序流程框图如图4.3所示。程序如下:MOVA,30HCJNEA,31H,K1MOV42H,AAJMPWAITK1:JNCK2MOV41H,AMOV40H,31HAJMPWAITK2:MOV40H,AMOV41H,31HWAIT:AJMP$4.3.3 循环程序循环程序循环程序的流程如图4.4所示。例2在内部RAM30H开始的连续单元中,存放着20个无符号数,编写一段程序,使这20个数按照由大到小的顺序依次排列。MOVR0,#30HMOVR7,#19;设置外循环计数器OUTSIDE:MOVR6,00H;设置内循环计数器PUSH00H;0组R0进栈MOVA,R0;取内循环的第一个数INSIDE:INCR0;修改内循环间址指针MOVB,R0CJNEA,B,$+3;比较A与R0的大小JNCNEXTCH;大于等于不交换XCHA,R0;小于交换NEXTCH:DJNZR6,INSIDE;判内循环是否结束POP00H;内循环结束,R0出栈MOVR0,A;存内循环的最大值INCR0;修改外循环指针DJNZR7,OUTSIDE ;判外循环是否结束SJMP$2. 子程序举例例例1将单字节16进制整数转换成单字节BCD码整数的子程序。入口条件:待转换的单字节16进制整数在累加器A中。出口状态:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。CHBCD: PUSHPSW;保护现场PUSHBMOV B,#100DIV AB;(A)BCD码的百位MOV R3,A ;(R3)BCD码的百位MOV A,#10 ;余数继续分离十位和个位XCH A,BDIV AB;(A)BCD码的十位SWAP AORL A,B ;将十位和个位拼装成BCD码POP B;恢复现场POP PSWRET4.3.4 子程序子程序例例3将4位二进制数转换成ASCII码。入口条件:待转换的4位二进制数存入R2中。出口状态:转换后的ASCII码存R2中。ASCB: PUSHPSW ;保护现场PUSHAMOVA,R2ANL A,#0FH;取出四位二进制数PUSHA ;存入堆栈CLR CSUBBA,#0AHPOP A ;弹回A中JCLOOP;该数小于10,则转LOOPADD A,#07H;否则加07HLOOP: ADD A,#30H;加30HMOVR2,A;转换后的ASCII码存入R2POP A ;恢复现场POP PSWRET4.4 思考练习题思考练习题(1)简述汇编语言的特点。(2)什么是伪指令?简述常用伪指令的功能。(3)按照执行的方式,程序可分为哪几类?(4)在编写子程序时,应注意哪些问题?(5)编写一段程序,将外部RAM中2000H2020H单元的内容送入内部RAM的30H50H单元中。(6)编写程序,求出片内40H单元内容中所有“0”的个数,结果存入50H。(7)在内部RAM单元30H开始的5个单元中,存放着5个压缩BCD码,编写一段程序,将它们转换成ASCII码,并存放到40H开始的单元中。(8)编程求出内部RAM中从30H开始的连续20个单元中的内容的平均值,并存入60H单元中。(9)编程完成以下功能:检测内部RAM单元30H开始的32个数,若为正数或0,则值不变;若为负数,则取补后送回。(10)在内部RAM单元中,从30H开始连续存放着20个8位无符号数,编程排列其顺序,使它们从20H单元开始,按照从大到小的顺序依次存放。第第5章章 MCS-51单片机的中断系统单片机的中断系统u中断的概念中断的概念uMCS-51 的中断系统及控制u中断处理u外部中断及其扩展u思考练习题 5.1 中断的概念中断的概念5.1.1 微机的输入微机的输入/输出方式输出方式1.无条件方式2.程序查询方式3.DMA方式4.中断方式查询方式流程图5.1.2 中断的概念中断的概念当CPU正在处理某件事情的时候,内部或外部发生的某一事件(如一个电平的变化,一个脉冲沿的发生或定时器计数溢出等)请求CPU迅速去处理,于是,CPU暂时中止当前的工作,转去处理所发生的事件。处理完该事件以后,再回到原来被中止的地方,继续原来的工作,这样的过程称为中断中断。中断方式除了可以解决资源共享问题以外,还有以下一些特点:1.高效率地实现CPU和外设的速度匹配2.实现实时控制3.实现故障的及时发现4.实现人机联系5.2 MCS-51的中断系统及控制的中断系统及控制8051单片机中断系统的结构如图5.3所示。5.2.1 中断源中断源8051中断系统的5个中断源为:外部中断0请求,通过P3.2引脚输入。外部中断1请求,通过P3.3引脚输入。T0定时器/计数器0溢出中断请求。T1定时器/计数器1溢出中断请求。TI/RI串行口中断请求。5.2.2 中断控制中断控制 1. 定时器控制寄存器TCON与中断有关的位如图5.4所示。2. 串行口控制寄存器SCONSCON中TI和RI的格式如图5.5所示。3. 中断允许控制 IEIE的格式如图5.6所示。例例1假设允许片内定时器/计数器中断,禁止其他中断。试根据假设条件设置IE的相应值。根据题目要求,要允许内部定时器中断,就需要将IE寄存器的EA、ET1、ET0置1,其他位清0,可分别通过字节寻址或者位寻址进行。(1)用字节操作指令:MOVIE,#8AH或者,MOVA8H,#8AH(2)用位操作指令:SETBET0;定时器/计数器0允许中断SETBET1;定时器/计数器1允许中断SETBEA;CPU开中断4. 中断优先级寄存器IP051片内有一个中断优先级寄存器IP,其格式如图5.7所示。例例1系统要求设定8051的片外中断为高优先级中断,片内中断为低优先级。请写出相应的指令。解:根据题目要求,需要将8051的外部中断优先级控制位PX0、PX1设置为1,而内部中断优先级控制位PT0、PT1、PS清为0。(1)用字节操作指令:MOVIP,#05H(2)用位操作指令:SETBPX0SETBPX1CLRPSCLRPT0CLRPT15.3 中中 断断 处处 理理5.3.1 中断响应中断响应1. 中断响应条件CPU响应中断的条件有:有中断源发出中断请求。中断总允许位EA1,即CPU开中断。申请中断的中断源的中断允许位为1,即中断没有被屏蔽。无同级或更高级中断正在被服务。当前的指令周期已经结束。若现行指令为RETI或者是访问IE或IP指令时,该指令以及紧接着的另一条指令已经执行完毕。2. 中断响应操作过程表5.1 中断源及其对应的中断矢量中断源中断矢量外部中断00003H定时器T0中断000BH外部中断10013H定时器T1中断001BH串行口中断0023H5.3.2 中断处理中断处理图5.8中断服务程序流程5.4 外部中断及其扩展外部中断及其扩展5.4.1 外部中断的响应时间外部中断的响应时间5.4.2 外部中断方式的选择外部中断方式的选择1.电平方式2.边沿方式5.4.3 利用外部中断实现单步操作利用外部中断实现单步操作所谓单步操作,就是在程序调试时,每按一次单步执行键,系统就执行一条用户程序的指令,然后就停下来,这样可以一条一条地执行用户程序,因此它是用户调试和跟踪程序执行的一种手段。图5.9单步操作硬件电路图实现单步调试的程序如下。ORG0000HLJMPMAINORG0003H;外部中断0的中断服务程序入口LJMPINTSEVORG0030HMAIN: MOVSP,#70HCLRIT0;设INT0为电平方式SETBEA;开中断SETBPX0;外部中断为高优先级SETBEX0;允许外部中断0中断;用户程序INTSEV: JNBP3.2,$JBP3.2,$RETI5.4.4 外部中断源扩展外部中断源扩展图5.10外部中断源扩展5.5 思考练习题思考练习题(1)什么是中断和中断系统?其主要功能是什么?(2)试编写一段对中断系统初始化的程序,使之允许INT0,INT1,T0,串行口中断,且使T0中断为高优先级中断。(3)试编写一段程序,对中断系统进行初始化,要求允许外部中断0和外部中断1,并将外部中断0设置为低优先级,边沿触发方式,将外部中断1设置为高优先级,电平方式。(4)在单片机中,中断能实现哪些功能?(5)8051共有哪些中断源?对其中断请求如何进行控制?(6)什么是中断优先级?中断优先处理的原则是什么?(7)说明外部中断请求的查询和响应过程。(8)8051在什么条件下可响应中断?(9)在8051内存中,应如何安排中断服务程序?(10)当正在执行某一中断源的中断服务程序时,如果有新的中断请求出现,试问在什么情况下可响应新的中断请求?在什么情况下不能响应新的中断请求?(11)8051单片机外部中断源有几种触发中断请求的方法?如何设置?第第6章章 定时定时/计数器计数器u定时器的结构u定时器的工作方式u定时器应用6.1 定时器的结构定时器的结构6.1.1 定时器定时器/计数器的结构计数器的结构图6.1 8051单片机的定时器结构6.1.2 定时器的控制定时器的控制1. 工作模式寄存器TMOD图6.2 TMOD 的位定义2. 定时器控制寄存器TCON图6.3 TCON的位定义6.2 定时器的工作方式定时器的工作方式6.2.1 模式模式0及应用及应用模式0是选择定时器(T0或T1)的高8位和低5位组成的一个13位定时器计数器。图6.4是T0在模式0时的逻辑电路结构。T1的模式0电路结构与T0相同。图6.4 定时器T0的模式0例例1设定时器T0选择工作模式0,求最长定时时间,如果要实现定时时间为1ms,fosc=6MHz。试确定T0的初值。解解:当T0处于工作模式0时,加1计数器为13位。T0最大定时时间对应于13位计数器T0的各位全为0,即(TH0)00H,(TL0)00H。最长定时时间为:tmax=(2130)=213=16.384ms设定时时间为1ms时的初值为X,则:X=7692转化成二进制为:1111000001100B按照低5位,高8位拆开,T0的低5位TL0=01100B=0CHT0的高8位TH0=11110000B,即F0H例例2接上题,设定时器T0选择工作模式0,要求实现定时时间为1ms,fosc=6MHz。定时时间到后,将P1.0置1。解解:首先计算定时器初值X,计算方法和步骤同上。得:(TH0)=0F0H,(TL0)=0CH程序清单如下:ORG0000HLJMPMAINORG0030HMAIN:MOVTMOD,#00HMOVTL0,#0CH;送初值MOVTH0,#0F0HSETBTR0;启动定时器T0LOOP:JNBTF0,$;等待定时时间到CLRTF0SETBP1.0;P1.0置1SJMP$6.2.2 模式模式1及应用及应用图6.5 定时器T0的模式1例例1利用定时器T0产生一个频率为50Hz的方波,由P1.1输出。要求采用中断方式。fosc=12MHz。解解:方波周期T=1/50Hz=0.02s=20ms,如果要输出方波,则需要将P1.1状态每半个周期翻转一次。故定时时间为10ms,则定时器初值为:X=6553610000=55536=D8F0H则:TH0=0D8H,TL0=0F0H程序如下ORG0000HLJMP MAINORG000BHT0INT:LJMPT0SEVORG0030HMAIN:MOVSP,#60H;设置堆栈指针MOVTMOD,#01H;设定T0为模式1,定时方式MOVTH0,#0D8H;设定初值MOVTL0,#0F0HSETBTR0;启动定时SETBET0;开中断SETEASJMP$;等待中断T0SEV:MOV TH0,#0D8H;重新装入初值MOVTL0,#0F0HCPLP1.1;P1.0状态取反,输出方波RETI6.2.3 模式模式2及应用及应用模式2把T0(或Tl)配置成一个可以自动重装载的8位定时器/计数器,如图6.6所示。例例1利用定时器T1的模式2对外部信号计数。要求每计满150次,将P1.0端取反。解解:(1)选择模式:外部信号由T1(P3.5)引脚输入,每发生一次负跳变计数器加1,每输入150个脉冲,计数器发生溢出中断,中断服务程序将P1.0取反一次。T1计数工作方式模式2的模式字为TMOD60H。T0不用时,TMOD的低4位可任取,但不能使T0进入模式3,一般取0。(2)计算T1的计数初值:X28-150256-150=106=6AH因此,TL1的初值为6AH,重装初值寄存器TH1初值为6AH。(3)程序清单:MAIN:MOVTMOD,#60H;置T1为模式2计数工作方式MOVTL1,#6AH;赋初值MOVTH1,#6AHMOVIE,#88H;定时器T1开中断SETBTR1;启动计数器HERE:SJMPHERE;等待中断ORG001BH;中断服务程序入口CPLP1.0RETI6.2.4 模式模式3及应用及应用 图6.7 定时器T0的模式3(a)T0模式3时的T1模式0(b)T0模式3时的T1模式06.3 定时器应用定时器应用6.3.1 定时器对输入信号的要求定时器对输入信号的要求图6.9对输入脉冲宽度的要求6.3.2 定时器的编程步骤定时器的编程步骤1. 确定相关参数(1)确定选用的定时器/计数器。(2)确定工作方式(3)确定工作模式(4)计算计数初值确定数据传送方式2. 初始化程序编写6.3.3 应用举例应用举例1. 波形发生器例例1从P1.0输出1000个周期为2ms的方波脉冲(设fosc=6MHz)。解:(1)定时器选择(2)工作模式确定(3)计算初值(4)硬件连接及传送方式选择2. 脉冲宽度测量GATE控制位的功能例例1测量某一方波信号的高电平和低电平的宽度,将结果保存在20H、21H及22H、23H单元中。3. 长时间定时程序例例1试编写利用T0产生1s定时的程序。(设fosc=6MHz)。解:(1)定时器及模式确定(2)计算初值(3)程序清单6.4 思考练习题思考练习题 (1)8051定时器有哪几种工作模式?有何区别?(2)8051单片机内部设有几个定时器/计数器?是由哪些特殊功能寄存器组成的?(3)定时器模式2有什么特点?适用于什么应用场合?(4)8051单片机内部各定时器/计数器的定时、计数速率各是多少?试述定时器/计数器工作于定时器方式和计数器方式的异同。(5)当定时器T0用作模式3时,由于TR1位已被T0占用,如何控制定时器T1的开启和关闭?(6)单片机用内部定时方法产生频率为100KHz等宽矩形波,假定单片机的晶振频率为12MHz,请编程实现。(7)8051定时器作定时和计数时,其计数脉冲分别从何处提供?(8)8051定时器的门控制信号GATE设置为1时,定时器如何启动?第第7章章 单片机的串行通信及接口单片机的串行通信及接口u串行通信的有关概念uMCS-51串行通信接口及控制寄存器u串行接口的工作方式u串行口的应用 7.1.1 数据通信数据通信7.1 串行通信的有关概念串行通信的有关概念(a)并行传输(b)串行传输图7.1 两种通信方式7.1.2 串行通信的传输方向串行通信的传输方向(a)单工方式 (b)半双工方式(c)全双工方式1. 异步通信7.1.3 异步通信和同步通信异步通信和同步通信(b)有空闲位图7.3 串行异步通信的帧格式2. 同步通信7.1.4 串行通信的波特率串行通信的波特率波特率,即为数据传送速率,表示每秒钟传送二进制代码的位数,它的单位是b/s。波特率对于CPU与外界的通信是很重要的。图7.4 串行同步通信格式7.1.5 远距离串行通信远距离串行通信7.1.6 串行通信接口串行通信接口图7.6 UART的结构示意图7.2.1 MCS-51串行接口机构串行接口机构MCS-8051通过引脚RXD(P3.0,串行数据接收端)和引脚TXD(P3.1,串行数据发送端)与外界进行通信。7.2 MCS-51串行通信接口及控制寄存器串行通信接口及控制寄存器7.2.2 串行口控制寄存器串行口控制寄存器1. 串行口控制寄存器SCON图7.8 串行口控制寄存器表7.1 串行口的工作方式选择SM0SM1工作方式说明波特率00方式0同步移位方式fosc/1201方式110位异步收发定时器T1控制10方式211位异步收发fosc/32或fosc/6411方式311位异步收发定时器T1控制电源控制寄存器在串行口控制中只用了一位SMOD。见图7.9。 SMOD称为串行口波特率倍增位,在串行口方式1、方式2和方式3时,波特率与2SMOD成正比,亦即当SMOD1时,波特率提高一倍。复位时,SMOD=0。2. 电源控制寄存器PCON 7.3.1 工作方式工作方式07.3 串行接口的工作方式串行接口的工作方式(a)方式0发送电路 (b)方式0接收电路图7.10 方式0应用电路图7.11串行口方式0发送时序图7.12串行口方式0接收时序7.3.2 工作方式工作方式1帧格式如下:起始D0D1D2D3D4D5D6D7停止串行口方式1的发送和接收时序如图7.13所示。7.3.3 工作方式工作方式2和工作方式和工作方式3其帧格式为:起始D0D1D2D3D4D5D6D7D8停止方式2和方式3的发送、接收时序与方式1类似,只是增加了一位第九位。发送和接收时序可参考图7.13。7.3.4 波特率设计波特率设计1.方式0的波特率方式0波特率=fosc/122.方式2的波特率方式2波特率取决于PCON中SMOD位的值;当SMOD0时,波特率为fosc的1/64;若SMOD=1,则波特率为fosc的1/32。3.方式1和方式3的波特率(1)方式1、方式3波特率=(2)方式1、方式3波特率=例例18051单片机时钟振荡频率为11.0592MHz,选用定时器T1工作模式2作为波特率发生器,波特率为2400b/s,求初值。并编写初始化程序。解解:设置波特率控制位(SMOD)0F4H所以:(TH1)=(TL1)=F4H初始化程序为:INI:MOVTMOD,#20H;T1定时方式,模式2MOVPCON,#00H;SMOD=0MOVTH1,#0F4HMOVTL1,#0F4HSETBTR1MOVSCON,#50H;串行口方式1,允许接收7.4 串行口的应用串行口的应用7.4.1 同步通信方式的应用同步通信方式的应用例例1利用74LS164扩展并行口,构成8位静态显示数码管接口。设计电路图并编写相应的显示驱动程序。显示缓存为40H47H单元,存放被显示数字的共阴极代码。解解:根据题目要求,硬件电路如图7.14所示。图中只画了2位数码管,剩余6位数码管电路与前两位类似。图7.14串行口扩展数码管显示接口7.4.2 方式方式1双机通信应用双机通信应用例例1甲乙机以方式1进行串行数据通信,其波特率为2400b/s。甲机发送,发送数据在外部RAM4000H401FH单元中。乙机接收,并把接收到的数据块首末地址及数据依次存入外部RAM5000H开始的区域中。数据为ASCII码形式,采用奇校验,单片机时钟振荡频率为11.0592MHz。解:(1)求计数器初值(2)(2) 可采用奇校验(3)(3) 题目要求将被传送的数据和数据块的首末地址一起传送至接收方,因此串行发送的内容包括数据块的首末地址和数据两部分内容。7.4.3 多机通信多机通信1. 多机通信原理2. 多机通信举例图7.15 多机通信系统框图例例1设计一255台从机的主从式多机通信系统。解:(1)通信协议:(2)波特率与时间常数的确定(3)主机的通信软件(查询方式)(4)从机的通信软件(中断方式)(1)什么是串行异步通信,它有哪些作用?(2)8051单片机的串行口由哪些功能部件组成?各有什么作用?(3)8051串行口有几种工作方式?有几种帧格式?各工作方式的波特率如何确定?(4)假定异步串行通信采用10位帧格式,字符格式为一个起始位、八个数据位、一个停止位,请画出传送ASCII码字符“T”并且采用奇偶较验的帧格式。(5)8051中SCON的SM2,TB8,RB8有何作用?(6)PCON中SMOD控制位的功能是什么?(7)简述串行通信接口芯片UART的主要功能。(8)简述单片机多机通信的原理。(9)设fosc11.0592MHz,试编写一段程序,对串口初始化,使之工作于方式l,波特率为1200b/s,用查询串行口状态的方法读出接收缓冲器的数据并回送到发送缓冲器。7.5 思考练习题思考练习题 (10)若晶振为fosc11.0592MHz,采用串行口工作方式1,波特率为4800b/s。写出用T1作为波特率发生器的方式字和计数初值。(11)串行口工作在方式1和方式3时,其波特率与定时器T1工作模式2的初值及SMOD位的关系如何?设fosc6MHz,现利用定时器T1模式2产生的波特率为110b/s。试计算定时器初值。(12)说明为什么定时器T1用作串行口波特率发生器时,常选用工作模式2。(13)若定时器T1设置成模式2,作波特率发生器,已知fosc6MHz。求可能产生的最高和最低的波特率是多少?(14)以8031串行口按工作方式1进行串行数据通信。假定波特率为1200b/s,以中断方式传送数据。试编写全双工通信程序。(15)以8031串行口按工作方式3进行串行数据通信。假定波特率为1200b/s,第9数据位作奇偶校验位,以中断方式传送数据。试编写通信程序。(16)设计一个单片机的双机通信系统,并编写通信程序。将甲机内部RAM30H3FH存储区的数据块通过串行口传送到乙机内部RAM40H4FH存储区中去。第第8章章 MCS-51单片机的系统扩展单片机的系统扩展u程序存储器的扩展u数据存储器的扩展u外部I/O的扩展8.1 程序存储器的扩展程序存储器的扩展8.1.1 外部程序存储器的操作时序外部程序存储器的操作时序MCS-51系列单片机扩展外部程序存储器的硬件电路如图8.1所示。图8.2单片机访问外部程序存储器的时序图8.1.2 地址锁存器及地址锁存器及EPROM,EEPROM芯片介绍芯片介绍1. 地址锁存器图8.3为几种常用的地址锁存器的管脚图。图8.4是这几种常用的锁存器与单片机的连接图。2. EPROM与EEPROM扩展电路紫外线擦除电可编程只读存储器EPROM,以前常用作MCS-51系列单片机的外部程序存储器,常见的型号有:2764(8K8),27128(16K8),27256(32K8),27512(64K8)等。管脚分布如图8.5所示。图8.627C64与单片机的连线图图8.8MCS-51单片机与EEPROM28C17的连接图8.2 数据存储器的扩展数据存储器的扩展 8.2.1 外部数据存储器的操作时序外部数据存储器的操作时序如图8.9所示为单片机片外数据存储器的读时序。如图8.10所示为单片机片外数据存储器的写时序。8.2.2 常用的单片机外部数据存储器常用的单片机外部数据存储器常用的单片机外部数据存储器有6116(2K8)、6264(8K8)、62256(32K8位)、62512(64K8)及628128(128K8)等多种,图8.11为6116和6264的管脚图。下面的程序为向6116内写入00FFH的数据。ORG0000H ;单片机上电复位地址AJMPMAIN;转移至以MAIN为标记的地址ORG0040H ;以MAIN为标志的程序段放在的起始地址MAIN:MOVSP,#60H;程序内容,将堆栈首地址设置为60H单元MOVDPTR,#0000H;给外部数据指针DPTR赋首地址0000HMOVR2,#0FFH;设置循环次数MOVA,#00H;给A赋初值00HLOOP:MOVXDPTR,A;(DPTR)(A)INCDPTR ;外部数据指针地址加1INCA;A内的数据加1DJNZR2,LOOP;R2是否为零?否,转向LOOPEND;否则程序停止以上程序段是将数据写入外部数据存储器的例程,如将数据读出单片机外,只需将:LOOP:MOVXDPTR,A改写为:LOOP:MOVXA,DPTR8.3 外部外部I/O的扩展的扩展8.3.1 I/O口扩展概述口扩展概述常用的单片机外围器件有:82C55、81C55、82C53、82C54、82C52、8279等芯片。8.3.2 I/O口地址译码方法口地址译码方法1.线选法图8.13为采用线选法的实例。线选法的优点是硬件结构简单,不需要应用译码芯片,但由于所用片选线都是位于P2口的高位线,它们的权值较大,地址空间没有充分地利用,造成单片机地址资源的浪费,并且芯片之间的地址也不连续。2. 全地址译码法它将低位地址作为芯片的片内地址,而用译码器对高位地址线进行译码,译出的信号作为片选线。一般采用74LS138(3-8),74LS154(4-16),或CPLD等来实现译码。下面以74LS138为例来讲述其应用方法。8.3.3 82C55可编程并行可编程并行I/O口口1.82C55芯片介绍82C55的管脚图如图8.15所示,其内部结构如图8.16所示。表8.4 82C55内部的单元地址A1 A082C55内部寄存器0 00 11 01 1端口A端口B端口C控制寄存器82C55控制字格式图8.1882C55C口位操作控制字82C55的三种工作模式:l工作模式0l工作模式1l工作模式22. 8051与82C55的接口举例在8051单片机的I/O上扩展82C55芯片,其接口逻辑相当简单,如图8.25所示。例程如下:ORG0000H;上电复位程序入口AJMPMAIN;转移到以MAIN为标号的程序入口;ORG0040H;主程序存放在以0040H单元开始的空间内MAIN:MOVSP,#60H;将堆栈调至60H单元处MOVDPTR,#0FEFFH ;将82C55的控制字节地址赋给数据指针MOVA,#8BH;将数据8BH传送给AMOVXDPTR,A;由A将8BH这个控制字写入82C55的控制单元MOVDPTR,#0FEFCH ;数据指针指向A端口MOVA,#3FH;将3FH这个数传送给AMOVXDPTR,A;由A将数据传送到DPTR制定的字节地址MOVDPTR,#0FEFDH;将B口的地址传送给数据指针MOVXA,DPTR;将B口的数据传送给AMOV30H,A;通过A将B口内的数据传送到30H单元内MOVDPTR,#0FEFEH;把端口C的地址赋予数据指针MOVXA,DPTR;把C内的数据传送给AMOV31H,A;通过A把数据传送到31H单元内END;整个程序结束8.3.4 81C55可编程并行可编程并行I/O口口 1. 81C55芯片简介图8.26为81C55芯片的管脚和内部结构示意图。2. 8051与81C55的接口举例图8.29描述了一个8051与81C55连接的电路图。设通过8051向81C55中RAM的第30H单元送入数87H,则例程如下。ORG0000HAJMPMAINORG0040HMAIN:MOVSP,#60HMOVDPTR,#7E30HMOVA,#78HMOVX DPTR,AEND8.4 思考练习题思考练习题(1)简述单片机系统扩展的基本原则和实现方法。(2)什么是RAM?有什么特点?(3)线选法和全地址译码法有什么区别?(4)在一个8051应用系统中扩展64KEPROM,并扩展两片82C55和一片6264,试画出其线路原理图,并说明各自的地址范围。(5)设采用一片8051和一片81C55设计一个24位的定时器/计数器。(6)某厂生产的酒瓶盖原采用称重装箱的方式,现要改为按数量装箱的方式,设其每箱要求装满5000只,试应用8051单片机设计其应用系统。(7)由于8051内部有4K的程序存储器,有人考虑采用控制EA端的方式来给程序加密,试讨论该办法的可行性。(8)试讨论在不加其他逻辑芯片的情况下,一片8051和一片81C55可提供多少输入/输出的端口。第第9章章 接接 口口 技技 术术u键盘接口uLED显示器接口uA/D转换器接口uD/A转换器接口9.1 键键 盘盘 接接 口口9.1.1 键盘接口所涉及的问题键盘接口所涉及的问题1. 键盘输入的特点2. 按键的确认3. 按键消抖9.1.2 键盘设计键盘设计1. 独立式按键2. 键盘矩阵9.1.3 按键的识别编程按键的识别编程1. 程控按键扫描2. 定时按键扫描3. 外部中断按键扫描9.1.4 键盘识别举例键盘识别举例例例1采用查询法对如图9.2所示的电路图进行按键扫描编程:ORG0000HAJMPMAINORG0040HMAIN:MOVSP,#60HLOOP:JNBP1.0,KEY0;如果P1.0为低,则转至以KEY0为标号的程序段执行JNBP1.1,KEY1;如果P1.1为低,则转至以KEY1为标号的程序段执行JNBP1.2,KEY2;如果P1.2为低,则转至以KEY2为标号的程序段执行JNBP1.3,KEY3;如果P1.3为低,则转至以KEY3为标号的程序段执行LJMPLOOPKEY0:CALLDELAY10MSRETKEY1:CALLDELAY10MSRETKEY2:CALLDELAY10MSRETKEY3:CALLDELAY10MSRET例例4编程对图9.3所示键盘进行识别。(1)判断是否有键按下。(2)(2)判断哪个键按下。9.2 LED显示器接口显示器接口 9.2.1 LED简介简介图9.5LED结构原理及外形图图9.6LED各段的传统排列顺序9.2.2 LED显示器及显示方式显示器及显示方式9.2.3 LED与单片机的接口设计与单片机的接口设计例例1对于并行接口的LED显示,其应用较为简单,如图9.7所示为通过P1口驱动一只LED显示器的例子。其例程为:ORG0000HAJMPMAINORG0040HMAIN:MOVSP,#60HMOVR0,#00HMOVDPTR,#TABLOOP: MOVA,R0MOVC A,A+DPTRMOVP1,ACALLDELAY1SINCR0CJNER0,#0AH,LOOPMOVR0,#00HAJMPLOOPTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDELAY1S:RETEND图9.8 单片机通过74LS164与数码管的接口设计9.3 A/D转换器接口转换器接口9.3.1 ADC0809简介简介ADC0809的管脚分布图及内部结构如图9.10所示。9.3.2 8051与与ADC0809的接口设计的接口设计例例1图9.11是8051与ADC0809的接口设计。例程为:(1)查询方式读数(2)应用中断方式读取数据9.4 D/A转换器接口转换器接口9.4.1 DAC0832的管脚及内部结构的管脚及内部结构 (a)管脚分布(b)内部结构9.4.2 DAC0832与与8051的接口设计的接口设计例例1图9.13为单缓冲工作模式下的DAC0832与单片机的接口设计。ORG0000HAJMPMAINORG0040HMAIN:MOVSP,#60HMOVDPTR,#0FE00HMOVA,30HMOVXDPTR,AEND例例2图9.14是双缓冲输出的接口设计。程序段如下:ORG0000HAJMPMAINORG0040HMAIN:MOVSP,#60HMOVDPTR,#0FD00HMOVA,30HMOVX DPTR,A;向DAC0832-1中写入要转换的数据MOVDPTR,#0FE00HMOVA,31HMOVX DPTR,A;向DAC0832-2中写入要转换的数据MOVDPTR,#0FB00HMOVA,#35H;向A内写入一个无意义的数;;也可仍旧使用原A中的数MOVX DPTR,A;使两片DAC0832的同时为低,;转换开始END9.5 思考练习题思考练习题(1)为什么要进行按键消抖?有哪些方法?(2)试画出用一只74LS165和两只74LS164驱动128只按键的电路原理图,并写出其程序段。(3)试编写用P1.0和P1.1口模拟TXD和RXD口的静态驱动数码管显示的程序段。(4)试应用最少的硬件电路,设计一个具有16只数码管显示和16只按键的电路。(5)在某滚珠丝杠误差检测系统中,有三只温度传感器和一只湿度传感器,一只气压传感器,设其温度传感器输出的电信号为12.5V,湿度传感器输出的电信号为11.5V,气压传感器输出的信号为34V,试应用单片机设计一套对所有传感器进行数据采集并同时显示的系统。要求应用较少的硬件电路。(6)PSD是一种一维或二维的光学位置传感器。当一个光斑照射到PSD的表面上时,其垂直的两边的电阻将产生变化,如果该PSD有效接受光斑的面积为33mm2,如果用单片机通过A/D转换芯片将其数据得到,当要求精度在1m时,试计算需要多少位的A/D转换芯片?(7)某种压电陶瓷微位移器在两端电压为50300V时,其伸长量为9m,如对其电压应用D/A转换芯片进行控制,我们所能控制的理论微位移步长会是多少?(8)登录WWW.MAXIM-IC.COM.CN网站免费索要一片MAX197并行12位A/D转换器,设计其与单片机的接口电路并编写程序。第第10章章 MCS-51兼容机及串行总线扩展兼容机及串行总线扩展lAT89532单片机lAT89C2051单片机lSPI总线简介及应用lI2C总线简介及应用 10.1 AT89S52单片机单片机AT89S52的性能及特点如下:l与MCS-51系列单片机产品兼容;l片内有4K(8K)可在线重复编程的快速闪存可擦写存储器(FlashMemory);l存储器可循环写入/擦写10000次以上;l存储器数据保存时间为10年以上;l宽工作电压范围,VCC可为2.7V6.5V;l全静态工作:可从0Hz24MHz;l程序存储器具有三级加密保护;l128个字节(256字节)的内部RAM;l32条可编程I/O口线;l三个16位定时器/计数器;l中断结构具有5级(6级)中断源和两个优先级;l可编程全双工串行通讯;l空闲维持低功耗和掉电状态保护存储数据;l具有JTAG接口,可方便地在线编程或在系统编程。10.2 AT89C2051单片机单片机10.2.1 AT89C2051的主要性能的主要性能10.2.2 AT89C2051的管脚分布的管脚分布图10.1给出了AT89C2051的管脚分布图。10.2.3 AT89C2051指令与指令与MCS-51的不同之处的不同之处由于89C2051没有和,因而不能采用传统的数据总线与地址总线外扩程序存储器和数据存储器,因而对于MOVX指令是不能执行的。同时由于该芯片内的程序存储器只有2K,因而,跳转指令只能在2K内跳转,这点在编程时要注意。10.3 SPI总线简介及应用总线简介及应用10.3.1 具有具有SPI总线的总线的12位位A/D转换器转换器TLC2543简介简介TLC2543的管脚分布如图10.2所示。10.3.2 TLC2543的时序的时序图10.3是TLC2543进行A/D转换的时序。表10.2 TLC2543的工作模式选择D7D6D5D4D3D2D1D0模式00输出数据高位在前X0选择数据输出位数为12位X1选择数据输出位数为8位XXX X转换通道,0000表示0通道,0001表示1通道,依次类推10.3.3 TLC2543与与MCS-51系列单片机的接口设计系列单片机的接口设计图10.4为AT89C2051与TLC2543的接口。10.4 I2C总线简介及应用总线简介及应用 10.4.1 I2C总线器件的地址分配总线器件的地址分配寻址格式如图10.5所示。10.4.2 I2C总线的数据传输总线的数据传输图10.6描述了I2C总线的各种信号时序。主发送和主接收的数据操作格式如图10.7所示。在应用在应用I2C总线进行读写时,要注意总线进行读写时,要注意:1.所有操作都是主控器来启动总线,发送寻址字节和终止运行;2.在I2C总线接口的外围器件中,其读写都有地址自动加1功能,简化了I2C总线的外部寻址。10.4.3 AT89C2051单片机与单片机与AT24C系列串行系列串行EEPROM的的接口设计接口设计图10.8为AT24C04的管脚分布图,表10.4为其管脚的含义。表10.4 AT24C04的管脚含义管脚管脚含义A0器件地址A0口A1器件地址A1口A2器件地址A2口GND地SDA数据线SCL时钟线WP数据写保护(有效)VCC电源(1.8V5.5V),(2.75.5V)图10.9为2片AT24C04与89C2051的接口设计下面给出其启动、停止、写入一个字节和读出一个字节的子程序。启动:STARTSTART:SETBP1.4;数据线置高SETBP1.3;时钟线置高NOP;加入NOP使延时超过4.7s,VCC=1.8VNOPCLRP1.4;数据线变低NOPNOPCLRP1.3;时钟线变低RET停止:STOPSTOP: CLRP1.4;数据线置低SETBP1.3;时钟线置高NOPNOPSETBP1.4;数据线置高NOPNOPCLRP1.3;时钟线置低RET发送应答位:MACKMACK: CLRP1.4;数据线变低SETBP1.3;时钟线变高NOPNOPCLRP1.3;时钟线变低SETBP1.4;数据线变高RET发送非应答位:NMACKNMACK:SETBP1.4;数据线变高SETBP1.3;时钟线变高NOPNOPCLR P1.3;时钟线变低CLRP1.4;数据线变低RET10.5 思考练习题思考练习题(1)登录WWW.ATMEL.COM网站,下载并制作AT89S52的烧写器。(2)登录WWW.TI.COM网站,免费申请三片TLC2543,设计与单片机组成的数据采集系统。(3)登录WWW.ATMEL.COM网站,免费申请AT24C256芯片一片,试设计其与单片机的接口并编程。(4)上网查IC卡的形式,并练习制作IC卡读写器。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号