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

作者&投稿:采珠 (若有异议请与网页底部的电邮联系)
设MCS-51单片机使用的晶振是12MHz,欲使用定时器/计数器0实现30ms定时中断,在P1.0在产生周期为60ms的方波~

晶振是12MHz,所以机器周期T=1μs
需定时,C//T=0
30ms/1μs=30000
因为30000>8192,需选择方式1,M1M0=01
TMOD=0000 0001B
计数初值为:
65536-30000=35536=8AD0H
所以
TH0=6AH,TL0=0D0H
因为开放总中断和T0中断,IE=10000010B

TCON=0001 0000B;启动T0,TR0就是TCON中的控制位,也可用位操作指令直接将TR0置1
程序见“做而论道”给的程序。

采用12Mhz晶振的51单片机,软件如下(调试通过)

#include

#define PERIODH (65536l-50000l)/0X100 //设50ms中断1次TH1初值
#define PERIODL (65536l-50000l)%0X100 //设50ms中断1次TL1初值
//如果需要极精确的延时,应根据实际编译后的产生的汇编指令,扣除掉中断响应中重装所占用的时间

unsigned int count;//延时时间变量

void timer1() interrupt 3 using 1
{//定时器每0.05秒一次中断

TH1 = PERIODH;
TL1 = PERIODL;

if(count)
{//计数未到0,则保持定时器运行,计数器-1
count--;
}
else
{//计数到0,关定时器
TR1 =0; //stop timer 1
}

}

//以秒为基本定时单位的子程序
void Delay1S(unsigned char x)
{
TH1 =PERIODH;
TL1 =PERIODL;
TR1 = 1;//此时定时开始

count = 20*x;//因50ms中断1次,故乘20
while(count);
}

main()
{
TMOD = 0X10;//方式1
EA = 1;//总中断允许
ET1 = 1;//定时器1中断允许

while(1)
{
Delay1S(1);//延时1秒
Delay1S(2);//延时2秒
Delay1S(3);//延时3秒
Delay1S(4);//延时4秒

}
}

Delay1S函数是调用时才开始计时,根据需要的定时长度到时停止计时。如果定时精度要求不高,可以不用在中段服务程序中关闭定时器,每次调用误差也就在50ms。
可以用KEIL仿真看一下实际时间

不管使用什么工作方式都是可以完成的,这个取决于你设置的定时/计数器的初值。下面使用方式一和方式二来分别说明。
一、使用方式一:
晶振频率为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

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);
}

只有用方式1了。
初始值=65536-50000=15536D=3CB0H
TH1=#3CH TL1=#0B0H
TMOD=#00010000B其他包括程序就简单了,需要再说。


