《单片机原理及接口技术》(第二版)余锡存著-课后习题答案_第1页
《单片机原理及接口技术》(第二版)余锡存著-课后习题答案_第2页
《单片机原理及接口技术》(第二版)余锡存著-课后习题答案_第3页
《单片机原理及接口技术》(第二版)余锡存著-课后习题答案_第4页
《单片机原理及接口技术》(第二版)余锡存著-课后习题答案_第5页
已阅读5页,还剩46页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章1.89C51、87C51、80C51和80C31单片机的主要区别在那里?答:相同之处是:制造工艺都为CHMOS,都有128字节片内RAM、两个定时/计数器、4个8位I/O并行口,一个串行口和5个中断源。主要区别:①89C51片内4K字节FLASHROM;②87C51片内4K字节EPROM;③80C51片内4K字节掩膜ROM;④80C31片内无程序存储器。2.MCS-51单片机引脚有多少I/O线?它们和单片机对外的地址总线和数据总线有何关系?答:4个8位I/O并行口,一个串行口;其中P0口为外接程存和数存的地址低8位和数据总线的时分复用接口;其中P2口为外接程存和数存的地址高8位总线接口;其中P1口为真正的用户口线;其中P3口有第2功能;以上4个口线在没有专用功能时,也可以做通用I/O口线用。3.简述8031片内RAM区地址空间的分配特点。

答:MCS-51单片机片内RAM为256字节,地址范围为00H~FFH,分为两大局部:低128字节〔00H~7FH〕为真正的RAM区;高128字节〔80H~FFH〕为特殊功能存放器区SFR。在低128字节RAM中,00H~1FH共32单元是4个通用工作存放器区。每一个区有8个通用存放器R0~R7。4.MCS-51单片机由哪几个局部组成。答:①一个8位CPU;②4KBROMorEPROM(8031无ROM);③128字节RAM数据存储器;④21个特殊功能存放器SFR;⑤4个8位并行I/O口,其中P0、P2为地址/数据线,可寻址64KB程序存储器和64KB数据存储器;⑥一个可编程全双工串行口;⑦具有5个中断源,两个优先级,嵌套中断结构;⑧两个16位定时器/计数器;⑨一个片内振荡器及时钟电路。5.MCS-51单片机的EA,ALE,PSEN信号各自的功能是什么?答:都是控制总线①EA/V:访问内部程序存储器的控制信号/编程电压输入端。EA1时,PPCPU从片内读取指令,EA0CPU从片外读取指令。②ALE/PROG:地址锁存允许/编程信号线。③PSEN:外部程序存储器读选通信号。④RSE/VPD:复位输入信号/掉电保护后备电源引脚。6.MCS-51单片机如何实现工作存放器组的选择?RS1(PSW.4)、RS0(PSW.3)为工作存放器组的选择位;①取值为00时选择第0组工作存放器,片内RAM地址是00H~07H,名称为R0~R7;②取值为01时选择第1组工作存放器,片内RAM地址是08H~0FH,名称为R0~R7;③取值为10时选择第2组工作存放器,片内RAM地址是10H~17H,名称为R0~R7;④取值为11时选择第3组工作存放器,片内RAM地址是18H~1FH,名称为R0~R7。7.什么是时钟周期、机器周期、指令周期?当单片机的时钟频率为12MHz时,一个机器周期是多少?ALE引脚的输出频率是多少?〔1〕振荡周期:也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期。〔2〕状态周期:每个状态周期为时钟周期的2倍,是振荡周期经二分频后得到的。〔3〕机器周期:一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。③立即寻址,寻址范围是程序存储器;基址存放器加变址存放器间接寻址,寻址范围是程序存储器;相对寻址,寻址范围是以下一条指令为相对地址的-128~+127字节范围内;位寻址,寻址范围是可位寻址空间,包内括部RAM的可寻址位,特殊功能存放器中的可寻址位。2.设内部RAM中59H单元的内容为50H,写出当执行以下程序段后存放器A,R0,和内部RAM中50H、51H单元的内容为和值?答:MOVA,59HMOVR0,A;〔A〕=(59H)=50H;〔R0〕=50HMOVA,#00MOV@R0,A;〔A〕=00;〔〔R0〕〕=(50H)=00MOVA,#25H;〔A〕=25HMOV51H,A;〔51H〕=25HMOV52H,#70H;〔52H〕=70H执行以下程序段后:〔A〕=25H,〔R0〕=50H,(50H)=00、(51H)=25H3.PSW中Cy与OV有何不同?以下程序段执行后〔Cy〕=?〔OV〕=?。MOVA,#56HADDA,#74H答:Cy—进位、借位标志位;OV—溢出标志位。MOVA,#56H;〔A〕=56H=01010110BADDA,#74H;〔A〕=56H+74H=0CAH=11001010B,程序执行后:〔Cy〕=0〔OV〕=1

