1、第1章 思考题及习题参考答案1写出下列二进制数的原码、反码和补码(设字长为8位)。(1)001011(2)100110-001011(4)-111111答:(1)原码:00001011反码:00001011补码:00001011(4)原码:原码:原码:001001101000101110111111反码:反码:反码:001001101111010011000000补码:补码:补码:0010011011110101110000012已知X和Y,试计算下列各题的X+Y补和X-Y补(设字长为8位)。X=10UY=0011X=10UY=0111X=1000Y=1100答:(1)X 补码=0000101
2、1Y 补码=00000011-Y补码=11111101X+Y#=00001110X-Y补=00001000(2)X补码=00001011y 补码=oooooni-Y补码=innooiX+Y#=00010010X-Y补=00000100(3)X补码=00001000y补码=oooonoo-Y补码=nnoiooX+Y#=00010100 x-y补=nnnoo3微型计算机由那几部分构成?答:微型计算机由微处理器、存储器和I/O接口电路构成。各部分通过地址总线(AB)、数据总线(DB)和控制总线(CB)相连。4 8086的寻址范围有多大?其物理地址是如何形成?答:8086有20根地址总线,它可以直接寻
3、址的存储器单元数为1M字节,其地址区域为 00000HFFFFFHo物理地址是由段地址与偏移地址共同决定的,物理地址二段地址X 16+偏移地址其中段地址 通常来自于段寄存器CS,物理地址来自于IP。5什么叫单片机?它有何特点?答:单片机就是在一块硅片上集成了 CPU、RAM、ROM,定时器/计数器和多种I/O 口(如 并行、串行及A/D变换器等)的一个完整的数字处理系统。单片机主要特点有:品种多样,型 号繁多;存储容量大;频率高,速度快;控制功能强,集成度高;功耗低;配套应用软件多。第2章 思考题及习题参考答案:2.1.说明ROM、EPROM.EEPROM和FLASH之间的主要区别解:ROM为
4、只读存储器,在一般情况下只能读出所存信息,而不能重新写入。信息的 写入是通过工厂的制造环节或采用特殊的编程方法进行的,一旦写入,就能长期保存。EPROM芯片一般允许用户多次编程和擦除。擦除时,通过向芯片窗口照射紫外光的方 法来进行。EEPROM,也称E2PROM。该类芯片允许用户多次编程和擦除。擦除时,可 采用加电方法在线进行。FLASH是一种新型的大容量、速度快、电可擦除可编程只读 存储器。2.2.EPROM.PROM、动态RAM、静态RAM等存储器中,哪几类是可以随时读写的?解:动态RAM、静态RAM这几类是可以随时读写的。2.3某ROM芯片中有12根地址输入端和8个数据输出端,该芯片的存
5、储容量是多少位?解:芯片的存储容量是4K*8位。2.4.说明动态RAM和静态RAM的主要区别,使用时应如何选用?解:静态(static)RAM,即SRAM。它以触发器为基本存储单元,所以只要不掉电,其所 存信息就不会丢失。该类芯片的集成度不如动态RAM,功耗也比动态RAM高,但它的速度比 动态RAM快,也不需要刷新电路。在构成小容量的存储系统时一般选用SRAMo在微型计算 机中普遍用SRAM构成高速缓冲存储器。动态(Dynamic)RAM,即DRAM。一般用MOS型半导体存储器件构成,最简单的存储形式 以单个MOS管为基本单元,以极间的分布电容是否持有电荷作为信息的存储手段,其结构简 单,集成
6、度高。但是,如果不及时进行刷新,极间电容中的电荷会在很短时间内自然泄漏,致使信息丢失。所以,必须为它配备专门的刷新电路。动态RAM芯片的集成度高、价格低廉,所以多用在存储容量较大的系统中。目前,微型计算机中的主存几乎都是使用动态RAM。2.5.说明NOR FLASH与NAND FLASH的主要区别,使用时应如何选用?解:NOR Flash具有以下特点:(1)程序和数据可存放在同一芯片上,拥有独立的数据总线和地址总线,能快速随机 读取,允许系统直接从Flash中读取代码执行,而无需先将代码下载至RAM中再执行;(2)可以单字节或单字编程,但不能单字节擦除,必须以块为单位或对整片执行擦除 操作,在
7、对存储器进行重新编程之前需要对块或整片进行预编程和擦除操作。但是NOR Flash的擦除和编程速度较慢,块尺寸又较大,因此擦除和编程操作所花费的 时间很长,在纯数据存储和文件存储的应用中,NOR技术显得力不从心。NAND Flash具有以下特点:(1)以页为单位进行读和编程操作,1页为256或512B(字节);以块为单位进行擦 除操作,1块为4K、8K或16KB。具有快编程和快擦除的功能,其块擦除时间是2ms;而NOR 技术的块擦除时间达到几百mso(2)数据、地址采用同一总线,实现串行读取。随机读 取速度慢且不能按字节随机编程。(3)芯片尺寸小,引脚少,是位成本(bit cost)最低的 固
8、态存储器,将很快突破每兆字节1美元的价格限制。(4)芯片包含有失效块,其数目最 大可达到335块(取决于存储器密度)。失效块不会影响有效块的性能,但设计者需要将 失效块在地址映射表中屏蔽起来。NOR Flash具有可靠性高、随机读取速度快的优势,在擦除和编程操作较少而直接执行代码的场合,尤其是纯代码存储的应用中广泛使用,如PC的BIOS固件、移动电话、硬盘驱 动器的控制存储器等。NAND Flash结构的闪速存储器适合于纯数据存储和文件存储,主要作为SmartMedia卡、CompactFlash卡、PCMCIA ATA卡、固态盘的存储介质,并正成为闪速磁盘技术的核心。2.6.现有2KX8位的
9、RAM芯片若干片,若用线选法组成存储器,有效的寻址范围最大是多少 KB?若用3-8译码器来产生片选信号,则有效的寻址范围最大又是多少?若要将寻址范围扩 展到64KB,应选用什么样的译码器来产生片选信号?解:以8086为例,8086有20条地址线,用11条地址线寻址一片2KX8位的RAM,余下的 9条地址线做线选法的线,故可以并联9个芯片,故寻址最大范围是20KB,若用3-8译码器 来产生片选信号,9条地址线可以控制3个3-8译码器这样就可以控制24个芯片最大范围 是50KB.若要将寻址范围扩展到64KB可选用4-16地址译码器来产生片选信号。2.7.什么是地址重叠区?它对存储器扩展有什么影响?
10、解:基本地址和前面全译码连接的地址范围是相同的,但两者还是有区别的。区别在于全译 码连接时各芯片的地址是唯一的,而部分译码连接时各芯片地址不是唯一的,也就是可以由 若干个地址都选中同一芯片的同一单元,既所谓的地址重叠区。由于存在的地址重叠,影响 了地址区的有效使用,也限制了存储器的扩展。因此,在选用部分译码时,也要尽可能多选 一些高位地址线来作为译码器的输入。2.8如图2-22若用1KX8位片子来扩展3K义8位RAM,试核算各片的地址范围为多少?74138A A A A A#1 DjDq8000H-83FFHCS WE A0A9#2 D7。8000H-83FFHCS WE*0*9#3 D7I)
11、o 8400H-87FFHCS 亚 A(pA9AfpAg-图2-22 1KX8扩展的3 KX8的存储系统解:A15 A14 An A12 Aii Aio A9 As A7A6A5A4 A3A2A1A0 地址Gi ABC1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 片 1:AOOOH1 0 1A3FFH0 0 0 11 1111 1111 片 1:2:2:3:A15A14Gi1A13A12An AwBA9cAsA7A6A5A4A3A2A1A0地址B000HB3FFHA15 A14Gi 1B400H11A13A12An AwA9CA7A6A5A4A3A2A1A0地址1 0A011
12、000 00 0 0 00 0 00片11001 1 111 1 11片AB011010 00 0 0 00 0 00片1 0 1B7FFH11 1111 1111片3:1 0 1所以各片地址范围为:片 1:A000H-A3FFH,片 2:B000H-B3FFH,片 3:B400H-B7FFH2.9.现有8KX8位RAM多片,1片3-8译码器,要构成容量为16Kx8位的存储器,请用线 译码、部分译码、全译码3种方式分别设计,画出连接图,并指出寻址范围。解:线译码法:寻址范围:2000H5FFFHA13A14部分译码寻址范围:0000H3FFFHA13-全译码:寻址范围:OOOOHFFFFH8位
13、DBA0-A152.10.如何检查扩展的RAM工作是否正常?试编一个简单的RAM检查程序,要求此程序能记 录有多少个RAM单元工作有错?且能记录出错的单元地址。解:TEST_C0NST EQU 5AHTEST_RAM EQU 03HORG 0000HLJMP INITIALORG 0050H INITIAL:MOV RO,#253MOV RI,#3HTEST_ALL_RAM:MOV R2,#OFFHTEST_ONE_RAM:MOV A,R2MOV R1,ACLR AMOV A,R1CJNE A,2H,ERROR_DISPLAYDJNZ R2,TEST_ONE_RAM INC RIDJNZ RO
14、TEST_ALL_RAMOK_DISPLAY:MOV Pl,WAIT1:SJMP WAIT1 ERROR_DISPLAY:MOV A,RIMOV Pl,AWAIT2:SJMP WAIT2END第3章 思考题及习题参考答案1.80C51单片机的P0P3 口在通用I/O 口时操作要注意哪些?P0P3 口不做通用I/O 口时是 什么功能?在使用上有何特点?P0P3驱动能力如何?答:(1)作为通用I/。口时,P0P3都是准双向口,输入引脚信息时都必须先向其锁存器写“1”,作为输出口时P0 口需结上拉电阻。(2)P0可以作为地址/数据总线;P2 口可以作为地址线的高8位;P3 口是双功能口,每条口线还
15、具有不同的第二功能。(3)P0 口的驱动能力为8个TTL负载,而其它口仅可驱动4个TTL负载。2、MCS-51单片机运行出错或程序进入死循环,如何摆脱困境?答:通过复位电路复位3、单片机的复位(RST)操作有几种方法,复位功能的主要作用是什么?答:单片机的复位操作方式有:1、上电复位;2、手动复位。复位功能的主要作用是:复位时,PC初始化为0000H,使MCS-51单片机从0000H开始 执行程4、简述程序状态寄存器PSW寄存器中各位的含义。答:程序状态字寄存器PS肌8位。其各位的意义为:CY:进位、借位标志。有进位、借位时CY=1,否则CY=O;AC:辅助进位、借位标志(高半字节与低半字节间
16、的进位或借位);F0:用户标志位,由用户自己定义;RSI、RSO:当前工作寄存器组选择位,共有四组:00、01、10、11;0V:溢出标志位。有溢出时0V=l,否则0V=0;P:奇偶标志位。存于累加器ACC中的运算结果有奇数个1时P=l,否则P=0.5、80C51单片机的当前工作寄存器组如何选择?答:由特殊功能寄存器中的程序状态寄存器PSW的RSI、RS0来决定,当RSI、RS0为00时,选择。组;为01时,选择1组;为10时选择2组,为11时选择3组。6.80C51单片机的控制总线信号有哪些?各信号的作用如何?答:80c51单片机的控制总线信号有以下4个,各信号的作用为:RST/VPD:复位
17、信号输入引脚/备用电源输入引脚;ALE/PR0G:地址锁存允许信号输出弓I脚/编程脉冲输入引脚;EA/Vpp:内外存储器选择引脚/片内EPROM(或FlashROM)编程电压输入引脚;PSEN:外部程序存储器选通信号输出弓I脚。7、8051单片机中EA引脚的作用是什么?答:访问内部或外部程序存储器的选择端当EA接高电平的时候程序从内部ROM开始执行,当EA为低电平的时候,从外部ROM开始执行8、程序计数器PC的作用是什么?答:程序计数器PC是一个16位的计数器,他总是存放着下一个要取的指令的16位存 储单元地址。用来存放下一条指令的地址用来存放下一条指令的地址的。当执行一条指令时,首先需要根据
18、PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指 令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指今的地址。此后经过 分析指令,执行指令。完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此 循环,执行每一条指令9、堆栈有哪些功能?堆栈指示器(SP)的作用是什么?在程序设计时,为什么要对SP重 新赋值?答:堆栈在中端过程中用来保护现场数据,复位后SP=7H,而堆栈一般设置在通用ROM区(30H-7FH),在系统初始化时候要从新设置。10、内部RAM低128单元划分为哪3个主要部分?说明各部分的使用特点。答:80C51内部128B的数据RAM区,包括有工
19、作寄存器组区、可直接位寻址区和数据缓 冲区。各区域的特性如下:(1)OOH 1FH为工作寄存器组区,共分4组,每组占用8个RAM字节单元,每个单元 作为一个工作寄存器,每组的8个单元分别定义为8个工作寄存器R0R7。当前 工作寄存器组的选择是由程序状态字PSW的RSI、RSO两位来确定。如果实际应 用中并不需要使用工作寄存器或不需要使用4组工作寄存器,不使用的工作寄 存器组的区域仍然可作为一般数据缓冲区使用,用直接寻址或用Ri的寄存器间 接寻址来访问。(2)20H2FH为可位寻址区域,这16个字节的每一位都有一个地址,编址为00H7FH。当然,位寻址区也可以用作字节寻址的一般数据缓冲区使用。(
20、3)307FH为堆栈、数据缓冲区。11、简述MCS-51单片机存储区的划分。答:MCS-51单片机的存储器从物理结构上分为:片内和片外数据存储器,片内和片外程 序存储器。2)从逻辑上分别可划分为:片内统一寻址的64K程序存储器空间(0000H-FFFFH);64KB 的片外数据存储器空间(0000H-FFFFH);256B的片内数据存储器空间(00H-FFH)0 12、MCS-51基本型单片机的中断入口地址各为多少。答:外部中断0 定时/计数器0 外部中断1 定时/计数器1 串行接口中断入口地址0003H 中断入口地址OOOBH 中断入口地址0013H 中断入口地址001BH 中断入口地址00
21、23H13、什么是指令周期、机器周期和时钟周期?答:指令周期:指令的执行时间;机器周期:CPU完成一个最简单的指令所需要的时间;时 钟周期:晶振信号周期就是时钟周期。14、已知一 MCS51单片机系统使用6MHz的外部晶体振荡器,计算:该单片机系统的状态周 期与机器周期各为多少?解:由于晶振为6MHz,所以机器周期为2us,因为一个机器周期由6个状态周期组成,所以 状态周期l/3us15、8031单片机需要外接程序存储器,实际上它还有多少条I/。线可以用?当使用外部存 储器时,还剩下多少条I/O线可用?答:8031系统必须外接程序促成器,原则上说,P0和P2 口要用作数据和地址总线,所以只 有
22、P1和P3 口可用作I/O 口,共16条I/O线。在使用外部存储器时,除了占用P0和P2 口 外,还需要用P3 口 RD(P3.7)和WR(P3.6)两条控制线,所以这种情况下就只剩下14条 I/O线可用了。第4章 思考题及习题参考答案1.寻址方式是什么?答:寻址方式是寻找操作数或操作数地址的方式。2.89c51指令系统有哪几种寻址方式?答:89c51的寻址方式有七种。即:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、基址寄存器加变址寄存器变址寻址、相对寻址和位寻址。3、访问特殊功能寄存器SFR可以采用哪些寻址方式?答:直接寻址和位寻址方式。4、访问RAM单元可以采用哪些寻址方式?访问外部R
23、AM单元有哪些指令?答:直接寻址、寄存器间接寻址和位寻址方式。访问外部RAM单元的指令有4条:MOVX A,DPTRMOVX A,RiMOVX DPTR,AMOVX Ri,A5、访问外部程序存储器可以采用哪些寻址方式?访问外部程序存储器有哪些指令?答:立即寻址、变址寻址和相对寻址方式。访问外部程序存储器的指令有2条MOVC A,A+DPTRMOVC A,A+PC6、试写出完成以下每种操作的指令序列。(1)将R0的内容传送到片内RAM 20H;(2)将R1的内容传送到R0;(3)内部RAM单元10H的内容传送到外部RAM单元1000H;(4)外部RAM单元1000H的内容传送到R5;(5)外部R
24、OM单元1000H的内容传送到R5;(6)外部RAM单元2000H的内容传送到外部RAM单元2001Ho答:(1)MOV 20H,R0(2)MOV A,RIMOV RO,A(3)MOV A,10HMOV DPTR,#1000HMOVX DPTR,A(4)MOV DPTR,#1000HMOVX A,A+DPTRMOV R5,A(5)MOV DPTR,#1000HMOV A,#00HMOVC A,A+DPTRMOV R5,A(6)MOV DPTR,#2000H MOVX A,DPTR INC DPTRMOVX DPTR,A7.设内部 RAM(30H)=60H,(60H)=10H,(10H)=20H
25、R1)=22H,(P1)=OAH,分析以下程序执行后(30H)=?,(60H)=?,(10H)=?,(A)=?,(B)=?,(P2)=?每条指令的机器码为多少?MOV RO,#30HMOV A,R0MOV RI,AMOV B,R1MOV R1,PlMOV P2,PlMOV 10H,#90H答:MOV RO,#30H;(R0)=30H,78 30MOV A,R0;(A)=60H,E6MOV RI,A;(RI)=60H,F9MOV B,R1;(B)=10H,87 FOMOV R1,Pl;(60H)=OAH,A7 90MOV P2,Pl;(P2)=OAH,85 90 AOMOV 10H,#90H
26、10H)=90H,75 10 90(30H)=60H,(60H)=OA H,(10H)=90H,(A)=60H,(B)=10H,(P2)=OAH8.设外部 RAM(2030H)=0FH,分析以下指令执行后(DPTR)=?,(30H)=?,(2030H)=?(A)二?每 条指令的机器码为多少?MOV DPTR,#2030H MOVX A,DPTRMOV 30H,AMOV A,#3FH MOVXDPTR,A9、编写指令实现下列位操作。答:MOVDPTR,#2030H;(DPTR)=2030H,90 20 30MOVXA,DPTR;(A)=OFH,EOMOV30H,A;(30H)=OFH,F5
27、30MOVA,#3FH;(A)=3FH,74 3FMOVXDPTR,A;(2030H)=3FH,FO执行结果为:(DPTR)=2030H,(30H)=0FH,(2030H)=3FH,(A)=3FHO(1)使累加器的最高2位清零;(2)屏蔽(清零)20H的高4位;(3)将E0H的低4位取反,高4位不变;(4)将P0的低2位置10(5)将10H的内容取补后存放到20H答:(1)CLR ACC.7CLR ACC.6(2)ANL 20H,#0FH(3)XRL EOH,#OFH(4)ORL P0,#03H(5)XRL 10H,#OFFHINC 10HMOV 20H,10H10.在外部程序存储器中,从10
28、20H单元开始依次存放。9的平方值:0、1、4、9、81,要求依据累加器A中的值(09)来查找所对应的平方值,试设计程序实现。答:MOV DPTR,#1020HMOVC A,A+DPTR11.设(R0)=20H,(20H)=40H,(A)=58H,贝U:执行 XCH A,R0 后(A)=?,(20H)二?若执行 XCHD A,R0 后(A)=?,(20H)二?答:执行 XCH A,R0 后(A)=40H,(20H)=58H若执行 XCHD A,R0 后(A)=50H,(20H)=48H 12、试编写程序序列,完成两个16位数的减法:(30H)(31H)-(10H)(11H)-(30H)(31H
29、)o 答:CLR CMOV A,31HSUBB A,11HMOV 31H,AMOV A,30HSUBB A,10HMOV 30H,A13、试编写程序,将RO中的低4位数与R1中的高4位数合并成一个8位数,并将其存放在 R0中。答:MOV A,ROANL A,#OFHMOV B,AMOV A,RIANL A,#OFOHORL A,BMOV RO,A14.设计双字节无符号数加法程序实现(RO R1)+(R2 R3)一(R4 R5),RO、R2、R4存放 16位数的高字节,RI、R3、R5存放低字节,假设其和不超过16位。答:MOV A,RIADD A,R3MOV R5,AMOV A,ROADDC
30、A,R2MOV R4,A 15.设计双字节无符号数相减程序实现(RO RI)(R2 R3)(R4 R5)0 RO、R2、R4存放 16位数的高字节,RI、R3、R5存放低字节,答:MOV A,RI CLR CSUBB A,R3MOV R5,A MOV A,RO SUBB A,R2 MOV R4,A17.设2个BCD码数存在外部RAM的2000H和内部RAM的20Ho设计程序实现2个BCD码相 加,其结果的十位和个位送到外部RAM的2000H单元,结果的百位值送F0位。答:MOV DPTR,#2000HMOVX A,DPTRADD A,20HDA AMOVX DPTR,AMOV FOH,CY18
31、设变量X存放在片内10H单元中,函数Y存放在片内20H单元。编写程序实现如下函 数功能。P 80H X0Y=4 50 X=0FFH X0则转移到POSIMOVA,#OFFH;若 X0 则 A=FFHSJMPCOMP;转分支结构出口COM:MOV A,#50;x=o时的赋值SJMP COMPPOSI:MOV A,#80H;X0 时 A=80HCOMP:MOV 20H,A SJMP$;存函数Y值;结束19.利用位逻辑指令,模拟下图硬件逻辑电路功能。试编写程序实现。Pl.0 pi.i Pl.2答:MOV ANL CPL MOV MOV ORL ANL CPL MOVCY,P1.0 CY,P1.1
32、CYFO,CY CY,P1.1 CY,Pl.2 CY,FO CYFO,CY20.若(CY)=0,(Pl)=10110111B,试指出执行下列程序段后,CY、Pl 口内容的变化情况。MOV Pl.2,CMOV C,Pl.4JBC Pl.7,SSORL C,Pl.6SS:CPL Pl.3ANL C,/Pl.3MOV Pl.0,C答:(CY)=0,(Pl)=0011 1010B第5章 思考题及习题参考答案1、80C51单片机汇编语言有何特点?答:优点;源程序结构紧凑、灵活,汇编成的目标程序效率高,具有占存储空间少、运行速 度快、实时性强等优点。缺点:由于它的是面向机器的语言,所以它缺乏通用性,编程复
33、杂繁琐,但应用相当广 泛。2、利用80C51单片机汇编语言进行程序设计的步骤如何?答:(1).需要对单片机应用系统预先完成的任务进入深入的分析,明确系统的设计任务、功能要求、技术指标。(2).要对系统的硬件资源和人工作环境进行分析和熟悉.(3).利用数学方法或数学模型来对其进行描述,从而把一个实际问题转化成由计算机 进行处理的问题。(4).对各种算法进行分析比较,并进行合理的优化。3、常 用的程序结构有哪几种?特点如何?答:常用的程序结构有以下几种:(1)顺序程序结构:顺序结构是按照逻辑操作顺序,从某一条指令开始逐条顺序进行,直到某一条指令为止;比如数据传送与交换、查表程序和查表程序的设计等;
34、在顺序结构中 没有分支,也没有子程序,但它是组成复杂程序的基础和主干;(2)分支程序结构:它的主要特点是程序执行流程中必然包含有条件判断指令,符合条 件要求的和不符条件合要求的有不同的处理程序;(3)循环程序结构:它在本质上只是分支程序中的一个特殊形式,它由循环初始化、循环体、循环控制和结束部分构成;在循环次数已知情况下,采用计数循环程序,其特点是 必须在初始部分设定计数的初始值,循环控制部分依据计数器的值决定循环次数;根据控制 循环结束的条件,决定是否继续循环程序的执行。(4)子程序:它的主要特点是,在执行过程中需要由其它的程序来调用,执行完后又需 要把执行流程返0到调用该子程序的主程序。4
35、子程序调用时,参数的传递方法有哪几种?答:在80c51单片机中,子程序调用时,参数的传递方法由三种:(1)、利用累加器A或寄存器;(2)、利用存储器;(3)、利用堆栈。5、什么是伪指令?常用的伪指令功能如何?答:伪指令是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。常用的伪指令有:(1)起始地址设定伪指令0RG,该指令的功能是向汇编程序说明下面紧接的程序段或 数据段存放的起始地址;(2)汇编结束伪指令END,该指令的功能是汇编程序遇到END伪指令后立即结束汇编;(3)字节数据定义伪指令DB,该指令的功能是从标号指定的地址单元开始,在程序存 储器中定义字节数据;(4)字数据定义伪指令DW
36、该指令的功能是从标号指定的地址单元开始,在程序存储 器中定义字数据;(5)空间定义伪指令DS,该指令的功能是从标号指定的地址单元开始,在程序存储器 中保留由表达式所指定的个数存储单元作为备用空间,并都填以零值;(6)赋值伪指令EQU,该指令的功能是将表达式的值或特定的某个汇编符号定义为一 个指定的符号名;(7)位地址符号定义伪指令BIT,该指令的功能是将位地址赋给指定的符号名。6:把外部RAM的2000-20FFH RAM空间置零程序如下:ORG 000HMOV RO,#00HMOV DPTR,#2000H;空间首地址送DPTRLOOP:MOV A,#00HMOVX DPTR,A;清零INC
37、 DPTR;DPTR加1INC RO;字节数加1CJNE RO,#00H,LOOP;连续清256个字节L00P1:SJMP L00P1END7、录入并调试一个排序子程序,其功能为用冒泡法将内部RAM中从50H开始的十个单字 节无符号正整数,按从小到大的次序重新排列。程序如下:用冒泡法进行数据排序ORGMOVLOOPO:MOVMOVCLRMOVL00P1:0000HR3,#50HMOV A,R3RO,AR7,#0AHOOHA,R0 INC RO;指针送R0;长度送R7;标志位为0MOV R2,ACLR CMOV 22H,ROCJNE A,22H,L00P2SETB C;相等吗?LOOP2:MOV
38、 A,R2 JC LOOP3 SETB OOH;小于或等于不交换XCHDECXCHINCA,R0R0A,R0RO;大于交换位置LOOP3:MOV A,R0DJNZ R7,LOOP1JB OOH,LOOPOLOOP:SJMP LOOPEND;一次循环中有交换继续;无交换退出8、设被加数存放在内部RAM的20H、21H单元,加数存放在22H、23H单元,若要求和存放 在24H、25H中,试编写出16位数相加的程序。答:ORG 1000HMOV R1,#21HMOV R2,#23HMOV R3,#25HCLR CLP;MOV A,R2ADDC A,R1MOV R3,ADEC RIDEC R2DEC
39、R3DJNE RI,#1FH,LPSJMP$9、编写一段程序,把外部RAM中lOOOHlO30H单元的内容传送到内部RAM的30r60H单元 中。答:ORG 0030HMOV R1,#49MOV RO,#30HMOV DPTR,#1000HLOOP:MOVX A,DPTRMOV R0,AINC DPTRINC RODJNZ RI,LOOPSJMP$END10、编写程序,实现双字节无符号数加法运算,要求(R1R0)+(R7R6)-(61H60H)。答:MOV A,ROADD A,R6MOV 60H,AMOV A,RIADDC A,R7MOV 61H,ASJMP$11、用RO和RI作数据指针,RO
40、指向第一个加数,并兼作“和”的指针,R1指向另一个加数,字节存放到R2中作计数初值。答:主程序:JAFA:MOV RO,#20HMOV RI,#29HMOV R2,#04H;指向加数最低字节;指向另一加数最低字节;字节数作计数值;调用加法子程序ACALL JASUBAJMPRTE$多字节加法子程序:JASUB:CLRCJASUB1:MOVA,R0;取出加数的一个字节(4 B无符号数加数)ADDCA,R1;加上另一数的一个字节MOVR0,A;保存和数INCRO;指向加数的高位INCRI;指向另一加数的高位DJNZRETR2,JASUB1;全部加完了吗?12、在内部RAM的21H单元开始存有一组单
41、字节不带符号数,数据长度为30H,要求找出最 大数存入BIG单元。答:START:MOV R7,30HDEC R7MOV RO,#21HMOV A,R0LOOP:INC ROCLR CSUBB A,ROJNC NEXTMOV A,R0NEXT:DJNZ R7,LOOPMOV BIG,ASJMP$END13、求双字节补码程序设双字节数放在内部RAM的30H和31H单元(高字节在低地址),将其取补后存入40H(存放高字节)和41H(存放低字节)单元答:START:MOV A,31HCPL AADD A,#01HMOV 41H,AMOV A,30HCPL AJNC DONEADD A,#01HDON
42、E:MOV 30H,ASJMP$14、编程统计累加器A中“1”的个数。答:MOV Rl,#0 PUSH ACCLOOP1:JZ DONE CLR C RLC A JNC LOOP1 INC RI SJMP LOOP1DONE:POP ACC SJMP$END15、编程序实现1+2+3+100=?答:汇编代码如下:H_Byte EQU R4L_Byte EQU R5Max_Adder EQU 100ORG 0000H;保存结果,高8位;保存结果,低8位;最大的加数LJMP MAIN ORG 0030H MAIN:MOV R2,#l;加数MOV R4,#0MOV R5,#0START:MOV A,
43、Max_AdderCLR CYSUBB A,R2 JC RESULT MOV A,R2 ADD A,L_ByteMOV L Byte,A;保存低位MOV A,H_ByteADDC A,#0MOV H Byte,A;保存高位INC R2JMP STARTRESULT:SJMP$;只用于调试 ENDC语言代码如下:include at89x5Lh 由于这里只是计算结果,所以这行代码可以去掉 void main(void)(unsigned char i=l;unsigned int result=0;for(i-1;i700 xl0 6=64836=fd44H 12 12THO=OFDH,TLO
44、44H定时/计数器。工作在方式1,定时器模式,软件启动,则TMODROOOOOOIBRIH。查询 方式下,不需要打开中断使能控制位,复位后IER,所以不需要初始化IE。初始化程序为:MOV TMOD,#01HMOV TH1,#OFDHMOV TL1,#43HSETB TRO19.某单片机系统的晶振为12MHz,编程使用定时/计数器。工作在方式3,从P1.0输出周 期为200us占空比50%方波,从Pl.1输出周期为WOus占空比50%;使用定时/计数器1,工作在方式2,从P1.2输出周期80us,占空比50%的方波。(提示,定时/计数器1没有了 中断申请标志位,需要读取计数数据,进行判断)。
45、答:ORG参考程序如下:ORG0000HAJMPOOOBHAJMPMAIN_START;定时/计数器0中断入口INT_TLO_HANDLEORG 001BHAJMPORG 0030H;定时/计数器1中断入口,但作为了 TO的THO定时中断入口INT_THO_HANDLEINT_TLO_HANDLE:MOVCPLRETITLO,#9CH;TLO 产生 200us 方波Pl.0;INT_THO_HANDLE:MOVCPLRETIORG 01 OOHTHO,#OCFH;THO 产生 lOOus 方波Pl.1;MAIN_START:MOVSETBSETBMOV MOVMOV MOVMOVSETBSET
46、BSETBTMOD,#23H;T0 方式 3,T1 方式 2ETO;开丁0中断ET1;开丁1中断,注:THO使用。TLO,#9CH;赋初值THO,#OCFH;TH1,#0D8H;TL1,#0D8H;Pl,#00H;输出清零EA;开全局中断TRO;TLO开始计数TRI;THO开始计数,T1计数从方式确定就开始了READ_T1:MOVCLRSUBB;产生80us方波A,TL1;读丁1的计数值C;A,#ODFH;计数小于初值+7,则让输出翻转。由于读取TL1的计数值;并不是每个计数值都能读到,所以判断时需要给一个大的;范围,只要发生了初值重转,则计数已经溢出。JNCCPLAJMPENDREAD_T1
47、大于则继续读数。直到计数溢出。P1.2;READ_T1说明:此程序可以直接运行,但是实际测试结果,只能近似输出题目要求波形。定时/计数器。是由于软件初值重转的问题,计时器1则是由于每次读数时,由于中断的执行,导 致错过读数,所以输出波形的频率是不稳定的。第7章习题与思考题参考答案7-1简述MCS-51单片机串行口的四种工作方式的接收和发送数据的过程。答:(略)7-2串行口有几种工作方式?各工作方式的波特率如何确定?答:它有四种工作方式:方式0、1、2、3。帧格式有10位、11位。方式0和方式2的波特率是 固定的,方式1和方式3的波特率是可变的,由定时器的溢出率决定。7-3若晶体的振荡频率为1
48、1.0592MHz,串行口工作于方式1,波特率为4800bit/s,计算用T1作为波特率发生器的方式控制字和计数初值。解:方式1和方式3的波特率由定时器的溢出率控制,是可变的,表示为:波特率=(2smod/32)x定时器T1的溢出率定时器T1的溢出率=T1计数率/产生溢出所需的时间=(/osc/12)/(2、TC)其中:N为定时器T1的位数,TC为定时器T1的预置初值。7-4简述12c总线的数据传输方式。答:(略)7-5编写程序将AT89c51单片机片内40H47H单元中的八个8位数据通过12c总线接口传送 到存储器AT24coi的50H57H单元中。答:RETICW:LCALL START;
49、发送起始信号ICWLP1:MOV A,#0A0H;#10100000B器件地址码,LCALL WOBYT;发送器件地址LCALL TACK;检查应答位JB 30H,ICWLP1;无应答位,重发ICWLP2:MOV A,#50H;50H为待写存储单元首地址LCALL WOBYT;发送待写存储单元地址LCALL TACK;检查应答位JB 30H,ICWLP1;无应答位,重发MOV R5,#8;待发送数据块的长度MOV R0,#40H;40H为第一个数据的首地址ICWLP3:MOV A,R0;读一个字节数据LCALL WOBYT;发送LCALL TACK;检查应答位JB 30H,ICWLP1;无应答
50、位,重发INC R0;指向下一个要发送的数据DJNZ R5,WLP2;要发送数据未发完,再发送LCALL STOP;全部数据发完,停止LCALL DELAY;延时,等待AT24coi内部写操作返回7-6简述SPI总线的数据传输方式。答:(略)7-7编写程序将AT89C51单片机片内30H、到数字/模拟转换器TLC5615。.31H单元中的16位数据通过SPI总线接口传送答:DINBIT Pl.l;定义I/O 口SCLKBIT Pl.2CS5615BIT Pl.3DataHEQU 30HDataLEQU 31HTLC5615:CLR SCLK;准备操作TLC5615CLR CS5615;选中 T






