版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1章思考题及习题参考答案1.1写出下列二进制数的原码、反码和补码(设字长为8位)。(1)001011 (2)100110(3)-001011 (4)-111111答:(1)原码:00001011反码:00001011补码:00001011(2)原码:00100110反码:00100110补码:00100110(3)原码:10001011反码:11110100补码:11110101(4)原码:10111111反码:11000000补码:110000011.2已知X和Y,试计算下列各题的[X+Y]补和[X-Y]补(设字长为8位)。(1)X=1011 Y=0011(2)X=1011 Y=0111(3)X=1000 Y=1100答:(1)X补码=00001011Y补码=00000011[–Y]补码=11111101[X+Y]补=00001110[X-Y]补=00001000(2)X补码=00001011Y补码=00000111[–Y]补码=11111001[X+Y]补=00010010[X-Y]补=00000100(3)X补码=00001000Y补码=00001100[–Y]补码=11110100[X+Y]补=00010100[X-Y]补=111111001.3
微型计算机由那几部分构成?微机系统由那几部分构成?答:微型计算机由微处理器、存储器、I/O接口电路和系统总线构成。
微型计算机系统是在微型计算机的基础上,配上必要的外设(如键盘、光驱等)、电源以及必要的软件而构成的系统。1.4什么叫单片机?它有何特点?答:单片机就是在一块硅片上集成了CPU、RAM、ROM、定时器/计数器和多种I/O口(如并行、串行及A/D变换器等)的一个完整的微机处理系统。单片机主要特点有:品种多样,型号繁多;存储容量大;频率高,速度快;控制功能强,集成度高;功耗低;配套应用软件多。第2章思考题及习题参考答案2.1.说明ROM、EPROM、EEPROM和FLASH之间的主要区别解:ROM为只读存储器,在一般情况下只能读出所存信息,而不能重新写入。信息的写入是通过工厂的制造环节或采用特殊的编程方法进行的,一旦写入,就能长期保存。EPROM芯片一般允许用户多次编程和擦除。擦除时,通过向芯片窗口照射紫外光的方法来进行。EEPROM,也称E2PROM。该类芯片允许用户多次编程和擦除。擦除时,可采用加电方法在线进行。FLASH是一种新型的大容量、速度快、电可擦除可编程只读存储器。2.2.EPROM、PROM、动态RAM、静态RAM等存储器中,哪几类是可以随时读写的?解:动态RAM、静态RAM这几类是可以随时读写的。2.3某ROM芯片中有12根地址输入端和8个数据输出端,该芯片的存储容量是多少位?解:芯片的存储容量是4K*8位。2.4.说明动态RAM和静态RAM的主要区别,使用时应如何选用?解:静态(static)RAM,即SRAM。它以触发器为基本存储单元,所以只要不掉电,其所存信息就不会丢失。该类芯片的集成度不如动态RAM,功耗也比动态RAM高,但它的速度比动态RAM快,也不需要刷新电路。在构成小容量的存储系统时一般选用SRAM。在微型计算机中普遍用SRAM构成高速缓冲存储器。动态(Dynamic)RAM,即DRAM。一般用MOS型半导体存储器件构成,以单个M0S管为基本单元,以极间的分布电容是否持有电荷作为信息的存储手段,其结构简单,集成度高。但是,如果不及时进行刷新,极间电容中的电荷会在很短时间内自然泄漏,致使信息丢失。所以,必须为它配备专门的刷新电路。动态RAM芯片的集成度高、价格低廉,所以多用在存储容量较大的系统中。目前,微型计算机中的主存几乎都是使用动态RAM。2.5.说明NORFLASH与NANDFLASH的主要区别,使用时应如何选用?解:NORFlash具有以下特点:(1)程序和数据可存放在同一芯片上,拥有独立的数据总线和地址总线,能快速随机读取,允许系统直接从Flash中读取代码执行,而无需先将代码下载至RAM中再执行;(2)可以单字节或单字编程,但不能单字节擦除,必须以块为单位或对整片执行擦除操作,在对存储器进行重新编程之前需要对块或整片进行预编程和擦除操作。但是NORFlash的擦除和编程速度较慢,块尺寸又较大,因此擦除和编程操作所花费的时间很长,在纯数据存储和文件存储的应用中,NOR技术显得力不从心。NANDFlash具有以下特点:(1)以页为单位进行读和编程操作,1页为256或512B(字节);以块为单位进行擦除操作,1块为4K、8K或16KB。具有快编程和快擦除的功能,其块擦除时间是2ms;而NOR技术的块擦除时间达到几百ms。(2)数据、地址采用同一总线,实现串行读取。随机读取速度慢且不能按字节随机编程。(3)芯片尺寸小,引脚少,是位成本(bitcost)最低的固态存储器,将很快突破每兆字节1美元的价格限制。(4)芯片包含有失效块,其数目最大可达到3~35块(取决于存储器密度)。失效块不会影响有效块的性能,但设计者需要将失效块在地址映射表中屏蔽起来。NORFlash具有可靠性高、随机读取速度快的优势,在擦除和编程操作较少而直接执行代码的场合,尤其是纯代码存储的应用中广泛使用,如PC的BIOS固件、移动电话、硬盘驱动器的控制存储器等。NANDFlash结构的闪速存储器适合于纯数据存储和文件存储,主要作为SmartMedia卡、CompactFlash卡、PCMCIAATA卡、固态盘的存储介质,并正成为闪速磁盘技术的核心。2.6.现有2K×8位的RAM芯片若干片,若用线选法组成存储器,有效的寻址范围最大是多少KB?若用3-8译码器来产生片选信号,则有效的寻址范围最大又是多少?若要将寻址范围扩展到64KB,应选用什么样的译码器来产生片选信号?解:以8086为例,8086有20条地址线,用11条地址线寻址一片2K×8位的RAM,余下的9条地址线做线选法的线,故可以并联9个芯片,故寻址最大范围是20KB,若用3-8译码器来产生片选信号,9条地址线可以控制3个3-8译码器这样就可以控制24个芯片最大范围是50KB.若要将寻址范围扩展到64KB可选用4-16地址译码器来产生片选信号。2.7.什么是地址重叠区?它对存储器扩展有什么影响?解:基本地址和前面全译码连接的地址范围是相同的,但两者还是有区别的。区别在于全译码连接时各芯片的地址是唯一的,而部分译码连接时各芯片地址不是唯一的,也就是可以由若干个地址都选中同一芯片的同一单元,既所谓的地址重叠区。由于存在的地址重叠,影响了地址区的有效使用,也限制了存储器的扩展。因此,在选用部分译码时,也要尽可能多选一些高位地址线来作为译码器的输入。2.8如图2-22若用1K×8位片子来扩展3K×8位RAM,试核算各片的地址范围为多少?图2-221K×8位片子扩展的3K×8位RAM系统解:A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0地址G1ABC1010000000000000片1:A000H···1010001111111111片1:A3FFHA15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0地址G1ABC1011000000000000片2:B000H···1011001111111111片2:B3FFHA15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0地址G1ABC1011010000000000片3:B400H···1011011111111111片3:B7FFH所以各片地址范围为:片1:A000H-A3FFH,片2:B000H-B3FFH,片3:B400H-B7FFH2.9.现有8K×8位RAM多片,1片3-8译码器,要构成容量为16K×8位的存储器,请用线译码、部分译码、全译码3种方式分别设计,画出连接图,并指出寻址范围。解:线译码法:寻址范围:2000H~5FFFH部分译码寻址范围:0000H~3FFFH全译码:寻址范围:0000H~FFFFH2.10.如何检查扩展的RAM工作是否正常?试编一个简单的RAM检查程序,要求此程序能记录有多少个RAM单元工作有错?且能记录出错的单元地址。解:TEST_CONSTEQU5AHTEST_RAMEQU03H ORG0000HLJMPINITIAL ORG0050HINITIAL:MOVR0,#253 MOVR1,#3HTEST_ALL_RAM:MOVR2,#0FFHTEST_ONE_RAM:MOVA,R2 MOV@R1,A CLRA MOVA,@R1 CJNEA,2H,ERROR_DISPLAY DJNZR2,TEST_ONE_RAM INCR1 DJNZR0,TEST_ALL_RAMOK_DISPLAY: MOVP1,#11111110B WAIT1:SJMPWAIT1ERROR_DISPLAY:MOVA,R1 MOVP1,AWAIT2:SJMPWAIT2END第3章思考题及习题参考答案3.1.80C51单片机的P0~P3口在通用I/O口时操作要注意哪些?P0~P3口不做通用I/O口时是什么功能?在使用上有何特点?P0~P3驱动能力如何?答:(1)作为通用I/O口时,P0~P3都是准双向口,输入引脚信息时都必须先向其锁存器写“1”,作为输出口时P0口需结上拉电阻。(2)P0可以作为地址/数据总线;P2口可以作为地址线的高8位;P3口是双功能口,每条口线还具有不同的第二功能。(3)P0口的驱动能力为8个TTL负载,而其它口仅可驱动4个TTL负载。3.2、MCS-51单片机运行出错或程序进入死循环,如何摆脱困境?答:通过复位电路复位3.3、单片机的复位(RST)操作有几种方法,复位功能的主要作用是什么?答:单片机的复位操作方式有:1、上电复位;2、手动复位。复位功能的主要作用是:复位时,PC初始化为0000H,使MCS-51单片机从0000H开始执行程3.4、简述程序状态寄存器PSW寄存器中各位的含义。答:程序状态字寄存器PSW,8位。其各位的意义为:CY:进位、借位标志。有进位、借位时CY=1,否则CY=0;AC:辅助进位、借位标志(高半字节与低半字节间的进位或借位);F0:用户标志位,由用户自己定义;RS1、RS0:当前工作寄存器组选择位,共有四组:00、01、10、11;OV:溢出标志位。有溢出时OV=1,否则OV=0;P:奇偶标志位。存于累加器ACC中的运算结果有奇数个1时P=1,否则P=0.3.5、80C51单片机的当前工作寄存器组如何选择?答:由特殊功能寄存器中的程序状态寄存器PSW的RS1、RS0来决定,当RS1、RS0为00时,选择0组;为01时,选择1组;为10时选择2组,为11时选择3组。3.6.80C51单片机的控制总线信号有哪些?各信号的作用如何?答:80C51单片机的控制总线信号有以下4个,各信号的作用为:RST/VPD:复位信号输入引脚/备用电源输入引脚;ALE/PROG:地址锁存允许信号输出引脚/编程脉冲输入引脚;EA/Vpp:内外存储器选择引脚/片内EPROM(或FlashROM)编程电压输入引脚;PSEN:外部程序存储器选通信号输出引脚。3.7、8051单片机中EA引脚的作用是什么?答:访问内部或外部程序存储器的选择端当EA接高电平的时候程序从内部ROM开始执行,当EA为低电平的时候,从外部ROM开始执行3.8、程序计数器PC的作用是什么?答:程序计数器PC是一个16位的计数器,他总是存放着下一个要取的指令的16位存储单元地址。用来存放下一条指令的地址。当执行一条指令时,首先需要根据PC中存放的指令地址,将指令由内存取到指令寄存器中,此过程称为“取指令”。与此同时,PC中的地址或自动加1或由转移指针给出下一条指今的地址。此后经过分析指令,执行指令,完成第一条指令的执行,而后根据PC取出第二条指令的地址,如此循环,执行每一条指令。3.9、堆栈有哪些功能?堆栈指示器(SP)的作用是什么?在程序设计时,为什么要对SP重新赋值?答:堆栈在中断过程中用来保护现场数据,复位后SP=07H,而堆栈一般设置在通用ROM区(30H-7FH),在系统初始化时要从新设置。3.10、内部RAM低128单元划分为哪3个主要部分?说明各部分的使用特点。答:80C51内部128B的数据RAM区,包括有工作寄存器组区、可直接位寻址区和数据缓冲区。各区域的特性如下:00H~1FH为工作寄存器组区,共分4组,每组占用8个RAM字节单元,每个单元作为一个工作寄存器,每组的8个单元分别定义为8个工作寄存器R0~R7。当前工作寄存器组的选择是由程序状态字PSW的RS1、RS0两位来确定。如果实际应用中并不需要使用工作寄存器或不需要使用4组工作寄存器,不使用的工作寄存器组的区域仍然可作为一般数据缓冲区使用,用直接寻址或用Ri的寄存器间接寻址来访问。20H~2FH为可位寻址区域,这16个字节的每一位都有一个地址,编址为00H~7FH。当然,位寻址区也可以用作字节寻址的一般数据缓冲区使用。(3)30H~7FH为堆栈、数据缓冲区。3.11、简述MCS-51单片机存储区的划分。答:1)MCS-51单片机的存储器从物理结构上分为:片内和片外数据存储器,片内和片外程序存储器。2)从逻辑上分别可划分为:片内统一寻址的64KB程序存储器空间(0000H---FFFFH);64KB的片外数据存储器空间(0000H---FFFFH);256B的片内数据存储器空间(00H---FFH)。3.12、MCS-51基本型单片机的中断入口地址各为多少。答:外部中断0中断入口地址0003H定时/计数器0中断入口地址000BH外部中断1中断入口地址0013H定时/计数器1中断入口地址001BH串行接口中断入口地址0023H3.13、什么是指令周期、机器周期和状态周期?答:指令周期:指令的执行时间;机器周期:CPU完成一个最简单的指令所需要的时间;状态周期:晶振信号周期的2倍。3.14、已知一MCS51单片机系统使用6MHZ的外部晶体振荡器,计算:该单片机系统的状态周期与机器周期各为多少?解:由于晶振为6MHz,所以机器周期为2us,因为一个机器周期由6个状态周期组成,所以状态周期1/3us第4章思考题及习题参考答案4.1.寻址方式是什么?答:寻址方式是寻找操作数或操作数地址的方式。4.2.89C51指令系统有哪几种寻址方式?答:89C51的寻址方式有七种。即:寄存器寻址、直接寻址、寄存器间接寻址、立即寻址、基址寄存器加变址寄存器变址寻址、相对寻址和位寻址。4.3、访问特殊功能寄存器SFR可以采用哪些寻址方式?答:直接寻址和位寻址方式。4.4、访问RAM单元可以采用哪些寻址方式?访问外部RAM单元有哪些指令?答:直接寻址、寄存器间接寻址和位寻址方式。访问外部RAM单元的指令有4条:MOVXA,@DPTRMOVXA,@RiMOVX@DPTR,AMOVX@Ri,A4.5、访问外部程序存储器可以采用哪些寻址方式?访问外部程序存储器有哪些指令?答:立即寻址、变址寻址和相对寻址方式。访问外部程序存储器的指令有2条MOVCA,@A+DPTRMOVCA,@A+PC4.6、试写出完成以下每种操作的指令序列。(1)将R0的内容传送到片内RAM20H;(2)将R1的内容传送到R0;(3)内部RAM单元10H的内容传送到外部RAM单元1000H;(4)外部RAM单元1000H的内容传送到R5;(5)外部ROM单元1000H的内容传送到R5;(6)外部RAM单元2000H的内容传送到外部RAM单元2001H。答:(1)MOV20H,R0(2)MOVA,R1MOVR0,A(3)MOVA,10HMOVDPTR,#1000HMOVX@DPTR,A(4)MOVDPTR,#1000HMOVXA,@A+DPTRMOVR5,A(5)MOVDPTR,#1000HMOVA,#00HMOVCA,@A+DPTRMOVR5,A(6)MOVDPTR,#2000HMOVXA,@DPTRINCDPTRMOVX@DPTR,A4.7.设内部RAM(30H)=60H,(60H)=10H,(10H)=20H,(R1)=22H,(P1)=0AH,分析以下程序执行后(30H)=?,(60H)=?,(10H)=?,(A)=?,(B)=?,(P2)=?每条指令的机器码为多少?MOVR0,#30HMOVA,@R0MOVR1,AMOVB,@R1MOV@R1,P1MOVP2,P1MOV10H,#90H答:MOVR0,#30H;(R0)=30H,7830MOVA,@R0;(A)=60H,E6MOVR1,A;(R1)=60H,F9MOVB,@R1;(B)=10H,87F0MOV@R1,P1;(60H)=0AH,A790MOVP2,P1;(P2)=0AH,8590A0MOV10H,#90H;(10H)=90H,751090(30H)=60H,(60H)=0AH,(10H)=90H,(A)=60H,(B)=10H,(P2)=0AH4.8.设外部RAM(2030H)=0FH,分析以下指令执行后(DPTR)=?,(30H)=?,(2030H)=?(A)=?每条指令的机器码为多少?MOVDPTR,#2030HMOVXA,@DPTRMOV30H,AMOVA,#3FHMOVX@DPTR,A答:MOVDPTR,#2030H;(DPTR)=2030H,902030MOVXA,@DPTR;(A)=0FH,E0MOV30H,A;(30H)=0FH,F530MOVA,#3FH;(A)=3FH,743FMOVX@DPTR,A;(2030H)=3FH,F0执行结果为:(DPTR)=2030H,(30H)=0FH,(2030H)=3FH,(A)=3FH。4.9、编写指令实现下列位操作。(1)使累加器的最高2位清零;(2)屏蔽(清零)20H的高4位;(3)将E0H的低4位取反,高4位不变;(4)将P0的低2位置1。(5)将10H的内容取补后存放到20H答:(1)CLRACC.7CLRACC.6(2)ANL20H,#0FH(3)XRLE0H,#0FH(4)ORLP0,#03H(5)XRL10H,#0FFHINC10HMOV20H,10H4.10.在外部程序存储器中,从1020H单元开始依次存放0~9的平方值:0、1、4、9、…、81,要求依据累加器A中的值(0~9)来查找所对应的平方值,试设计程序实现。答:MOVDPTR,#1020HMOVCA,@A+DPTR4.11.设(R0)=20H,(20H)=40H,(A)=58H,则:执行XCHA,@R0后(A)=?,(20H)=?若执行XCHDA,@R0后(A)=?,(20H)=?答:执行XCHA,@R0后(A)=40H,(20H)=58H若执行XCHDA,@R0后(A)=50H,(20H)=48H4.12、试编写程序序列,完成两个16位数的减法:(30H)(31H)-(10H)(11H)→(30H)(31H)。答:CLRCMOVA,31HSUBBA,11HMOV31H,AMOVA,30HSUBBA,10HMOV30H,A4.13、试编写程序,将R0中的低4位数与R1中的高4位数合并成一个8位数,并将其存放在R0中。答:MOVA,R0ANLA,#0FHMOVB,AMOVA,R1ANLA,#0F0HORLA,BMOVR0,A4.14.设计双字节无符号数加法程序实现(R0R1)+(R2R3)→(R4R5),R0、R2、R4存放16位数的高字节,R1、R3、R5存放低字节,假设其和不超过16位。答:MOVA,R1ADDA,R3MOVR5,AMOVA,R0ADDCA,R2MOVR4,A4.15.设计双字节无符号数相减程序实现(R0R1)-(R2R3)→(R4R5)。R0、R2、R4存放16位数的高字节,R1、R3、R5存放低字节,答:MOVA,R1CLRCSUBBA,R3MOVR5,AMOVA,R0SUBBA,R2MOVR4,A4.16.设2个BCD码数存在外部RAM的2000H和内部RAM的20H。设计程序实现2个BCD码相加,其结果的十位和个位送到外部RAM的2000H单元,结果的百位值送F0位。答:MOVDPTR,#2000HMOVXA,@DPTRADDA,20HDAAMOVX@DPTR,AMOVF0H,CY4.17.设变量X存放在片内10H单元中,函数Y存放在片内20H单元。编写程序实现如下函数功能。80HX>0Y=50X=0FFHX<0答:MOVA,10H;取出X送AJZCOM;若X=0则转移到COMJNBACC.7,POSI;若X>0则转移到POSIMOVA,#0FFH;若X<0则A=FFHSJMPCOMP;转分支结构出口COM:MOVA,#50;X=0时的赋值SJMPCOMP;;转分支结构出口POSI:MOVA,#80H;X>0时A=80HCOMP:MOV20H,A;存函数Y值SJMP$;等待4.18.利用位逻辑指令,模拟下图硬件逻辑电路功能。试编写程序实现。答:MOVCY,P1.0ANLCY,P1.1CPLCYMOVF0,CYMOVCY,P1.1ORLCY,P1.2ANLCY,F0CPLCYMOVF0,CY4.19.若(CY)=0,(P1)=10110111B,试指出执行下列程序段后,CY、P1口内容的变化情况。MOVP1.2,CMOVC,P1.4JBCP1.7,SSORLC,P1.6SS:CPLP1.3ANLC,/P1.3MOVP1.0,C答:(CY)=0,(P1)=00111010B 第5章思考题及习题参考答案5.1、80C51单片机汇编语言有何特点?答:优点:源程序结构紧凑、灵活,汇编成的目标程序效率高,具有占存储空间少、运行速度快、实时性强等优点。缺点:由于它是面向机器的语言,所以它缺乏通用性,编程复杂繁琐,但应用相当广泛。5.2、利用80C51单片机汇编语言进行程序设计的步骤如何?答:(1).需要对单片机应用系统预先完成的任务进入深入的分析,明确系统的设计任务、功能要求、技术指标。(2).要对系统的硬件资源和工作环境进行分析和熟悉.(3).利用数学方法或数学模型来对其进行描述,从而把一个实际问题转化成由计算机进行处理的问题。(4).对各种算法进行分析比较,并进行合理的优化。5.3、常用的程序结构有哪几种?特点如何?答:常用的程序结构有以下几种:(1)顺序程序结构:顺序结构是按照逻辑操作顺序,从某一条指令开始逐条顺序进行,直到某一条指令为止;比如数据传送与交换、查表程序和查表程序的设计等;在顺序结构中没有分支,也没有子程序,但它是组成复杂程序的基础和主干;(2)分支程序结构:它的主要特点是程序执行流程中必然包含有条件判断指令,符合条件要求的和不符条件合要求的有不同的处理程序;(3)循环程序结构:它在本质上只是分支程序中的一个特殊形式,它由循环初始化、循环体、循环控制和结束部分构成;在循环次数已知情况下,采用计数循环程序,其特点是必须在初始部分设定计数的初始值,循环控制部分依据计数器的值决定循环次数;根据控制循环结束的条件,决定是否继续循环程序的执行。(4)子程序:它的主要特点是,在执行过程中需要由其它的程序来调用,执行完后又需要把执行流程返回到调用该子程序的主程序。5.4、子程序调用时,参数的传递方法有哪几种?答:在80C51单片机中,子程序调用时,参数的传递方法由三种:(1)、利用累加器A或寄存器;(2)、利用存储器;(3)、利用堆栈。5.5、什么是伪指令?常用的伪指令功能如何?答:伪指令是汇编程序能够识别并对汇编过程进行某种控制的汇编命令。常用的伪指令有:(1)起始地址设定伪指令ORG,该指令的功能是向汇编程序说明下面紧接的程序段或数据段存放的起始地址;(2)汇编结束伪指令END,该指令的功能是汇编程序遇到END伪指令后立即结束汇编;(3)字节数据定义伪指令DB,该指令的功能是从标号指定的地址单元开始,在程序存储器中定义字节数据;(4)字数据定义伪指令DW,该指令的功能是从标号指定的地址单元开始,在程序存储器中定义字数据;(5)空间定义伪指令DS,该指令的功能是从标号指定的地址单元开始,在程序存储器中保留由表达式所指定的个数存储单元作为备用空间,并都填以零值;(6)赋值伪指令EQU,该指令的功能是将表达式的值或特定的某个汇编符号定义为一个指定的符号名;(7)位地址符号定义伪指令BIT,该指令的功能是将位地址赋给指定的符号名。5.6:把外部RAM的2000-20FFHRAM空间置零程序如下:ORG0000H MOVR0,#00H MOVDPTR,#2000H ;空间首地址送DPTRLOOP:MOVA,#00H MOVX@DPTR,A ;清零 INCDPTR ;DPTR加1 INCR0 ;字节数加1 CJNER0,#00H,LOOP ;连续清256个字节LOOP1:SJMPLOOP1 END软件仿真时为了更好地看到结果,把清零改为了赋值55H。5.7、录入并调试一个排序子程序,其功能为用冒泡法将内部RAM中从50H开始的十个单字节无符号正整数,按从小到大的次序重新排列。程序如下:用冒泡法进行数据排序 ORG0000H MOVR3,#50HLOOP0: MOVA,R3 MOVR0,A ;指针送R0 MOVR7,#0AH ;长度送R7 CLR00H ;标志位为0 MOVA,@R0LOOP1: INCR0 MOVR2,A CLRC MOV22H,@R0 CJNEA,22H,LOOP2 ;相等吗? SETBCLOOP2: MOVA,R2 JCLOOP3 ;小于或等于不交换 SETB00H XCHA,@R0 DECR0 XCHA,@R0 INCR0 ;大于交换位置LOOP3:MOVA,@R0 DJNZR7,LOOP1 JB00H,LOOP0 ;最后一次循环中有交换继续LOOP: SJMPLOOP ;无交换退出 END5.8、设被加数存放在内部RAM的20H、21H单元,加数存放在22H、23H单元,若要求和存放在24H、25H中,试编写出16位数相加的程序。答:ORG0000H CLRC MOVA,21H ADDCA,23H MOV25H,A MOVA,20H ADDCA,22H MOV24H,A SJMP$ END5.9、编写一段程序,把外部RAM中1000H~1030H单元的内容传送到内部RAM的30H~60H单元中。答:ORG0030HMOVR1,#49MOVR0,#30HMOVDPTR,#1000HLOOP:MOVXA,@DPTRMOV@R0,AINCDPTRINCR0DJNZR1,LOOPSJMP$END5.10、编写程序,实现双字节无符号数加法运算,要求(R1R0)+(R7R6)→(61H60H)。答:MOVA,R0ADDA,R6MOV60H,AMOVA,R1ADDCA,R7MOV61H,ASJMP$5.11、用R0和R1作数据指针,R0指向第一个加数,并兼作“和”的指针,R1指向另一个加数,字节存放到R2中作计数初值。答:主程序:JAFA:MOVR0,#20H;指向加数最低字节MOVR1,#29H;指向另一加数最低字节MOVR2,#04H;字节数作计数值ACALLJASUB;调用加法子程序AJMP$RET多字节加法子程序:JASUB:CLRCJASUB1:MOVA,@R0;取出加数的一个字节(4B无符号数加数)ADDCA,@R1;加上另一数的一个字节MOV@R0,A;保存和数INCR0;指向加数的高位INCR1;指向另一加数的高位DJNZR2,JASUB1;全部加完了吗?RET5.12、在内部RAM的21H单元开始存有一组单字节不带符号数,数据长度在30H中,要求找出最大数存入BIG单元。答:START:MOVR7,30HDECR7MOVR0,#21HMOVA,@R0LOOP:INCR0CLRCSUBBA,@R0JNCNEXTMOVA,@R0NEXT:DJNZR7,LOOPMOVBIG,ASJMP$END5.13、求双字节补码程序设双字节数放在内部RAM的30H和31H单元(高字节在低地址),将其取补后存入40H(存放高字节)和41H(存放低字节)单元答:START:MOVA,31HCPLAADDA,#01HMOV41H,AMOVA,30HCPLAJNCDONEADDA,#01HDONE:MOV30H,ASJMP$5.14、编程统计累加器A中“1”的个数。答:MOVR1,#0PUSHACCLOOP1:JZDONECLRCRLCAJNCLOOP1INCR1SJMPLOOP1DONE:POPACCSJMP$END5.15、编程序实现1+2+3+……+100=?答:汇编代码如下:H_ByteEQUR4;保存结果,高8位L_ByteEQUR5;保存结果,低8位Max_AdderEQU100;最大的加数ORG0000HLJMPMAINORG0030HMAIN:MOVR2,#1;加数MOVR4,#0MOVR5,#0START:MOVA,#Max_AdderCLRCYSUBBA,R2JCRESULTMOVA,R2ADDA,L_ByteMOVL_Byte,A;保存低位MOVA,H_ByteADDCA,#0MOVH_Byte,A;保存高位INCR2JMPSTARTRESULT:SJMP$;只用于调试ENDC语言代码如下:#include"at89x51.h"//由于这里只是计算结果,所以这行代码可以去掉voidmain(void){unsignedchari=1;unsignedintresult=0;for(i=1;i<=100;i++)result+=i;while(1);//这里用于调试第6章思考题及习题参考答案6.1C51支持的数据类型和存储器类型有哪些?答:数据类型:字符型、整型、长整型、浮点型、位型、访问SFR。存储器类型:bdata、data、idata、pdata、xdata、code6.2.设x=4,y=8,说明下列各题运算后x,y,z的值分别是多少?(a)z=(++x)*(--y);(b)z=(++x)+(y--)(c)z=(x++)*(--y);(d)z=(x++)+(y--)答:(a)x=5,y=7,z=35;(b)x=5,y=7,z=13;(c)x=5,y=7,z=28;(d)x=5,y=7,z=12;6.3.C51中断函数是如何定义的?各个选项有和意义?答:完整形式:Void函数名(参数)[编译模式][重入][interruptn][usingm]编译模式为SMALL、COMPACT或LARGE,用来指定参数和变量的存储空间。重入:用于定义可重入函数。interruptn用于定义中断函数,n为中断号,可以为0~31,通过中断号可以决定中断服务程序的入口地址。常用的中断源对应的中断号中断源外中断0定时器0外中断1定时器1串行口中断号01234usingm用于确定中断服务函数所使用的寄存器组6.4.C51应用程序的参数传递有哪些方式?特点是什么?答:参数传递可以采用寄存器、固定存储器位置方式。寄存器传递方式最多可以传递3个参数。这种参数传递可以产生高效的代码。当无寄存器可用时,参数可以采用固定的存储器位置传递。在SMALL模式下,参数传递在内部RAM中完成。在COMPACT和LARGER模式下,参数的传递要在外部RAM中完成。6.5.一般指针与基于存储器的指针有何区别?答:一般指针定义时未指定它所指向的对象的存储器类型时,该指针变量就被认为是一般指针。一般指针占用3个字节:第一个字节存放该指针的存储器类型编码(由编译模式的默认值确定),第二和第三个字节分别存放该指针的高位和低位地址偏移量。基于存储器的指针定义时就指定了它所指向的对象的存储器类型时,该指针变量就属于基于存储器的指针。基于存储器的指针可以高效访问对象,类型由C51源代码中存储器类型决定,且在编译时确定。6.6设a=3,b=4,c=5,写出下列关系表达式或逻辑表达式的结果。答:(1)a+b>c&&b==c(False)(2)a||b+c&&b-c(True)(3)!(a>b)&&!c||1(True)(4)!(a+b)+c-1&&b+c/2(True)6.7用分支结构编程实现,输入”1”时显示“a”,输入”2”时显示“b”,输入”3”时显示“c”,输入”4”时显示“d”,输入”5”时结束。答:#include<reg51.h>#include<stdio.h>#defineucharunsignedchar#defineuintunsignedintuchari;voidmain(){printf("pleaseinputthenumber\n");scanf("%d",&i);switch(i){case1:printf("a");break;case2:printf("b");break;case3:printf("c");break;case4:printf("d");break;case5:break;default:printf("Error!");}while(1);}6.8输入3个无符号数据,要求按由大到小的顺序输出。解:#include<reg51.h>#include<stdio.h>#defineucharunsignedchar#defineuintunsignedintuinta,b,c;voidmain(){uintmax,min,med;scanf("%d,%d,%d",&a,&b,&c);if(a>b&&b>c){max=a;med=b;min=c;}elseif(a>b&&b<c&&a>c){max=a;med=c;min=b;}elseif(a>b&&b<c&&a<c){max=c;med=a;min=b;}elseif(b>a&&b<c){max=c;med=b;min=a;}elseif(b>a&&b>c&&a>c){max=b;med=a;min=c;}else{max=b;med=c;min=a;}printf("%d>%d>%d\n",max,med,min);}6.9用循环结构编写程序实现输出1-10的平方和解:#include<reg51.h>#include<stdio.h>#defineucharunsignedchar#defineuintunsignedintuintsum=0;voidmain(){uchari;for(i=1;i<=10;i++){sum=sum+i*i;}printf("sum=%d",sum);}6.10.设fsoc=12MHz,8051定时器0的方式0、方式1、方式2的最大定时间隔分别是多少?答:fsoc=12MHz,故计数周期为1us,所以:方式0最大计数为213=8192,T0=8192us;方式1最大计数为216=65536,T1=65536us;方式2最大计数为28=256,T1=256us;6.11.用单片机内部定时器来产生矩形波,设单片机时钟频率为l2MHz。要求在p1.0引脚上输出频率为1kHz。试写出有关的程序。答:用定时器0的方式1编程,采用中断方式。#include<reg51.h>sbitP10=P1^0;voidtime0(void)interrupt1using1{P10=~P10;TH0=(65536-500)/256;TL0=(65536-500)%256;}voidmain(void){TMOD=0x01; TH0=(65536-500)/256;TL0=(65536-500)%256;EA=1;ET0=1;TR0=1;while(1);}第7章思考题及习题参考答案 7.1.什么是中断、中断源、中断服务程序、中断程序入口地址?答:当有中断源申请中断,并允许响应时,当前执行的程序会转去执行中断服务子程序,此时被中断的原程序的位置就成为断点,断点是完成中断服务子程序,返回原程序继续执行的位置。导致中断产生的事件和原因统称为中断源。处理暂停主程序后转去执行的,用来处理中断事件的程序成为中断服务子程序。中断程序入口地址是指的中断服务子程序的第一条指令所在的地址。7.2.80C51单片机的中断系统有几个中断源?几个中断优先级?中断优先级是如何控制的?在出现同级中断申请时,CPU按什么顺序响应(按由高级到低级的顺序写出各个中断源)?各个中断源的入口地址是多少?答:80C51单片机有5个中断源,2个中断优先级,中断优先级由特殊功能寄存器IP控制,在出现同级中断申请时,CPU按如下顺序响应各个中断源的请求:INT0、T0、INT1、T1、串口,各个中断源的入口地址分别是0003H、000BH、0013H、001BH、0023H。 7.3.保护断点是保护什么,怎么保护的,中断返回后的下一步到到哪里去?答:保护断点是保护主程序暂停时的下一条将要执行的指令的地址。保护方法是将下一条指令的地址值入栈。中断返回后,断点地址从堆栈中弹出到程序计数器或指令指针寄存器,继续执行主程序。7.4.保护现场有什么作用?在80C51中保护现场和保护断点有什么区别?答:当响应中断时,执行的中断服务子程序很可能和主程序使用同一个寄存器,当执行完中断服务子程序后,这些共用的寄存器值发生改变,那么返回主程序后,会导致主程序出错。为了预防这点,所以需要保护现场。在80C51中,保护断点全部是由硬件自动完成,而保护现场必须由用户自己编写处理,保护的内容根据中断服务子程序中使用到的寄存器进行保存。7.5.80C51各中断源对应的中断服务程序的入口地址是否能任意设定?如果想将中断服务程序放置在程序存储区的任意区域,在程序中应该作何种设置?请举例加以说明答:各中断源的入口地址已经在中断地址区中被定义了,不能任意设定。如果要将中断服务程序放置在程序存储区的任意区域,在程序中要通过在中断地址区的对应地址上设置跳转指令才可实现对中断服务程序的执行。例如:外部中断0的中断服务程序INT0P放置在程序存储区的任意区域,此时,通过以下方式,可实现对中断服务程序的执行:ORG0003HLJMPINTOP 7.6.简述子程序调用和执行中断服务程序的异同点答:相同点:均能中断主程序执行本程序,然后再返回断点地址继续执行主程序。不同点:1)中断服务程序入口地址是固定的,子程序调用入口地址是用户自己设定的。2)中断服务子程序返回指令除具有子程序返回指令所具有的全部功能之外,还有清除中断响应时被置位的中断请求标志位的功能。3)中断服务子程序是在满足中断申请的条件下,随机发生的;而子程序调用是用户主程序事先安排好的。 7.7.80C51单片机开中断总允许的指令是_____,初始化时一般在什么时候开总中断允许?答:SETBEA或者EA=1.一般在初始化的后面或者最后开总中断允许,防止单片机启动时产生意外的中断。 7.8当80C51某个中断源有中断请求时,处理器响应这个中断的条件是什么?答:1)相应的中断使能控制位为12)全局使能控制位EA=13)当前没有在执行同优先级中断或更高优先级中断的中断服务子程序。7.9.简述80C51的各个中断源是如何撤销中断申请的?答:80C51各中断源的中断申请撤销方法是: 定时/计数器中断:在中断被响应后,由硬件自动清零中断申请标志位;在查询方式时是软件清零。 串口中断:由软件清零中断申请标志位; 下降沿触发时的外部中断:中断被响应后,由硬件自动清零中断申请标志位; 低电平电平触发的外部中断:需要设计专门的电路,通过软件编程通知外部中断源,由外部中断源撤销申请。7.1080C51单片机的定时/计数器可选择_____个时钟源,当选择外部时钟源时,通常作为_____,当选择内部时钟源时,通常用为_____。答:2,计数器,定时器 7.11.80C51单片机的定时功能和计数功能本质上有区别吗?为什么?答:定时/计数器的计数和定时功能其本质上都是通过计算时钟信号的下降沿个数来实现的,两者之间没有本质上的区别。只是选择内部时钟源时,由于频率固定,只能做为定时器,当选择外部时钟源时,即可作为定时器也可作为计数器。7.1280C51单片机中的定时/计数器选择外部时钟源有什么限制?为什么?答:当选择外部时钟源时,由于时钟信号的下降沿有效,而采样一个下降沿需要两个机器周期,因此外部时钟信号的最高频率为fosc/24。 7.13.当80C51单片机中的门控位GATE为0时,怎么启动定时/计数器?当门控位GATE为1时,又怎么启动定时/计数器?答:当GATE为0时,外部中断输入引脚(x=1或0)的电平状态对定时/计数器不产生影响,这时只需要使TRx(x=0或1)为1就可以启动定时/计数器。而当GATE为1时,此时,除了使TRx(x=0或1)为1外,还需要相应的外部中断输入引脚(x=1或0)为高电平,才能启动定时/计数器。 7.14.80C51单片机中的定时/计数器有几种工作方式?方式0和方式1有什么异同点?答:有4种工作方式,分别为方式0,方式1,方式2和方式3。方式0和方式1的工作原理和控制模式完全相同,所不同的是方式0是13位定时/计数器,其中TLx(x=0或1)的高3位没有使用。而方式1是16位定时/计数器。 7.15.当定时/计数器T0工作在方式3时,T1可以工作在哪些方式?这时我们常把把定时/计数器1设置成什么工作方式?为什么?答:T0工作在方式3时,T1可以工作在方式0,方式1和方式2。这时我们常把定时/计数器1作为串行口的波特率发生器,使定时/计数器1工作于方式2。这是因为当定时/计数器0工作于方式3时,占用了定时/计数器1的中断请求标志位TF1和软件启动控制位TR1,而串行口的波特率发生器只要启动就无需停止,也不需要向处理器申请中断,而且方式2有自动重载精确定时的特点,所以我们在定时/计数器0工作于方式3时,通常把定时/计数器1作为波特率发生器,使其工作于方式2。 7.16.某一个实际应用中,使用到定时/计数器0和外部中断0,其中外部中断设为下降沿触发,低优先级,定时/计数器0工作于方式1,软件启动,内部时钟源,高优先级,中断模式。其余未使用到的中断源全部关闭。初始化时开全局中断,那么IE=_____,IP=_____,TMOD=_____,IT0=_____。答:IE=83H,IP=02H,TMOD=01H,IT0=17.17.执行以下代码的作用是。ANL TMOD, #0FHORL TMOD, #50H答:设置定时/计数器1工作在方式1,选择外部时钟源,仅由软件启动。7.18.若某单片机系统的晶振为6MHz,使用定时/计数器0,进行800us定时,可以使用哪些工作方式,为什么?要求软件启动,中断方式,试编写各种方式下的初始化程序。答:晶振为6MHz,那么机器周期为2us,在13位定时/计数器方式0下,最长的定时时间为:所以可以工作于方式0在方式1下,是16位定时/计数器,最长的定时时间为:所以也可以工作于方式1在8位自动重载方式2下,最长的定时时间:所以不可以工作方式2在方式3下,也是8为定时/计数器,所以也不可以工作于方式3。初始化程序C51语言:=1\*GB3①方式0:那么TH0=0F3H,TL0=10H,那么初始化程序程序:TMOD=0x00;ET0=1;TH0=0xf3;TL0=0x10;EA=1;TR0=1;=2\*GB3②方式1:那么TH0=0FEH,TL0=70H,那么初始化程序程序:TMOD=0x01;ET0=1;TH0=0xfe;TL0=0x70;EA=1;TR0=1;7.19.设单片机系统的晶振为12MHz,要求使用定时/计数器1,中断模式,自动重载方式,输出周期为200us,占空比为50%的方波,从P1.0输出,初始化P1.0为高电平。分别用汇编和C51语言进行编写。答:输出占空比为50%,周期为200s的方波就可以知道定时时间为100s。所以TH1=TL1=9CHORG0000H AJMPMAIN_STARTORG001BH ;定时/计数器1中断服务程序入口地址 AJMPINT_T1_HANDLEORG0030HINT_T1_HANDLE: CPLP1.0 ;P1.0翻转 RETIORG0100HMAIN_START: MOVTMOD,#20H ;设置计数器工作模式为2 SETBET1 ;开定时/计数器1中断 MOVTH1,#9CH ;设置初始值 MOVTL1,#9CH SETBP1.0 ;清P1.0为零 SETBEA ;开全局中断 SETBTR1 ;启动定时/计数器1WAIT:AJMP$ ;等待中断发生ENDC51语言程序:#include<reg51.h> //添加头文件#defineucharunsignedchar #defineuintunsignedintsbitP10=P1^0;//位定义 voidmain() //主程序{TMOD=0x20; //定时/计数器1工作在定时模式,方式2(自动重载)ET1=1;//开定时/计数器1中断TH1=0x9c; //设置计数初值TL1=0x9c;P10=1;//初始化输出为低电平TR1=1; //启动T1,开始计时EA=1; //开全局总中断while(1); //无线循环,等待中断产生}voidint_ext1()interrupt3using1 //定时/计数器1中断服务程序,使用寄存器组1{P10=~P10;//P1.0·电平翻转}7.20.要求仿真如下的图,其中晶振12HMz,单刀双掷开关SW1(P2.0)接高电平时,设置外部中断0为下降沿触发方式;当SW1接低电平时,设置为低电平触发方式。初始化时LED(P1.7)灯灭,外部中断0有中断产生时,LED灯闪烁5次,亮250ms,灭250ms,采用定时/计数器0定时50ms,工作方式1,中断模式,定时中断为高级中断优先级。试编写其C51语言程序,并说明下降沿触发时和电平触发时的不同之处。答:首先说明的是定时的问题,我们已经知道定时250ms对12HMz的单片机来说不可能实现,因此我们分为5次来定时,一次定时50ms,定时5次,因此一共为250ms。定时50ms方式1时的初值为15536=3CB0H。C51语言程序如下:#include<reg51.h> #defineucharunsignedchar #defineuintunsignedintsbitLED=P1^7;sbitSW1=P2^0;ucharTime;//定时次数 voidmain() {EX0=1;ET0=1;LED=0;Time=0;TMOD=0x01;TH0=0x3c;TL0=0xb0;PT0=1;//高级优先级EA=1;while(1){if(SW1==1)IT0=1;elseIT0=0;} }voiddelay250ms()//延时250ms子程序,定时50ms,进行5次。{TR0=1;while(Time!=5);Time=0;TR0=0;}voidint_ext0()interrupt0using1 //外部中断0中断服务子程序{uchari;for(i=0;i<5;i++){LED=1;delay250ms();LED=0;delay250ms();}}voidint_t0()interrupt1using2//定时/计数器0中断服务子程序{Time=Time+1;TH0=0x3c;TL0=0xb0;}在仿真系统中我们可以看出,当为下降沿触发方式时,按一次开关,LED等就会闪烁5次,然后熄灭,硬件会自动清除中断标志,不会再产生另外的中断。而为电平触发方式时,我们可以看出,如果一直按着开关,一直保持P3.2为低电平时,LED一直闪烁,这表明硬件不会自动清除电平触发方式时的中断申请标志位,会一直认为有新的中断产生,这时只能把P3.2的输入电平变为高电平才能撤销中断,如松开按键。第8章习题与思考题参考答案8.1简述MCS-51单片机串行口的4种工作方式的接收和发送数据的过程。答:1.方式0(SM0,SM1=00)的接收和发送数据的过程:该方式为同步发送/接收,由TXD提供移位脉冲,RXD用作数据输入/输出通道;用作串行口扩展,具有固定的波特率:fosc/12;发送/接收8位数据,低位在先。接收时,将RI清0并置REN=1,启动一帧数据的接收,由TXD输出移位脉冲,由RXD接收串行数据到SBUF中。接收完一帧自动置位RI,请求中断,软件清零RI后可继续接收。发送时,执行一条“MOVSBUF,A”指令则启动发送操作,由TXD输出移位脉冲,由RXD串行发送SBUF中的数据。发送完8位数据后自动置TI=1,请求中断,软件清零TI后可继续发送。2.方式1(SM0,SM1=01)的接收和发送数据的过程:该方式为8位UART接口;帧结构为10位,包括1位起始位(为0),8位数据位,1位停止位(为1);波特率由指令设置的T1的溢出率决定。接收时,将RI清0并置REN=1,串行口采样RXD,当采样到1至0的跳变时,确认串行数据帧的起始位,开始接收一帧数据,直到停止位到来时,把停止位送入RB8中。置位RI请求中断,读取数据后需要用软件清零RI。发送时,执行一条“MOVSBUF,A”指令则启动发送操作,SBUF中的数据从TXD端实现异步发送。发送完一帧数据后自动置TI=1,请求中断,软件清零TI后可继续发送。3.方式2(SM0,SM1=10)和方式3(SM0,SM1=11)的接收和发送数据的过程:方式2和方式3具有多机通信功能,这两种方式除了波特率不同以外,其余完全相同。方式2的波特率为固定fosc/32或fosc/64,具体由SMOD位决定,当SMOD=1时,波特率为fosc/32,当SMOD=0时,波特率为fosc/64;方式3的波特率由T1的溢出率决定。方式2和方式3都为11位的帧结构,包括1位起始位(为0)、8位数据位、1位可编程位TB8/RB8和1位停止位(为1)。接收时,将RI清0并置REN=1,启动串行口接收,接收的第9位送入RB8中,串行口接收控制器根据SM2和RB8的状态决定是否置位RI:当SM2=0时,串行口可接收数据信息或地址信息,此时的RB8可作为奇偶校验位使用;当SM2=1时,为多机通信方式,接收到的RB8为1时(接收的信息为地址帧),置位RI,串行口接收发送来的数据。当RB8=0时,接收的信息为数据帧,此数据丢弃,不影响RI的状态。发送时,先由软件设置TB8(如作为奇偶校验位或地址/数据位),执行一条“MOVSBUF,A”指令则启动发送操作,发送控制器会把TB8装入发送移位寄存器的第9位位置,然后发送一帧完整的数据,发送完一帧数据后自动置TI=1,请求中断,软件清零TI后可继续发送。8.2串行口有几种工作方式?各工作方式的波特率如何确定?答:它有四种工作方式:方式0、1、2、3。帧格式有10位、11位。方式0和方式2的波特率是固定的,方式1和方式3的波特率是可变的,由定时器的溢出率决定。8.3若晶体的振荡频率为11.0592MHz,串行口工作于方式1,波特率为4800bps,计算用T1作为波特率发生器的方式控制字和计数初值。解:方式1和方式3的波特率由定时器的溢出率控制,是可变的,表示为:波特率=(2SMOD/32)×定时器T1的溢出率定时器T1的溢出率=T1计数率/产生溢出所需的时间=(fOSC/12)/(-TC)其中:N为定时器T1的位数,TC为定时器T1的预置初值。8.4阅读下面的硬件图和相应的程序,说明所完成的功能。并将此汇编源程序修改为C51源程序图8.38题8.4MOVSCON,#00H图8.38题8.4MOVP1,#0FFHLOOP:MOVA,P1MOVSUBF,AJNBTI,$CLRTISJMPLOOP答:利用单片机串行口扩展并行输出接口,程序完成将SW1~SW8的状态反应在移位寄存器74LS164所接的LED上,如SW1闭合时L0应点亮。该汇编程序的C51源程序段,:SCON=0x00;P1=0xFF;while(1){SBUF=P1;while(!TI);TI=0;}8.5应用串行口控制的键盘和显示的硬件电路图如图8.8所示,试编写C51源程序。解:/*******************************************************Title键盘和显示程序********************************************************/#include<reg51.h>#include<math.h>#defineucharunsignedchar#defineuintunsignedintsbitLOAD=P3^2; //74LS156移位与置位控制端sbitCLKIN=P3^6; //74LS156时钟禁止端sbitdis=P3^3; //通过与门控制74LS164时钟信号,从而控制数码管显示sbitKeyLine1=P3^4;sbitKeyLine2=P3^5;//数码管显示数据,分别为:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,Fcodeucharsta[16]={0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6,0xEE,0x3E,0x9C,0x7A,0x9E,0x8E};/**延时函数*延时10ms*/voidDelay10ms(){ unsignedchari,j; i=20; j=113; do { while(--j); }while(--i);}/*数码管显示函数*传入0~15,可使数码管显示0~F*/voiddisplay(ucharval){ uchari; dis=1; //允许TXD时钟信号通过与门 SCON=0x00; //串口设置为方式0,发送模式 for(i=0;i<3;i++){ SBUF=sta[val]; while(!TI); //等待数据发送完成,完成后TI硬件置一 TI=0; //TI软件清零 } dis=0; //关闭与门,避免与键盘扫描时钟冲突}/**读取74LS165函数*读取74LS165数据一次*返回74LS165一次状态数据tmp(1字节)*/ucharread165(){ uchartmp; CLKIN=1; //拉高时钟禁止端,以便置入74LS165并口数据 LOAD=0; //拉低置入端,把74LS165并口端置入寄存器中 Delay10ms(); LOAD=1; //拉高置入端,以便74LS165移位 CLKIN=0; //拉高时钟禁止端,以便74LS165移位 SCON=0x10; //TXD向74LS165的时钟端传输时钟信号,74LS165开始移位串行//输出数据 while(!RI); //RXD接收一帧(8位)数据后,RI自动硬件置1 RI=0; //RI软件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DIP工作奖惩制度
- 校本培训奖惩制度
- 水电班组奖惩制度
- 河长制考核及奖惩制度
- 渣土车驾驶员奖惩制度
- 爱卫考评奖惩制度
- 生产一线员工奖惩制度
- 石材厂质量奖惩制度
- 社区慢病奖惩制度
- 经营部投标奖惩制度
- 实习护士第三方协议书
- 水利工程施工安全生产管理工作导则
- 民宿委托经营管理协议合同书
- 四川省森林资源规划设计调查技术细则
- 《论文写作基础教程》课件
- 2024-2025学年鲁教版(五四学制)(2024)初中英语六年级下册(全册)知识点归纳
- 化工总控工-仪表自动化知识考试题库
- 大大服装厂 SOP 作业指导书
- 【课件】书画同源+课件-2024-2025学年高中美术人教版+(2019)+选择性必修2+中国书画
- GB/T 19973.2-2025医疗产品灭菌微生物学方法第2部分:用于灭菌过程的定义、确认和维护的无菌试验
- 2025年苏州幼儿师范高等专科学校高职单招数学历年(2016-2024)频考点试题含答案解析
评论
0/150
提交评论