4.MOVCA,@A+DPTR与MOVXA,@DPTR指令有何不同?答:①MOVCA,@A+DPTR;寻找的操作数在程序存储器中,地址是:〔A〕+〔DPTR〕;②MOVXA,@DPTR;寻找的操作数在外部数据存储器中,地址是:〔DPTR〕。5.AJMP、LJMP、SJMP指令功能上有何不同?答:相同之处,都是无条件转移指令。①AJMPaddr11;下调指令为基准的2KB范围内的跳转指令。②LJMPaddr16;转移的目标地址可以在64KB程序存储器的任何地方。③SJMPrel指令。;下调指令为基准的-128B~+127B范围内的短跳转6.设堆栈指针SP中的内容为60H,内部RAM中30H和31H单元的内容分别为24H和10H,执行以下程序段后,61H,62H,30H,31H,DPTR及SP中的内容将有何变化?PUSH30HPUSH31HPOPDPLPOPDPHMOV30H,#00H

MOV31H,#0FFH答:PUSH30HPUSH31HPOPDPLPOPDPH;〔61H〕=(30H)=24H;(62H)=(31H)=10H;(DPL)=(62H)=10H;(DPH)=〔61H〕=24HMOV30H,#00H;(30H)=00HMOV31H,#0FFH;(31H)=0FFH程序执行后:〔61H〕=24H,(62H)=10H,(30H)=00H,(31H)=0FFH,(DPTR)=2410H7.试分析以下程序段,当程序执行后,位地址00H和01H中的内容将为何值?P1口的8条I/O线为何状态?CLRCMOVA,#66HJCLOOP1CPLCSETB01HLOOP1:ORLC,ACC.0JBACC.2,LOOP2LOOP2:MOVP1,A答:CLRC;(Cy)=0

MOVA,#66H;(A)=66H=01100110B;因此时(Cy)=0,所以不跳转;(Cy)=1JCLOOP1CPLCSETB01H;〔01H〕=1LOOP1:ORLC,ACC.0;(Cy)=〔Cy〕∨(ACC.0)=1JBACC.2,LOOP2;因(ACC.2)=1LOOP2:MOVP1,A;〔P1〕=01100110B8.要完成以下的数据传送,应如何用MCS-51指令实现?⑴R1的内容传送到R0;⑵片外RAM20H单元的内容送R0;⑶片外RAM20H单元的内容送片内RAM20H单元;⑷片外RAM1000H单元的内容送片内RAM20H单元;⑸ROM2000H单元的内容送R0;⑹ROM2000H单元的内容送片内RAM20H单元;⑺ROM2000H单元的内容送片外RAM20H单元。答:⑴R1的内容传送到R0;MOVA,R1MOVR0,A⑵片外RAM20H单元的内容送R0;MOVR1,#20HMOVXA,@R1

MOVR0,A⑶片外RAM20H单元的内容送片内RAM20H单元;MOVR1,#20HMOVXA,@R1MOV20H,A⑷片外RAM1000H单元的内容送片内RAM20H单元;MOVDPTR,#20HMOVXA,@DPTRMOV20H,A⑸ROM2000H单元的内容送R0;MOVDPTR,#2000HCLRAMOVCA,@A+DPTRMOVR0,A⑹ROM2000H单元的内容送片内RAM20H单元;MOVDPTR,#2000HCLRAMOVCA,@A+DPTRMOV20H,A⑺ROM2000H单元的内容送片外RAM20H单元。MOVDPTR,#2000HCLRA

