设MCS-51单片机使用的晶振是12MHz,欲使用定时器/计数器1实现50ms定时中断.

设MCS-51单片机使用的晶振是12MHz,欲使用定时器/计数器1实现50ms定时中断。
(1)计算TH0和TL0的值;
(2)确定寄存器TMOD,TCON和IE的值(寄存器中跟本题无关位取值为0);
(3)编写主程序和中断服务程序
额,第一小题是 TH1和TL1,打错了。。。

不管使用什么工作方式都是可以完成的,这个取决于你设置的定时/计数器的初值。下面使用方式一和方式二来分别说明。
一、使用方式一:
晶振频率为12MHz,机器周期为1us,50ms时间需要计数50000次,故计数器初值为(65536-50000),65536是因为方式一中,定时/计数器的最大值为65536(2^16),当然写程序时不一定非要这么计算,因为定时/计数器是溢出产生中断,也就是从最大加1就溢出,最大加1就是等于0的,只要计数个数加上初值等于0就溢出了,也就产生中断了。由于题目上给的是TH1、TL1,所以,设置的时候必须设置定时/计数器T1。故TMOD = 0x10,TCON中只需要设置TR1为1,故TCON = 0x40,IE需要设置ET0和EA为1,故IE = 0x88。
C语言程序:
#include <Reg52.h>
void main (void)
{
TMOD = 0x10;
TH1 = (-50000>>8);
TL1 = -50000;
TCON = 0x40;
IE = 0x88;
while(1);
}

void T1_int (void) interrupt 3
{
TH1 = (-50000>>8);
TL1 = -50000;
}

汇编程序如下:
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP T1INT
ORG 0100H
MAIN:
MOV TMOD, #10H
MOV TH1, #HIGH(-50000)
MOV TL1, #LOW(-50000)
MOV TCON, #40H
MOV IE, #88H
AJMP $
T1INT:
PUSH ACC
MOV TH1, #HIGH(-50000)
MOV TL1, #LOW(-50000)
POP ACC
RETI
二、使用方式二:
由于方式二最大计数值只能是256,显然装不下50000,故可以选一个比较小的计数值,做多次循环就可以做到。选用计数个数为200,那么循环250次就可以了。
C语言程序:
#include <Reg52.h>
void main (void)
{
TMOD = 0x20;
TH1 = -200;
TL1 = -200;
TCON = 0x40;
IE = 0x88;
while(1);
}

void T1_int (void) interrupt 3
{
static unsigned char i = 0;
if (++i >= 250)
i = 0; //如果等于250次,说明50ms时间到了
}

汇编语言:
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP T1INT
ORG 0100H
MAIN:
MOV TMOD, #20H
MOV TH1, #-200
MOV TL1, #-200
MOV R1, #250
MOV TCON, #40H
MOV IE, #88H
AJMP $
T1INT:
PUSH ACC
DJNZ R1, OUT
MOV R1, #250
OUT: POP ACC
RETI
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-05-18
12MHz 的晶振,那么一个周期就是 1 us,所以需要计数 50ms / 1us = 50000,可以选择定时器工作方式 1。

由上述计算:
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;

方式一,所以:
TMOD = 0x10;

运行 TR1 = 1,所以:
TCON = 0x40;

允许中断 ET1 = 1,EA = 1,所以:
IE = 0x88;

综合可以编写如下程序(汇编我不会,不知道你要的是汇编还是C):

#include <reg52.h>

void timer1_int() interrupt 3
{
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;
}

void timer1_init()
{
TH1 = (65536 - 50000) / 256;
TL1 = (65536 - 50000) % 256;

TMOD = 0x10;
IE = 0x88;
TCON = 0x40;
}

void main()
{
timer1_init();

while(1);
}本回答被网友采纳
第2个回答  2013-01-12
只有用方式1了。
初始值=65536-50000=15536D=3CB0H
TH1=#3CH TL1=#0B0H
TMOD=#00010000B其他包括程序就简单了,需要再说。

