下载此文档

单片机原理与C51语言程序设计与基础教程课后习题答案.pdf


文档分类:IT计算机 | 页数:约26页 举报非法文档有奖
1/26
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/26 下载此文档
文档列表 文档介绍
该【单片机原理与C51语言程序设计与基础教程课后习题答案 】是由【青山代下】上传分享,文档一共【26】页,该文档可以免费在线阅读,需要了解更多关于【单片机原理与C51语言程序设计与基础教程课后习题答案 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。:..,微型计算机包括、、、四个基本组成部分。。以为核心的硬件电路称为单片机系统,它属于地应用范畴。,具有内核,用代替ROM作为程序存储器,、和三种。民用级的温度范围是0℃一70℃,工业级是-40℃~85℃,军用级是-55℃-125℃(不同厂家的划分标推可能不同。,ICE的含义是。?,它具有如下特点:A具有优异的性能价格比B集成度高、体积小、可靠性高C控制功能强,开发应用方便D低电压、低功耗。:A-40℃~85℃B0℃一70℃C-55℃-125℃D0℃一50℃-51系列单片机最多有个中端源。???分别由什么用处?、控制器、存储器、输入输出接口1页:..-(商业级)、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴:(1)在智能仪器仪表上的应用单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。(2)在工业控制中的应用用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。(3)在家用电器中的应用可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。(4)在计算机网络和通信领域中的应用现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。(5)单片机在医用设备领域中的应用单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。,大概了解单片机的机构,例如本书的第2章则是主要讲了单片机的内部结构以及资源。对单片机的内部结构有了初步了解之后,读者就可以进行简单的实例练****从而加深对单片机的认识。其次,要有大量的实例练****其实,对于单片机,主要是软件设计,也就是编程。目前最流行的用于51系列单片机地编程软件是Keil。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。2页:..第三,要多结合外围电路,如流水灯、数码管、独立键盘、矩阵键盘、AD或DA(原理一样)、液晶、蜂鸣器进行练****因为,这样可以直观的看到程序运行的结果,当然,我们也可以用proteus这个软件对硬件进行仿真,这样也可以直观的看到结果。在实际学****过程中,可以根据自己的项目需求去选择,从而减少了学****周期。最后,就是结合自己的实际情况,开发一个完全具有个人风格,功能完善的电子产品,尽情享受单片机带来的欢乐和成就感。同时,不必为软件、硬件基础知识不扎实而烦恼,单片机中用到的编程语言很简单,可以说主要是配置一些寄存器,不涉及太复杂的算法和语法,电子元器件也以简单应用居多,本书接下来的几章将主要介绍硬件和软件基础知识,这些对于单片机开发来说基本已经够用了。另一方面,在做单片机实验的过程中会慢慢地积累、一步步地巩固相关的基础知识,在实践中有针对性的学****肯定比纯粹地看书效果更好。所以,完全不必担心你的基础不够扎实。。专用型单片机是为某种专门用途而设计的,如DVD控制器和数码摄像机控制器芯片等。在用量不大的情况下,设计和制造这样的专用芯片成本很高,而且设计和制造的周期也很长。我们通常所用的都是通用型单片机,通用型单片机把所有资源(如ROM、I/O等)全部提供给用户使用。当今通用型单片机的生产厂家已不下几十家,种类有几百种之多。~。即1、外部中断02、定时中断03、外部中断14、定时中断15、,是指CPU在正常运行程序时,由于内部/外部事件或由程序预先安排的事件,引起CPU中断正在运行的程序,而转到为内部/外部事件或为预先安排的事件服务的程序中去,服务完毕,再返回去执行波暂时中断的程序。中断响应的过程如下:(1)保护断点,即保存下一将要执行的指令的地址,就是把这个地址送入堆栈。(2)寻找中断入口,根据6个不一样的中断源所产生的中断,查找6个不一样的入口地址。,编译器在这些地址放入无条件转移指令,跳转到服务程序的实际地址。。以上工作是由计算机自动完成的,与编程者无关。3页:..(3)执行中断处理程序。(4)中断返回:执行完中断指令后,就从中断处返回到主程序,继续执行。,又可作地址/数据总线使用;P1口是一个准双向并行口,作通用并行I/O口使用;P2口除了可作为通用I/O使用外,还可在CPU访问外部存储器时作高八位地址线使用;P3口是一个多功能口除具有准双向I/O功能外,还具有第二功能。(LIFO)的线性表,使用单片机内部RAM单元存储一些需要回避的数值数据或地址数据。堆栈好像堆放货物的仓库一样,存取数据时采用“后进先出”(即“先进后出”)的原则。堆栈指针SP是用来存放当前堆栈栈顶指向的存储单元地址的一个8位特殊功能寄存器,地址是81H。堆栈只有两种操作:入栈和出栈。不论数据是入栈还是出栈,都是对栈顶单元(SP指向的单元)进行操作的。堆栈是向上生成的。入栈时SP内容是增加的,出栈时SP的内容是减少的。堆栈区域的大小可用软件对SP重新定义初值来改变,但堆栈深度以不超过片内RAM空间为限。系统复位后,SP的值为07H,若不重新定义,则以07H单元为栈底,入栈的内容从地址为08H单元开始存放。堆栈主要是为子程序调用和中断操作而设立的,常用的功能有两个:保护断点和保护现场。在单片机系统中,既有与子程序调用和中断调用相伴随的自动入栈和出栈,又有堆栈的入栈和出栈指令(PUSH和POP)。此外,堆栈还具有传递参数等功能。第3章答案1立即寻址寄存器寻址间接寻址直接寻址变址寻址相对寻址位寻址2累加器APCDPTR300H,0,0,0,04指令5一二三6转移指令的PC值加上它的字节数7DPH=3CH,DPL=5FH,SP=4FH选择题1C2C3A4D5C问答题1(1)分析问题:首先必须明确求解问题的意义和任务。对项目背景和要完成的任务进行详细地了解和分析,将一个实际的问题转化为单片机可以处理的问题。(2)确定算法:根据实际问题的要求和指令系统的特点,决定所采用的计算公式和计算方法。这是正确编程的基础,比程序设计语言本身更为重要。(3)绘制框图:根据所选定的算法,制定出运算步骤和顺序,把运算过程画成程序框图。这样使程序清晰,结构合理,便于调试。(4)分配资源:要根据程序区、数据区、暂存区、堆栈区等预计所占空间大小,对片内外存储区进行合理分配并确定每个区域的首地址,便于编程使用。(5)编写程序:编写程序就是采用汇编语言来实现上面已确定的算法,也即是将由人类自然语言组织的程序框图转化为计算机语言组织的源代码。(6)仿真调试:利用单片机各种开发工具对所编写的程序进行测试,检验程序是否完成了指4页:..定的功能。测试过程要尽可能仔细,保证程序中的各条支路都得到了检验。(7)软件优化:在完成指定功能的基础上,进行程序优化,以进一步缩短程序量、减少运算时间和节省工作单元。(8)状态固化:完成前期工作之后,将程序烧录到EEPROM等程序存储器上,保证单片机系统每次上电后都能正确运行程序。(9)文档说明:将程序的功能和使用方法,程序的基本结构和所采用的主要算法以及程序必要说明和注意事项等问题整理成一个文档,不仅便于用户使用,而且便于对程序的维护和扩充。2.(1)bit位标量:利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。它的值是一个二进制位,不是0就是1,类似一些高级语言中的Boolean类型中的True和False。(2)sbit可寻址位:利用它能定义内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。(3)sfr特殊功能寄存器:利用它能定义8051系列单片机内部的所有特殊功能寄存器,(4)sfr16特殊功能寄存器:sfr16和sfr一样用于操作特殊功能寄存器,所不一样的是它用于操作占两个字节的寄存器,如定时器T0和T1。,然后在这个基础上再加上地址偏移量,形成真正的操作数地址,需要特别指出的是用来作为基础的寄存器可以是PC或是DPTR,地址偏移量存储在累加器A中。相对录址相对寻址主要是针对跳转指令而言的。对于跳转指令,跳转去的目标指令的地址是通过正在执行的指令地址来确定的,一般是采用正在执行的指令地址加上偏移量的方式。即:转移目的地址=当前值+相对偏移量rel。偏移量可以是正也可以是负,偏移量是采用有符号数的存储形式即补码的形式来存储的。位寻址位寻址方式是指将要访问的数据是一个单独的位,指定位数据的方式有:通过位地址、通过字节地址加点及位数、通过寄存器名加点及位数、通过位的名称。)SP=SP+1=61H(61H)=PC的低字节=03HSP=SP+1=62H(62H)=PC的高字节=20H2)PC=3456H3)可以4)2KB=,30H,、,45HANLA,#0FHORLA,#0FHMOV45H,:MOVR0,#30HMOVR2,#20HLOOP:MOVA,***@R05页:..CJNEA,#0AAH,NEXTMOV51H,#01HLJMPEXITNEXT:INCR0DJNZR2,LOOPMOV51H,#00HEXIT:RET0000HLJMPMAIN;跳转到主程序中MAIN:MOVA,30HADDA,40HMOV40H,A;最低字节加法并送结果MOVA,31HADDCA,41HMOV41H,A;第二字节加法并送结果MOVA,32HADDCA,42HMOV42H,A;第三字节加法并送结果MOVA,33HADDCA,43HMOV43H,A;第四字节加法并送结果,#SerialWindow#(MHz)、,一个单片机软件开发的过程是这样的:(1)建立工程;(2)设置工程;(3)建立C源文件;(4)编译、连接;(5)调试;6页:..(6)运行。,全速执行,在线汇编,断点设置等方法。(IDE:IntegratedDevelopmentEnvironment)uVision,它包括c编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器。这样在开发应用软件的过程中,编辑、编译、汇编、连接、调试等各阶段都集成在一个环境中,先用编辑器编写程序,接着调用编译器进行编译,连接后即可直接运行。这样避免了过去先用编辑器进行编辑,然后退出编辑状态进行编译,调试后又要调用编辑器的重复过程,因此可以缩短开发周期。。。一般的应用程序中,此标签页的属性全部采用默认值。本例全部采用默认值。各主要属性的含义简要说明如下:(1)PreprocessorSymbols:用于设定C51编译器预处理命令符号,在“Define”处可直接键入需要处理的符号。(2)CodeOptimization:用于设置C51编译器的代码优化。通过“Level”栏可以设定0-11级优化级别,其中10、11级别只有在复选框“LinkerCodePacking”被选中的情况下才能选用;通过“Emphasis”栏可以设定两种优化方式;选中复选框“GlobalRegisterColoring”时将为全局寄存器优化规定一个寄存器文件;选中复选框“LinkerCodePacking”将对生成代码进行跳转优化;选中复选框“esses”将不使用局对寄存器访问;通过“Warning”栏可以设定0-2级警告;通过“Bitstoroundforfloat”栏可以设定浮点数比较运算时的舍入位数;复选框“Interruptvectorsat”用于设定中断向量基地址。(3)IncludePaths:用于直接输入包含文件的目录地址路径。也可以通过按下该栏右边的按钮,通过弹出的搜寻窗口来确定包含文件的目录地址路径。(4)ontrols:用于输入其他各种C51的控制命令。(pilercontrolstring:用于显示所有已设定的C51编译器控制命令。,选择,(再用)(10)后加一个分号,main函数少一个},程序如下:#include<>main(){a=c;7页:..inta=8,c;delay(10);}voiddelay(){charI;for(i=0;i<=255;i++);}2.#include<>voiddelay02s(void)//延时子程序{unsignedchari,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}voidmain(void){unsignedchara;for(;;){P1=0FH;//将值送到P1口delay02s();P1^=P1;delay02s();}}3.#include<>voiddelay02s(intn)//延时子程序{unsignedchari,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=n;k>0;k--);}voidmain(void){unsignedchara;intt=0;for(;;){while(a<=255)//自加运算控制{8页:..P1=a;//将值送到P1口delay02s(t++);a++;}a--;//溢出恢复前一值while(a>=0)//自减运算控制{P1=a;delay02s(t++);a--;}a++;if(t==25500)t=0;//溢出恢复前一值}}。、:主程序模块,程序清单如下:#include<>voiddelay4ms(void);sbitP2-1=P2^1;voidmain(void){uchari;for(;;){P2_1=0;delay4ms();P2_1=1;delay4ms();}}模块2:C语言延时模块,调用了汇编延时模块,程序如下:9页:..#include<>#defineucharunsignedcharsbitP2-0=P2^0;delaylms(ucharx);/*定义延时1ms函数(模块三)*/voiddelay4ms(void){P2-0=0;delaylms(2);/*调汇编函数(模块三)*/P2-0=1;delaylms(2);/*调汇编函数(模块三)*}模块3:汇编延时模块,程序如下:PUBLIC_DELAY1MS;DELAY1MS为其他模块调用DESEGMENTCODE;定义DE段为再定位程序段RSEGDE;选择DE为当前段_DELAY1MS:NOPDELA:MOVR1,#0F8H;延时LOP1:NOPNOPDJNZR1,LOP1DJNZR7,DELA;R7为C程序传递过来的参数(x=2)EXIT:/、PC、=0x90;main(){inti;10页:..P1=0xf0;while(1){P1=~P1;for(i=0;i<5000;i++);}}int0()interrpt0{P1=P1<<10x01;}main(){P1=-xfe;EA=1;EX0=1;IT0=1;}sbitp3_2=P3^2;main(){unsingedchar*P,i;inta;P=0x50;TMOD=0x09;TL0=0;TH0=0;while(P3_2==1);T00=1;while(P3_2==0);while(P3_2==1);TR0=0;i=TH0;a=i*256+TL0;for(;a!=0;){*P=a%10;a=a/10;P++;*P=a;}}:..#8255XBYTE[0X7FFF]#defineA8255XBYTE[0X7FFF]main(){unsignedint;COM8255=0X80;A8255=0XF3;while(1){COM8255=0X0;for(j=0;j<=10000;j++);COM8255=0X01;for(j=0;j<=10000;j++);}}-2#defineucharunsignedchar#defineuintunsignedint#8253XBYTE[0X8003]#defineC1XBYTE[0X8000]#defineC2XBYTE[0X8001]#defineC3XBYTE[0X8002]#defineSNUM1sbitP1_7=P1^7;ucharit=20;ucharsn=SNUM;uintidataBUF8253[3];voidusto()12页:..{TMOD=TMOD&0XF0+0X01;TH0=0X4C;TL0=0X81;TR0=1;ET0=1;EA=1;p1_7=1;}voidtoi(void)interrupt1{TH0=0X4C;TL0=0X81;if((--it)==0){it=20;sn-=1;}}voidcbfp(po,x)ucharxdata*po;ucharxdata*po;ucharx;{ucharh,l;l=*po;po++;po--;h=*po;BUF8253[x]=-(j*256+1);}voidfcbf(){P1_7=0;COM8253=0X0A;COM8253=0X4A;COM8253=0X8ACOM8253=0X0A;cbfp(&C1,0);COM8253=0X4A;cbfp(&C2,1);COM8253=0X8A;cbfp(&C3,2);}voidinit8253(void){COM8253=0X3A;C1=0;C1=0;COM8253=0X7A;13页:..C2=0;C2=0;COM8253=0XBA;C3=0;C3=0;}voidmain(){init8253();usto();while(sn);fcbf();}..#include<>#defineucharunsignedchar#defineuintunsignedintuintj,k;uchari;chartable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//定义流水灯main(){TMOD=0X20;//定时器初始化TH1=;TL1=;//设定波特率TR1=1;//无限循环执行一下发送和接收语句SCON=0x50;//允许接收P1=0xff;//所有led灭while(1)14页:..{TI=0;//TI清零for(i=0;i<8;i++)//流水灯{SBUF=table[i];//发送数据while(RI==0);//RI=0等待RI=0;//RI清零P1=SBUF;//接收数据并送P1口while(TI==0);//TI=0等待TI=0;//TI清零for(j=0;j<1000;j++)//延时for(k=0;k<100;k++);}if(i==8)i=0;//只有8个灯}}2.//发送#defineucharunsignedcharvoidint4(void);charxdata*p;main(){P=0x3400;TMOD=0x20;TL1=0Xfd;TH1=0xfd;SCON=0x40;TR1=1;EA=1;ES=1;SBUF=*P;while(1);}voidint4()interrupt4{TI=0;P++;SBUF=*P;if(P==0X34A0)EA=0;}//接收#defineucharunsignedcharvoidint4(void);charxdata*p;15页:..main(){P=0x4400;TMOD=0x20;TL1=0Xfd;TH1=0xfd;SCON=0x50;TR1=1;EA=1;ES=1;SBUF=*P;while(1);}voidint4()interrupt4{RI=0;*P=SBUF;P++;if(P==0X44A1)EA=0;}#defineucharunsignedcharsbitP3_3=P3^3;uchara=3;unsignedchartab[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳voidtimer(uchart);voidint4(void);main(){uchari,j;SCON=0;EA=0;ES=1;for(;;){P3_3=1;for(i=0;i<4;i++){SBUF=tab[a];j=a;while(j==a);}P3_3=0;timer(100);if(a=255)a=7;}voidint4()interrupt4{TI=0;a--;16页:..}voidtimer(uchart){uchari;for(i=0;i<t;i++){TMOD=0x01;TH0=-10000/256;TL0=-10000%256;TR0=1;while(!TF0);TF0=0;}}.单缓冲,双缓冲,.(1)#include<>#include<.h>#defineda0832XBYTE[0XF7FF]main(){unsignedchari,j;while{for(i=0;i<=153;i++){da0832=i;for(j=0;j<=100;j++);}}}17页:..(2)#include<>#include<.h>#defineda0832XBYTE[0XF7FF]main(){unsignedchari,j;while{da0832=j;for(i=0;i<=255;i++)j=j^;}}(3)#include<>#include<.h>#defineda0832XBYTE[0XF7FF]main(){unsignedchari,j;while{for(i=0;i<=255;i++){da0832=i;for(j=0;j<=100;j++);}}}2.#include<>#include<.h>#defineucharunsignedchar#defineIN2XBYTE[0x7ffa]sbitadbusy=P1^0;main(){ucharidataad[10];uchari;for(i=0;i<=10;i++){IN2=0;while(adbusy==1);ad[i]=IN2;}}3.#include<>#include<.h>#defineucharunsignedchar#defineda0832XBYTE[0x7fff]18页:..main(){uchar*p,i,j;p=0x20;for(i=0;i<=16;i++){dac0832=*p;p++;for(j=0;j<=255;j++)}},又不要过多占用CPU的工作时间。.#defineSEGp0unsignedcharcodeTAB[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};voiddebouncer();sbitPB1=P2^0;sbitPB2=P2^1;main(){unsignedchari=0;PB1=PB2=1;while(1){SEG=TAB[i];if(PB1==0){debouncer();if(PB1==0)19页:..{debouncer();i=(i<9)?i+1:0;}if(PB@==0){debouncer();i=(i>0)?i-1:9;}}}}voiddebouncer(void){inti;for(i=0;i<2400;i++);}sbitspeaker=P0^0;unsigne

单片机原理与C51语言程序设计与基础教程课后习题答案 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数26
  • 收藏数0 收藏
  • 顶次数0
  • 上传人青山代下
  • 文件大小1.94 MB
  • 时间2024-04-14