MOVCA,@A+DPTRMOVR0,#20HMOVX@R0,A9.分析以下程序每条指令执行的结果:MOVA,#25H;(A)=25HMOVR1,#33H;(R1)=33HMOV40H,#1AH;(40H)=1AHMOVR0,40H;(R0)=1AHADDA,R1;(A)=25H+33H=58HADDCA,@R0ADDCA,40H;(A)=58H+(1AH)+(Cy)=58H;(A)=58H+1AH+(Cy)=72H10.设A=83H,R0=17H,(17H)=34H,执行以下程序后,(A)=?ANLA,#17H;(A)=10000011B∧00010111B=00000011BORL17H,A0111B;(17H)=00110100B∨00000011B=0011XRLA,@R0CPLA;(A)=00000011B⊕00110111=00110100B;(A)=11001011B11.两个4位BCD码数相加,被加数和加数分别存于30H、31H和40H、41H单元中〔次序为千位、百位在低地址中,十位、个位在高地址中〕,和数放在50H、51H、52H中〔52H用于存放最高位的进位〕,试编写加法程序。解:ORG00H

MOV30H,#12H;MOV31H,#34H;MOV40H,#56H;MOV41H,#78H;MOVA,31H;取被加数十个位ADDA,41H;相加,(A)=(31H)+(41H);十进制调整;存十位个位运算结果DAAMOV51H,AMOVA,30HADDCA,40H;取被加数千百位;相加,(A)=(30H)+(40H);十进制调整DAAMOV50H,ACLRA;存千位百位运算结果;清AADDCA,#0;将进位加到A中MOV52H,A;存进位SJMP$12.试编写一程序,查找内部RAM单元的20H~50H中是否有0AAH这一数据,假设有,那么将51H单元置为01H,假设没有,那么使51H单元置0。解:ORG00HMOV30H,#0AAH;MOVR1,#31H;MOVR0,#20H;

BIJIAO:MOVA,@R0CJNEA,#0AAH,LOOP;MOV51H,#01HSJMPJIESHULOOP:INCR0DJNZR1,BIJIAOMOV51H,#00HJIESHU:SJMP$第四章1、假设有两个符号数X,Y分别存放在内部存储器50H、51H单元中,试编写一个程序实现X*10+Y,结果存入52H、53H中。12ORG00HMOVR0,#50HMOVA,@R0MOVB,#0AHMULAB000078500002E63000375F00A40006A45000708678INCR0000826ADDA,@R0INCR0000908000AA6F0000C089MOV@R0,B10INCR0000DF611MOV@R0,A

12END2、在以3000H为首地址的外部RAM中,存放了14个以ASCII码表示的0~9的数,试编写程序将它们转换成BCD码,并以压缩BCD形式存放在以2000H为首地址的外部RAM中。12ORG00H00009030000003780700057930MOVDPTR,#3000H;原始数据首地址34MOVR0,#07;循环次数MOVR1,#30H;转换结果暂存区指针0007E05CH1:MOVXA,@DPTRANLA,#00001111B0008550F000AC4000BF5F0000DA3000EE0687SWAPAMOVB,A9INCDPTR10MOVXA,@DPTR000F550F001145F00013F711ANLA,#00001111B12ORLA,B13MOV@R1,A14INCR10014090015A315INCDPTR0016D8EF001890200016DJNZR0,CH117MOVDPTR,#2000H;转换结果存储

区001B7A07001D7930001FE718MOVR2,#07H;19MOVR1,#30H20CH2:MOVA,@R1;结果个数3、采样的5个值分别存放在R0、R1、R2、R3、R4中,求出它们的中间值,并存放在R2中。1ORG00HMOVR0,#5MOVR1,#6MOVR2,#7MOVR3,#8MOVR4,#9>000078050002790600047A0700067B0800087C09000AE4234567CLRA;CLRC;000BC389000CE8MOVA,R0;ADDA,R1;000D2910000E2A11ADDA,R2;000F2B1213ADDA,R3ADDA,R400102C001175F00500148414MOVB,#51516DIVAB0015FAMOVR2,A

