单片机原理及应用

上传人:m**** 文档编号:81295936 上传时间:2022-04-26 格式:DOC 页数:28 大小:565KB
收藏 版权申诉 举报 下载
单片机原理及应用_第1页
第1页 / 共28页
单片机原理及应用_第2页
第2页 / 共28页
单片机原理及应用_第3页
第3页 / 共28页
资源描述:

《单片机原理及应用》由会员分享,可在线阅读,更多相关《单片机原理及应用(28页珍藏版)》请在装配图网上搜索。

1、n第2章MCS-51单片机结构及原理 习题1. MSC-51 单片机内部由哪些功能部件组成,各有什么功能?答:以 51 单片机为例,其内部功能部件有: 控制器:是对取自程序存储器中的指令进行译码,在规定的时刻发出各种操作所 需的控制信号,完成指令所规定的功能; 运算器:根据控制器发来的信号,执行算术逻辑运算操作; 存储器:包括程序存储和数据存储器;定时器计数器: 2个 16位定时器 / 计数器,可对机器周期计数,也可对外部输入 脉冲计数; 中断系统:可响应三个内部中断源和两个外部中断源的中断请求; 输入输出接 口: 4个 8位并行口和一个全双工串行口;2. MSC-51单片机外部引脚的名称是什

2、么?各有什么功能?答:(1)电源及晶振引脚VCC(40脚):+5V电源引脚VSS (20 脚):接地引脚XTAL1 (19 脚);外接晶振引脚(内置放大器输入端)XTAL2C18脚):外接晶振引脚(内置放大器输出端)(2) 控制引脚RST/VPD (9) 为复位/ 备用电源引脚 ALE/PR0G(30) 为地址锁存使能输出 / 编程脉冲 输入PSENC29 :输出访问片外程序存储器读选通信号EA/ VPP ( 31):外部ROM允许访问/编程电源输入并行 I/O 口引脚P0. 0-P0. 7(3932 脚) P0 口;Pl. 0-P1. 7(1 ? 8 脚) P1 口;P2. 0 ? P2.

3、7(21 28 脚) P2 口;P3. 0 ? P3. 7( 10? 17 脚)P3 口。3. 51 系列单片机的封装有哪些类型?请说明每一种封装引脚之间的距离。 答: 51 系列单片机的封装有:40 引脚双列直插圭寸装 (DIP - dual in-line package), 引脚之间的距离 lOOmilQ ;44 引脚方形扁平圭寸装 (QFP - quad flat package)方式,引脚之间的距离是;44 引脚带引线的塑料芯片载体 PLC C (Plastic Leaded Chip Carrier) 04. 什么是复位?单片机复位电路有哪几种,工作原理分别是什么? 答:复位 使单

4、片机恢复原始默认状态的操作。单片机复位电路有 : 上电复位电路,由电阻和电容构成,通过上电时,电容相当 于短路而使复位引脚在晶振有效的情况下保持 2 个机器周期的高电平;按钮开关 复位电路,由两个电阻的分压构成,通过手工按下按钮,使复位引脚在晶振有效 的情况下保持2个机器周期的高电平5. 通常的微机系统存储器结构有哪几种?MCS-51单片机存储器属于哪一类?CS-51可寻址多大空间?答:通常的微机系统存储器结构有两种结构,即哈佛结构和冯诺依曼结构(也 叫 普林斯顿结构),MCS-51单片机存储器属于,MCS-51可寻址空间是两个64KB, 即64KB的程序存储空间和64KB的数据存储空间。6.

5、 片内RAM中低128个单元划分为哪三个主要部分?各部分的主要功能是什么?答:片内RAM中低128个单元划分为三个部分:%1工作寄存器区(00H-1FH),四组,每组8个,可作用工作寄存器切换使用;%1可位寻址区(20H-2FH), 16B,位地址为00H-7FH,用作为按位寻址的空间;%1用户RAM区(30H-7FH), 80B,用作普通RAM单元或堆栈。7.程序状态字寄存器PSW各位的定义是什么?答:程序状态字寄存器PSW各位的定义如下:PSW. 7 PSW. 6 PSW. 5 PSW. 4 PSW. 3 PSW. 2 PSW. 1 PSW. 0CYACF0RS1RSO0VFlPPSW.

6、7:进/借位标志CY,加法有进位时置1,减法有借位时置1;PSW. 6:辅助进位标志AC,加法运算低四位向高上四位有进位时置 1;PSW.5 PSW. 1:用户标志位F0和用户标志位F1,保存用户的位数据;PSW. 4、PSW. 3:工作寄存器选择控制位RS1和RSO, 00至11分别选择四组工作 之一作为当前工作寄存器PSW.2 :溢出标志位0V,有符号数加、减运算结果有溢出或乘除上结果异常(乘法运算结果大于255即乘积在BA中,或除法运算除数为0)时置1PSW. 0:奇偶标志位P,累加器A中1的个数为奇数时置Io8. 什么是时钟周期?什么是机器周期?什么是指令周期?当振荡频率为12MHz时

