51单片机定时器使用方法怎么用定时器定时10s,21MHZ的外

1 Pages: 1/2& & &Go
qiang2751290
级别: 家园常客
发帖数量: 465 个
工控威望: 779 点
下载积分: 6 分
在线时间: 347(小时)
注册时间: 最后登录:
51单片机如何长时间延时?单片机延时一个小时???
富士低压,POD(觸摸屏),PLC专卖
级别: VIP会员
工控威望: 18978 点
下载积分: 70702 分
在线时间: 7672(小时)
注册时间: 最后登录:
定时中断中对变量累加,然后判断累加值。
tingfenghu
级别: 论坛先锋
发帖数量: 1344 个
工控威望: 1851 点
下载积分: 287 分
在线时间: 2510(小时)
注册时间: 最后登录:
采用多级累加,1ms中断,1sflag,1mflag,1hflag,这样累加,要多久都可以
二手PLC,触摸屏,伺服驱动,各类气动设备/
级别: 实习会员
发帖数量: 5 个
工控威望: 36 点
下载积分: 114 分
在线时间: 0(小时)
注册时间: 最后登录:
二楼楼主,有时间把程序帮忙写一下,谢谢了
宁波自动化网
级别: 工控侠客
发帖数量: 2810 个
工控威望: 3089 点
下载积分: 1853 分
在线时间: 3303(小时)
注册时间: 最后登录:
路过,顶上去
长期回收拆机/二手/库存/工程余货的PLC、变频器、触摸屏、伺服器等工业产品!(长期有效)  手机:138-   QQ:  
级别: 实习会员
发帖数量: 20 个
工控威望: 48 点
下载积分: 39 分
在线时间: 19(小时)
注册时间: 最后登录:
引用引用第2楼tingfenghu于 19:18发表的&&:采用多级累加,1ms中断,1sflag,1mflag,1hflag,这样累加,要多久都可以是这样.赞一个.使用中断.主程序累加要多久有多久.
级别: 探索解密
发帖数量: 120 个
工控威望: 154 点
下载积分: 1505 分
在线时间: 268(小时)
注册时间: 最后登录:
用while(1)循环。
级别: 实习会员
发帖数量: 5 个
工控威望: 37 点
下载积分: 126 分
在线时间: 6(小时)
注册时间: 最后登录:
用中断,如12M晶振,设定62.5ms中断一次,中断16次后a++(a即为1S计时单位),当a=60S 后再分钟b++,依此累计下去就好了!
liutuan6618
级别: 略有小成
发帖数量: 138 个
工控威望: 200 点
下载积分: 121 分
在线时间: 24(小时)
注册时间: 最后登录:
长延时子程序循环调用应该可以啊
级别: 实习会员
发帖数量: 5 个
工控威望: 35 点
下载积分: 94 分
在线时间: 2(小时)
注册时间: 最后登录:
你需要程序延时还是定时器中断了
级别: 实习会员
发帖数量: 5 个
工控威望: 35 点
下载积分: 94 分
在线时间: 2(小时)
注册时间: 最后登录:
for(a=0;a&时间/单位时间,a++)&&&&&& delay100ms();或者delay100ms(时间/单位时间);void Timer0Init(void)&&&&&&&&//1毫秒@11.0592MHz{&&&&AUXR |= 0x80;&&&&&&&&//定时器时钟1T模式&&&&TMOD &= 0xF0;&&&&&&&&//设置定时器模式&&&&TMOD |= 0x01;&&&&&&&&//设置定时器模式&&&&TL0 = 0xCD;&&&&&&&&//设置定时初值&&&&TH0 = 0xD4;&&&&&&&&//设置定时初值&&&&TF0 = 0;&&&&&&&&//清除TF0标志&&&&TR0 = 1;&&&&&&&&//定时器0开始计时}void Timer0Interrupt(void) interrupt 1&&&&&&//1ms{&&a++;&&&&&&&&&& }main(){ while(1){&&if(a&=时间/单位时间)&&&&............}
级别: 工控侠客
发帖数量: 567 个
工控威望: 2425 点
下载积分: 3205 分
在线时间: 357(小时)
注册时间: 最后登录:
起一个变量,与响应时间对照
1 Pages: 1/2& & &Go您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
51单片机中断与定时器资料分析.ppt 57页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:300 &&
你可能关注的文档:
··········
··········
单片机中断系统 中断的定义 所谓中断,是指CPU正在处理某些事务的时候,外部又发生了某一事件,请求CPU及时处理。于是,CPU暂时中断当前的工作,转而处理所发生的事件。处理完毕,再回到原来被中断的地方,继续原来的工作。这样的过程,称为中断。
中断示意图 定时器计数器的概念 一、计数的概念 ??? 选票:画“正”。这就是计数,生活中计数的例子处处可见。比如一个水盆在水龙头下,水龙没关紧,水一滴滴地滴入盆中。水滴持续落下,盆的容量是有限的,过一段时间之后,水就会逐渐变满。51单片机中有两个计数器,分别称之为T0和T1,这两个计数器分别是由两个8位的RAM单元组成的,即每个计数器都是16位的计数器,最大的计数量是65536。 二、定时??? ??? 计数器是如何作为定时器来用的呢?比如一个闹钟,将它定时在1个小时后响闹,我们也能说成是秒针走了(3600)次,所以时间就转化为秒针走的次数的,也就是计数的次数了,可见,计数的次数和时间之间十分相关。那么它们的关系是什么呢?也就是秒针每一次走动的时间要正好是1秒。 ??? 只要计数脉冲的间隔相等,则计数值就代表了时间的流逝。由此,单片机中的定时器和计数器是同一个东西,只不过计数器是记录的外部的触发脉冲,而定时器则是由单片机供给一个非常稳定的计数源。供给定时器的是计数源是机器周期 也就是由单片机的晶体震荡器经过12分频后获得的一个脉冲源(机器周期)。晶振的频率是很准确的,所以这个计数脉冲的时间间隔也很准。一个12M的晶振,它供给给计数器的脉冲时间间隔是1微秒。计数脉冲的间隔与晶振有关,12M的晶振,计数脉冲的间隔是1微秒。 比如滴水的例子,当水持续落下,盆中的水逐渐变满,最终会有一滴水使得盆中的水全满了。这个时候如果再有一滴水落下,水会漫出来,用术语来讲就是“溢出”,而每一滴水落下,用术语来说就是发出一个计数脉冲。 ?水溢出是流到地上,而计数器溢出后就会引发一个定时中断事件,就象定时的时间一到,闹钟就会响一样。
现在另一个问题是:要有多少个计数脉冲才会产生事件。 ?? 刚才已研究过,计数器的容量是16位,也就是最大的计数值到65536,因此计数计到65536就会产生溢出。这个没有问题,问题是我们现实生活中,经常会有少于65536个计数值的要求,如制药厂包装线上,一瓶药片为100粒,500瓶为一箱 那么怎么样来满足这个要求呢? 举例
如果是一个空的水盆要1万滴水滴进去才会满,我在开始滴水之前就先放入一勺水,还需要10000滴吗?对了,这时我们就采用预置数的办法,我要计 100,那我就先放进65436,再来100个脉冲,不就到了65536了吗。定时也是如此,每个脉冲是1微秒,则计满65536个脉冲需时65.536 毫秒,但现在我只要10毫秒,怎么办?10个毫秒为10000个微秒,所以,只要在计数器里面放进55536就可以了。 单片机定时/计数器内部结构 单片机定时/计数器内部结构图 ??GATE=0时,定时/计数是否工作,只取决于TR0是否为1。GATE=1,只有TR0为1,且INT0管脚也是高电平,定时/计数才工作。 ??从电路上看到GATE是一个非门,它与INTx组成一个或门,这个或门与TR0又组成一个与门。当GATE=0时,则~GATE=1(非门),此时无论INT0为高或低,它们相或之后必然为1,此时只要TR0=1,则工作,TR0=0则不工作,不受INT0的影响。当GATE=1时,~GATE=0,则INT0=1时,它们相或为1,此时定时器是否工作受TR0影响;若INT0=0,则无论TR0为什么,定时器都不能工作,即当GATE=0时,定时器受INT0和TR0共同的作用。 ??? 所以,GATE位的状态决定定时器运行控制取决于TR0的一个条件还是TR0和INT0引脚这两个条件。当GATE=1时,由于GATE信号封锁了与门,使引脚 INT0信号无效。而这时候如果TR0=1,则接通模拟开关,使计数器进行加法计数,即定时/计数工作。而TR0=0,则断开模拟开关,停止计数,定时 /计数不能工作。 ??? 当GATE=0时,与门的输出端由TR0和INT0电平的状态确定,此时如果TR0=1,INT0=1与门输出为1,允许定时/计数器计数,在这 种情况下,运行控制由TR0和INT0两个条件共同控制,TR0是确定定时/计数器的运行控制位,由软件置位或清“0”。 定时器/计数器的定时/计数范围 ??? 工作方式0:13位定时/计数方式,因此,最多能计到2的13次方,也就是8192次。 ??? 工作方式1:16位定时/计数方式,因此,最多能计到2的16次方,也就是65536次。 ??? 工作方式2和工作方式3,都是8位的定时/计数方式,因此,最多能计到2的8次方,也说是256次。 ??? 预置值计算:
正在加载中,请稍后...使用51的定时器模拟串口
单片机&嵌入式
单片机应用
嵌入式操作系统
学习工具&教程
学习和开发单片机的必备工具
(有问必答)
(带你轻松入门)
电子元件&电路模块
当前位置: >>
>> 浏览文章
使用51的定时器模拟串口
& 对于一部分坑爹的51单片机来说,压根就米有串口啊!!特别是用来做小东西的利器:STC15F100系列的,坑爹到串口都米有的地步。当然,我们可以使用软件来模拟串口。可惜,软件模拟的串口速度那个慢(12T单片机),误码率比硬件串口那个高&&但是总比没有的好。这个玩意不像硬件一样能支持全双工(12T的。1T的可以,毕竟12T的定时器中断频率快了主程序直接会被阻塞了&&)。
另外STC的手册上面说的8位自动重载定时器竟然TMOD等于6!导致我搞了一下午都调不通,没想到老妖写错了&&定时器重载模式应该是=2.我现在想把TMOD寄存器的O去掉,再用这个词问候他们全家!!
顺便说一句,1T的51单片机足够在定时器里实现全双工,这就是为什么老妖说真实波特率要/3的原因。有RCNT=3这个语句在,所以可以实现同时接收发送&&老妖写程序不写注释是出了名的&&但是至于普通的12T单片机。如果也用老妖得的程序,要注意定时器模式没有16位自动重装模式。如果/3的话,9600就成3200的波特率了&&还是非标准的,这个程序在89C52上最高波特率只能到9600,继续往上加就严重误码&&所以模拟串口还是用1T单片机或者12T降3倍速吧,(但是速度能卡的可怕,我感觉9600都卡)。要不然误码率能搞死人。
对了,顺便说明一下,这个程序在keil c51上通不过,因为Keil内置putchar&&会提示重复定义。能过keil的程序请参考&,&而且似乎keil的printf函数有毛病&&
#include &hwconfig.h&
#include &type-def.h&
#include &stdio.h&
void WaitTF0()
while(!TF0);
void WByte(BYTE out)
//发送启始位
TR0=1;//开定时器
WaitTF0();
//发送8位数据位
while(i--)
TX1=(tmp&0x01);
//先传低位
tmp=tmp&&1;
WaitTF0();
//发送校验位(无)
//发送结束位
WaitTF0();
void putchar(char ch)
WByte(ch);
BYTE RByte()
BYTE in=0;
while(RX1==1);//等待RXD变低,启动定时器,这个是阻塞模式
TR0=1;//同步开定时器
WaitTF0();//等到周期过去
for(cnt=0;cnt&8;cnt++)
in=in &&1;//从高移到低
if(RX1==1) in = in | 0x80;//如果RXD=1,则最高置位
WaitTF0();//等待一位过去
//等待停止位
//WaitTF0();
TR0=0;//关闭定时器
void Init_VSer()
//指令周期=(1000000/Baud)/(12/SysClock)
//定时器值=0x100-指令周期
TMOD |=0x02;
//计数器0,方式2
//停止计数
//T1中断关
//总中断关
void main()
Init_VSer();
printf(&Hello,world!\n&);
a=RByte();//阻塞模式
putchar(a);
顺便附上老妖的减掉三倍速的1T单片机模拟串口程序。稳定得多,当然效率也低的多。那个是靠定时器中断实现的。不过至少不会象在12T上到主程序几乎跑不动的地步。强烈要求老妖出有串口的C版本!
/*----------------------------------------------------*/
/* --- STC MCU International Limited -----------------*/
/* --- 演示STC 15 系列单片机利用定时器1实现模拟串口功能-----*/
/* --- Mobile: (86) -----------------------*/
/* --- Fax: 86-755- --------------------------*/
/* --- Tel: 86-755- --------------------------*/
/* --- Web:
---------------------------*/
/* 如果要在程序中使用或在文章中引用该程序, -----------------*/
/* 请在程序中或文章中注明使用了STC的资料及程序 -------------*/
/*----------------------------------------------------*/
#include &reg51.h&
//define baudrate const
//BAUD = 256 - SYSclk/3/BAUDRATE/M (1T:M=1; 12T:M=12)
//NOTE: (SYSclk/3/BAUDRATE) must be greater than 98, (RECOMMEND GREATER THAN 110)
//开始一直看不懂为什么要除三
//#define BAUD
// 1200bps @ 11.0592MHz
//#define BAUD
// 2400bps @ 11.0592MHz
//#define BAUD
// 4800bps @ 11.0592MHz
//#define BAUD
// 9600bps @ 11.0592MHz
//#define BAUD
//19200bps @ 11.0592MHz
//#define BAUD
//38400bps @ 11.0592MHz
//#define BAUD
// 1200bps @ 18.432MHz
//#define BAUD
// 2400bps @ 18.432MHz
//#define BAUD
// 4800bps @ 18.432MHz
//#define BAUD
// 9600bps @ 18.432MHz
//#define BAUD
//19200bps @ 18.432MHz
#define BAUD
//38400bps @ 18.432MHz
//#define BAUD
// 1200bps @ 22.1184MHz
//#define BAUD
// 2400bps @ 22.1184MHz
//#define BAUD
// 4800bps @ 22.1184MHz
//#define BAUD
// 9600bps @ 22.1184MHz
//#define BAUD
//19200bps @ 22.1184MHz
//#define BAUD
//38400bps @ 22.1184MHz
//#define BAUD
//57600bps @ 22.1184MHz
//define UART TX/RX port
typedef bit BOOL;
typedef unsigned char BYTE;
typedef unsigned int WORD;
BYTE TBUF,RBUF;
BYTE TDAT,RDAT;
BYTE TCNT,RCNT;
BYTE TBIT,RBIT;
BOOL TING,RING;
BOOL TEND,REND;
void UART_INIT();
BYTE buf[16];
void main()
TMOD = 0x00;//timer1 in 16-bit auto reload mode
AUXR = 0x40;//timer1 working at 1T mode
TL1 = BAUD;//initial timer1 and set reload value
TH1 = BAUD&&8;
TR1 = 1;//timer1 start running[原文有错误],感觉这个代码不像老妖写的。注释都英文&&
ET1 = 1;//enable timer1 interrupt
PT1 = 1;//improve timer1 interrupt priority
EA = 1;//open global interrupt switch
UART_INIT();
//user's function
buf[r++ & 0x0f] = RBUF;
if (t != r)
TBUF = buf[t++ & 0x0f];
//-----------------------------------------
//Timer interrupt routine for UART
void tm1() interrupt 3 using 1
if (--RCNT == 0)
RCNT = 3;//直到我看到了这里&&
//reset send baudrate counter
if (--RBIT == 0)
RBUF = RDAT;
//save the data to RBUF
//stop receive
//set receive completed flag
else//这TM不是坑爹吧
RDAT &&= 1;
if (RXB) RDAT |= 0x80;
//shift RX data to RX buffer
else if (!RXB)
//set start receive flag
//initial receive baudrate counter
//initial receive bit number (8 data bits + 1 stop bit)
if (--TCNT == 0)
//reset send baudrate counter
//judge whether sending
if (TBIT == 0)
//send start bit
TDAT = TBUF;
//load data from TBUF to TDAT
//initial send bit number (8 data bits + 1 stop bit)
TDAT &&= 1;
//shift data to CY
if (--TBIT == 0)
//stop send
//set send completed flag
//write CY to TX port
//-----------------------------------------
//initial UART module variable
void UART_INIT()
唉,串口之争告一段落。我还是希望有硬件串口。
另外就是我实在不知道诡异的STC ISP串口是怎么在11.0592下面跑到115200的。本来加倍是溢出/16,那么它就算加倍的加倍,也就是/8&&既然软件模拟不可能实现如此高的波特率。而且6T模式能到230400,我就认为他的SFR有串口四倍速选项。可惜老妖没有拿出来吹,或者说他也不知道。ISP程序也读不出。实在不知道是为啥&&
顺便说一句,STC15系列的片子只要RAM越界就复位&&
顺便提一个老妖的坑爹之处:
ISP定时常数不在表格中写出来&&
/*Define ISP/IAP/EEPROM operation const for IAP_CONTR*/
ENABLE_IAP
//if SYSCLK&30MHz
ENABLE_IAP
//if SYSCLK&24MHz
ENABLE_IAP
//if SYSCLK&20MHz
ENABLE_IAP
//if SYSCLK&12MHz
ENABLE_IAP
//if SYSCLK&6MHz
ENABLE_IAP
//if SYSCLK&3MHz
ENABLE_IAP
//if SYSCLK&2MHz
ENABLE_IAP
//if SYSCLK&1MHz
晕死&&但是我为什么发现似乎0&83这个ISP常数到处可以用,1M的RC设置照样0&83下&&
本文转自:http://www.rwzy.co.cc
【】【】【】【】
上一篇:下一篇:
CopyRight @
单片机教程网
, All Rights Reserved怎么用&span class='hot-word'&单片机&/span&51产生8Mhz的方波
全部答案(共1个回答)
PWM=P1^0;//定义输出脚void main(){
TMOD=0x01;
//定时器0工作方式1 TH0=()/256;
//12M晶振10MS计时常数 TL0=()%256; EA=1;
//开总中断 ET0=1;
//开定时器0中断 TR0=1;
#include"reg52.h"sb相关信息 PWM=P1^0;//定义输出脚void main(){
TMOD=0x01;
//定时器0工作方式1 TH0=()/256;
//12M晶振10MS计时常数 TL0=()%256; EA=1;
//开总中断 ET0=1;
//开定时器0中断 TR0=1;
//启动定时器0
while(1);}//中断函数,启动后每10MS进入一次中断void T0_time(void) interrupt 1{ TH0=()/256;
//12M晶振10MS计时常数 TL0=()%256;
if(PWM)PWM=0;
//输出脚取反
else PWM=1;}
首先选择一个I/O设置为输出模式,这个就是用于输出方波的硬件接口。
频率可调,可以根据你要想要的频率,换算成中断周期,实质上是一个计数器。建议弄一个300K的中...
80C51单片机.pdf更多资料&&
从指标上看:
msp430 在 Active 模式下 & 200 uA/Mhz, 而 STM32 称 Active 模式 180uA/mhz
下面是 MSP43...
你的timer()中断忘了加 interrupt 1了,在后面加上就可以了
答: 水镀与真空电镀有什么区别?
答: 考试合格啊!
答: 当前世界上有四个最大的科学难题,全球各专业的科学家都在设法揭开大自然的这些秘密,如能解开这些谜团,那么人类的生活以及对世界的看法将发生根本的变化。
  一、人体...
答:  2011年二级建造师考试时间(部分省市时间不统一)
6月26日  上午9:00-12:00
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区
相关问答:123456789101112131415

我要回帖

更多关于 单片机定时器有什么用 的文章

 

随机推荐