001617END18END4、以BUF1为起始地址的外部数据存储区中存放着16个单字节的无符号数,求其平均值并送入R2中。1234ORG00HBUF1EQU#1000HMOVDPTRBUF1MOVR2,000009010000003AA00000578160007E05MOVR0,#16H6SUM:MOVXA,@DPTR00082A7ADDA,R2MOVR2,AINCDPTRDJNZR0,SUMMOVB,#10HDIVAB0009FA8000AA39000BD8FA000D75F0100010841011120011FA13MOVR2,AEND145、试编写程序,将内部RAM单元中DATA1开始的20个单字节数依次与DATA2单元为起始地址的20个单字节数据进行交换。>12DATA1EQU#30HDATA2EQU#50H

34LENEQU#16ORG0H000078300002795000047A100006E656MOVR0,DATA1MOVR1,DATA2MOVR2,LEN78EXC:MOVA,@R09XCHA,@R10007C70008F610MOV@R0,A11INCR012INCR113DJNZR2,EXC14END000908000A09000BDAF96、某场歌手赛,共有10个评委,试编写一程序,输入10个评分,去掉最高分和最低分,求平均分〔均为BCD码〕。ORG0HNEQU#5BLOCKEQU#30HISELSORT:MOVR7,NDECR7MOVR1,BLOCKISST1:MOVR0,BLOCKMOVA,R7

MOVR6,AMOVA,@R0MOVB,AISST2:INCR1MOVA,@R1CLRCSUBBA,BJCISST3MOVA,@R1MOVR2,AMOVB,@R1ISST3:DJNZR6,ISST2MOVA,BXCHA,@R1MOVB,R2MOV@R1,BMOV@R1,ADJNZR7,ISST1MOVR0,BLOCKMOV@R0,#0;去掉最低分MOVA,BLOCKADDA,#9

MOVR0,AMOV@R0,#0;去掉最高分AD:MOVR0,BLOCKINCROMOVR1,#8CLRACLRCMOVB,#0ADL:ADDA,@R0DAAMOVR2,AADDCA,#0MOVB,AMOVA,R2DJNZR1,ADLMOVR5,0MOVR4,BMOVR3,AMOVR2,#0MOVR1,#8R5R4R3/R2R1=R4R3MOVR1,#00H

MOVR2,#0FHMOVR3,#04HMOVR4,#05HMOVR5,#06HLCALL_DIVAJMP$_DIV:;{CLRCMOV30H,#0MOV31H,#0MOV32H,#0_DIV_LOOP:CLRCMOVA,R3SUBBA,R1MOVR3,AMOVA,R4SUBBA,R2MOVR4,AMOVA,R5SUBBA,#0MOVR5,AJC_DIV_END

_INC_SHANG:CLRCMOVA,30HADDCA,#1MOV30H,AMOVA,31HADDCA,#0MOV31H,AMOVA,32HADDCA,#0MOV32H,ALJMP_DIV_LOOP_DIV_END:CLRCMOVA,R1ADDCA,R3MOVA,R2ADDCA,R4MOVR3,30HMOVR4,31HEND7、编写将一个十六进制数转换为十进制数的子程序。>000078FE0002793023MOVR0,#FEHMOVR1,#30H

0004E84HEXBCD:MOVA,R0000575F0640008845678MOVB,#100DIVAB0009F7MOV@R1,AMOVA,#10000A740A000CC5F0000E849XCHA,B10111213DIVABINCR1000F090010F7MOV@R1,AINCR10011090012A7F014MOV@R1,B15RET8、在内部RAM的BLOCK开始的单元中有一无符号数据块,数据长度为LEN。试编程求其中最大的数并存入MAX中。MCS51123ORG0HLENEQU#10;数据块长度MAXEQU#40HMOVR0,#30H;BLOCK首地址MOVR1,LEN000078300002790A0004194567DECR1;循环次数CLRC0005C3

0006E68LOOP:MOVA,@R09INCR000070800089610SUBBA,@R011JCEXCHANG00094002000B8002000D86F0000FC312SJMPNEXT13EXCHANG:MOVB,@R014NEXT:CLRC0010D9F4001285F040END15DJNZR1,LOOP16MOV40H,B;MAX单元179、试编程将内部RAM中41H~43H单元中的数左移4位,移出局部送50H。题意不清。10、在外部RAM中BLOCK开始的单元中有一数据块,数据长度为LEN,试编程统计其中的正数、负数和零的个数分别存入内部RAM的Pcount、Mcoun和Zcount单元。MCS51>12345ORG0HLENEQU#10;PCOUNTEQU#30HMCOUNTEQU#31HZCOUNTEQU#32H数据块长度

