问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

编程题 设MCS-51单片机系统中晶振频率为12MHz,欲使用定时器/计数器1,采用方式1编写实现1秒定时时间的程

发布网友 发布时间:2022-06-05 08:09

我来回答

5个回答

热心网友 时间:2023-11-12 19:21

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

#include <reg52.h>

#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仿真看一下实际时间

热心网友 时间:2023-11-12 19:22

#include <reg51.h>
unsigned char i;
void main()
{
TMOD=0x10;
TH1=0x3c;
TL1=0xb0;
EA=1;
ET1=1;
TR1=1;

while(1)
{
if(i==20)
{
i=0;
//下面写你要处理的的其他程序,你只要了定时1s。
}
}
}

void a(void) interrupt 3
{
unsigned char i;
TH1=0x3c;
TL1=0xb0;
i++;
}

12Mhz的51单片机,经过12分频后为1MHz,则一个指令周期为1/1Mhz = 1us.
则定时50ms为 0xffff - 0x3cb0,即65535 - 15535 = 50000us = 50ms,则20次的定时:20×50ms=1s。

明白了吗?怪简单的问题……

祝你顺利哦!

热心网友 时间:2023-11-12 19:22

这个太简单了,给你个方法,你自己弄吧,不会多看看书。
1 使能定时器
2 使能定时器中断
3 编写中断程序
我估计你是觉得1秒的时间,定时器达不到,你可以在中断里面再自己写个计数,或者开启计数器2,这样两两相乘,时间就能到1秒钟了。
要做到精确的定时,就要用计数器2,然后在Keil里可以看到时间,再对定时器进行微调就好了。

热心网友 时间:2023-11-12 19:23

void sheding()
{
TMOD=0x10;//定时器/计数器工作方式寄存器的设定
TH1=(65536-50000)/256;
TL1=(65536-50000)%265;
//定时器/计数器控制寄存器设定
EA=1; //全局中断允许位
ET1=1; //打开定时器/计数器1
TR1=1;
}
void zhongan() interrupt 3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
k++;
if(k==20)
{
k=0;
shu++;
if(shu==86400)
shu=0;
}
}

热心网友 时间:2023-11-12 19:23

#include <reg51.h>
unsigned int num ;
void InitTimer1(void)
{
TMOD = 0x10;
TH1 = 0x3C; //50ms定时
TL1 = 0x0B0;
EA = 1;
ET1 = 1;
TR1 = 1;
}

void main(void)
{
InitTimer1();
}

void Timer1Interrupt(void) interrupt 3
{
TH1 = 0x3C;
TL1 = 0x0B0;
num++;
if(num==20){ ;} //1S时间到。
}
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
养胃的药最好的是什么啊 婴儿积食发烧不愿吃药怎么办 板门穴位在哪个部位 手机设置放偷看的方法? 凝结水回收器生产厂家? 个人账户养老金预测公式:现有5万元,缴费20年,能领多少钱? 临沂比较有名的男装品牌 呼伦贝尔市悦动网络科技有限公司怎么样? 呼伦贝尔中汇实业有限公司怎么样? 呼伦贝尔油玉不绝电子商务有限公司怎么样? 请教环形线圈的电感和分布电容的计算公式 求单片机52分别8个按键播放音节中加入第9个按键播放音乐程序 myeclipse导包出现的问题,struts2,spring,jasperreports 用i7 9700k,主板z390战斧导弹,酷冷至尊,b240水冷,最高可以达到多少HZ 怎样才可以让自己在百度上查到自己想要的图片?拜托各位了 3Q 怎么样能让自己的名字和照片出现在百度上 怎么样才能让自己的图片出现在百度图片上呢!! 怎么让图片出现在百度图片中 怎么样才可以让自己的照片在百度图片里出现? 小学一年级始用的英语所学过的 动物 的单词 怎么做手撕酱油肉干 自制手撕猪肉丝 手撕猪肉家常做法,正宗手撕猪肉怎么做 风干手撕猪肉干的做法 没有烤箱怎么做手撕猪肉干 福克斯属于迪士尼吗 福克斯是全球车吗 长安福克斯和福特福克斯一样吗、 我在网上看 好像是吧一样吗、 福特福克斯三厢好吗 近期有中国管理科学院、人力资源和社会保障部共同举办有关质量管理工程师、质量管理师的函授培训班吗? 大连人可以办电子身份证吗? 请问:大连市能快速办理身份证吗?在哪办理? 大连学生办身份证都需要带什么证件 蚂蚁花呗分期不还可不可以 支付宝花呗分期付款,如果不还钱会怎么样? 专案组如何成立 金额达到多少警察会成立专案组??? 被偷多少金额警察成立专案组 人被专案组带走一般带到哪 敲诈勒索罪在什么情况下成立专案组 我被网络诈骗58400元。公安局会为我成立专案组吗 825专案组的基本简介 公安对某案成立专案组什么情况下解散 成立专案组的意义是什么 成立刑事案件专案组对成员的开会提什么要求 *成立的专案组专门对一件案件负责,请问成立对案件的需要案件的什么条件? 急需~恩施哪里有彩色名片印刷,名片设计制作,便宜又好的? 电脑突然打不开网页怎么回事 iPhone+11开游组队麦+为什么会打断通话 PS制作小丑脸