mcs-51单片机是几位
mcs-51单片机是8位。MCS-51单片机是一种8位微控制器,由英特尔(Intel)于1980年推出。该系列单片机具有简单、灵活、高性能的特点,被广泛应用于嵌入式系统、家用电器、工控设备、汽车电子等领域。1. 架构和特点:MCS-51单片机采用的是哈佛结构,包括存储器和数据总线的分离。它有128字节的RAM(随机存取...

MCS51系列单片机的片内ram是多少字节?
MCS-51系列单片机片内RAM共有128字节,地址范围为00H~7FH。在这128字节中,全部都可以按照字节地址进行操作(读、写或运算),直接或间接寻址方式皆可。在这128字节中,按照使用特点,可以分成三类:工作寄存器区、位寻址区和通用数据区。1.工作寄存器区 在MCS-51系列单片机的片内RAM中,有四个工作寄...

MCS—51单片机由哪些部件组成?
【答案】:①一个8位微处理器,内涵1个CPU;②数据存储器(RAM);③程序存储器(ROM);④定时器\/计时器;⑤串行口1个;⑥中断系统;⑦I\/O口,4个输入输出口;⑧特殊功能存储器。

MCS-51单片机有几种基本型号芯片?它们之间有什么区别?
MCS-51系列及80C51系列单片机有很多品种,它们的指令系统相互兼容,主要在内部结构上有所区别。目前使用的MCS-51系列单片机及其兼容产品通常分成以下几类:基本型:典型产品为8031\/8051\/8751。增强型:典型产品8032\/8052\/8752。低功耗型:代表性产品为80C31\/87C51\/80C51。专用型:如Intel公司的8044\/8744,...

mcs-51单片机有几个中断源
mcs-51单片机有5个中断源,分别为:1、外部中断0(INT0):默认中断级别最高,中断入口地址0003H;2、定时\/计数器0(T1):默认中断级别第2,中断入口地址000BH;3、外部中断1(INT1):默认中断级别第3,中断入口地址0013H;4、串行口中断(TX\/RX):默认中断级别第4,中断入口地址0023H;5、...

当mcs-51 复位时,下面说法正确的是( )
当mcs-51复位时,PC=0000HB。1、复位和PC初始值:当MCS-51单片机复位时,它的内部状态被清零,包括程序计数器(PC)。PC被设置为0000H,这是一个特殊的内存地址,通常用于指向引导程序或启动代码的起始位置。这个初始化设置是确保程序可以从一个已知的、安全的起始点开始执行。2、内存地址:0000H是一...

MCS-51系列各档单片机各有什么特点?同一档次的8051、 8751、8031又有何...
【答案】:(1)不同型号MCS-51单片机CPU处理能力和指令系统完全兼容,只是存储器、定时器、中断源和I\/O接口的配置有所不同。(2)8051:片内含有掩膜ROM型程序存储器;只能由生产厂家代为用户固化; 批量大、永久保存、不修改时用。8751:片内含EPROM型程序存储器; 用户可固化,可用紫外线光照射擦除;但...

求MCS-51单片机所有缩写的英文全称【高分】
MCS-51指令虽多,但按功能可分为五类,其中数据传送类28条,算术运算类24条,逻辑操作类25条,控制转移类17条,布尔位操作类17条。pc是programcounter的缩写,即程序计数器,pc是16位的计数器,它始终指向单片机将要执行的下一条指令。sp是stackpoint的缩写,即堆栈指针,指向栈顶。单片机缩写的英文...

MCS51单片机与89C51单片机的区别
1、MCS51单片机:8051是4KBROM,8751是4KBEPROM,8031片上没有程序存储,8951是4KBEPROM。其他性能结构相同,包括片内128B内存、2个16位定时器\/计数器和5个中断源。2、89C51单片机:可编程串行通道、低功耗空闲和掉电模式、片内振荡器和时钟电路。三、配件不同 89C51还多了一个定时器,所以可以说89C51...

MCS-51系列单片机是属于什么体系结构
MCS-51系列单片机,属于哈佛结构体系体系结构。哈佛结构是一种将程序指令存储和数据存储分开的存储器结构。中央处理器首先到程序指令存储器中读取程序指令内容,解码后得到数据地址,再到相应的数据存储器中读取数据,并进行下一步的操作(通常是执行)。目前使用哈佛结构的中央处理器和微控制器有很多,除了...

宝兴县17389145000: 设MCS - 51单片机的晶振频率为12MHZ,使用定时器1工作方式1中断方式在P1输出周期为100ms的方波 -
戎娴除脂: ;ORG 0000HSJMP STARTORG 0001BHMOV TH1, #(65536 - 50000) / 256MOV TL1, #LOW(65536 - 50000)CPL P1.0RETI START:MOV TMOD, #10HMOV TH1, #(65536 - 50000) / 256MOV TL1, #LOW(65536 - 50000)SETB TR1MOV IE, #88HSJMP $END

宝兴县17389145000: MCS - 51单片机 问题1, 晶振的引脚是什么?缩写是什么?作用是什么? 问 -
戎娴除脂: 1、对于51单片机而言,晶振的引脚一般是18/19脚,缩写是XTAL1、XTAL2,作用是给单片机正常工作提供时钟信号. 2、PSEN是29脚,外部程序存储器读选通信号:在读外部ROM时【PSEN非】(即PSEN上添加上划线)低电平有效,以实现外部ROM单元的读操作.

宝兴县17389145000: 设mcs - 51单片机中,晶振频率为12mhz,编程实现使p1.0和p1.1分别输出周期为2ms和5 -
戎娴除脂: ORG 0000H LJMP MAIN ORG 000BH LJMP T0ISR ORG 0030H MAIN: MOV TMOD,#01H MOV TH0,#HIGH(65536-250) MOV TL0,#LOW(65536-250) SETB TR0 SETB ET0 SETB EA MOV R2,#0 SJMP $ T0ISR: CLR TR0 MOV TH0,#HIGH(65536-250) MOV TL0,#LOW(65536-250) SETB TR0 CPL P1.1 INC R2 CJNE R2,#4,T0E CPL P1.0 MOV R2,#0 T0E: RETI END

宝兴县17389145000: MCS - 51采用12MHz的晶振,定时1ms,如用定时器方式1时的初值(16进制数)应为多少?(写出计算过程) -
戎娴除脂: 对于12MHz的时钟,51单片机的机器周期就为 1/(12000000/12)=1us 那么对于定时1ms,需要定时器计数的个数就为 1ms/1us=1000 那么,对于方式1,需要装入的时间常数就为 2^16-1000=64536——0xfc18 建议随便参考一本51单片机的教材,都会有相关介绍.

宝兴县17389145000: 在MCS - 51单片机中,如果采用6MHZ晶振1个机器周期为多少 -
戎娴除脂: 2us,1个机器周期 =12个时钟周期,若f=6MHz,则T = 1/f =1/6 us,那么一个机器周期的时间就是 t=12*T = 2us

宝兴县17389145000: mcs—51单片机晶振为22.1184mhz,使用定时器1的8位自动重装载模式作为串口方式1,S -
戎娴除脂: 当前串口的波特率=19200.书上有公式,代人数字,即可得出结果.

宝兴县17389145000: 晶振频率为12MHz的MCS - 51单片机,使用定时器1以定时方法在P2.0输出周期为800us、占空比为20%的矩形脉冲编程 -
戎娴除脂: 定时160us. 输出一次高电平,四次低电平. 即可. 程序如下:ORG 0000HMOV TMOD, #20HMOV TH1, #(256 - 160)MOV TL1, TH1SETB TR1 LP1:SETB P2.0MOV R2, #5 LP2:JNB TF1, $CLR P2.0CLR TF1DJNZ R2, LP2SJMP LP1 END

宝兴县17389145000: MCS - 51单片机要求串行通讯波特率为9600,应设置哪些特殊功能寄存器为何值,设晶振频率为11.0592MHz -
戎娴除脂: TMOD|=0x20; TH1=0xfd; TL1=0xfd; SCON =0x50; TR1=1; ES=1; EA=1;

宝兴县17389145000: 已知51单片机系统是拥10MHZ的外部晶体振荡器,请问:该片机系统的状态周期与机器周期各为多少? -
戎娴除脂: 状态(时钟)周期=1/F(F为晶振的频率) 机器周期=12乘状态周期,即由12个时钟周期组成 所以当外部晶振为10MHZ时:状态周期为0.1us,机器周期为1.2us.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网