设MCS-51单片机使用的晶振是12MHz,欲使用定时器\/计数器1实现50ms定时中...
晶振频率为12MHz,机器周期为1us,50ms时间需要计数50000次,故计数器初值为(65536-50000),65536是因为方式一中,定时\/计数器的最大值为65536(2^16),当然写程序时不一定非要这么计算,因为定时\/计数器是溢出产生中断,也就是从最大加1就溢出,最大加1就是等于0的,只要计数个数加上初值等于0...

单片机定时器计数器如何使用
使用12MHz晶振,其机器周期为1us 欲产生5000us周期方波,只需在p1.0以2500us时间交替输出高低电平 1.T0为方式0,则M1M0=00H。使用定时功能,C\/T=0,GATE=0。T1不用,其有关位设为0。因此,TMOD=00H 2.方式0为13长度计数(TL0高3位不使用),设计数初值为X,则(8192-X)*1us=2500us,得X...

微型计算机及接口技术 实践课
1.8051每个中断源相应地在芯片上都有其中断请求输入引脚( ) 2.程序计数器PC不能对它进行读写操作( ) 3.8051单片机的栈底单元是不能利用的,因此,它是一个闲置单元( ) 4.8051单片机对最高优先权的中断响应是无条件的( ) 5.中断初始化时,对中断控制器的状态设置,只可使用位操作指令,而不能使用字节操作指令( )...

求解几道MCS51单片机的答案
5. 若MCS-51 晶振频率为12MHz,则T0 工作于计数方式时,可以接受的计数脉冲频率范围为 1000000~1000000\/65536 。11.欲对300个外部事件计数,可以选用定时器\/计数器T1的模式 0 或模式 1 。 10.MCS-51 单片机的串行口工作于方式0 时用于 同步 移位寄存器。MCS-51单片机串行方...

单片机上机考试,河北工业大学 大三
B.8031单片机共有5 个中断入口,在同一级别里,5个中断源同时发出中断请求时,程序计数器PC的内容变为B。0003H。B.8031单片机晶振频率fosc=12MHz,则一个机器周期为B。1 μS。B.8031的P2口通过一个8输入端与非门接8155的CE,8155控制口地址是 B。FFFFH 。B.8031的定时器T0作定时方式,用模式1(16位计数器)则...

怎样使用51单片机的定时器?
51单片机定时器的使用 51单片机定时器\/计时器的使用 步骤:1、 打开中断允许位:对IE寄存器进行控制,IE寄存器各位的信息如下图所示:EA: 为0时关所有中断;为1时开所有中断 ET2:为0时关T2中断;为1时开T2中断,只有8032、8052、8752才有此中断 ES: 为0时关串口中断;为1时开串口中断 ET1:...

51单片机内部逻辑部件的基本使用方法
内部逻辑部件:有一个管理6个中断源(51子系列1是5个中断源)、两个优先级的中断控制器。4个8位并行I\/O端,每个端口既可以用作输入,也可以用于输出。一个全双工的UART(通用异步接收发送器)串行I\/O口。用于单片机之间的串行通信,或者单片机与PC机、其它设备、其它芯片之间的串行通信。片内振荡电路和...

单片机和51单片机的区别在哪里?
(5) 两个定时器\/计数器,每个定时器\/计数器都可以设置成计数方式,用以对外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制。为方便设计串行通信,目前的52 系列单片机都会提供3 个16 位定时器\/计数器。(6) 五个中断源的中断控制系统。现在新推出的单片机都不只5...

MCS-51系列单片机具有哪些基本特征?
·2个可编程定时\/计数器·5个中断源,2个优先级(52有6个)·一个全双工串行通信口 ·外部数据存储器寻址空间为64kB ·外部程序存储器寻址空间为64kB ·逻辑操作位寻址功能·双列直插40PinDIP封装 ·单一+5V电源供电 CPU:由运算和控制逻辑组成,同时还包括中断系统和部分外部特殊功能寄存器;RAM:用以...

8051单片机的内部硬件结构包括哪五大部分
5、串行口:8051单片机有一个全双工的串行口,可实现单片机和单片机或其他设备间的串行通信。6、中断控制系统:8051共有5个中断源,非为高级和低级两个级别它可以接收外部中断申请、定时器/计数器申请和串行口申请,常用于实时控制、故障自动处理、计算机与外设间传送数据及人机对话等。

相似回答