68BLOCKEQU#40HMOVR0,BLOCK;BLOCK首地址MOVR1,LEN000078400002790A0004E679LOOP:MOVA,@R010CLRC0005C30006B4000400090532000B8009000D3311CJNEA,#0H,SULT112INC32H13SJMPSULT214SULT1:RLCA;15JCNEG移出符号位以判断正负!000E400400100530001280020014053100160816INC30H17SJMPSULT218NEG:INC31H19SULT2:INCR020DJNZR1,LOOP0017D9EB11、试编写一查表求平方的子程序SQR(设X在累加器A中,A小于15,平方数存入工作存放器R7中)。0000900008000378300005E62MOVDPTR,#TABMOVR0,#30HMOVA,@R03456000693MOVCA,@A+DPTRMOVR7,A0007FF

0008010104097TAB:DB1,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225000C10192431001040516479001490A9C4E18END12、试编写一程序,将外部数据区DATA1单元开始的50个单节数逐一依次移动到内部RAM中DATA2单元开始的数据区中。>MCS5112345ORG0HDATA1EQU#1000HDATA2EQU#30HLENEQU#10HMOVDPTR,DATA1MOVR0,DATA2MOVR1,LEN000090100000037830000579100007E0678LOOP:MOVXA,@DPTR9MOV@R0,A0008F60009A310INCDPTR11INCR0000A08000BD9FA12DJNZR1,LOOP13END

13、14,略第五章1、简述中断、中断源、中断源优先级及中断嵌套的含义。中断是单片机实时地处理内部或外部事件的一种内部机制。当某种内部或外部事件发生时,单片机的中断系统将迫使CPU暂停正在执行的程序,转而去进行中断事件的处理,中断处理完毕后,又返回被中断的程序处,继续执行下去、。中断的意义在于资源共享和应急处理。中断的功能有四:一、调整CPU与外设的速度配合;二、实时控制的实现;三、故障检测;四、实现人机交流引起中断的原因,或者能够发出中断请求信号的来源统称为中断源。通常中断源有以下几种:〔1〕外部设备请求中断。一般的外部设备〔如键盘、打印机和A/D转换器等〕在完成自身的操作后,向CPU发出中断请求,要求CPU为他效劳。由计算机硬件异常或故障引起的中断,也称为内部异常中断。〔2〕故障强迫中断。计算机在一些关键部位都设有故障自动检测装置。如运算溢出、存储器读出出错、外部设备故障、电源掉电以及其他报警信号等,这些装置的报警信号都能使CPU中断,进行相应的中断处理。〔3〕实时时钟请求中断。在控制中遇到定时检测和控制,为此常采用一个外部时钟电路〔可编程〕控制其时间间隔。需要定时时,CPU发出命令使时钟电路开始工作,一旦到达规定时间,时钟电路发出中断请求,由CPU转去完成检测和控制工作。

〔4〕数据通道中断。数据通道中断也称直接存储器存取〔DMA〕操作中断,如磁盘、磁带机或CRT等直接与存储器交换数据所要求的中断。为了使得系统能及时响应并处理发生的所有中断,系统根据引起中断事件的重要性和紧迫程度,硬件将中断源分为假设干个级别,称作中断优先级。中断系统正在执行一个中断效劳时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断源的效劳程序,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断效劳程序继续执行,这个过程称为是中断嵌套。2、MCS-51单片机提供了几个中断源?几个中断优先级?MCS-51单片机的中断源共有三类,分别是外部中断、定时计数器中断和串行通信口中断,第一类有IE0和IE1,第二类有TF0和TF1,第TI合二为一。RI、MCS-51单片机分两个优先级,每个中断源的优先级都可以通过中断优先级存放器IP中的相应位进行设定。在同级优先级中,五个中断源的优先级次序由高到低分别是:IE0、TF0、IE1、TF1、RI或TI。3、简述TCON、SCON、IE、IP四个特殊功能存放器各位的定义及功能。TCON〔TimerControlRegister〕定时器/计数器控制存放器TCON在特殊功能存放器中,字节地址为88H,位地址(由低位到高位)为88H一8FH,由于有位地址,所以可以于进行位操作。用是控制定时器的启、停,标志定时器溢出和中断情况。TCON的作其中,TFl,TRl,TF0和TR0位用于定时器/计数器;IEl,ITl,IE0和

