单片机原理及应用

上传人:zou****hua 文档编号:199348777 上传时间:2023-04-10 格式:DOCX 页数:18 大小:138.69KB
收藏 版权申诉 举报 下载
单片机原理及应用_第1页
第1页 / 共18页
单片机原理及应用_第2页
第2页 / 共18页
单片机原理及应用_第3页
第3页 / 共18页
资源描述:

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

1、1 计算机体系结构:哈佛结构、冯诺依曼结构的区别?哈佛结构RAM和ROM分别编址,冯诺依曼结构RAM和ROM统一编址2. MSC 51单片机外部引脚的名称是什么?各有什么功能?答:(1) 电源及晶振引脚VCC(40脚):+5V电源引脚VSS(20脚):接地引脚XTAL1(19脚);外接晶振引脚(内置放大器输入端)XTAL2(18脚):外接晶振引脚(内置放大器输出端)(2)控制引脚RST/VpD9)为复位/备用电源引脚ALE/PROG(30)为地址锁存使能输出/编程脉冲输入PSEN(29):输出访问片外程序存储器读选通信号EA/ VPP (31):外部ROM允许访问/编程电源输入(3)并行1/O

2、 口引脚P0.0P0.7 (3932 脚)P0 口;P1.0P1.7 (18 脚)P1 口;P2.0P2.7 (2128 脚)P2 口;P3.0P3.7 (1017 脚)P3 口。3. AT89C51单片机的片内资源有哪些?其存储器结构如何?片内RAM可分成哪个三个区?各区的地址范围 如何?其内部功能部件有:控制器:是对取自程序存储器中的指令进行译码,在规定的时刻发出各种操作所需的控制信号,完成指令 所规定的功能;运算器:根据控制器发来的信号,执行算术逻辑运算操作;存储器:包括程序存储和数据存储器; 定时器计数器:2个16位定时器/计数器,可对机器周期计数,也可对外部输入脉冲计数; 中断系统:

3、可响应三个内部中断源和两个外部中断源的中断请求;输入输出接口:4个8位并行口和一个全双工串行口;其存储器结构属于哈佛结构,MCS-51可寻址空间是两个64KB,即64KB的程序存储空间和64KB的数据存储 空间。片内RAM可分成划分为三个部分: 作寄存器区(00H-1FH),四组可位寻址区(20H-2FH)用户RAM区(30H-7FH), 80B7程序状态字寄存器PSW各位的定义是什么?答:程序状态字寄存器PSW各位的定义如下:PSW.7 PSW.6 PSW.5 PSW.4 PSW.3 PSW.2 PSW.1 PSW.0CYF018VF1pPSW.7:进/借位标志CY,加法有进位时置1,减法有

4、借位时置1;PSW.6:辅助进位标志AC,加法运算低四位向高上四位有进位时置1;PSW.5、PSW.1:用户标志位F0和用户标志位F1, 保存用户的位数据;PSW.4、PSW.3: 工作寄存器选择控制位RS1和RS0, 00至11分别选择四组工作之一作为当前工作寄存器PSW.2 :溢出标志位OV,有符号数加、减运算结果有溢出或乘除上结果异常(乘法运算结果大于255即乘 积在BA中,或除法运算除数为0)时置1PSW.O:奇偶标志位P,累加器A中1的个数为奇数时置1。 4什么是复位?单片机复位电路有哪几种,工作原理分别是什么? 答:复位使单片机恢复原始默认状态的操作。单片机复位电路有:上电复位电路