7、,一个机器周期为多少微秒?答:时钟周期又叫振荡周期或拍,用 P表不,是MCS-51单片机中最小的时间单 位,在一个时钟周期内,CPU完成一个最基本的动作。机器周期:由12个时钟周期构成,完成个基本操作指令周期:是执行一条指令所需的时间,根据指令的复杂性,可由4个机器周期构成。当振荡频率为12MHz时,一个机器周期为1微秒。9. P0、Pl、P2和P3 口的结构和功能分别是什么?答:P0 口的每一位由1个锁存器、2个三态缓冲器、1个输出控制电路(非门 X、与门、电子开关 MUX输出驱动电路构成,其功能既可以作为通用I/O 口实现输入/输出功能,也可作为单片机地址线的低8位和数据线实现外部扩展功能

8、。在用作输入输出口时,需外接上拉电阻。Pl 口的每一位由1个锁存器、1个场效应管驱动器V和2个三态门缓冲器 构成,其作用是用作输入输出口P2 口的每一位由1个锁存器、2个三态缓冲器、1个输出控制单元、1个输 出驱动单元构成,其功能是用作输入输出口,或地址总线的高8位。P3 口的每一位由1个锁存器、2个三态缓冲器、1个第二功能控制单元、1 个输出驱动单元构成,其作用是用作输入输岀口或第二功能。10. 51单片机引脚ALE的作用是什么?当51不外接存储器时,ALE上的输出的 脉冲频率是多少?答:51单片机引脚ALE的作用是对外部存储寻址时锁存 P0 口输出的低8位地址, 当51不外接存储器时,AL

9、E上的输出的脉冲频率是fosc/6o习题答:MCS-51单片机立即寻址、变址第3章单片机的汇编语言与程序设计RAM的所有地址1. MCS-51单片机有哪几种寻址方式?适用于什么地址空间? 有7种寻址方式:直接寻址、寄存器寻址、寄存器间接寻址、 寻址、位寻址、相对寻址。直接寻址方式:操作数的地址由指令直接给出,适用于片内 空间;女口 MOV A, 68HMOV A, PSW寄存器寻址方式:指令给岀的是寄存器的编码,操作数在编码指定的寄存器 中,适用于片内00H至1FH的32个字节,用R0, . R7 表示,通过PSW勺RS1 和RSO选择组号确定对应32个字节中的其中8个,还有累加器A,以及乘除

10、法指 令中的A和B寄存器,位寻址方式中的布尔累加器 C;MOV A, MUL R1AB INC DPTR寄存器间接寻址方式:指令给出的是寄存器的编码,操作数地址在编码指 定 的寄存器中,适用于片内 RAM的全部空间,其中52系列中的80H至FFH只能 用寄存器间接寻址;如 MOV A, R0MOV A, R1 MOVX A, DPTR立即寻址方式:操作数本身在指令中直接,给出适用于用8位立即数对片内RAM所有地址单元赋值,也可用16位立即数对DPTR赋值;如MOV A, #0E2HMOV DPTR, #2000H变址寻址方式:以DPTR或 PC作为基地址寄存器,以累加器 A作为变址寄存 器,将

11、基址寄存器与变址寄存器的内容相加形成操作数的实际地址的一种寻址 方 式,变址寻址方式适用于程序存储器 ROM仅有三条指令如下:MOVC A, A+DPTRMOVC A, A+PCJMP A+DPTR位寻址方式:指令中直接给出操作数所在单元的位地址,适用于片内RAM中地址20H至2FH中的16个字节中的128个位地址空间和80H至FFH中地址中 可以被 8整除的所有SFR中的每个位地址空间;如MOVC, 7FHMOVFO, CMOVC, ACC.7相对寻址方为相对转移指令而指令中直接给出转移的相对偏移其转移目标在当前指设,T28至+ 127字节范围内的地址空间。如SJMP STARTHERE S

12、JMP HERE;等效于:SJMP $2. MCS-51单片机的PSW程序状态字中无ZERO(零)标志位,怎样判断某内部数据 单元的内容是否为零?答:MCS-51单片机的PSW程序状态字中无ZERO (零)标志位,判断某内部数据单 元的内容是否为零是能通过取数到 A累加器,再判断A中的每一位是否为零来确 定其值是否为零。3 ?编程将内部RAM的 20H30H单元内容清零。解:设个片内RAM指针R0,先指向首地址20H,通过累加器A清零,然后采用 间 接寻址方式依次将A中的零值传送到指针所指的片内RAM单元,每传送一个字 节,地址指针加1,直到达到地址为30H或达到计数器规定的17个字节为止。程

13、序1:MOVCLRRO, #20HA;设地址指针初值;累加器清oCONT:MOVR0, A;置0指针所指单兀INCRO;地址指针加1CJNERO, #31H, CONT ;指针未超过终点则继续SJMP$;暂停程序2:MOVRO, #20H;设地址指针初值CLRA;累加器清0MOVR7,#17;计数器赋初值,从20H到30H共17个字CONT:MOVR0, A节置0指针所指单兀INCRO;地址指针加1DJNZR7, CONT;计数器减1,非0,则继续SJMP$;暂停4.编程查找内部RAM的32H? 41H单元中是否有0AAH这个数据,若有这一数据,则 将50H单元置为0FFH,否则将50H单元清

14、零。解:设一个片内RAM指针R0,先指向首地址32H,比较R0与#0AAH,若相等,则退出 循环,给50H单元赋0FFH,若不相等,则R0加1为继续比较下-个字节 做准备, 直到达到地址为41H或达到计数器规定的16个字节为止还没找到,则 给50H单 元赋00H程序1:MOVRO, #32H;设地址指针初值CONT:CJNER0, #OAAH, NEXT:比较查找值与指针所指单元的值,不相等转MOV移A,#offh;相等,则准备好要赋的标志值OFFHSJMPDOWN;转存到保存结果处NEXT:INCRO;修改地址指针CJNERO,#42H, CONT;若指针未越过终点,则继续MOVA,#00H

15、;查找失败,则将00H存入结果标志单元DOWN:MOV50H.A;将比较结果标志存入50H单元SJMP$;暂停程序oEND2 :MOVR7, #16;计数器赋初值,从20H到30H共16个字节MOVRO, #32H;设地址指针初值CONT:CJNER0, #OAAH,;比较查找值与指针所指单元的值,等转NEXT不相MOVA,#OFFH;相等,则准备好要赋的标志值 OFFHSJMPDOWN;转存到保存结果处NEXT:INCRO;修改地址指针DJNZR7, CONT;计数器减1,非0,则继续MOVA,#00H;查找失败,则将00H存入结果标志单元DOWN:MOV50H,A;将比较结果标志存入50H

16、单元SJMP$;暂停END5.查找20H? 4FH单元中出现OOH勺次数,并将查找结果存入50H单元。解:从20H至U 4FH共48个字节MOVR7, #48;字节计数器赋初值MOVRO,#20H;设地址指针初值CONT: CJNER0, #00H,;比较查找值与指针所指单元的值,不相等INCNEXT;相等,0的个数计数器加1NEXT: INCRO;修改地址指针DJNZR7, CONT;计数器减1,非0,则继续MOV50H, R6;保存0的个数计数值到50H单元SJMP$;暂停ENDEND6.已知 A=83H, R0=17H, (17H)=34H,写出下列程序段执行之后的A中的内容。ANLA,

17、#17HORL17H.AXRLA, R0CPLAEND答:AA, #17H;A=03H17H,A:(17H)=0011 0100NLRLOV 0000 0011=0011 0111xA, R0RL;A= 0000 00110011 0111 =0011 01007.已知单片机的晶振频率为12MHz,分别设计延时为0. Is, Is 的子程序。 答:已 知单片机的晶振频率为12MHz,则机器周期为lus,延时子程序是通过执行指令序列中机器周期数来达到,如果要 0. Is,即100ms,也就是lOOOOOus,所以需要机器 周期数达到1000000要延时达到IS,可通过对延时为0. 1秒的子程序调

18、用10次来 实现。DELAY100MS:MOR6,#200;1个机器周期D1:V MOR7,#250;1个机器周期D2:VNOP;1个机器周期DJR7,D2;2个机器周期,3*251=753NZ DJR6, DI;2个机器周期,(1+753+2)*132=99792NZ RET;2个机器周期,1+99792+2=99795,约 100msDELAY1S:MOVR7,#10;计数10次1LOOP:ACALDELAY100MS;延时 100ms 子程序99795+2L DJNZR7, LOOP;未达到10次则继续10* (2+99795+2)RET; 返回 2+10* (2+99795+2) =9

19、979928.内部RAM从20H单元开始处有一数据块,以0DH为结束标志,试统计该数据 块 的长度,将该数据块送到外部数据存储器7E01H开始的单元,并将长度存入7E00H单元。解:从20H的指针用R0,从外部RAM7E01开始的指针用DPTR计数器用R7MOVR7, #0;字节计数器赋初值MOVR0, #20H;设片内RAM地址指针初值MOVDPTR, #7E01H;设片外RAM地址指针初CONT: MOVA, R0;取片内RAM中的一个字节MOVXDPTR,A;存入片外RAM指针所指INCR7单元长度计数器加1INCR0;片内RAM地址指针加1INCDPTR;片外RAM地址指针加1CJNE

20、A, #ODH,CONT;未达到结束标志MOVA, R7;取块计数长度值MOVXDPTR,A;保存SJMP$;暂停END9.内部RAM从 DATA开始的区域中存放着10个单字节十进制数,求其累加和,并 将结果存入SUM和SUM+1单元。解:R7计R6保存累加和高8位,R0用作地址指针ORG0000HLJMPMAINORG100HSUMEQU30HDATAA EQU40HMAIN:MOVR7,#10;字节计数器赋初值MOVRO, #DATAA;设片内RAM地址指针初值CLRA;累加器清0MOVR6,A;累加结果的高8位CONT: ADDA, R0/ RAM中的一个字节到ACCDAAJNCNEXT

21、;若无进位则不用管高8位INCR6;有进位,高8位加1NEXT: INCRO;片内RAM地址指针加1DJNZR7, CONT;未完继续MOVSUM, A;保存低8位MOVSUM+1, R6;保存咼8位SJMP$;暂停END10.内部RAM从DATA1和DATA2单元开始处存放着两个等长的数据块,数据块的 度在LEN单元中。请编程检查这两个数据块是否相等,若相等,将 OFFH写入 RESULT单元,否则将0写入RESULT单元。解:从DATA1开始的指针用R0,从DATA2开始的指针用R1,计数器用R7LENEQU10DATA1EQU30HDATA2EQU40HRESULEQU50HTMOVR7

22、, #LEN;字节计数器赋初值MOVRO, #DATA1;设片内RAM:地址指针初值MOVRl, #DATA2;设片外RAM:地址指针初值CONT:MOVA, R0;取片内RAM R0所指的的一个字节MOV7FH, R1;将R1所指单元内容取到片内RAM:地址7FHCJNEA, 7FH, NOEQ中;比较,不相等则结束INCRO;DATA1 RAM地址指针加1INCR1;DATA2 RAM地址指针加 1DJNZR7, CONT;未完,继续MOVA, #OFFH;相等,准备写入FFHSJMPDOWN;转写入结果处NOEQ:MOVA, #0;不相等,准备写入00HDOWN:MOVRESULT,A;

23、保存比较结果标志SJMP$;暂停END11?编制程将内部RAMM1、M2、M3和M4单兀中的无符号数 xl、x2、x3和x4相加,并把和存入R0和R1 ( R0中为高8位)中。 解:ADD A, M2;与第二个数相加MlEQU30M2EQUH40M3EQUH45M4EQUH4FMOVHA,;取第一个Ml数JNCNEXT1;如果无进位,则转移至第三个MOVRO, #1相加有进位,高8位置1NEXT1: ADDA, M3;与第三个数相加JNCNEXT2;没有进位,则转至第四个数相INCRO加;有进位,高8位加1NEXT2: ADDA, M4;与第四个数相加JNCNEXT3;没有进位,则转至结束IN

24、CRO;有进位,高8位再加1NEXT3: MOVR1,A;低8位保存到R1SJMP$;暂停END第4章单片机的C51语言习题1. C语言的优点是什么?C程序的主要结构特点是什么?答:C语言是一种高级语言,学习比低级容易,不需要具体组织、分配存储器资 源和处理端口数据,可以直接驱动单片机的所有资源。C程序以函数为单位,由一个主函数和若干个其他函数构成,主函数是程序 的入口,其他函数由主函数直接或间接调用。程序可以由个文件或多个文件 组成。文件类型包括头文件和 c语言源文件,也可以是汇编语言文件,C程序 可与汇编语言混合编程。2. C51语言的变量定义包含哪些关键因素?为何这样考虑?答:C语言的变

25、量定义格式如下:存储种类数据类型存储类型变量名 其中:存储种类与标准 C语言相同,包括:自动型(auto)、外部型(extern)、静态 型(static)寄存器型(register) 数据类型除了包含标准C语言类型的字符型(char),整型(int),长整型(long), 浮点型(float),双精度型(double)夕卜,还有二进制位型(bit),特殊功能寄存器型 (sfr), SFR 可位寻址的位类型(sbit)。存储类型包括:片内RAM区(data)、片内可位寻址区(bdata),片内RAM间 接寻 址区(idata), 片夕卜 RAM页寻址区(pdata), 片夕卜 RAM区 (xd

26、ata)、ROM区 (code) o只所以比标准C语言多了存储类型,就是因为MCS-51单片机的存储结构中有四个物理存储空间(片内RAM片内ROM片外RAM片外ROM),三个逻辑地址空间 (片内RAM片外RAM, ROM),而且有多种寻址方式(直接寻址、间接寻址、 页面寻 址、位寻址)所致,所以在定义变量时,要根据其所在位置和寻址方式明确指定存储类型。3. C51与汇编语言的特点各有哪些?怎样实现两者的优势互补?答:C51是结构化语言,代码紧凑;接近自然语言,程序可读性强,易于调试、维护;库函数丰富,编程工作量小,可使产品开发周期短;具有机器级控制能力,功能很强,适合于嵌入式系统开发;汇编指令

27、无关,易于掌握,上手快。汇编语言优点是编写的程序代码精炼、执行速度快,在相同功能下,汇编 语言程序可能比C语言程序效率高。缺点是对程序员要求高,必须对单片机的硬件 结构非常熟悉才能编程,不便于编写比较复杂的程序可根据需要对要求时间性很强的代码用汇编语言编写,其它部分用C语言编写,两者混合编程就可以实现优势互补。4. 指出下面程序的语法错误:#in eludemai n() a=C;int a=7, Cdelay(10)void delay () ; cgar i ;for(i=0; i =255; ” +”); 答:#include mai n() a=C;/a和C必须先定义才可使用int a

28、=7,C缺分号,应该提在使用前说明delay(10)/延时子程序必须先定义,或先有函数原型说明void delay () ; 作为函数定义,有函数定义不能嵌套的问题,即不能在一个函数内定义另一个函数,而且前不应有分号/作为函数原型说明,应该放在函数调用之前,且其后不应该接函数体cgar i ;/ 字符型应该是 un sig ned charfor(i=0; i=255; +);/+” 应改成 i+/主函数没有结束,缺”5. 定义变量a, b, c,其中a为内部RAM的可位寻址区的字符变量,b为外部数 据 存储区浮点型变量,c为指向int型xdata区的指针。答: char bdata a;fl

29、oat xdata b; int xdata *c;6. 编程将8051的内部数据存储器20H单元和35H单元的数据相乘,结果存到外 部数据存储器中(任意位置)。解:方法一:用嵌入式汇编语言实现# in cludevoid mai n()#pragma asmMOV A,20HMOV B,35H MUL ABMOV DPTR,#1234HMOV DPTR,AINC DPTRMOV A,BMOV DPTR,A pragmaen dasm方法二:单用c语言编程实现#include reg51. h#include niath. hint movdata(char);void mai n ()un

30、sig ned int xdata x;un sig ned char *ptr,a, b;ptr 二 0x25;a=*ptr;ptr=0x30;b=*ptr;x 二 Q*b;7. 8051的片内数据存储器25H单元中存放有一个0? 10的整数,编程求其平方 根(精确到5位有效数字),将平方根放到30H单元为首址的内存中。解:方法一:用C语言与汇编语言混合编程实现/用C语言编写的主函数MAIN. C#include#includechar getdata (char);void mai n()char a=0x25, c;float f;c=getdata(a);f=sqrt(c);用汇编语言

31、编写的取数据子函数,只有一个地址参数在R7中,返回值为指定地址单元中的内容,用R7返回主函数。PUBLIC GETDATADE SEGMENT CODERSEG DE_GETDATA:MOVA, R7;取地址参数MOVro, AMOVa,MOVR0,a;返回地址单元中的内EXIT:RET容END方法二:单用C语言编程实现/MAIN. C#inelude reg51. h#ineludeint movdata(char);void mai n ()char n;char *ptr;float *ptr2;float f;ptr=0x25;n=*ptr;f=sqrt( n);ptr2=0x30;*

32、ptr2=f;8. 将外部RAM 10H? 15H单元的内容传送到内部 RAM 10H? 15H单元。 解:方法 一:采用C语言与汇编语言混合编程用 C语言编写的主函数 MAIN. C #include char movdata(ehar, char);void mai n ()char a=0xl0, b=0x06;movdata(a, b);用汇编语言编写的移动数据子函数MOVDATA其中第一个参数在R7中为首地址,第二个参数在R5中为字节数PUBLIC _MOVDATADE SEGMENT CODERSEG DE _MOVDATA:MOVMOV A, R7;取参MOVLOOP: MOVX

33、ro, AA, R0R0, ADJNZ R5, LOOPEXIT:RETEND方法二:单用C语言编程实现/MAIN. C#inelude reg51. h int movdata(char); void main ()char n=6;char *ptrl=OxlO;char xdata *ptr2; ptr2=0x20;while(n 一)*ptr2+=*ptr1+;16位数,将其9. 内部RAM 20H. 21H和22H、23H单元分别存放着两个无符号的中的大数置于24H和25H单元。解:方法一:#include void main ()un sig ned int *ptr; un si

34、g ned int x, y, z; ptr=0x20;x=*ptr; ptr=0x22; y=*ptr; z=(xy) ?x 0x24;*ptr 二 z;#include #include void main ()un sig ned int x, y, z;x=DBYTE0X20F256+DBYTE0X21; y=DBYTE0X22F256+DBYTE0X23;z= (xy)?x:y;/将两数中的较大者赋给zDBYTE0X24=z/256;DBYTE0X25z%256;方法二:#includeun sig ned int x _at_ 0x20; un sig ned int y _at_

35、 0x22; un sig ned int z _at_ 0x24; void mai n()z= (xy)?x:y;第 4 章单片机的 C51 语言习题1. C语言的优点是什么? C程序的主要结构特点是什么?答:C语言是一种高级语言,学习比低级容易,不需要具体组织、分配存储器资 源和处理端口数 据,可以直接驱动单片机的所有资源。C 程序以函数为单位,由一个主函数和若干个其他函数构成,主函数是程序 的入口,其他函数由主函数直接或间接调用。程序可以由一个文件或多个文件 组 成。文件类型包括头文件和 c 语言源文件,也可以是汇编语言文件, C 程序 可与 汇编语言混合编程。2. C51语言的变量定

36、义包含哪些关键因素?为何这样考虑?答:C语言的变量定义格式如下:存储种类数据类型存储类型变量名 其中:存储种类与标准 C 语言相同,包括:自动型 (auto) 、外部型 (extern) 、静态 型 (static)寄存器型 (register) 0数据类型除了包含标准C语言类型的字符型(char),整型(int),长整型(long), 浮点型 (float), 双精度型 (double) 夕卜, 还有二进制位型 (bit), 特殊功 能寄存器型 (sfr), SFR 可位寻址的位类型 (sbit) 。存储类型包括:片内RAM区(data)、片内可位寻址区(bdata),片内RAM间 接寻 址

37、区(idata), 片夕卜 RAM页寻址区(pdata), 片夕卜 RAM区 (xdata)、ROM区 (code) o只所以比标准 C 语言多了存储类型,就是因为 MCS-51 单片机的存储结构中 有四个物理存储空间(片内RAM片内ROM片外RAM片外ROM),三个逻辑地址空间 (片内RAM片外RAM, ROM),而且有多种寻址方式(直接寻址、间接寻址、页面寻址、位寻址 ) 所致,所以在定义变量时,要根据其所在位置和寻址方式明 确指 定存储类型。3. C51 与汇编语言的特点各有哪些?怎样实现两者的优势互补?答: C51 是结构化语言,代码紧凑;接近自然语言,程序可读性强,易于调试、 维护;

38、库函数丰富,编程工作量小,可使产品开发周期短;具有机器级控制能 力, 功能很强,适合于嵌入式系统开发;汇编指令无关,易于掌握,上手快。汇编语言优点是编写的程序代码精炼、执行速度快,在相同功能下,汇编语 言程序可能比 C 语言程序效率高。缺点是对程序员要求高,必须对单片机的 硬件 结构非常熟悉才能编程,不便于编写比较复杂的程序。可根据需要对要求时间性很强的代码用汇编语言编写,其它部分用 c 语言编 写,两者混合编程就可以实现优势互补。4. 指出下面程序的语法错误: #include reg51 ? h main() a=C; int a=7, C delay(10) void delay ()

39、; cgar i ;for(i=0; imain() a=C;Ila和C必须先定义才可使用int a=7,C/ 缺分号,应该提在使用前说明delay(10)延时子程序必须先定义,或先有函数原型说明void delay () ; / 作为函数定义,有函数定义不能嵌套的问题,即不能在一个函数内定义另一个函数,而且前不应有分号 / 作为函 数原型说明,应该放在函数调用之前,且其后不应该接函数体cgar i ;/ 字符型应该是 unsigned charfor(i=0; i=255;”+);/ ” 应改成 i+/ 主函数没有结束,缺” T5. 定义变量a, b, c,其中a为内部RAM的可位寻址区的字

40、符变量,b为外部数 据 存储区浮点型变量, c 为指向 int 型 xdata 区的指针。答: char bdata a;float xdata b;int xdata *c;6. 编程将8051的内部数据存储器20H单元和35H单元的数据相乘,结果存到外 部数据存储器中 (任意位置 )。解:方法一:用嵌入式汇编语言实现#includevoid main() #pragma asmMOV A,20HMOV B,35HMUL ABMOV DPTR,#1234HMOVX DPTR,AINC DPTRMOV A,BMOVX DPTR,A#pragma endasm方法二:单用C语言编程实现#incl

41、ude reg51. h#include math. hint movdata(char);void main ()unsigned int xdata x; unsigned char *ptr,a, b; ptr 二 0x25;a=*ptr; ptr=0x30;b=*ptr;x 二 a*b;7. 8051的片内数据存储器25H单元中存放有一个0? 10的整数,编程求其平方根(精确到5位有效数字),将平方根放到30H单元为首址的内存中。解:方法一:用 C 语言与汇编语言混合编程实现用C语言编写的主函数MAIN. C#include reg51? h#include math. hchar g

42、etdata(char);void main ()char a=0x25, c;float f;c=getdata(a);f=sqrt(c);;用汇编语言编写的取数据子函数,只有一个地址参数在R7中,返回值为指定地址单元中的内容,用R7返回主函数。PUBLIC _GETDATADE SEGMENT CODERSEG DE_GETDATA: MOV A, R7 ; 取地址参数MOVRO, AMOVA, R0MOVR7.A;返回地址单元中的内EXIT:RET容方法二:单用TC语言编程实现/MAIN. C#inelude reg51. h #inelude math. h int movdata(c

43、har); void main ()char n;char *ptr; float *ptr2;float f;ptr 二 0x25;n=*ptr;f=sqrt( n);ptr2=0x30;*ptr2 二 f;8. 将外部RAM 10H? 15H单元的内容传送到内部 RAM 10H 15H单元。解:方法一:采用C语言与汇编语言混合编程用 C语言编写的主函数 MAIN. C #include reg51. h char movdata(char, char);void mai n()char a=0xl0, b=0x06;movdata (a, b);用汇编语言编写的移动数据子函数 MOVDAT

44、A其中第一个参数在R7中为首地址, 第二个参数在R5中为字节数PUBLIC _M0VDATADE SEGMENT CODERSEG DE_MOVDATA:MOV A,;取参MOVRO, ALOOPMOVXA, R0MOVR0, ADJNZR5,EXITRETLOOPEND方法二:单用C语言编程实现/MAIN. C #inelude void main ()char n=6;char *ptrl 二 0x10; char xdata *ptr2; ptr2=0x20; while(n 一一 ) *ptr2+=*ptr1+;reg51? h int movdata(char);9. 内部RAM 2

45、0H. 21H和22H、23H单元分别存放着两个无符号的16位数,将其 中的大数置于24H和25H单元。解:方法 -?:#include reg51? hvoid main()unsigned int *ptr; unsigned int x, y, z; ptr=0x20;x=*ptr; ptr=0x22;y=*ptr; z/ 设置一个内部 RAM 指针/ 指向 0x20 单元/ 取第一个数/ 指向 0x22 单元取第二个数(pxtr=0yx)2?4x;:y;将两数中的较大者赋给 z/ 指向地址为 0x24 的目标单元*ptr 二z;/ 将大数存入目标单元 方法二#include reg51

46、? h#include absacc? h void main ()unsigned int x, y, z;x=DBYTE0X20F256+DBYTE0X21;y=DBYTE0X22F256+DBYTE0X23;z= (xy)?x:y;/ 将两数中的较大者赋给 zDBYTE0X24=z/256;DBYTE0X25=z%256;方法三:#include reg51. hunsigned int x _at_ 0x20; unsigned int y _at_ 0x22; unsigned int z _at_ 0x24; void main ()z=(xy)?x:y;第 5 章单片机的中断系统

47、 习题1. 什么是中断、中断源、中断优先级和中断嵌套? 答:中断是指单片机内部有一个中断管理系统,它对内部的定时器事件、串行 通 信的发送和接收及外部事件 ( 如键盘按键动作 ) 等进行自动的检测判断。当 CPU 正在处理某件事情 ( 例如正在执行主程序 ) 的吋候,外部或内部发生的某一事 件 ( 如某个引脚上电平的变化,一个脉冲沿的发生或计数器的计数溢出等 ) 请求 CPU迅速处理,于是,中断管理系统会置位相应标志通知CPU暂时中止当前的工作,迅速转去处理所发生的事件。处理完该事件后,再回到原来被中止的地 方, 继续原来的工作,这样的过程称为中断。引发中断的事件称为中断源。 将中断事件按轻重

48、缓急分若干级别叫中断优先级。允许中断优先级高的中断源中断正在执行的低优先级的中断服务程序叫中断嵌 套。2. 什么叫中断源?MCS-51有哪些中断源?各有什么特点?它们的中断向量地址分别是多少?答:中断源即引发中断的事件。MCS-51单片机有MCS-51中断的中断响应条件是什么?答:中断源有中断请求; 此中断源允许位为1,即中断源可以向CPU发中断请求;(3) CPU开总中断,即EA=1;(4) 无同级或者更高级中断正在服务 MCS-51的中断响应过程是怎样的?答: (1) 将相应的中断优先级状态触发器置 1, 以阻断后来的同级和低级中断请 求;(2) 由硬件清除相应的中断请求标志,串行口的发送

49、和接收中断除外; 执行一条硬件LCALL指令,即把程序计数器PC的内容压入堆栈保存, 再将相应的中断服务程序的入口地址送入PC; 编写出外部中断 1 为下跳沿触发的中断初始化程序。解:void Intl_init () IT1=1;EA=1;EX1=1;/IE=0x84;/ IE|=0x84; 有一外部中断源,接入INTO端,当其中有中断请求时,要求 CPU把一个从内个中断源,它们是外部中断0,定时器T0,外部中断1,定吋 器 T1, 串行口。外部中断源是由引脚的触发信号引起的中断,定时器中断源是由于定时器计 数器的溢出引发的中断,串行口是由于串行通信的发送或接收引发的中断。外部中断0,定时器

50、T0,外部中断1,定时器T1,串行口五个中断源的中断 向量 地址依次为: 0003H, 000BH, 0013H, 001BH, 0023H。部RAM 30H单元开始的50个字节的数据块传送到外部 RAM从1000H开始的连续 存 储区。请编写对应的程序。解:#includevoid main() IT0=l ;EA=1;EXO=1;while(1);void intxO() interrupt 0 using 1char * ptrl=0x30;char xdata * ptr2=0xl000:for (i=0;i50;i+) *ptr2+=*ptrl+;7. 设fosc = 12MHz,利

51、用定时器,TO(工作在方式2)在Pl. 1引脚上获取输出周 期 为 0.4ms 的方波信号,定时器溢出时采用中断方式处理,请编写, T0 的初始 化 程序及中断服务程序。解:fosc = 12MHz,则机器周期=lus ;当TO工作在方式2时,其最大定时吋间 为 256us, 要输出周期为 0. 4mS 即 400us 的方波信号,则其高、低电平应各为 200us, 显然当定时器 T0 按方式 2 工作时,只需计数达到 200 次即可,因此其时 间常数 初值为 256-200=56o 在 T0 的中断服务程序中,只需将 Pl. 1 引脚求反即 可。#includesbitPl_l=PlAl;v

52、oid timerO()interrupt 1 using 1 P1_1=!P1_1;void main() Pl_l=0;TMOD=0x02;TH0=56;TL0=56;IE=0x82;TR0=l;8. 设fosc = 6MHz,要求每隔50ms,从内部RAM以 30H开始的数据存储区传送 一 个字节数据到外部RAM以 2000H开始的连续存储区,共传送50个数据。要求:采 用定时器 T1 以方式 2 实现定时,数据传送在中断服务程序中完成。解:fosc = 6MHz,机器周期=12/6*10人6S=2US T1工作在方式2吋,最大定时时 间为 512us,要定时50ms,可以计数100次,

53、每次定时500us来实现,方式2定 时500us 需计数 250 次,故其时间常数为 256-250=6o# includechar intcnt=0;char movcnt=0;char * ptr 1=0x30;char xdata *ptr2=0x2000;void timer l()interrupt 3 using 1intcnt+;if(intcnt= 100)(if(mocnt50)*ptr2+=*ptr 1 +; movcnt+;else EX 1=0;intcnt=0;void main() TMOD=0x20;TH1=6;TL1=6;IE=0x84;TR1=1;for( ;

54、 )9. 8051 单片机只有两个外部中断源,若要扩展成 8 个外部中断源,请画出实现 这种扩展的硬件线路图,并说明如何确定各中断源的优先级。 解:用按钮开关模拟中断源的中断请求, INTO 单独作为一个中断源, INT1 扩展 成 7 个中断源,有中断请求时,借助于 P2 口识别是这七个中断源是哪个请求中 断,为了验证正确性,如果是 INTO 中断,则在 P0 口的数码管上显示 0, 是 INT1 中断,则根据从上到下是哪个中断源在 P0 口的数码管上显示 1-7o 具体电路和 程序如下:#inelude char led_mod = 0x3f, 0x06, 0x5b, 0x4f, 0x66