IT0位用于中断系统。如下图:TF1TR1TF0TR0IE1IT1IE0IT0其中,TF1:定时器1溢出标志位。当定时器1计满溢出时,由硬件使TF1置“1〞,并且申请中断。进入中断效劳程序后,由硬件自动清“0〞,在查询方式下用软件清“0〞。“0〞关闭定时器1。当GATE=1,且INT1为高电平时,TR1置“1〞启动定时器1;当GATE=0,TR1置“1〞启动定时器1。TF0:定时器0TR1:定时器1运行控制位。由软件清溢出标志。其功能及操作情况同TF1。TR0:定时器0运行控制位。其功能及操作情况同TR1。IE1:外部中断1请求标志位。IT1:外部中断1触发方式选择位。当IT1=0,为低电平触发方式;当IT1=1,为下IE0:外部中断0请求标志位。IT0:外部中断0降沿触发方式。触发方式选择位。当IT0=0,为低电平触发方式;当IT0=1,为下降沿触发方式。TCON中低4位与中断有关。由于TCON是可以位寻址的,因而如果只清溢出或启动定时器工作,可以用位操作命令。例如:执行“CLRTF0〞后那么清定时器0的溢出;执行“SETBTR1〞后可启动定时器1开始工作。SCON〔SerialPortControlRegister〕串行口控制存放器存放器地址98H,位寻址9FH~98H。位地址9F9E9D9C9B9A99TI98RI位符号SM0SM1SM2RENTB8SM0、SM1:串行口工作方式选择位RB8SM2:多机通信控制位REN:允许/禁止串行口接收的控制位TB8:在方式2和方式3中,是被发送的第9位数据,可根据需要由软件置1或清零,也可以作为奇偶校验位,在方式1中是停止位。RB8:在方式2和方式3中,是被接收的第9位数据〔来自第TB8位〕;在方式1中,RB8收到的是停止位,在方式0中不用。TI——串行口发送中断请求标志位当发送完一帧串行数据后,由硬件置1;在转向中断效劳程序后,用软件清0。RI——串行口接收中断请求标志位当接收完一帧串行数据后,由硬件置1;在转向中断效劳程序后,用软件清0。此处的“软件清零〞,意指需要用户用指令清零。IE〔interruptEnableRegister〕:中断允许控制存放器存放器地址A8H,位寻址AFH~A8H。位地AF址AEADACABAAA9A8位符EA号/ET2ESET1EX1ET0EX0EA:中断允许总控制位当EA=0时,中断总禁止。当EA=1时,中断总允许后中断的禁止与允许由各中断源的中断允许控制位进行设置。EX0〔EX1〕:外部中断允许控制位当EX0〔EX1〕=0禁止外中断当EX0〔EX1〕=1允许外中断ET0〔EX1〕:定时/计数中断允许控制位当ET0〔ET1〕=0禁止定时(或计数)中断当ET0〔ET1〕=1允许定时(或计数)中断ET2:定时器2中断允许控制位,在AT89S52、AT89C52中ES:串行中断允许控制位当ES=0禁止串行中断当ES=1允许串行中断IP〔InterruptPriorityRegister〕:中断优先级控制存放器存放器地址B8H,位寻址BFH~B8H。位地址BFBEBDBCBBBAB9B8位符号//PT2PSPT1PX1PT0PX0PX0——外部中断0优先级设定位;PT0——定时中断0优先级设定位;PX1——外部中断1优先级设定位;PT1——定时中断1优先级设定位;PS——串口中断优先级设定位;PT2——定时器2优先级设定位〔8052才有〕。4、简述MCS-51单片机的中断响应过程。(3)中断效劳:即为相应的中断源效劳。6、指出哪几个中断申请标志在CPU响应中断响应后能被硬件自动清零。如果个中断源之间有优先级的区别,固定优先级时用“菊花链〞电路,不定优先级时用8259.8、外部中断INT0、INT1的两种触发方式在原理上有何区别?如何用软件设置?ITx为外部中断触发方式选择。当ITx为0时为低电平触发方式,CPU在每个机器周期的S5P2采样ITx,当Itx输入低电平的时,就置位IEx,采用这种触发方式时,外部中断源的低电平必须保持到CPU响应为止。ITx为1的时候边沿触发方式,CPU在每个机器周期的S5P2采样ITx,如果在相邻的两个机器周期内,前一个机器周期为高,后一个机器周期为低,那么置位IEx,因此,采用边沿触发时,高电平和低电平的保持时间需在12拍以上。设置外部中断信号触发方式,可通过对TCON存放器〔字节地址88H,位地址88H~8FH〕中的ITx位置一或置零进行。9、在一个应用系统中,晶振频率为12MHz,一个外部中断请求信号的宽度是300ns的负脉冲,该采用哪种触发方式?如何实现?晶振频率为12MHz时,机器周期为1微秒,采用边沿触发时,请求信号至少应该保持1微秒,所以只能对原信号进行展宽,常用的方法是连接一个单稳态电路,其时常数不在1-1.5微秒间之即可。10、MCS-51的中断效劳程序能否放在65KB程序存储器的任意区域?如何实现?MCS-51的中断效劳程序可以放在65KB程序存储器的任意区域,只要在对应的中断矢量入口填写相应的跳转指令即可。例如外部中断IE1的中断效劳程序的起始地址为3400H,那么在0013H单元内填写LCALL3400H。第六章

