导航:首页 > 操作系统 > 单片机循环定时器

单片机循环定时器

发布时间:2022-07-08 07:49:21

单片机定时和计数原理的循环

单片机的定时器是用内部时钟信号,计脉冲的个数,
计数器是计外面的脉冲个数,
定时器用的脉冲频率是晶振频率的1/12.当计数个数达到一定值后,产生溢出,产生一个中断信号.
而计数器用的脉冲外面的脉冲,从io输入,当计数个数达到一定值后,产生溢出,产生一个中断信号.
两者工作原理差不多.都是计数
,用的信号来源不同.

Ⅱ 51单片机再循环中多次使用定时器计数器,会占用很多资源吗

使用定时器占用资源是最少的,用中断来控制蜂鸣器发生相对于用延时程序来做,占用资源少而且不受外部条件限制。

Ⅲ 怎样用单片机定时器设计0到9秒的循环程序

#define uint unsigned int
#define uchar unsigned char
#include <reg52.h>
uint i;
uchar code TAB[]=[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
void main(void)
{
TMOD=0x22; /*定时器0设置为工作方式2,基准定时(256-6)/1M=0.25ms*/
TH0 =6; //赋T0的预置值6,溢出4000次就是1秒钟
TL0 =6;
ET0=1; //打开定时器0中断
EA=1; //打开总中断
TR0=1; //启动定时器
while(1) //程序循环
{
P3=TAB[(i)];//p3送数
}
}
//定时器0中断
void timer0(void) interrupt 1 using 1
{
static uint t; //注意t的范围,这里涉及到C51变量取值范围这个知识点
t++;
if(t==4000) //T0的预置值6,溢出4000次就是1秒钟,晶振12MHz
{
t=0;
i++;
i=i%10;
}
}

Ⅳ 单片机定时器

一个定时器里面多一些标志量,标志量大小表示不同的定时,就可以当很多定时器来用啊。建议看一些实时操作系统方面的书籍,就可以解决用循环语句会大量占用CPU的时间。

Ⅳ 51单片机定时器的使用

51单片机定时器的GATE=1时,用外部INT0启动定时器,当INT0=0时,
定时器T1会停止计数,这个时候读取T1的值是可以计算出高电平的宽度的。

Ⅵ 单片机 定时器使用

你是刚学习单片机吗?
对于Ljmp和Ajmp
只是寻址范围稍有区别
前者为长转移指令
后者是绝对转移指令,后者范围转移范围在同一个2K字节空间以内,一般没有太大的区别。程序写的较短较密的用后一个就可以。
还有哦
你的程序中有几个错误
T0的入口地址可是000Bh
堆栈指针是C51中已经定义好的专用指针,用于暂存一些有用变量中的内容
20次循环为14h
还有中断返回返回到等待区就好,表示继续执行同样的程序,这样才能循环1S的方波
建议你可以看看你的教材
上面应该都有介绍的。
《单片机原理及应用教程》
第2版
机械工业出版社
这本书是我学过的教材,我觉得挺实用的,你可以参考一下上面107页的程序。
下面是我给你改过的程序
可以参考一下哦!
ORG
0000H
AJMP
MAIN
ORG
000BH
AJMP
PART1
ORG
0030H
MAIN:
MOV
TMOD,#01H
MOV
TH0,#3CH
MOV
TL0,#0B0H
MOV
R7,#0AH
MOV
IE,#82H;这个和你的按位启动是一样效果
SETB
TR0
SJMP
$
PART1:
MOV
TH0,#3CH
MOV
TL0,#0B0H
DJNZ
R7,FANHUI
CPL
P1.0
MOV
R7,#0AH
FANHUI:
RETI
end
其实堆栈指针在51系列中已经定义好了一段区域,最多用于子程序中,例如你在主程序中用了寄存器R1,而且其值在你主程序的其他位置还有用,而且你需要用到一个跳转指令在子程序中进行操作,怕在子程序中也要用到R1,那么先用堆栈将R1的值暂存起来,等完成子程序得时候再退栈,这样原来的R1中的值将不会被破坏。这里还要注意哦,堆栈是顺序操作的,它是后进先出原则哦,这个你可以参考一下C语言。

Ⅶ 单片机定时器原理及使用

这里通俗的说下C51单片机的定时器的工作原理,C51单片机的定时器是由计数器构成的,所计量的时间是通过计算固定周期的脉冲个数的累计获得的,通过设置定时器的工作模式,可以由16位(高、低两个8位)寄存器模式或其他位数的寄存器模式来计数,以16位计数模式来讨论,那就是无论那种工作模式只有当计数用的寄存器的各个位全部置1,也就是满值后下一个计数脉冲进入时使寄存器产生溢出,而这个溢出才会使计数产生中断从而完成一次定时控制,因此,如果我们想产生某个时长的定时,那么我需要将这个时长根据单片机运行的时钟频率、周期等等相关因素换算成需要计数的个数,进而在这个满值的16位寄存器中扣除需要计数的个数,启动运行后当计数值补充满了寄存器就完成了一次计时,而一个16位寄存器满值为2的16次方=65536,假如一个计数脉冲的周期为1us,那么满值后就会耗时65536us,假如我们需要计时36us,那么我们只需要为寄存器赋值65500就可以了,这里需要注意的是,因为C51单片机的寄存器是8位的,我们需要将这个65500拆分出高8位数据装入THx中计算方法为THx=65500/256,再计算出低8位数据装入TLx中,THx=65500%256。

Ⅷ 51单片机怎样用定时器做两个输出循环交替

这个不难,用1个全局变量作为交替标识,我没在家上,这里没U4,没法给你写全,我随便写一段,你自己多琢磨就明白了
unsigned char i; //这个是全局变量
void main()
{
i=0;

while(1)

{
}
}
//你可以设定定时器累加时间到3秒执行一次,这里我就不细写了
//比方30毫秒加一,到3000毫秒就是3秒的意思
void init0() interropt 1 //这里是定时器0的中断,至于定时时间设置,你就自己设置吧
{ //假设P11是1个灯,P12也是个灯,0是开灯
ET0=0; //关掉

if(i==0)

{
P11=0; //假设P11是1个灯,0是开灯

Delay(10); //假设这里是延时10秒,这样,P11就这个灯就开了1秒

P11=1; //这里P11关灯

}

else

{

P12=0; 如果i不是等于0,那么开的就是第二个灯

Delay(8); 此处延时8秒,当然你也可以用定时器1来定时,无非就是多个标识变量
P12=1;
}

i=~i; //把标识取反
TH0=XXX; //此处请自己设置时间

TL0=XXX; //此处请自己设置时间
ET0=1; //打开定时器
}

Ⅸ 51单片机定时器定时 2秒灯亮 3秒灯灭,如此循环

如果想实现无限循环那就采用死循环方式,可以无限的循环如while(1){};然后设定定时器定时时间为1s(此值需要根据单片机确定是否可以设定这么大),其次,设定一个变量对时间进行计数,根据计数情况做出相应的改变,程序可以这样设定:
unsigned
char
gucledstatus
=
0x00;
//全局变量,表示灯当前的状态
0为灭,1为亮
volatile
unsigned
int
gustimecnt;
//全局变量对时间计数
int
main()
{
//增加定时器初始化并开放中断
while(1)
{
if(gucledstatus
==
0x01)
//当前为亮状态
{
if(gustimecnt
>=
7200)
//两个小时时间到
{
gustimecnt
=
0x00;
//清零
gucledstatus
=
0x00;
//灯为灭状态
//此处加程序代码,控制灯为灭的状态
}
else
{
//此处加程序代码,控制灯为亮的状态,此处会重复执行,可以进行控制
}
}
else
if(gucledstatus
==
0x00)
//灯为灭的状态
{
if(gustimecnt
>=
3600)
//1个小时
{
gustimecnt
=
0x00;
gucledstatus
=
0x01;
//亮状态
//增加程序代码,控制灯亮
}
else
{
//增加程序代码,控制灯灭,此处会重复执行,可以进行控制
}
}
}
return
0;
}
在中断函数中,对gustimecnt进行递增即可!

Ⅹ 怎么用51单片机定时1个小时 好像是循环,具体汇编程序是怎样的

开启定时器作为时间基准,
然后再设置几个软件计数器,
比如,你设定定时器每隔10毫秒中断一次,
软件计数器a加1,当a数值=100时,就已经定时1秒了,
软件计数器b这时+1,当b数值=60时,就已经定时1分了,
软件计数器c这时+1,当c数值=60时,就已经定时1小时了。
就是这样累积的定时,
明白?

阅读全文

与单片机循环定时器相关的资料

热点内容
ipad怎么把app资源库关了 浏览:299
量柱比前一天多源码 浏览:416
电子书app怎么上传 浏览:66
国家反诈中心app注册怎么开启 浏览:804
全波差分傅里叶算法窗长 浏览:41
程序员如何讲自己做过的项目 浏览:7
程序员要看的书颈椎 浏览:946
php文章cms 浏览:553
CSS权威指南第三版PDF 浏览:496
android怎么搭建框架 浏览:184
正宗溯源码大燕条一克一般多少钱 浏览:917
电脑感染exe文件夹 浏览:916
wpsppt怎么转pdf格式 浏览:88
腾讯文档在线编辑怎么添加密码 浏览:880
本地不能访问服务器地址 浏览:865
访问服务器命令 浏览:835
华为云服务器分销商 浏览:954
Linux定位内存泄露 浏览:198
工程加密狗视频 浏览:720
不在内网怎么连接服务器 浏览:664