单片机原理(余锡存)第六章答案

上传人:re****.1 文档编号:486380685 上传时间:2023-04-13 格式:DOC 页数:7 大小:137KB
返回 下载 相关 举报
单片机原理(余锡存)第六章答案_第1页
第1页 / 共7页
单片机原理(余锡存)第六章答案_第2页
第2页 / 共7页
单片机原理(余锡存)第六章答案_第3页
第3页 / 共7页
单片机原理(余锡存)第六章答案_第4页
第4页 / 共7页
单片机原理(余锡存)第六章答案_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《单片机原理(余锡存)第六章答案》由会员分享,可在线阅读,更多相关《单片机原理(余锡存)第六章答案(7页珍藏版)》请在金锄头文库上搜索。

1、第六章 余锡存 习题与思考题参考答案1、8051单片机内设几个可编程的定时/计数器?它们有几种工作方式?如何选择和设定?作为定时器或计数器,它们的波特率各为多少? 8051单片机内设有两个钧为16位的可编程的定时/计数器,共有4种工作方式,即:方式013位定时/计数器、方式116位定时/计数器、方式2自动重载初值得8位定时/计数器和方式3T0为两个独立的8位定时/计数器,在方式3下,T1停止工作。 8051定时/计数器的工作方式由控制寄存器TMOD的M0、M1两位设置,因为TMOD的地址为89H,所以M0、M1不能位寻址,只能通过字节操作的方式对M0、M1的值进行设定。 当用定时计数器作为波特

2、率发生器时,根据串口的工作模式,有三种情形:方式的波特率为主振频率fosc的十二分之一;方式2的波特率依照下式确定:,其中,SMOD为PCON寄存器中的波特率倍增位。方式1和方式3的波特率计算依照下列关系求的即可: 2、定时/计数器作定时器用时,其定时时间有哪些因素有关?做计数器用时,对外部计数频率有何限制? 8051的定时/计数器工作在定时器状态时,输入的时钟脉冲是由晶体振荡器的输出经12分频得到的,故其频率为晶振频率的十二分之一。所以,定时输出是晶振频率处以12再除以计数值。 8051的定时/计数器工作在计数器状态时,需要两个机器周期才能识别一个从“1”到“0”的跳变,故最高计数频率不大于

3、晶振频率的二十四分之一。3、8051单片机的晶振频率为6MHz,若只使用T0产生500微秒定时,可以选择哪几种定时方式?分别写出定时器的方式控制字和计数器初值。选择方式0或方式1,计数器初值为8192-250,或65536-250。.此处给一个C语言写的程序段,定时信号由P1.0输出: ORG 0000H LJMP MAIN ORG 000BH LJMP TO_INTERRUPTMAIN:SETB EA MOV TH0, (65536-250)/256 MOV TL0, (65536-250)%256 SETB TR0 SETB ET0SJMP $T0_INTERRUPT: CLR TR0 M

4、OV TH0, (65536-125)/256 MOV TL0, (65536-125)%256 P10 = P10 SETB TR0 RETI4、某8051系统晶振频率为6MHz,先欲从P1.7引脚输出一个连续5Hz的方波信号,请编写程序。5Hz的方波周期为200毫秒,高低电平各持续100毫秒,若晶振频率为6MHz,则机器周期为2微秒,故其计数值应为:N=100ms/2s=50000采用方式1进行计数,则 X=M-N=65536-50000=15536H=0C350H程序编写如下:MOVTMOD, #05H;设置T0工作方式,定时,方式1MOVTH0,#0C3H;写入计数器初值MOVTL0,

5、#050H;SETBTR0;启动T0LOOP:JBCTF0,$; 查询定时器溢出标志MOVTH0,#0C3H;MOVTL0,#050HCPL P1.7SJMPLOOP;END 也可以用C语言编写:用定时/计数器T0从P1.7输出周期为5s的方波,晶振频率为6MHz。#include #define uchar unsigned char#define uint unsigned intsbit D1=P10;uchar a;void init() /初始化 TMOD=0x01; /选择定数计数器0的工作方式为16位定时器 TH0=(65535-50000)%256; /赋初值,定时100ms

6、TL0=(65535-50000)/256; EA=1; /中断控制允许 ET0=1; a=0; TR0=1; /启动定时器0void time0() interrupt 1 /定时器0中断函数 TH0=(65535-50000)%256; /赋初值,定时100ms TL0=(65535-50000)/256; a+; TR0=1; void main() init(); while(1) while(a=25)/半个周期(2500ms)时,P1.7上的电平跳变一次。 a=0;P1.7=P1.7; /取反 5、某单片机系统,时钟频率为12MHz,定时/计数器T0用于20ms定时,T1用于100