1、8051单片机内设几个可编程的定时/计数器?它们有几种工作方式?如何选择和设定?作为定时器或计数器,它们的波特率各为多少?8051单片机内设有两个钧为16位的可编程的定时/计数器,共有4种工作方式,即:方式0—13位定时/计数器、方式1—16位定时/计数器、方式2—自动重载初值得8位定时/计数器和方式3—T0为两个独立的8位定时/计数器,在方式3下,T1停止工作。8051定时/计数器的工作方式由控制存放器TMOD的M0、M1两位设置,因为TMOD的地址为89H,所以M0、M1不能位寻址,只能通过字节操作的方式对M0、M1的值进行设定。当用定时/计数器作为波特率发生器时,根据串口的工作模式,有三种情形:方式0的波特率为主振频率fosc的十二分之一;方式2的波特率依照下式确定:Baudrate2存放器中的波特率倍增位。SMOD,其中,SMOD为PCONf64osc方式1和方式3的波特率计算依照以下关系求的TH1即可:2SMODfBaudrateosc3212(256TH1)2、定时/计数器作定时器用时,其定时时间有哪些因素有关?做计数器用时,对外部计数频率有何限制?8051的定时/计数器工作在定时器状态时,输入的时钟脉冲是由晶体振荡器的输出经12分频得到的,故其频率为晶振频率的十二分之一。所以,定时输出是晶振频率处以12再除以计数值。8051的定时/计数器工作在计数器状态时,需要两个机器周期才能识别一个从“1〞到“0〞的跳变,故最高计数频率不大于晶振频率的二十四分之一。3、8051单片机的晶振频率为6MHz,假设只使用T0产生500微秒定时,可以选择哪几种定时方式?分别写出定时器的方式控制字和计数器初值。选择方式0或方式1,计数器初值为8192-250,或65536-250。.此处给一个C语言写的程序段,定时信号由P1.0输出:ORG0000HLJMPMAINORG000BHLJMPTO_INTERRUPTMAIN:SETBEAMOVTH0,(65536-250)/256MOVTL0,(65536-250)%256SETBTR0SETBET0SJMP$T0_INTERRUPT:CLRTR0MOVTH0,(65536-125)/256MOVTL0,(65536-125)%256P1^0=~P1^0SETBTR0

