版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.第一章习题答:单片机又称为单片微计算机,它的结构特点是将微型计算机的基本功能部件(如中央处理器 (CPU)、存储器、输入接口、输出接口、定时/计数器及终端系统等)全部集成在一个半导体芯片芯片,但无论从组成还是从逻辑功能上来看,都具有微机系统的定义。与通用的微型计算机相比,单片机体积小巧,可以嵌入到应用系统中作为指挥决策中心,是应用系统实答:单片机诞生于1971年,经历了SCM、MCU、SOC三大阶段,早期的SCM单片机都是8位的是INTEL的8031,此后在8031上发展出了MCS51系列MCU系统。基于这片机系统直到现在还在广泛使用。随着工业控制领域要求的提高,开始出现了16位单片目前,单片机正朝着高性能和多品种发展,但由于MCS-51系列8位单片机仍能满足绝大多数应用领域的需要,可以肯定,以MCS-51系列为主的8位单片机,在当前及以后的相当一段时间内仍将占据单片机应用的主导地位。3.举例说明单片机的主要应用领域。程控制等领域,大致可分如下几个范畴:智能仪器、波器,各种分析仪)。电话,集群移动通信,无线电对讲机等。系统等等。模块化系统.就需要复杂的类似于计算机的原理。如:音乐信号以数字的形式存于存储器中(类似于ROM),由微控制器读出,转化为模拟音乐电信号(类似于声卡)。在大型电路中,这种模块化应用极大地缩小也方便于更换。汽车电子单片机在汽车电子中的应用非常广泛,例如汽车中的发动机控制器,基于CAN总线的汽车发动机智能电子控制器、GPS导航系此外,单片机在工商、金融、科研、教育、电力、通信、物流和国防航空航天等领域都有着十分答:37=(100101)B=(25)H;BCD码为00110111; (1)+36原码00100100B反码00100100B补码00100100B (2)-36原码10100100B反码11011011B补码11011100B (3)+127原码01111111B反码01111111B补码01111111B (4)-128原码10000000B反码01111111B补码10000000B (5)-121原码11111001B反码10000110B补码10000111B (1)10101010和0000000000000或10101010异或10101010(2)01110111和100010000000011111111.异或11111111(3)11101110和01110111与01100110或11111111异或10011001(4)00111100和11110000与00110000或11111100异或11001100作界面主要包括标题栏、菜单栏、工具栏、状态栏、方位控制按钮、仿真进程控制按钮、对象选择窗口,原理图编辑窗口和预览窗口等。主菜单栏包含文件、查看、编辑、工具、设计、图形、源文件、调试、库、模板、系统、帮助选 (1)启动ISIS; (2)绘制电路原理图; (3)输入单片机程序; (4)进行源代码调试; (5)仿真运行。10.何谓PCB?利用ARES模块进行PCB设计需要经过哪几个主要步骤?答:PCB(PrintedCircuitBoard),中文名称为印制电路板,又称印刷电路板、印刷线路板,是重要的电子部件,是电子元器件的支撑体,是电子元器件电气连接的提供者。由于它是采用电子印刷术 SCADCAM输出。第2章MCS-51单片机结构及原理习题自程序存储器中的指令进行译码,在规定的时刻发出各种操作所需的控制信号,完成指令所规定的功能;存储器:包括程序存储和数据存储器;MSC各有什么功能?VCC(40脚):+5V电源引脚XTAL)XTAL)(2)控制引脚.RST/VPD(9)为复位/备用电源引脚为地址锁存使能输出/编程脉冲输入片外程序存储器读选通信号:外部ROM允许访问/编程电源输入(3)并行I/O口引脚P0.0~P0.7(39~32脚)——P0口;P1.0~P1.7(1~8脚)——P1口;P2.0~P2.7(21~28脚)——P2口;P3.0~P3.7(10~17脚)——P3口。机40引脚双列直插封装(DIP——dualin-linepackage),引脚之间的距离是100mil();44引脚方形扁平封装(QFP——quadflatpackage)方式,引脚之间的距离是;44引脚带引线的塑料芯片载体PLCC(PlasticLeadedChipCarrier)。单片机复位电路有:上电复位电路,由电阻和电容构成,通过上电时,电容相当于短路而使复位引脚在晶振有效的情况下保持2个机器周期的高电平;按钮开关复位电路,由两个电阻的分压构成,通过手工按下按钮,使复位引脚在晶振有效的情况下保持2个机器周期的高电平。结构),MCS,MCS-51可寻址空间是两个64KB,即64KB的程序存储空间和64KB的数片内RAM中低128个单元划分为三个部分:①工作寄存器区(00H-1FH),四组,每组8个,可作;③用户RAM区(30H-7FH),80B,用作普通RAM单元或堆栈。SWPSWPSWPSWPSWPSW.4PSW.3PSW.2PSW.1PSW.0PSW.7:进/借位标志CY,加法有进位时置PSWF用户标志位F1,保存用户的位数据;PSW.4、PSW.3:工作寄存器选择控制位RS1和RS0,00至11分别选择四组工作之一作为当前工作寄存器255即乘积在BA中,或除法运算除数为0)时置1PSW.0:奇偶标志位P,累加器A中1的个数为奇数时置1。8.什么是时钟周期?什么是机器周期?什么是指令周期?当振荡频率为12MHz时,一个机器周答:时钟周期又叫振荡周期或拍,用P表示,是MCS-51单片机中最小的时间单位,在一个时钟.机器周期:由12个时钟周期构成,完成一个基本操作指令周期:是执行一条指令所需的时间,根据指令的复杂性,可由1~4个机器周期构成。当振荡频率为12MHz时,一个机器周期为1微秒。答:P0口的每一位由1个锁存器、2个三态缓冲器、1个输出控制电路(非门X、与门、电子地址线的低8位和数据线实现外部扩展功能。在用作输入输出口时,需外接上拉电阻。P1口的每一位由1个锁存器、1个场效应管驱动器V和2个三态门缓冲器构成,其作用是用作入输出口功能是用作输入输出口,或地址总线的高8位。P其作用是用作输入输出口或第二功能。ALE的作用是对外部存储寻址时锁存P0口输出的低8位地址,当51不外接第3章单片机的汇编语言与程序设计习题寄存器寻址方式:指令给出的是寄存器的编码,操作数在编码指定的寄存器中,适用于片内00H至1FH的32个字节,用R0,…,R7表示,通过PSW的RS1和RS0选择组号确定对应32个字节中的其中8个,还有累加器A,以及乘除法指令中的A和B寄存器,位寻址方式中的布尔累加器C;MULABINCDPTR寄存器间接寻址方式:指令给出的是寄存器的编码,操作数地址在编码指定的寄存器中,适用于RAMHFFH存器间接寻址;如MOVA,@R0立即寻址方式:操作数本身在指令中直接,给出适用于用8位立即数对片内RAM所有地址单元DPTRPCA内容相加形成操作数的实际地址的一种寻址方式,变址寻址方式适用于程序存储器JMP@A+DPTR.H的16个字节中的128个位地址空间和80H至FFH中地址中可以被8整除的所有SFR中的每个位地址MOVC,ACC.7相对寻址方式:为相对转移指令而设,指令中直接给出转移的相对偏移量,其转移目标在当前指令-128至+127字节范围内的地址空间。如SJMPSTART2.MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,怎样判断某内部数据单元的内容是答:MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,判断某内部数据单元的内容是否为零是能通过取数到A累加器,再判断A中的每一位是否为零来确定其值是否为零。RAM20H--30H单元内容清零。依次将A中的零值传送到指针所指的片内RAM单元,每传送一个字节,地址指针加1,直到达到地MOVR0,#20H;设地址指针初值CLRA;累加器清0CONT:MOV@R0,A;置0指针所指单元INCR0;地址指针加1CJNER0,#31H,CONT;指针未超过终点则继续SJMP$;暂停MOVR0,#20H;设地址指针初值CLRA;累加器清0MOVR;计数器赋初值,从20H到30H共17个字节CONT:MOV@R0,A;置0指针所指单元INCR0;地址指针加1SJMP$;暂停H给50H单元赋0FFH,若不相等,则R0加1为继续比较下一个字节做准备,直到达到地址为41H或达到计数器规定的16个字节为止还没找到,则给50H单元赋00HMOVR0,#32H;设地址指针初值CONT:CJNE@R0,#0AAH,NEXT;比较查找值与指针所指单元的值,不相等转移MOVA,#0FFH;相等,则准备好要赋的标志值0FFHSJMPDOWN;转存到保存结果处NEXT:INCR0;修改地址指针CJNER0,#42H,CONT;若指针未越过终点,则继续.MOVA,#00H;查找失败,则将00H存入结果标志单元DOWN:MOV50H,A;将比较结果标志存入50H单元SJMP$;暂停ENDMOVR7,#16;计数器赋初值,从20H到30H共16个字节MOVR0,#32H;设地址指针初值CONT:CJNE@R0,#0AAH,NEXT;比较查找值与指针所指单元的值,不相等转移MOVA,#0FFH;相等,则准备好要赋的标志值0FFHSJMPDOWN;转存到保存结果处NEXT:INCR0;修改地址指针MOVA,#00H;查找失败,则将00H存入结果标志单元DOWN:MOV50H,A;将比较结果标志存入50H单元SJMP$;暂停END5.查找20H~4FH单元中出现00H的次数,并将查找结果存入50H单元。解:从20H到4FH共48个字节MOVR7,#48;字节计数器赋初值MOVR0,#20H;设地址指针初值CONT:CJNE@R0,#00H,NEXT;比较查找值与指针所指单元的值,不相等转移INCR6;相等,0的个数计数器加1NEXT:INCR0;修改地址指针MOV50H,R6;保存O的个数计数值到50H单元SJMP$;暂停ENDENDHORL17H,AXRLA,@R0CPLAENDANLA,#17H;A=03HORL17H,A;(17H)=00110100∨00000011=00110111XRLA,@R0;A=00000011∨00110111=00110100CPLA;A=11001011MHzus周期数来达到,如果要为0.1秒的子程序调用10次来实现。DELAY100MS:MOVR6,#200;1个机器周期D1:MOVR7,#250;1个机器周期D2:NOP;1个机器周期DELAY1S:MOVR7,#10;计数10次1LOOP:ACALLDELAY100MS;延时100ms子程序99795+2DJNZR7,LOOP;未达到10次则继续10*(2+99795+2)RET;返回2+10*(2+99795+2)=997992RAMH单元开始处有一数据块,以ODH为结束标志,试统计该数据块的长度,将该数据块送到外部数据存储器7E01H开始的单元,并将长度存入7E00H单元。计数器赋初值MOVR0,#20H;设片内RAM地址指针初值MOVDPTR,#7E01H;设片外RAM地址指针初值CONT:MOVA,@R0;取片内RAM中的一个字节MOVX@DPTR,A;存入片外RAM指针所指单元INCR7;长度计数器加1INCR0;片内RAM地址指针加1INCDPTR;片外RAM地址指针加1CJNEA,#0DH,CONT;未达到结束标志MOVA,R7;取块计数长度值MOVX@DPTR,A;保存SJMP$;暂停END9.内部RAM从DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1单元。ORG0000HLJMPMAINORG100HSUMEQU30HDATAAEQU40HMAIN:MOVR7,#10;字节计数器赋初值MOVR0,#DATAA;设片内RAM地址指针初值CLRA;累加器清0MOVR6,A;累加结果的高8位CONT:ADDA,@R0;加RAM中的一个字节到ACCDAAJNCNEXT;若无进位则不用管高8位INCR6;有进位,高8位加1NEXT:INCR0;片内RAM地址指针加1DJNZR7,CONT;未完继续MOVSUM,A;保存低8位MOVSUM+1,R6;保存高8位SJMP$;暂停ENDATALEN单元中。请编程检查这两个数据块是否相等,若相等,将0FFH写入RESULT单元,否则将0写入RESULT单元。解:从DATA1开始的指针用R0,从DATA2开始的指针用R1,计数器用R7LENEQU10DATA1EQU30HDATA2EQU40HRESULTEQU50HMOVR7,#LEN;字节计数器赋初值MOVR0,#DATA1;设片内RAM地址指针初值MOVR1,#DATA2;设片外RAM地址指针初值CONT:MOVA,@R0;取片内RAMR0所指的的一个字节MOV7FH,@R1;将R1所指单元内容取到片内RAM地址7FH中CJNEA,7FH,NOEQ;比较,不相INCR0;DATA1RAM地址指针加1INCR1;DATA2RAM地址指针加1DJNZR7,CONT;未完,继续MOVA,#0FFH;相等,准备写入FFHSJMPDOWN;转写入结果处NOEQ:MOVA,#0;不相等,准备写入00HDOWN:MOVRESULT,A;保存比较结果标志SJMP$;暂停END并把和存入RO和R1(R0中为高8位)中。M1EQU30HM2EQU40HM3EQU45HM4EQU4FHMOVA,M1;取第一个数ADDA,M2;与第二个数相加JNCNEXT1;如果无进位,则转移至第三个相加MOVR0,#1;有进位,高8位置1NEXT1:ADDA,M3;与第三个数相加JNCNEXT2;没有进位,则转至第四个数相加INCR0;有进位,高8位加1NEXT2:ADDA,M4;与第四个数相加JNCNEXT3;没有进位,则转至结束INCR0;有进位,高8位再加1NEXT3:MOVR1,A;低8位保存到R1SJMP$;暂停END第4章单片机的C51语言习题.C语言,学习比低级容易,不需要具体组织、分配存储器资源和处理端口数据,可以直接驱动单片机的所有资源。C程序以函数为单位,由一个主函数和若干个其他函数构成,主函数是程序的入口,其他函数由[存储种类]数据类型[存储类型]变量名数据类型除了包含标准C语言类型的字符型(char),整型(int),长整型(long),浮点型(float),双精存储类型包括:片内RAM区(data)、片内可位寻址区(bdata),片内RAM间接寻址区(idata),片外RAM页寻址区(pdata),片外RAM区(xdata)、ROM区(code)。CS而且有多种寻址方式(直接寻址、间接寻址、页面寻址、位寻址)所致,所以在定义变量时,要根据其所在位置和寻址方式明确指定存储类型。汇编指令无关,易于掌握,上手快。可根据需要对要求时间性很强的代码用汇编语言编写,其它部分用C语言编写,两者混合编程就可以实现优势互补。4.指出下面程序的语法错误:#include<reg51.h>main(){inta=7,Cdelay(10)voiddelay();{ifor(i=O;i<=255;”++”);}#include<reg51.h>main(){inta=7,C//缺分号,应该提在使用前说明delay(10)//延时子程序必须先定义,或先有函数原型说明voiddelay();{//作为函数定义,有函数定义不能嵌套的问题,.//即不能在一个函数内定义另一个函数,而且“{”前不应有分号//作为函数原型说明,应该放在函数调用之前,且其后不应该接函数体for(i=O;i<=255;”++”);//”++”应改成i++}//主函数没有结束,缺”}”floatxdatab;intxdata*c;6.编程将8051的内部数据存储器20H单元和35H单元的数据相乘,结果存到外部数据存储器解:方法一:用嵌入式汇编语言实现#include<reg51.h>voidmain()agmaasmMOVA,20HMOVB,35HMULABMOVDPTR,#1234HMOVX@DPTR,AINCDPTRMOVA,BMOVX@DPTR,A#pragmaendasm}方法二:单用C语言编程实现#include<reg51.h>#include<math.h>intmovdata(char);voidmain(){unsignedintxdatax;unsignedchar*ptr,a,b;ptr=0x25;a=*ptr;ptr=0x30;b=*ptr;x=a*b;}效数字),将平方根放到30H单元为首址的内存中。解:方法一:用C语言与汇编语言混合编程实现.//用C语言编写的主函数MAIN.C#include<reg51.h>#include<math.h>chargetdata(char);voidmain(){chara=0x25,c;floatf;c=getdata(a);f=sqrt(c);}PUBLIC_GETDATADESEGMENTCODERSEGDE_GETDATA:MOVA,R7;取地址参数MOVR0,AMOVA,@R0MOVR7,A;返回地址单元中的内容EXIT:RETEND方法二:单用C语言编程实现//MAIN.C#include<reg51.h>#include<math.h>intmovdata(char);voidmain(){arnchar*ptr;float*ptr2;floatf;ptr=0x25;n=*ptr;f=sqrt(n);ptr2=0x30;*ptr2=f;}语言与汇编语言混合编程//用C语言编写的主函数MAIN.C#include<reg51.h>charmovdata(char,char);.voidmain(){chara=0x10,b=0x06;movdata(a,b);}在R5中为字节数PUBLIC_MOVDATADESEGMENTCODERSEGDE_MOVDATA:MOVA,R7;取参数MOVR0,ALOOP:MOVXA,@R0MOV@R0,ADJNZR5,LOOPEXIT:RETEND方法二:单用C语言编程实现//MAIN.C#include<reg51.h>intmovdata(char);voidmain(){charn=6;char*ptr1=0x10;charxdata*ptr2;ptr2=0x20;while(n--){*ptr2++=*ptr1++;}}9.内部RAM20H、21H和22H、23H单元分别存放着两个无符号的16位数,将其中的大数置于24H和25H单元。oidmain{unsignedint*ptr;//设置一个内部RAM指针unsignedintx,y,z;ptr=0x20;//指向0x20单元x=*ptr;//取第一个数ptr=0x22;//指向0x22单元y=*ptr;//取第二个数z=(x>y)?x:y;//将两数中的较大者赋给z.ptr=0x24;//指向地址为0x24的目标单元*ptr=z;//将大数存入目标单元}#include<reg51.h>#include<absacc.h>voidmain(){unsignedintx,y,z;x=DBYTE[0X20]*256+DBYTE[0X21];y=DBYTE[0X22]*256+DBYTE[0X23];z=(x>y)?x:y;//将两数中的较大者赋给zDBYTE[0X24]=z/256;DBYTE[0X25]=z%256;}#include<reg51.h>unsignedintx_at_0x20;unsignedinty_at_0x22;unsignedintz_at_0x24;voidmain(){z=(x>y)?x:y;}第4章单片机的C51语言习题C语言,学习比低级容易,不需要具体组织、分配存储器资源和处理端口数据,可以直接驱动单片机的所有资源。C程序以函数为单位,由一个主函数和若干个其他函数构成,主函数是程序的入口,其他函数由2.C51语言的变量定义包含哪些关键因素?为何这样考虑?[存储种类]数据类型[存储类型]变量名度型(double)外,还有二进制位型(bit),特殊功能寄存器型(sfr),SFR可位寻址的位类型(sbit)。存储类型包括:片内RAM区(data)、片内可位寻址区(bdata),片内RAM间接寻址区(idata),片外RAM页寻址区(pdata),片外RAM区(xdata)、ROM区(code)。CMCS1单片机的存储结构中有四个物理存储空间(片内RAM、片内ROM,片外RAM,片外ROM),三个逻辑地址位寻址)所致,所以在定义变量时,要根据其所在位置和寻址方式明确指定存储类型。.答:C51是结构化语言,代码紧凑;接近自然语言,程序可读性强,易于调试、维护;库函数丰汇编指令无关,易于掌握,上手快。比较#include<reg51.h>main(){inta=7,Cdelay(10)voiddelay();{ifor(i=O;i<=255;”++”);}#include<reg51.h>main(){inta=7,C//缺分号,应该提在使用前说明//作为函数定义,有函数定义不能嵌套的问题,//作为函数原型说明,应该放在函数调用之前,且其后不应该接函数体for(i=O;i<=255;”++”);//”++”应改成i++}//主函数没有结束,缺”}”5.定义变量a,b,c,其中a为内部RAM的可位寻址区的字符变量,b为外部数据存储区浮点floatxdatab;intxdata*c;6.编程将8051的内部数据存储器20H单元和35H单元的数据相乘,结果存到外部数据存储器解:方法一:用嵌入式汇编语言实现#include<reg51.h>voidmain()agmaasmMOVA,20H.MOVB,35HMULABMOVDPTR,#1234HMOVX@DPTR,AINCDPTRMOVA,BMOVX@DPTR,A#pragmaendasm}方法二:单用C语言编程实现#include<reg51.h>#include<math.h>intmovdata(char);voidmain(){unsignedintxdatax;unsignedchar*ptr,a,b;ptr=0x25;a=*ptr;ptr=0x30;b=*ptr;x=a*b;}效数字),将平方根放到30H单元为首址的内存中。解:方法一:用C语言与汇编语言混合编程实现//用C语言编写的主函数MAIN.C#include<reg51.h>#include<math.h>chargetdata(char);voidmain(){chara=0x25,c;floatf;c=getdata(a);f=sqrt(c);}PUBLIC_GETDATADESEGMENTCODERSEGDE_GETDATA:MOVA,R7;取地址参数MOVR0,A.MOVA,@R0MOVR7,A;返回地址单元中的内容EXIT:RETEND方法二:单用C语言编程实现//MAIN.C#include<reg51.h>#include<math.h>intmovdata(char);voidmain(){arnchar*ptr;float*ptr2;floatf;ptr=0x25;n=*ptr;f=sqrt(n);ptr2=0x30;*ptr2=f;}解:方法一:采用C语言与汇编语言混合编程//用C语言编写的主函数MAIN.C#include<reg51.h>charmovdata(char,char);voidmain(){chara=0x10,b=0x06;movdata(a,b);}在R5中为字节数PUBLIC_MOVDATADESEGMENTCODERSEGDE_MOVDATA:MOVA,R7;取参数MOVR0,ALOOP:MOVXA,@R0MOV@R0,ADJNZR5,LOOPEXIT:RETEND方法二:单用C语言编程实现//MAIN.C#include<reg51.h>intmovdata(char);voidmain(){charn=6;char*ptr1=0x10;charxdata*ptr2;ptr2=0x20;while(n--){*ptr2++=*ptr1++;}}9.内部RAM20H、21H和22H、23H单元分别存放着两个无符号的16位数,将其中的大数置于24H和25H单元。oidmain{unsignedint*ptr;//设置一个内部RAM指针unsignedintx,y,z;ptr=0x20;//指向0x20单元x=*ptr;//取第一个数ptr=0x22;//指向0x22单元y=*ptr;//取第二个数z=(x>y)?x:y;//将两数中的较大者赋给zptr=0x24;//指向地址为0x24的目标单元*ptr=z;//将大数存入目标单元}#include<reg51.h>#include<absacc.h>voidmain(){unsignedintx,y,z;x=DBYTE[0X20]*256+DBYTE[0X21];y=DBYTE[0X22]*256+DBYTE[0X23];z=(x>y)?x:y;//将两数中的较大者赋给zDBYTE[0X24]=z/256;DBYTE[0X25]=z%256;}#include<reg51.h>unsignedintx_at_0x20;.unsignedinty_at_0x22;unsignedintz_at_0x24;voidmain(){z=(x>y)?x:y;}第5章单片机的中断系统习题答:中断是指单片机内部有一个中断管理系统,它对内部的定时器事件、串行通信的发送和接收及外部事件(如键盘按键动作)等进行自动的检测判断。当CPU正在处理某件事情(例如正在执行主程序)的时候,外部或内部发生的某一事件(如某个引脚上电平的变化,一个脉冲沿的发生或计数器的计数溢出等)请求CPU迅速处理,于是,中断管理系统会置位相应标志通知CPU暂时中止当前这样的过程称为中断。将中断事件按轻重缓急分若干级别叫中断优先级。允许中断优先级高的中断源中断正在执行的低优先级的中断服务程序叫中断嵌套。答:中断源即引发中断的事件。外部中断源是由引脚的触发信号引起的中断,定时器中断源是由于定时器计数器的溢出引发的中断,串行口是由于串行通信的发送或接收引发的中断。(4)无同级或者更高级中断正在服务MCS是怎样的?(2)由硬件清除相应的中断请求标志,串行口的发送和接收中断除外;程序的入口地址送入PC;编写出外部中断1为下跳沿触发的中断初始化程序。voidInt1_init(){IT1=1;EA=1;EX1=1;//IE=0x84;//IE|=0x84;}元开始的50个字节的数据块传送到外部RAM从1000H开始的连续存储区。请编写对应的程序。#include<reg51.h>.voidmain(){IT0=1;EA=1;EX0=1;while(1);}voidintx0()interrupt0using1{char*ptr1=0x30;charxdata*ptr2=0x1000;for(i=0;i<50;i++)*ptr2++=*ptr1++;}处理,请编写,T0的初始化程序及中断服务程序。s#include<reg51.h>sbitP1_1=P1^1;voidtimer0()interrupt1using1{P1_1=!P1_1;}voidmain(){P1_1=0;TMOD=0x02;TH0=56;TL0=56;IE=0x82;TR0=1;for){}}8.设fosc=6MHz,要求每隔50ms,从内部RAM以30H开始的数据存储区传送一个字节数据到数据传送在中断服务程序中完成。解:fosc=6MHz,机器周期=12/6*10-6S=2us,T1工作在方式2时,最大定时时间为512us,要定时50ms,可以计数100次,每次定时500us来实现,方式2定时500us需计数250次,故其时间常数为256-250=6。includereg51.h>rintcntcharmovcntcharptr0x30;charxdata*ptr2=0x2000;voidtimer1()interrupt3using1{intcnt++;.if(intcnt==100){if(mocnt<50){*ptr2++=*ptr1++;movcnt++;}elseEX1=0;intcnt=0;}}voidmain(){TMOD=0x20;TH1=6;TL1=6;IE=0x84;TR1=1;for){}}9.805l单片机只有两个外部中断源,若要扩展成8个外部中断源,请画出实现这种扩展的硬件线路图,并说明如何确定各中断源的优先级。有中断请求时,借助于P2口识别是这七个中断源是哪个请求中断,为了验证正确性,如果是INT0.中断,则在P0口的数码管上显示0,是INT1中断,则根据从上到下是哪个中断源在P0口的数码管#include<reg51.h>charled_mod[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07};voidINT0_srv(void)interrupt0using1//外部中断0处理程序{P0=led_mod[0];}voidINT1_srv(void)interrupt2using2//外部中断1处理程序{charintnum;intnum=P2;switch(intnum){case0xfe:P0=led_mod[1];break;case0xfd:P0=led_mod[2];break;case0xfb:P0=led_mod[3];break;case0xf7:P0=led_mod[4];break;case0xef:P0=led_mod[5];break;case0xdf:P0=led_mod[6];break;case0xbf:P0=led_mod[7];}}voidmain(){EA=1;EX0=1;EX1=1;P0=0;while(1);}第6章单片机的定时器/计数器习题1.MCS-51系列的8051单片机内有几个定时/计数器?每个定时/计数器有几种工作方式?如何答:MCS-51系列的8051单片机内有2个定时/计数器,即T0和T1,每个都可以编程为定时器T、方式3-两个8位),T1有三种工作方式(与T0相同的前三种),通过对TMOD的设置选择,其高四位选择T1,低四位选择T0。TO答:如果采用的晶振频率为3MHz,机器周期为12×1/(3*106)=4us,由于定时/计数器TO工作在方式0、1和2时,其最大的计数次数为8192、65536和256所以,其最大定时时间分别是:方式0为8192×4us=32.768ms、方式1为65536×4us=262.144ms、方式2为256×4us=1024us。计数器TO作为计数器使用时,是对外部引脚输入的脉冲进行计数,CPU在每个机器周期采样一次fosc,则其采样频率fosc/12,两次采样才能决定一次计数有效,所以计数频率不能超过fosc/24。4.简单说明定时/计数器在不同工作模式下的特点。.答:方式0为13位的定时/计数器,由THx的8位和TLx的低5位构成、方式1为16位的定时为计数初值寄存器。方式3只能用于T0,是将T0的低8位用作一个独立的定时/计数器,而高8位的TH0用作一个独立的定时器,并借用T1的TR1和TF1作为高8位定时器的启停控制位和溢出标答:定时器工作在方式2时是一个可自动装入时间常数初值的8位定时/计数器,TLx为加1计数器,THx为计数初值寄存器。由于其恢复初值由硬件自动完成,所以当需要反复计数时,用方式2可以方便地实现精确的定时。答:一个定时器的定时时间有限,可采用两个定时器的串行定时来实现较长时间的定时,比如,计数器按方式1进行溢出次数计数,在定时器溢出中断时,给计数器发一个计数脉冲,且两者均为方式一,则两者串行可达到的定时时间为65536×65.536ms=4294967.296ms。7.设MCS-51单片机的晶振频率为12MHz,请编程使P1.O端输出频率为20kHz的方波。foscMHzuskHz的方波周期为1/(20×1000)=50us,方波即高电O方法一:采用查询方式实现#include<reg51.h>sbitP1_0=P1^0;//定义输出引脚变量voidmain(){P1_0=0;//输出初值为0TMOD=0x02;//T0方式2定时TH0=256-25;//计25次,计数初值为模256减25TL0=TH0;TR0=1;//启动T0while(1)//无限循环if(TF0){//查询T0溢出标志TF0=0;//溢出标志复位P1_0=!P1_0;//输出求反}}方法二:采用中断方式实现#include<reg51.h>sbitP1_0=P1^0;//定义输出引脚变量voidmain(){P1_0=0;//输出初值为0TMOD=0x02;//T0方式2定时TH0=256-25;//计25次,计数初值为模256减25TL0=TH0;TR0=1;//启动T0for(;;){}//无限循环等待中断.}timer0()interrupt1using1{P1_0=!P1_0;//输出求反}定时1ms后,又转为计数方式,如此循环不止。假定MCS-5l单片机的晶体振荡器的频率为6MHz,要求T0工作在方式1状态,请编写出相应程序。6解:晶体振荡器的频率为6MHz,则机器周期为12×1/(6*10)=2us,要定时1ms,需计数次数为1000/2=500次#include<reg51.h>sbitP1_0=P1^0;voidmain(){while(1){TMOD=0x05;//T0计数,方式一TH0=(65536-100)/256;//计数100次TL0=(65536-100)%256;TR0=1;while(!TF0);//等待计数100次的溢出TF0=0;//溢出标志复位TMOD=0x01;//T0定时,方式一TH0=(65536-500)/256;//计数100次TL0=(65536-500)%256;TR0=1;//启动T0while(!TF0);//等待定时时间到1ms的溢出TF0=0;//溢出标志复位}}foscMHzPOP别输出周期为1ms和lOms的方波,请用定时器TO方式2编程实现。要使P1.0输出周期为1000us的方波,可以通过定时中断方式实现,定时时间为250us,定时计数2次来实现,对P1.0求反即可。要使P1.1输出周期为10ms的方波,也可以通过定时中断方式实现,定时时间为5ms,当时间到时,对P1.1求反即可。由于5ms/250us=20,所以也可以通过对250us的定时计数20次来实现。程序#include<reg51.h>sbitP1_0=P1^0;//输出周期为400us的方波的引脚sbitP1_1=P1^1;//输出周期为10ms的方波的引脚unsignedcharnum1=0,num2=0;//中断次数计数器,初值为0voidmain(){P1_0=0;//输出初值为0P1_1=0;//输出初值为0TMOD=0x02;//T0方式2定时TH0=256-250;//计200次,计数初值为模256减200TL0=TH0;IE=0x82;//允许CPU响应中断,允许T0发中断请求TR0=1;//启动T0for(;;){}//无限循环等待中断}voidtimer0()interrupt1using1{num1++;num2++;//中断次数加1if(num1==2)//中断次数达到2次{P1_0=!P1_0;//输出P1_0求反num1=0;//中断次数复位为0}if(num2==20){//中断次数达到20次num2=0;//中断次数复位为0P1_1=!P1_1;//输出P1_1求反}}10.编写程序,要求使用TO,采用方式2定时,在P1.0输出周期为400us占空比为10:1的矩形us个周期中断10次为400us,在中断计数为1和2(或任意两次计数之间)时,对P1.0求反即可。#include<reg51.h>sbitP1_0=P1^0;//输出周期引脚unsignedcharcnt=0;//中断次数计数器,初值为0voidmain(){P1_0=0;//输出初值为0TM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年南涧彝族自治县带编教师招聘笔试备考试题及答案解析
- 2026年连南瑶族自治县带编教师招聘笔试备考试题及答案解析
- 2026年昆山开发区晨曦中学公开招聘第四批编外工作人员2人笔试参考题库及答案详解
- 2026年光山县带编教师招聘笔试备考试题及答案解析
- 2026年多伦县带编教师招聘笔试参考题库及答案解析
- 2026年浠水县带编教师招聘笔试备考试题及答案解析
- 2026年红安县带编教师招聘笔试模拟试题及答案解析
- 2026年工匠精神考试试题及参考答案
- 2026年城固县带编教师招聘笔试备考试题及答案解析
- 2026年新昌县带编教师招聘考试参考题库及答案解析
- (完整版)水电、风电效益测算分析表
- 盒马鲜生述职升职报告
- 剑桥英语三年级下册单词表
- 公共营养师基础知识
- 2025年江苏苏州市常熟高新技术产业开发区招商公司招聘笔试参考题库附带答案详解
- 浙江住宅工程质量常见问题控制标准2022年
- JT-T-769-2009公路工程聚羧酸系高性能减水剂
- 安全工程专业导论
- 03G372 钢筋混凝土雨篷
- 房屋建筑学 教学知识
- 机械制造技术基础-张世昌-第1章-机械制造技术概论
评论
0/150
提交评论