1、 目 录第一章 概 论2第二章 AT89C51单片机内部结构基础3第三章 AT89C51指令系统6第四章 AT89C51汇编语言程序设计10第五章 AT89C51输入/输出(I/O)口及其简单应用16第六章 AT89C51中断系统与定时器/计数器18第一章 概 论 1. 什么是单片机、单片机系统、单片机应用系统?答:单片机:又名微控制器,是将微型计算机中的中央处理器(CPU)、随机存储器(RAM)、只读存储器(ROM)及I/O口电路等主要部件,结合连接它们的总线集成在一块芯片上,即它是一块智能芯片。单片机系统:单片机本身只是一块芯片,它并不能集成计算机的全部电路,因此需要加上时钟、复位电路等,
2、才能构成单片机最小应用系统;若最小系统资源不足时,还需扩展外围电路和外围芯片等,从而构成能满足应用要求的单片机系统。单片机应用系统:它是为实际的控制应用而设计的,该系统与控制对象结合在一起,是满足嵌入式对象要求的全部电路系统。它在单片机的基础上配置了前/后向通道接口电路、人机交互通道接口电路、串行通信接口等面向对象的接口电路。另单片机系统和单片机应用系统都是软硬件结合的系统,缺一不可。2. 单片机有哪些特点?答:单片机的特点很多,主要是体积小品种多,价格便宜,可靠性高,使用灵活,还有(1)突出控制功能(2)ROM和RAM分开(3)单片机资源具有广泛的通用性(4)易于扩展ROM、RAM、定时/计
3、数器、中断源等资源。3. 为什么说AT89C51单片机是MCS-51系列的兼容机?AT89C51单片机有何优点?答: AT89系列单片机是将FLASH存储器技术和MCS-51系列单片机的基本内核相结合的单片机,且管脚也与之兼容,可以直接代换,所以说AT89C51是MCS-51系列的兼容机。AT89C51单片机是AT89系列机的标准型单片机,它的优点主要有:内ROM是FLASH存储器,已获得广泛应用的80C51兼容,采用静态逻辑设计,操作频率范围宽,具有两个软件选择的节电模式等。4. AT89C51单片机由哪些主要功能部件组成? 答:CPU,RAM,ROM,I/O接口等。5. 面包板、电子电路实
4、验板、PCB板在产品开发过程中的作用?它们各有什么优缺点?答:它们都是单片机实际应用系统中的不可缺少的一部分,它们都是构成硬件系统连接的载体介质。面包板可以多次利用,可是稳定性不高;电子电路实验板的稳定性由焊接质量来决定,不可多次利用;PCB板最为可靠,可是如果不是量产,价格偏高,时间较长。6. 简述单片机应用研发过程和研发工具。答:任务分析方案论证硬件设计软件设计仿真调试实物制作与调试。研发工具:调试仿真软件KEIL、在线仿真器、编程器或ISP下载器、PROTEUS仿真平台、教学实验板等。第二章 AT89C51单片机内部结构基础1. AT89C51单片机内部结构主要有哪些部件组成?它们的主要
5、功能是什么?答:AT89C51单片机内部结构主要有:(1)中央处理器CPU,是单片机的核心,完成运算和控制功能;(2)内部数据存储器(256字节),前面128个单元00H7FH存储内部数据,后面128个单元80HFFH被专用寄存器占用,用来实现对片内各部件进行管理、控制、监视;(3)程序计数器PC,是一个16位专用寄存器,其内容为下一条执行指令的地址;(4)Flash内部程序存储器(4K),用于存储程序、原始数据、表格等;(5)4个并行I/O口(8位),实现数据的并行输入输出;(6)串行通信口,实现单片机和其他数据设备之间的串行数据传送;(7)2个定时器/计数器(16位),实现定时或计数功能;
6、(8)中断控制系统,共5个中断源,分高低两个优先级;(9)一个片内振荡器和时钟电路,为单片机产生时钟脉冲序列;(10)总线,用于连接各个部件和单片机系统的扩展。2. 请将AT89C51的40个引脚按4类(电源、时钟、控制和I/O引脚)分类。答:电源(2):Vss接地端,Vcc接DC正电源线;时钟(2):XTAL1,XTAL2控制(4):RST复位输入,ALE/(/PROG)地址锁存允许/编程脉冲,/PSEN外ROM读选通信号,(/ES) / VPP内外ROM选择/编程电源I/O引脚(32):P0P3并行8位I/O口3. AT89C51单片机引脚/EA、RST、ALE、/PSEN的功能是什么?答
7、:/EA是片内外ROM选择端,ROM的寻址范围为64KB,而AT89C51内部只有4KB ROM,当不够用时可在外扩展ROM。当/EA信号为低电平时,指访问外部ROM;当/EA为高电平时,则先访问内部ROM,当PC值超过4KB时自动转向外部ROM中执行。RST复位信号,当此引脚上的信号出现至少两个机器周期的高电平将使单片机复位。ALE地址锁存控制信号,当系统扩展时,ALE用于控制把P0口输出的低8位地址送入锁存器存起来,以实现低位地址和数据的分时传送。/PSEN外部ROM的读选通信号,在访问外部ROM时,每个机器周期两次PSEN有效(低电平),但在此期间内,每当访问外部数据存储器时,这两次有效
8、的PSEN将不出现。4. 什么是单片机的振荡周期、状态时钟周期、机器周期和指令周期?它们之间有什么关系?答: 单片机是按一定的时序进行工作的,而时序是通过XTAL1和XTAL2引脚跨接振荡器与内部振荡电路共同产生固定频率的波形。我们把振荡频率的倒数称振荡周期。状态时钟周期是指单片机时钟信号的周期,是振荡周期的两倍,又称状态周期。一个机器周期由6个状态组成,即机器周期等于6个状态时钟周期或等于12个振荡周期。指令周期是指单片机执行一条指令所占用的时间,根据指令的不同,可包含有1、2、4等机器周期的倍数。5. 当AT89C51单片机外接晶振为4MHZ时,其振荡周期、状态时钟周期、机器周期、指令周期
9、的值各为多少?答:振荡周期为0.25s,状态时钟周期为0.5s,机器周期为3s,指令周期根据指令而不同可能是3s、6s、12s等。6. 简述AT89C51单片机复位条件,并说明复位后寄存器中的数值状态。答:当RST引脚上的复位信号保持至少两个机器周期的高电平时,即满足复位条件。 复位后程序计数器PC的值初始化为0000H,这样单片机在复位后就从程序存储器ROM的0000H单元开始执行程序。另外其他的寄存器内容为:ACC,B,PSW,TCON,TL0,TH0,TL1,TH1,SCON,TMOD均为00H,而DPTR=0000H,SP07H,P0P3=0FFH,IP=000000B,IE=0000
10、00B,PCON=00000B。参考表2-1。7. 参阅图2-5,分析上电复位过程。答:图2-5中A是通过外部复位电容充电实现复位的,单片机上电的瞬间,电容两端的电位不会突然变化,则RST的电位为Vcc(高电平),随着充电电流的减小,RST引脚电位逐渐下降,而其维持高电平的时间取决于电容的充电时间,应大于两个机器周期。B图是在A的基础上引入了按键复位,按下按键时RST为高(电阻分压),按键松开后RST逐渐降为低电平,复位结束。8. AT89C51单片机的ROM空间中,这6个地址(0、03H、0BH、13H、1BH、23H)有什么特殊的意义和用途?用户应怎样合理安排?答:他们都是特殊的地址单元,
11、其中0000H是单片机复位后,系统开始取指、执行指令的地址,即单片机复位后PC值为0000H;而03H、0BH、13H、1BH、23H是单片机5个中断服务子程序的入口地址。相邻中断入口地址间隔8个单元。当程序使用中断时,在入口地址处安放一条跳转指令,而相应的中断服务子程序从转移地址开始安放,若中断服务子程序小于等于8个单元可直接存在入口地址开始的8个单元内。若没有用到中断功能,这些单元就可以作为一般的程序存储器用。9. 画图说明AT89C51单片机的存储空间结构。答: 程序存储器ROM结构 内RAM存储器结构10. AT89C51单片机的片内RAM是如何分区的,各有什么功能?答:AT89C51
12、单片机内RAM,最低32单元(00H1FH)为工作寄存器区;工作寄存器上面的16个单元(20H2FH)构成固定的可位寻址存储区;用户RAM区(30H7FH),可作为数据缓冲区,用于存放各种数据和中间结果,同时没有使用的工作寄存器单元和可位寻址单元都可作为数据缓冲区,同时该区也可作为堆栈区,栈底可以根据片内数据存储器的使用情况由指令设定。11. AT89C851单片机有多少专用寄存器?分布在何地址范围?若对片内84H读/写将会产生什么结果?(提示:考虑84H为位地址、为字节地址两种情况)答:AT89C51单片机有21个专用寄存器,零散分布在内部RAM的高128单元(80HFFH)。84H位地址为
13、P0.4位,对其进行读写就是对P0口的第五位进行读写;而84H为字节地址时因为该单片机本身未对84H定义专用寄存器,因此不能对84H字节地址进行读写。12. 分别说明程序计数器PC和堆栈指针SP的作用?复位后PC和SP中值各为何?在程序设计时,有时为什么要对SP赋值?答: 程序计数器PC时一个16位的计数器,其内容为将要执行的指令的首地址,寻址范围达64KB,PC具有自动加1功能,以实现程序的顺序执行。PC不可寻址,无法对它进行读写。堆栈指针SP的内容就是堆栈栈顶的存储单元地址,向堆栈中每存一个数,SP中的值就自动加1,每取一个数就自动减1,SP始终指在栈顶地址。复位后,PC=0000H,使单
14、片机从0000H单元开始执行,SP=07H,这样堆栈就要从08H开始,而08H属于工作寄存器区,若程序要用到这些寄存器组则要将SP设置大些,因此堆栈最好在内部的RAM(30H7FH)中开辟。13. 开机复位后,CPU作用的是哪组工作寄存器?它们的地址是什么?CPU如何确定和改变当前工作寄存器?答:开机复位后,CPU作用的时第0组工作寄存器,它们的地址是内部RAM的00H07H,CPU若要确定当前工作寄存器,则读出专用寄存器PSW的RS1和RS0内容;若要改变当前工作寄存器,则需要修改PSW的RS1和RS0的内容。14. 位地址3EH和字节地址3EH有何区别?位地址3EH具体在片内RAM中什么位
15、?答:字节地址3EH是内RAM低128字节中的一个字节存储单元。而位地址是针对可位寻址区域而言的,位寻址区占用了字节地址的20H2FH共16个字节,字节地址20H中的20H.020H.7位地址是00H08H,因此位地址3EH是字节地址27H中的第7位。第三章 AT89C51指令系统1. 简述下列基本概念:指令,指令系统,机器语言,汇编语言。答:指令是单片机CPU执行某种操作的命令。指令系统是一台计算机所能执行的指令集合。机器语言即二进制代码语言,是计算机可以直接识别。汇编语言是用助记符、字符串和数字等来表示指令的程序语。2. 简述AT89S51单片机的指令格式答:该单片机的指令由两部分组成,即
16、操作码和操作数。操作码用来规定指令进行什么操作,而操作数则是指令操作的对象,操作数可能是一个具体的数据,也可能是指出到哪里取得数据的地址或符号。指令格式一般为: 标号: 操作码 操作数1,操作数2,操作数3 ;注释3. 简述AT89S51的寻址方式和所能涉及的寻址空间 表3-2 寻址方式及相应的寻址存储器范围寻 址 方 式寻 址 存 储 器 范 围立即寻址程序存储器ROM直接寻址片内RAM低128B,特殊功能寄存器寄存器寻址工作寄存器R0R7,A, C, DPTR,AB 寄存器间接寻址片内RAM低128B,片外RAM 变址寻址程序存储器ROM(A+DPTR,A+PC)相对寻址程序存储器ROM
17、(相对寻址指令的下一指令PC值加128127)位寻址片内RAM的20H2FH字节地址中所有的位,可位寻址的特殊功能寄存器答:共有7种寻址方式,见表3-2。分别是:(1)寄存器寻址:寻址范围为通用寄存器组,共4组32个,但只能使用当前寄存器组,因此使用前需要通过对PSW种的RS1、RS0位的状态进行设置;(2)直接寻址:寻址范围为内部RAM,包括低128位用户RAM区和高128位专用寄存器;(3)寄存器间接寻址:寻址范围为内部RAM低128位,外部RAM 64KB(低256单元可以使用DPTR和R0、R1作为间接寻址寄存器,而其他单元只能用DPTR作为间接寻址寄存器);(4)立即寻址:直接给出立
18、即数,不涉及寻址空间;(5)变址寻址:只对程序寄存器进行寻址;(6)相对寻址:以PC的内容为基值,加上指令机器代码中相对地址形成新的PC值转移;(7)位寻址:寻址空间包括内部RAM位寻址区(202FH)和专用寄存器的可寻址位。4. 要访问片外程序存储器和片外数据存储器,应采用哪些寻址方式?答:访问片外程序存储器采用变址寻址方式,片外数据存储器采用寄存器间接寻址方式,且用DPTR可以访问64KB,而用R0或者R1只可访问低256字节。5. 在AT89S51片内RAM中,已知(30H)=38H,(38H)=40H,(40H)=48H,(48H)=90H。请分析下面各是什么指令,说明源操作数的寻址方
19、式及按顺序执行每条指令后的结果。答:指令指令说明源操作数寻址方式结果MOV A, 40H将内部RAM中40H内容传送到累加器A中(A) (40H)直接寻址(A)48HMOV R0, A再将A中内容传送给R0(R0) (A)寄存器寻址(R0)=48HMOV P1, #0F0H将立即数0F0H送到P1口,即P1.4P1.7位1,其余为0(P1) 0F0H立即数寻址(P1)=0F0HMOV R0, 30H将30H中的内容,传放到以R0单元内容为地址的单元中(R0) (30H)直接寻址(R0)=(48H)=38HMOV DPTR, #3848H将立即数3848传送给DPTR数据指针(dptr) 384
20、8H立即数寻址(DPTR)=3848HMOV 40H, 38H将内部RAM中38H内容传送到40H单元中(40H) (38H)直接寻址(40H)=40HMOV R0, 30H将30H中的内容给R0寄存器(R0) (30H)直接寻址(R0)=38HMOV P0, R0将R0的内容传送到P0(P0) (R0)寄存器寻址(P0)=38HMOV A, R0将R0内容为地址的该单元内容传送给A(A)(R0)寄存器间接寻址(A)=40HMOV P2, P1将P1的内容传送给P2(P2) (P1)直接寻址(P2)=0F0H6. 指出下列指令的源操作数的寻址方式 MOV A, 65H 直接寻址MOV A, #
21、65H 立即数寻址MOV A, R0 寄存器间接寻址MOV A, R2 寄存器寻址MOVC A, A+PC 变址寻址7. 内部RAM和特殊功能寄存器各用什么寻址方式?答:内部RAM有寄存器寻址方式、直接寻址方式和间接寻址方式; 特殊功能寄存器除A外只能进行直接寻址。8. 已知:(A)=5BH,(R1)=30H,(30H)=0CEH,(P1)=71H,(PSW)=80H,(PC)=2000H,(205CH)=46H,(SP)=30H,(B)=78H。分别求各条指令执行后的结果(要求进行二进制运算验证)及标志位Cy、P的影响。(1)MOV A, R1 (A)=0CEH P=1, C不变(2)MOV
22、 40H, 30H (40H)=0CEH P和C不变(3)MOV P1, R1 (P1)=30H P和C不变(4)MOVC A, A+PC (A)=46H P=1, C不变(5)PUSH B (31H)=78H,(SP)=31H P和C不变(6)POP DPH (DPH)=0CEH,(SP)=29H P和C不变(7)XCHD A, R1 (A)=05EH,(30H)=CBH P=1, C不变(8)ADD A, 30H (A)=29H P=1, C=1(9)ADDC A, P1 (A)=CDH P=1, C=0(10)SUBB A, P1 (A)=E9H P=1, C=1(11)ANL P1,
23、#0FH (P1)=01H P和C不变(12)CLR PSW.7 C=0(13)RLC A (A)=B7H P=0, C=0(14)ORL C, 90H C=1, P不变9. 对下面一段程序加上机器码和注释,并说明程序运行后寄存器A、R0和内部RAM 50H、51H、52H单元的内容。 MOV 50H,#50H 75 50 50;(50H)50H MOV A,50H E5 50;(A)(50H) MOV R0,A F8;(R0)(A)MOV A,#30H 74 30;(A)30HMOV R0,A F6;(R0)(A)MOV A,#50H 74 50;(A)50HMOV 51H,A F5 51;
24、(51H)(A)MOV 52H,#00H 75 52 00;(52H)00H答:运行后寄存器(A)=50H,(R0)=50H,(50H)=30H,(51)=50H,(52H)=00H10. 区别下列各指令中20H的含义,在每条指令后加上注释。MOV A , 20H 将20H立即数传送给AMOV 45H, 20H 将内部RAM中20H单元的内容传送到45H中MOV C, 20H.0 将内部RAM中20H单元内容的第0位(最低位)传送给CMOV C, 20H 将内部RAM中20H位地址内容传送给C11. 写出完成以下功能的指令(1) 将立即数30H送到R1;(2) 将内RAM30H中的数据送到内R
25、AM78H单元;(3) 将立即数30H送到以R0中内容为地址的存储器中;(4) 将R2中的内容送到P1;(5) 将内RAM60H单元的数据送到外RAM60H单元;(6) 将内RAM60H单元的数据送到外RAM1060H单元;(7) 将ROM1000H单元的内容送到内RAM30H单元;(8) 使ACC.7置位;(9) 使累加器的低4位清零;(10) 使P1.2与CY相与,结果送CY;(11) 立即数45H、93H进行逻辑与、或、异或操作;(12) 两立即数求和:1C0H45H,结果按高低8位存在30H、31H中。答案:(1)MOV R1,30H (2) MOV 78H, 30H(3)MOV R0
26、, #30H (4)MOV P1, R2(5)MOV A,60H; MOV P2,#0; MOV R0,#60H; MOVX R0,A(6) MOV A,60H; MOV DPTR,#1060; MOVX DPTR,A(7) MOV A, #00H MOV DPTR,#1000H MOVC A, A+DPTR MOV 30H,A (8)SETB ACC.7(9) ANL A, #0F0H(10) ANL C, p1.2(11) 与: MOV A,#45H ANL A,#59H 或:MOV A,#45H ORL A,#59H异或:PMOV A,#45H XRL A,#59H(12) CLR CM
27、OV R2,#1MOV A,#0C0H ADD A,#45HMOV 31H,AMOV A,R2ADDC A,#0MOV 30H,A12. 写出下列指令执行过程中堆栈的变化设堆栈初值为X: MOV R6, #11H (SP)=X(堆栈不变) MOV R7, #23H (SP)=X(堆栈不变) ACALL 200H (SP)=X+2 ;(X+1)=第4条指令的首址PC低8位 (X+2)=第4条指令的首址PC高8位 POP 50H (SP)=X-1 POP 51H (SP)=X-2 SJMP $ ORG 200H RET答:执行过程中,前面两条为立即寻址指令,堆栈不变;执行第三条ACALL指令时,首
28、先将程序寄存器PC的当前值加2,接着先后将PC的低八位和高八位分别进栈,(SP)= (SP)+2;然后再将PC内容中的低11位用200H来替代,同时程序跳到第七条ORG200H中,接着RET表示子程序返回,将原先压入堆栈的PC值弹出,(SP) =(SP)-2;最后两条POP指令执行后将SP所指地址中的内容赋给50H,SP减1后再将SP所指地址中的内容赋给51H,SP内容再减1给SP,最后程序结束。13. 请写出能实现下列功能的程序段:(1)一个16位数据,高低字节分别放在20H和21H中,试将该数乘以2MOV A, 21H CLR C RRC AMOV 21H, AMOV A, 20HRRC
29、AMOV 20H, A(2)16位二进制数由高位到低位放在30H和31H单元,将其内容加1; MOV A, 31H ADD A, #01HMOV 31H, AMOV A, 30HADDC A, #00HMOV 30H, A(3)将DPTR中的数据减5;CLR CMOV A, DPL SUBB A, #05H MOV DPL, A MOV A, DPH SUBB A, #00H MOV DPh, A(4)有3个位变量X,Y,Z,请编写程序实现Y=X+YZ的逻辑关系式。X BIT 30HY BIT 31HZ BIT 32HMOV C,YANL C,ZMOV 20H,CMOV C,XORL C,20
30、HMOV Y, C第四章 AT89C51汇编语言程序设计1. 将一个按高低字节存放在21H、20H中的一个双字节乘以2后,再按高低次序将结果存放到22H、21H、20H单元ORG 0STAR: CLR CMOV 20H,#0E2H ;设低字节的数据 是E2HMOV 21H,#0F3H;设高字节的数据是F3HMOV A, 20HMOV B,#2HMUL ABMOV 20H,AMOV 23H,BMOV A,21HMOV B,#2HMUL ABADDC A,23HMOV 21H,AMOV 22H,BSJMP $END2.试编程,将片外RAM 1000H1050H单元的内容置为55H。MOV P2,#
31、10HMOV R0,#00HMOV A,#55HMOVX R0,AMOV R0,#50HL0: MOVX R0,A DJNZ R0,L0 SJMP $END3. 试编程统计数据区长度的程序,设数据区从片内RAM 30H单元开始,该数据区以0结束,统计结果放入2FH中。MOV R0,#30HL0: MOV A,R0 JZ L1 INC R1 INC R0SJMP L0L1:MOV 2FH, R14. 试编写程序,将片外RAM 2000H200FH数据区中的数据由大到小排列起来。ORG 0L0: MOV P2,#20H MOV R0,#00H MOV R7,#0FH CLR F0LOOP: MOV
32、X A,R0 MOV 31H,A INC R0 MOVX A,R0 CLR C CJNE A,31H,L1L1: JC L2 DEC R0 MOVX R0,A MOV A,31H INC R0 MOVX R0,A SETB F0L2: DJNZ R7,LOOP JB F0,L0 SJMP $ END5. 若晶振频率位6MHZ,试计算下面延时子程序的延时时间 DELAY: MOV R7, #0F6H;1个机器周期 LP: MOV R6, #0FAH;1个机器周期 DJNZ R6, $;2个机器周期 DJNZ R7, LP;2个机器周期 RET;2个机器周期答: 机器周期为2us,则有:1+(1+
33、2250+2)246+22 us =247482 us6. 试分别编写延时20ms和1s的程序设晶振频率为12M20ms:ORG 0MOV R1,#102L1: MOV R0,#48L2: NOP NOP DJNZ R0,L2 NOP DJNZ R1,L1NOPNOPNOPNOPNOPNOPNOPEND 1s:-ORG 0MOV R2,#50L0: MOV R1,#100L1: MOV R0,#49L2: NOP NOP DJNZ R0,L2 NOP DJNZ R1,L1DJNZ R2,L0SJMP $END7. 试编写利用调用子程序的方法延时1min的程序。ORG 0HMOV R2,#60A
34、0: LCALL DLY DJNZ R2,A0SJMP $DLY:MOV R2,#50L0: MOV R1,#100L1: MOV R0,#49L2: NOP NOP DJNZ R0,L2 NOP DJNZ R1,L1DJNZ R2,L0RETEND8. 用查表程序求06之间的整数的立方。已知整数存在A中,查表结果存入片内RAM 31H中。ORG 0MOV A, #DATAMOV DPTR,#TABMOVC A, A+DPTRMOV 30H,A SJMP $TAB: DB 0,1,8,27,64,125,216END若立方数超过一个字节,在两个字节以内,由以下程序实现。ORG 0000HMOV
35、 A,#5RL AMOV R0,AMOV DPTR,#TABMOVC A, A+DPTRMOV 31H,A ;高位MOV A,R0INC AMOVC A,A+DPTRMOV 30H,A ;低位SJMP $TAB: DW 0,1,8,27,64,125,216END9. 编写程序,查找在内部RAM的30H50H单元中出现FFH的次数,并将查找结果存入51H单元。MOV R1,#00HMOV R0,#30HMOV R2,#21HL0: MOV A,R0 CJNE A,#0FFH,L1 INC R1L1: INC R0 DJNZ R2,L0 MOV 51H,R1SJMP $END10. 试用子程序求
36、多项式:Y=(A+B)2+(B+C)2(要求:两数之和不能超过16)X EQU 30H ;X代表AY EQU 31H ;Y代表BZ EQU 32H ;Z代表CF EQU 33H ;F中存放计算结果YMOV R1,XMOV R2,YLCALL L0MOV R3,AMOV R1,YMOV R2,ZLCALL L0ADD A,R3MOV F,ASjmp $L0: MOV A,R1 ADD A,R2 MOV B,A MUL AB RETend11. 已知(60H)=33H,(61H)=43H,试写出程序的功能和运行结果。ORG 0000hSS: MOV R0,#61H MOV R1,#70H ACAL
37、L CRR SWAP A MOV R1,A DEC R0 ACALL CRR XCHD A,R1 SJMP $CRR: MOV A,R0 CLR C SUBB A,#30h CJNE A,#0AH,NEQ AJMP BIGNEQ: JC CENBIG: SUBB A,#07HCEN: RET该程序的运行结果是:(60H)=33H, (61H)=43H, (70H)=C3H12. 内部RAM的30H单元开始存放着一组无符号数,其数目存放在21H单元中。试编写程序,求出这组无符号数中的最小的数,并将其存入20H单元中。MOV R0,#30HMOV A,R0MOV 20H,ADEC 21HLOOP:
38、 INC R0 MOV A,R0 CJNE A,20H,L1L1: JNC L2 MOV 20H,AL2: DJNZ 21H,LOOP SJMP $END13. 写程序实现散转功能: (R2)=0 转向RR0 (R2)=1 转向RR1(R2)=2 转向RR2ORG 0MOV R2,#2H ;设(R2)=2MOV DPTR,#TABMOV A,R2MOVC A,A+DPTRJMP A+DPTRTAB: DB RR0-TAB DB RR1-TAB DB RR2-TABRR0: MOV A,#1 ;RR0:将立即数1赋给A SJMP ENDFRR1: MOV A,#2 ;RR1:将立即数2赋给A S
39、JMP ENDFRR2: MOV A,#3 ;RR2:将立即数3赋给A SJMP ENDFENDF: SJMP $14. 试按子程序形式编程,将单字节二进制数高4位、低4位分别转换成两个字节的ASCII码。MOV A,R0 ;将R0中的内容作为贝转换对象ANL A,#0FH ;取低四位MOV DPTR,#TABMOVC A,A+DPTRMOV 20H,A ;低四位转换后存放于20H中MOV A,R0ANL A,#0F0H ;取高四位SWAP AMOVC A,A+DPTRMOV 21H,A ;高四位转换后存放于21H中TAB: DB 30H,31H,32H,33H,34H,35H,36H,37H
40、,38H,39H DB 41H,42H,43H,44H,45H,46H第五章 AT89C51输入/输出(I/O)口及其简单应用1. AT89C51四个I/O口使用时有哪些分工和特点?试作比较,并填写下表。I/O口相同的结构不同的结构基本功能第二功能SFR字节地址位地址范围驱动能力P0都有锁存器、输入缓冲器和输出驱动器多路选择开关输入输出数据线/低8位地址线80H8087H强,8个LS TTL 输入,8个引脚最大吸收电流26mAP1输入输出90H9097H4个LS TTL输入,8个引脚最大吸收流15mAP2多路选择开关输入输出高8位地址线A0HA0A7HP3选择输出功能输入输出第二功能B0HB0B7H2. AT89C51的4个I/O口作为输入口时,为什么要先写“1”?答:AT89C51读操作时,为读入正确的引脚信号,必须先保证场效应管截止。因为场效应管导通,引脚电平为0,显然,从引脚输入的任何外部信号都被场效应管强迫短路,严重时