RETI4、某8051系统晶振频率为6MHz,先欲从P1.7引脚输出一个连续5Hz的方波信号,请编写程序。5Hz的方波周期为200毫秒,上下电平各持续100毫秒,假设晶振频率为6MHz,那么机器周期为2微秒,故其计数值应为:N=100ms/2μs=50000采用方式1进行计数,那么X=M-N=65536-50000=15536H=0C350H程序编写如下:MOVTMOD,#05H;设置T0工作方式,定时,方式1MOVTH0,#0C3H;MOVTL0,#050H;SETBTR0;写入计数器初值启动T0LOOP:JBCTF0,$;查询定时器溢出标志MOVTH0,#0C3H;MOVTL0,#050HCPLP1.7SJMPLOOP;END也可以用C语言编写:用定时/计数器T0从P1.7输出周期为5s的方波,晶振频率为6MHz。#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitD1=P1^0;uchara;voidinit(){//初始化TMOD=0x01;//选择定数计数器0的工作方式为16位定时器TH0=(65535-50000)%256;//赋初值,定时100msTL0=(65535-50000)/256;EA=1;ET0=1;a=0;//中断控制允许TR0=1;//启动定时器0}voidtime0()interrupt1//定时器0中断函数{TH0=(65535-50000)%256;//赋初值,定时100msTL0=(65535-50000)/256;a++;TR0=1;}voidmain(){init();while(1){while(a==25)//半个周期〔2500ms〕时,P1.7上的电平跳变一次。{a=0;P1.7=~P1.7;//取反}}}5、某单片机系统,时钟频率为12MHz,定时/计数器T0用于20ms定时,T1用于100次计数,两者要求重复工作,问:〔1〕、外部计数脉冲从何引脚输入?〔2〕、编写到达上述要求的程序。〔3〕、利用定时/计数器T0、T1编写延时2S的程序。答:〔1〕既然使用T1作为计数器,外部计数脉冲当然应该从P3.5输入。〔2〕T0用作20ms定时,故N0=20ms/1μs=20000X0=M-N=65536-20000=45535=B1E0HT1的计数值为100,所以X=65536-100=65436=FF9CH为使俩部件同时工作,将T0设为查询方式,T0设为中断方式。MOVTMOD,#15H;MOVTH0,#0B1H;MOVTL0,#0E0H;MOVTH1,#0FFH;MOVTL1,#09CH;MOVSP,#60H;T0定时,方式1;T1计数,方式1写入T0定时器初值写入T1计数器初值设置堆栈ORG001BHAJMPT1INTSETBTR0;SETBTR1;启动T0启动T1LOOP:JBCTF0,$;MOVTH0,#0B1H;MOVTL0,#0E0HCLRP1.0;查询定时器溢出标志设定时输出为P10SETBP1.0ENDT1INT:MOVTH1,#0FFH;MOVTL1,#09CH;RETI写入T1计数器初值

(3)、延时2s,可以将T0设置成方式1,输出周期为200毫秒的等宽脉冲,设该信号由P1.0输出。再由T1进行计数,将P1.0输出连接道T1输入。那么T1的计数值为100,工作方式选方式1;TO上下电平各持续100毫秒,假设晶振频率为6MHz,那么机器周期为2微秒,故其计数值应为:N=100ms/2μs=50000TO采用方式1进行计数,那么X=M-N=65536-50000=15536=0C350HT1采用方式1进行计数,那么X=M-N=65536-100=65436=0FF9CH方式字:GATE1=0,C/T1=1,M11=0,M10=1,GATE0=0,C/T0=0,M01=0,M00=1故为:051H程序编写如下:MOVTMOD,#051H;MOVTH0,#0C3H;MOVTL0,#050H;MOVTL1,#09CH;设置T0工作方式,定时,方式1写入T0计数器初值写入T1计数值MOVTH1,#0FFHSETBTR0;LOOP:JBCTF0,$;启动T0查询定时器溢出标志MOVTH0,#0C3H;MOVTL0,#050HCPLP1.0SJMPLOOP;

JBCCPLTF1,$P1,1;输出2S信号MOVTL0,#050H;MOVTL1,#09CH;SJMPLOOP写入T1计数值END6、为什么T1用作波特率发生器时常用工作方式2?假设T1设置为方式2,用作波特率发生器,晶振频率为6Mhz,求可能产生的波特率的变化范围。答:串行通信通常是持续的,即很少进行但帧通信,这就要求通信时钟〔波特率发生器〕必须持续工作,同时为确保时钟准确,就要尽量减少计时中断效劳程序中的延时和不确定因素,采用方式2,因为是自动重载计数器初值,简洁、准确。方式2下的波特率计算由下式决定:波特率=2SMOD×fosc/64所以其波特率最高为:187500,最低为:93750。7、怎样选择串行口的工作模式?REN位的作用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论