55、, 0x6d, 0x7d, 0x07;void INT0_srv (void) interrupt 0 using 1/ 外部中断 0 处理程序P0=led_mod0;void INTl_srv (void) interrupt 2 using 2/ 外部中断 1 处理程序char intn um;intn um=P2;switch(i ntn um)case Oxfe:P0=led_mod1;break;case Oxfd:P0=led_mod2;break;case 0xfb:P0=led_mod3;break;case 0xf7:P0=led_mod4;break;case Oxef:P

56、0=led_mod5;break;case Oxdf:P0=led_mod 6;break;case Oxbf:P0=led_mod7;void mai n () EA=1;EXO=1;EX1=1;P0=0;while(1);第 6 章单片机的定时器 / 计数器 习题1. MCS-51 系列的 8051 单片机内有几个定时 / 计数器?每个定时 / 计数器有几种 工 作方式?如何选择?答:MCS-51系列的8051单片机内有2个定时/计数器,即T0和T1,每个都可以 编 程为定时器或计数器, T0 有四种工作方式 (方式 0-13 位、方式 116位、方 式 2- 可自动装入初值的8位、方式3-两个8位),T1有三种工作方式(与T0相 同的前 三种),通过对TMO啲设置选择,其高四位选择T1,低四位选择T0。2. 如果采用的晶振频率为3MHz,定时/计数器T0分别工作在方式0、1和2下, 其最大的定时吋间各为多少?答:如果采用的晶振频率为3MHz,机器周期为12X1/(3*10 )=4 US由于定时/计数器T0 工作在方式 0、 1 和 2 时,其最大的计数次数为 8192、 65536 和 256 所以,其最 大定时吋间分别是:方式 0 为 8192X4us = 32. 768m

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!