7、次计数,两者要求重复工作,问:(1)、外部计数脉冲从何引脚输入?(2)、编写达到上述要求的程序。(3)、利用定时/计数器T0、T1编写延时2S的程序。 答:(1)既然使用T1作为计数器,外部计数脉冲当然应该从P3.5输入。 (2)T0用作20ms定时,故N0=20ms/1s=20000 X0=M-N=65536-20000=45535=B1E0H T1的计数值为100,所以X=65536-100=65436=FF9CH 为使俩部件同时工作,将T0设为查询方式,T0设为中断方式。MOVTMOD, #15H;T0定时,方式1;T1计数,方式1MOVTH0,#0B1H;写入T0定时器初值MOVTL0

8、,#0E0H;MOVTH1,#0FFH;写入T1计数器初值MOVTL1,#09CH;MOVSP, #60H;设置堆栈ORG 001BHAJMPT1INTSETBTR0;启动T0SETBTR1;启动T1LOOP:JBCTF0,$; 查询定时器溢出标志MOVTH0,#0B1H;MOVTL0,#0E0HCLR P1.0;设定时输出为P10SETBP1.0END T1INT:MOVTH1,#0FFH;写入T1计数器初值MOVTL1,#09CH;RETI(3)、延时2s,可以将T0设置成方式1,输出周期为200毫秒的等宽脉冲,设该信号由P1.0输出。再由T1进行计数,将P1.0输出连接道T1输入。则T1

9、的计数值为100,工作方式选方式1;TO高低电平各持续100毫秒,若晶振频率为6MHz,则机器周期为2微秒,故其计数值应为:N=100ms/2s=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;设置T0工作方式,定时,方式1MOVTH0,#0C3H;写入T0计数器初值MOVTL0,#050H;

10、MOVTL1,#09CH;写入T1计数值MOV TH1,#0FFHSETBTR0;启动T0LOOP:JBCTF0,$; 查询定时器溢出标志MOVTH0,#0C3H;MOVTL0,#050HCPL P1.0SJMPLOOP;JBCTF1,$CPLP1,1;输出2S信号MOVTL0,#050H;MOVTL1,#09CH;写入T1计数值SJMPLOOPEND 6、为什么T1用作波特率发生器时常用工作方式2?若T1设置为方式2,用作波特率发生器,晶振频率为6Mhz,求可能产生的波特率的变化范围。答:串行通信通常是持续的,即很少进行但帧通信,这就要求通信时钟(波特率发生器)必须持续工作,同时为确保时钟准

11、确,就要尽量减少计时中断服务程序中的延时和不确定因素,采用方式2,因为是自动重载计数器初值,简洁、准确。方式2下的波特率计算由下式决定: 波特率=2SMODfosc/64 所以其波特率最高为:187500,最低为:93750。7、怎样选择串行口的工作模式?REN位的作用是什么?TI和RI何时置1?何时清零?串行口的工作模式选择当然是根据工程需要。REN作为SCON寄存器的允许接收位,其作用不言而喻,REN可由用户使用指令进行赋值,REN=1时,允许串行口接收数据,否则不能。 所以,在进行串行通信时,接受端的SCON中的REN必须提前(初始化)置位为1。8、试设计一个8051单片机双机通信系统,

12、编程将A机片内RAM中60H6FH的数据块传送到B机机片内RAM中60H6FH单元中。 连接如图示意:甲机发送(采用查询方式): MOV SCON, 80H ; 设置工作方式2 MOV PCON, 00; 置SMOD=0, 波特率不加倍 MOV R0, 60H ; 数据区地址指针 MOVR2, 10H ; 数据长度LOOP: MOV A, R0 ; 取发送数据 MOV C, P ; 奇偶位送TB8 MOVTB8, C MOV SBUF, A ; 送串口并开始发送数据 WAIT: JBCTI, NEXT ; 检测是否发送结束并清TI SJMP WAITNEXT: INC R0; 修改发送数据地址

13、指针 DJNZR2, LOOP RET乙机接收(查询方式):MOV SCON, 90H; 模作模式2, 并允许接收MOV PCON, 00H; 置SMOD=0MOV RO, 60H ; 置数据区地址指针MOV R2, 10H ; 等待接收数据长度LOOP: JBC RI, READ ; 等待接收数据并清RI SJMP LOOPREAD: MOV A, SBUF ; 读一帧数据 MOV C, P JNC LP0 ; C不为 1 转LP0 JNB RB8, ERR ; RB8=0, 即 RB8不为 P转ERR AJMP LP1LP0: JB RB8, ERR ; RB8=1, 即 RB8不为 P转ERRLP1: MOV R0, A ; RB8=P, 接收一帧数据 INC R0 DJNZ R2, LOOP RETER

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号