5、,由电阻和电容构成,通过上电时,电容相当于短路而使复位引脚在晶振 有效的情况下保持2个机器周期的高电平;按钮开关复位电路,由两个电阻的分压构成,通过手工按下按 钮,使复位引脚在晶振有效的情况下保持2个机器周期的高电平。9. PO、P1、P2和P3 口的结构和功能分别是什么?9. 并行口 PO、P1、P2、P3的作用与用法、准双向口的含义。答:P0 口的每一位由1个锁存器、2个三态缓冲器、1个输出控制电路(非门X、与门、电子开关MUX、 输出驱动电路构成,其功能既可以作为通用I/O 口实现输入/输出功能,也可作为单片机地址线的低8位和 数据线实现外部扩展功能。在用作输入输出口时,需外接上拉电阻。

6、P1 口的每一位由1个锁存器、1个场效应管驱动器V和2个三态门缓冲器构成,其作用是用作输入 输出口P2 口的每一位由1个锁存器、2个三态缓冲器、1个输出控制单元、1个输出驱动单元构成,其功能 是用作输入输出口,或地址总线的高8位。P3 口的每一位由1个锁存器、2个三态缓冲器、1个第二功能控制单元、1个输出驱动单元构成,其 作用是用作输入输出口或第二功能。11. 时序:振荡周期、状态周期、机器周期、指令周期的含义答:时钟周期又叫振荡周期或拍,用P表示,是MCS-51单片机中最小的时间单位,在一个时钟周期内,CPU 完成一个最基本的动作。状态周期:震荡脉冲经过二分频后的周期 机器周期:由12个时钟

7、周期构成,完成一个基本操作 指令周期:是执行一条指令所需的时间,根据指令的复杂性,可由14个机器周期构成。10. 80C51单片机引脚ALE的作用是什么?当80C51不外接存储器时,ALE上的输出的脉冲频率是多少? 答:80C51单片机引脚ALE的作用是对外部存储寻址时锁存P0 口输出的低8位地址,当80C51不外接存储 器时,ALE 上的输出的脉冲频率是fosc/6。12. 中断源、中断优先级、中断类型号、中断向量引发中断的事件称为中断源。有5个中断源,它们是外部中断0,定时器T0,外部中断1,定时器T1, 串行口。外部中断源是由引脚的触发信号引起的中断,定时器中断源是由于定时器计数器的溢出

8、引发的中 断,串行口是由于串行通信的发送或接收引发的中断。 将中断事件按轻重缓急分若干级别叫中断优先级。 允许中断优先级高的中断源中断正在执行的低优先级的中断服务程序叫中断嵌套。外部中断0,定时器T0,外部中断1,定时器T1,串行口五个中断源的中断向量地址依次为:0003H, 000BH,0013H,001BH,0023H。1. MCS-51系列的8051单片机内有几个定时/计数器?每个定时/计数器有几种工作方式?如何选择? 答: MCS-51系列的8051单片机内有2个定时/计数器,即T0和T1,每个都可以编程为定时器或计数器, T0有四种工作方式(方式013位、方式116位、方式2-可自动

9、装入初值的8位、方式3-两个8位), T1有三种工作方式(与T0相同的前三种),通过对TMOD的设置选择,其高四位选择T1,低四位选择T0。2如果采用的晶振频率为3MHz,定时/计数器TO分别工作在方式0、1和2下,其最大的定时时间各为多 少?答:如果采用的晶振频率为3MHz,机器周期为12X1/(3*106 =4us,由于定时/计数器TO 工作在方式0、1 和2时,其最大的计数次数为8192、65536和256所以,其最大定时时间分别是:方式0为8192X4us = 32.768ms、方式 1 为 65536X4us = 262.144ms、方式 2 为 256X4us = 1024us。3

10、定时/计数器TO作为计数器使用时,其计数频率不能超过晶振频率的多少?答:由于定时/计数器TO作为计数器使用时,是对外部引脚输入的脉冲进行计数,CPU在每个机器周期采 样一次引脚,当前一次采样为高电平,后一次采样为低电平,则为一次有效计数脉冲,所以如果晶振频率 为fosc,则其采样频率fosc/12,两次采样才能决定一次计数有效,所以计数频率不能超过fosc/24。4简单说明定时/计数器在不同工作模式下的特点。答:方式0为13位的定时/计数器,由THx的8位和TLx的低5位构成、方式1为16位的定时/计数器, 由THx的8位和TLx的8位构成,方式2为8位的定时/计数器,TLx为加1计数器,TH

11、x为计数初值寄存 器。方式3只能用于T0,是将T0的低8位用作一个独立的定时/计数器,而高8位的TH0用作一个独立的 定时器,并借用T1的TR1和TF1作为高8位定时器的启停控制位和溢出标志位。5定时器工作在方式2时有何特点?适用于什么应用场合?答:定时器工作在方式2时是一个可自动装入时间常数初值的8位定时/计数器,TLx为加1计数器,THx 为计数初值寄存器。由于其恢复初值由硬件自动完成,所以当需要反复计数时,用方式2可以方便地实现 精确的定时。6一个定时器的定时时间有限,如何采用两个定时器的串行定时来实现较长时间的定时?答:一个定时器的定时时间有限,可采用两个定时器的串行定时来实现较长时间

12、的定时,比如,当fosc = 12MHz时,单个定时/计数器采用方式1的最大定时时间为65.536ms,此时若用另一个定时/计数器按方式 1 进行溢出次数计数,在定时器溢出中断时,给计数器发一个计数脉冲,且两者均为方式一,则两者串行 可达到的定时时间为 65536X65.536ms=4294967.296ms。13. C 语言变量定义的存储类型有哪些?不同类型表示的含义如何?四个物理存储空间和三个逻辑存储空 间的具体含义。答:C语言的变量定义格式如下: 存储种类 数据类型 存储类型 变量名 其中:存储种类包括:自动型(auto)、外部型(extern)、静态型(static)、寄存器型(reg

13、ister)。数据类型除了包含标准C语言类型的字符型(char),整型(int),长整型(long),浮点型(float),双 精度型(double)外,还有二进制位型(bit),特殊功能寄存器型(sfr),SFR可位寻址的位类型(sbit)。存储类型包括:片内RAM区(data)、片内可位寻址区(bdata),片内RAM间接寻址区(idata),片外RAM 页寻址区(pdata),片外 RAM 区(xdata)、ROM 区(code)。有四个物理存储空间(片内RAM、片内ROM,片外RAM,片外ROM),三个逻辑地址空间(片内RAM,片外 RAM,ROM),而且有多种寻址方式(直接寻址、间接

14、寻址、页面寻址、位寻址)所致,所以在定义变量时, 要根据其所在位置和寻址方式明确指定存储类型。第3章单片机的汇编语言与程序设计 习题1. MCS-51单片机有哪几种寻址方式?适用于什么地址空间?答:MCS-51单片机有7种寻址方式:直接寻址、寄存器寻址、寄存器间接寻址、立即寻址、变址寻址、位 寻址、相对寻址。直接寻址方式:操作数的地址由指令直接给出,适用于片内RAM的所有地址空间;如 MOVA,68HMOVA,PSW寄存器寻址方式:指令给出的是寄存器的编码,操作数在编码指定的寄存器中,适用于片内00H至1FH的32个字节,用R0,,R7表示,通过PSW的RS1和RS0选择组号确定对应32个字节

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

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

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

18、清0 ;置0指针所指单元 ;地址指针加1;指针未超过终点则继续 ;暂停程序1:MOVR0,#20HCLRACONT:MOVR0,AINCR0CJNER0,#31H,CONTSJMP$程序2:R0,#20H ;设地址指针初值CONT:CLRAMOVR7,#17MOVR0,AINCR0MOV;累加器清0;计数器赋初值,从20H到30H共17个字节;置0指针所指单元;地址指针加1DJNZR7, CONT ;计数器减1,非0,则继续SJMP$ ;暂停4. 编程查找内部RAM的32H41H单元中是否有0AAH这个数据,若有这一数据,则将50H单元置为OFFH, 否则将50H单元清零。解:设一个片内RAM

19、指针R0,先指向首地址32H,比较R0与#0AAH,若相等,则退出循环,给50H单元赋 0FFH,若不相等,则R0加1为继续比较下一个字节做准备,直到达到地址为41H或达到计数器规定的16 个字节为止还没找到,则给50H单元赋00H程序1:MOVR0,#32H;设地址指针初值CONT:CJNE R0,#0AAH,NEXT;比较查找值与指针所指单元的值,不相等转移MOVA,#0FFH;相等,则准备好要赋的标志值0FFHSJMP DOWN;转存到保存结果处NEXT:INCR0;修改地址指针CJNER0,#42H,CONT;若指针未越过终点,则继续MOVA,#00H;查找失败,则将00H存入结果标志

20、单元DOWN:MOV50H,A;将比较结果标志存入50H单兀SJMP$;暂停END程序2:MOVR7,#16;计数器赋初值,从20H至U 30H共16个字节MOVR0,#32H;设地址指针初值CONT:CJNER0,#0AAH,NEXT;比较查找值与指针所指单元的值,不相等转移MOVA,#0FFH;相等,则准备好要赋的标志值0FFHSJMP DOWN;转存到保存结果处NEXT:INCR0;修改地址指针DJNZ R7, CONT;计数器减1,非0,则继续MOVA,#00H;查找失败,则将00H存入结果标志单元DOWN:MOV50H,A;将比较结果标志存入50H单兀SJMP$;暂停END5查找20

21、H4FH单元中出现00H的次数,并将查找结果存入50H单元。解:从20H至0 4FH共48个字节MOVMOVR7,#48R0,#20H;字节计数器赋初值;设地址指针初值CONT:CJNER0,#00H,NEXT;比较查找值与指针所指单元的值,不相等转移INCR6;相等,0的个数计数器加1NEXT:INCR0;修改地址指针DJNZ R7,CONT ;计数器减1,非0,则继续MOV50H,R6;保存0的个数计数值到50H单元SJMP$;暂停ENDEND6已知A=83H, R0=17H, (17H)=34H,写出下列程序段执行之后的A中的内容。ANL A,#17HORL 17H,ACPLAEND答:

22、ANLA,#17HORL17H,AXRLA,R0CPLAXRL A,R0;A=03H;(17H)=0011 0100 V 0000 0011=0011 0111;A= 0000 0011 V 0011 0111 =0011 0100;A=1100 10117已知单片机的晶振频率为12MHz,分别设计延时为0.1s、1s的子程序。答:已知单片机的晶振频率为12MHz,则机器周期为1us,延时子程序是通过执行指令序列中机器周期数来 达到,如果要0.1s,即100ms,也就是100000US,所以需要机器周期数达到100000。要延时达到1S,可 通过对延时为0.1秒的子程序调用10次来实现。DEL

23、AY100MS:MOV R6,#200;1个机器周期D1:MOV R7,#250;1个机器周期D2:NOP;1个机器周期DJNZ R7,D2;2个机器周期,3*251=753DJNZ R6,D1;2个机器周期,(1+753+2)*132=99792RET;2个机器周期,1+99792+2=99795,约 100msDELAY1S:MOVR7,#10;计数10次1LOOP:ACALLDELAY100MS;延时 100ms 子程序99795+2DJNZ R7, LOOP;未达到10次则继续10*(2+99795+2)RET;返回2+10*(2+99795+2)=9979928内部RAM从20H单元

24、开始处有一数据块,以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 A, #0DH, CONT;未达到结束

25、标志MOVA,R7;取块计数长度值MOVX DPTR,A ;保存SJMP$ ;暂停END9内部RAM从DATA开始的区域中存放着10个单字节十进制数,求其累加和,并将结果存入SUM和SUM+1 单元。解:R7计数,R6保存累加和高8位,R0用作地址指针ORGLJMP MAINORG0000H100HSUMEQU30HDATAAEQU40HMAIN:MOVR7,#10;字节计数器赋初值MOVR0,#DATAA;设片内RAM地址指针初值CLRA;累加器清0MOVR6,A;累加结果的高8位CONT:ADDA,R0;加RAM中的一个字节到ACCDAAJNCNEXT;若无进位则不用管高8位INCR6;有

26、进位,高8位加1NEXT:INCR0;片内RAM地址指针加1DJNZ R7,CONT;未完继续MOVSUM,A;保存低8位MOVSUM+1,R6;保存高8位SJMP$;暂停END10内部RAM从DATA 1和DATA2单元开始处存放着两个等长的数据块,数据块的长度在LEN单元中。请编 程检查这两个数据块是否相等,若相等,将0FFH写入RESULT单元,否则将0写入RESULT单元。解:从DATA 1开始的指针用R0,从DATA2开始的指针用R1,计数器用R7LENEQU10DATA1EQU30HDATA2EQU40HRESULTEQU50HMOVR7,#LEN;字节计数器赋初值MOVR0,#D

27、ATA1;设片内RAM地址指针初值MOVR1,#DATA2;设片外RAM地址指针初值CONT:MOVA,R0;取片内RAM R0所指的的一个字节MOV7FH,R1;将R1所指单元内容取到片内RAM地址7FH中CJNE A,7FH,NOEQ;比较,不相等则结束INCR0;DATA1 RAM地址指针加1INCR1;DATA2 RAM地址指针加1DJNZ R7,CONT;未完,继续MOVA,#0FFH;相等,准备写入FFHSJMPDOWN;转写入结果处NOEQ:MOVA,#0;不相等,准备写入00HDOWN: MOV RESULT,A ;保存比较结果标志SJMP$ ;暂停END11.编制程序,将内部

28、RAM中Ml、M2、M3和M4单元中的无符号数xl、x2、x3和x4相加,并把和存入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位保存到R1

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

30、区(bdata),片内RAM间接寻址区(idata),片外RAM 页寻址区(pdata),片外 RAM 区(xdata)、ROM 区(code)。只所以比标准C语言多了存储类型,就是因为MCS-51单片机的存储结构中有四个物理存储空间(片内 RAM、片内ROM,片外RAM,片外ROM),三个逻辑地址空间(片内RAM,片外RAM, ROM),而且有多种寻址方 式(直接寻址、间接寻址、页面寻址、位寻址)所致,所以在定义变量时,要根据其所在位置和寻址方式 明确指定存储类型。4.指出下面程序的语法错误:#includemain()a=C;int a=7,Cdelay(10)void delay();c

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

32、的可位寻址区的字符变量,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语言编程实现#inc

33、lude#includeint 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单元中存放有一个010的整数,编程求其平方根(精确到5位有效数字), 将平方根放到30H单元为首址的内存中。解:方法一:用C语言与汇编语言混合编程实现/用C语言编写的主函数MAIN.C#include#include char getdata(char);void main()char a=0x25,c;float

34、 f;c=getdata(a);f=sqrt(c);;用汇编语言编写的取数据子函数,只有一个地址参数在R7中,返回值为指定地址单元中的内容,用R7返 回主函数。PUBLIC _GETDATADE SEGMENTRSEG DECODE_GETDATA:MOVA,R7;取地址参数MOVR0,AMOVA,R0MOVR7,A ;返回地址单元中的内容EXIT:RETEND方法二:单用C语言编程实现/MAIN.C #include#include int movdata(char);void main()char n;char *ptr;float *ptr2;float f;ptr=0x25;n=*pt

35、r;f=sqrt(n);ptr2=0x30;*ptr2=f;8 将外部RAM 10H15H单元的内容传送到内部RAM 10H15H单元。解:方法一:采用C语言与汇编语言混合编程/用C语言编写的主函数MAIN.C#includechar movdata(char,char);void main()char a=0x10,b=0x06;movdata(a,b);用汇编语言编写的移动数据子函数MOVDATA,其中第一个参数在R7中为首地址,第二个参数在R5中为字 节数PUBLIC _MOVDATADE SEGMENT CODERSEGDE_MOVDATA:MOV A,R7 ;取参数MOVR0,ALO

36、OP:MOVX A,R0MOVR0,ADJNZ R5,LOOPEXIT:RETEND方法二:单用C语言编程实现/MAIN.C#includeint movdata(char);void main()char n=6;char *ptr1=0x10;char xdata *ptr2;ptr2=0x20;while(n-)*ptr2+=*ptr1+;9内部RAM 20H、21H和22H、23H单元分别存放着两个无符号的16位数,将其中的大数置于24H和25H 单元。解:方法一:#includevoid main()unsigned int *ptr;/设置一个内部 RAM 指针unsigned i

37、nt x,y,z;ptr=0x20;/指向 0x20 单元x=*ptr;/取第一个数ptr=0x22;/指向 0x22 单元y=*ptr;/取第二个数z=(xy)?x:y;/将两数中的较大者赋给zptr=0x24;/指向地址为0x24的目标单元*ptr=z;/将大数存入目标单元方法二:#include#includevoid main()unsigned int x,y,z;x=DBYTE0X20*256+DBYTE0X21;y=DBYTE0X22*256+DBYTE0X23;z=(xy)?x:y;/将两数中的较大者赋给zDBYTE0X24=z/256;DBYTE0X25=z%256;方法三:

38、#includeunsignedintx_at_0x20;unsignedinty_at_0x22;unsignedintz_at_0x24;void main()z=(xy)?x:y;第5章单片机的中断系统 习题3 MCS-5 1中断的中断响应条件是什么?答:(1) 中断源有中断请求;(2) 此中断源允许位为1,即中断源可以向CPU发中断请求;(3) CPU开总中断,即EA=1;(4) 无同级或者更高级中断正在服务4. MCS-51的中断响应过程是怎样的?答:(1) 将相应的中断优先级状态触发器置1,以阻断后来的同级和低级中断请求;(2) 由硬件清除相应的中断请求标志,串行口的发送和接收中断

39、除外;(3) 执行一条硬件LCALL指令,即把程序计数器PC的内容压入堆栈保存,再将相应的中断服务程序的 入口地址送入PC;5 .编写出外部中断1为下跳沿触发的中断初始化程序。解:void Int1_init()IT1=1;EA=1;EX1=1;/IE=0x84;/ IE|=0x84;6有一外部中断源,接入INTO端,当其中有中断请求时,要求cp U把一个从内部RAM 30H单元开始的50个字节的数据块传送到外部RAM从1000H开始的连续存储区。请编写对应的程序。解:#includevoid main()IT0=1 ;EA=1;EX0=1;while(1) ;void intx0() int

40、errupt 0 using 1char * ptr1=0x30;char xdata * ptr2=0x1000;for(i=0;i50;i+) *ptr2+=*ptr1+;7设fosc = 12MHz,利用定时器,TO(工作在方式2)在P1.1引脚上获取输出周期为0.4ms的方波信号, 定时器溢出时采用中断方式处理,请编写,T0的初始化程序及中断服务程序。解:fosc = 12MHz,则机器周期=1us;当T0工作在方式2时,其最大定时时间为256us,要输出周期为0.4mS 即400us的方波信号,则其高、低电平应各为200us,显然当定时器T0按方式2工作时,只需计数达到200 次即可

41、,因此其时间常数初值为256-200=56。在T0的中断服务程序中,只需将P1.1引脚求反即可。#includesbit P1_1=P1;void timer0()interrupt 1 using 1P1_1=!P1_1;void main()P1_1=0;TMOD=0x02;TH0=56;TL0=56;IE=0x82;TR0=1;for(;)8设fosc = 6MHz,要求每隔50ms,从内部RAM以30H开始的数据存储区传送一个字节数据到外部RAM以 2000H开始的连续存储区,共传送50个数据。要求:采用定时器T1以方式2实现定时,数据传送在中断 服务程序中完成。解:fosc = 6M

42、Hz,机器周期=12/6*10-6=2us,T1工作在方式2时,最大定时时间为512us,要定时50ms, 可以计数100次,每次定时500us来实现,方式2定时500us需计数250次,故其时间常数为256-250=6。#includechar intcnt=0;char movcnt=0;char * ptr1=0x30;char xdata *ptr2=0x2000;void timer1()interrupt 3 using 1intcnt+;if(intcnt=100)if(mocnt50)*ptr2+=*ptr1+;movcnt+;else EX1=0;intcnt=0;void

43、main()TMOD=0x20;TH1=6;TL1=6;IE=0x84;TR1=1;for(;)9. 805l单片机只有两个外部中断源,若要扩展成8个外部中断源,请画出实现这种扩展的硬件线路图, 并说明如何确定各中断源的优先级。解:用按钮开关模拟中断源的中断请求,INT0单独作为一个中断源,INT1扩展成7个中断源,有中断请求 时,借助于P2 口识别是这七个中断源是哪个请求中断,为了验证正确性,如果是I NT 0中断,则在P0 口的 数码管上显示0,是INT1中断,则根据从上到下是哪个中断源在P0 口的数码管上显示17。具体电路和 程序如下:匚IB2 J#include 2fJuFnE5fi:

44、k:-7J i -wpr1-THUPO.lrfm PO18SE2STJ3LZro aD3FOD-1 poa$ rciEDB PO-HuITKjOiWB RZ.IlAjSF22W1DPEENF2.3JM1ALEr2.-UAI2FS.W13 用加例EAP2.7Jft1i5PUDJ12円rmoF1.1/T2EXP3.1fD;b的二piz/iMTnP1J3P3aXlMT1P+P1J5Pa.WTIF1J5F1.7F3BIWH釜-Ichar led_mod=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07;void INT0_srv (void) interrupt 0 us

45、ing 1 /外部中断0处理程序P0=led_mod0;void INT1_srv (void) interrupt 2 using 2 /外部中断1处理程序char intnum;intnum=P2;switch(intnum)case 0xfe:P0=led_mod1;break;case 0xfd:P0=led_mod2;break;case 0xfb:P0=led_mod3;break;case 0xf7:P0=led_mod4;break;case 0xef:P0=led_mod5;break;case 0xdf:P0=led_mod6;break;case 0xbf:P0=led_

46、mod7;void main()EA=1;EX0=1;EX1=1;P0=0;while(1);第6章单片机的定时器/计数器 习题7设MCS-51单片机的晶振频率为12MHz,请编程使P1.O端输出频率为20kHz的方波。解:fosc = 12MHz,所以机器周期为1us。20kHz的方波周期为1/(20X 1000)=50us,方波即高电平和低电 平和时间相等,所以只需设一个定时器定时25us将P1.0求反一次即可。由于题目没有规定,所以可以用 查询方式,也可以用中断方式进行编程实现。方法一:采用查询方式实现#includesbit P1_0=P0;/定义输出引脚变量void main()P1

47、_0=0;/输出初值为0TM0D=0x02;/T0 方式 2 定时TH0=256-25; /计25次,计数初值为模256减25 TL0=TH0;TR0=1;/启动 T0while(1)/无限循环if(TF0) /查询T0溢出标志TF0=0; /溢出标志复位P1_0=!P1_0; /输出求反 方法二:采用中断方式实现 #includesbit P1_0=P0; /定义输出引脚变量void main()P1_0=0;/输出初值为0TMOD=0x02; /T0 方式 2 定时TH0=256-25; /计25次,计数初值为模256减25 TL0=TH0;IE=0x82;/允许CPU响应中断,允许T0发

48、中断请求TR0=1;/启动 T0for(;) /无限循环等待中断timer0()interrupt 1 using 1P1_0=!P1_0; /输出求反8.采用定时/计数器TO对外部脉冲进行计数,每计数100个脉冲,T0切换为定时工作方式。定时1ms后, 又转为计数方式,如此循环不止。假定MCS-51单片机的晶体振荡器的频率为6MHz,要求T0 工作在方式1 状态,请编写出相应程序。解:晶体振荡器的频率为6MHz,则机器周期为12X1/(6*106= 2us,要定时1ms,需计数次数为1000/2=500 次#includesbit P1_0=P0;void main()while(1)TM0

49、D=0x05;/T0 计数,方式一TH0=(65536-100)/256 ; /计数100次TL0=(65536-100)%256;TR0=1;while(!TF0); /等待计数100次的溢出TF0=0;/溢出标志复位TM0D=0x01;/T0 定时,方式一TH0=(65536-500)/256;/计数 100 次TL0=(65536-500)%256;TR0=1;/启动 T0while(!TF0); /等待定时时间到1ms的溢出TF0=0;/溢出标志复位9设单片机的fosc = 12MHz,使P1.0和P1.1分别输出周期为1 ms和10ms的方波,请用定时器TO方式2 编程实现。解:fo

50、sc = 12MHz,所以机器周期为1us。要使P1.0输出周期为1000us的方波,可以通过定时中断方式实现,定时时间为250us,定时计数2次来 实现,对P1.0求反即可。要使P1.1输出周期为10ms的方波,也可以通过定时中断方式实现,定时时间为5ms,当时间到时,对P1.1 求反即可。由于5ms/250us=20,所以也可以通过对250us的定时计数20次来实现。程序如下: #includesbit P1_0=P0;/输出周期为400us的方波的引脚sbit P1_1=P1; /输出周期为10ms的方波的引脚unsigned char num1=0,num2=0;/中断次数计数器,初值

51、为0void main()P1_0=0;/输出初值为0P1_1=0;/输出初值为0TM0D=0x02;/T0 方式 2 定时TH0=256-250;/计200次,计数初值为模256减200TL0=TH0;IE=0x82;/允许CPU响应中断,允许T0发中断请求TR0=1;/启动 T0for(;) /无限循环等待中断void timer0()interrupt 1 using 1num1+;num2+;/中断次数加1if(num1=2)/ 中断次数达到2次 P1_0=!P1_0; /输出 P1_0 求反num1=0; /中断次数复位为0if(num2=20)/ 中断次数达到20次num2=0;/

52、中断次数复位为0P1_1=!P1_1;/输出 P1_1 求反10编写程序,要求使用TO,采用方式2定时,在P1.0输出周期为400US占空比为10:1的矩形脉冲。 解:设fosc = 12MHz,则机器周期为1us。设P1.0初值为0。周期为400us,可定义方式2定时,计数初值为256-40,一个周期中断10次为400us,在中断计数为 1和2(或任意两次计数之间)时,对P1.0求反即可。#includesbit P1_0=P0; /输出周期引脚unsigned char cnt=0; /中断次数计数器,初值为0void main()P1_0=0;/输出初值为0TM0D=0x02;/T0 方式 2 定时TH0=256-40; /计40次,计数初值为模256减40TL0=TH0;IE=0x82;/允许CPU响应中断,允许T0发中断请求TR0=1;/启动 T0for(;) /无限循环等待中断void timer0()interrupt 1 using 1cnt+;/中断次数加1if(cnt=1|cnt=2) P1_0=!P1_0; /中断次数为1或2时对输出引脚求反 if(cnt=10)cnt=0; /中断次数达到10时复位为0

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