历史上的今天
返回首页

历史上的今天

今天是:2024年08月24日(星期六)

2021年08月24日 | 51单片机-定时器简单运用

2021-08-24 来源:eefocus

1.细节


上一讲里,我们知道TH0和TL0合成的“16位的变量”的初值最小要为0,不能是负数,


所以我们要满足:65536-( x/(12/11059200) )>=0。


解得x<= 0.071111秒=71.111毫秒。


也就是用定时器的工作模式1最长的定时时间为71毫秒左右而已。


2.定时器开关


首先定时器也是有开关的,这个相当于我们的导管是否打开让水流进“试管”里。


因为我们用的是定时器0,TCON^4这个位就是控制定时器0是否打开或关闭,所以“TR0=1;”就是打开了定时器开始计时,“TR0=0;”是关闭了定时器计时功能。


只要打开了定时器,TH0和TL0合成的“16位的变量”就会每过(12/11059200)秒就自加1,直到定时器溢出。


3.溢出标志


我们的定时器0一旦溢出,TCON^5就会被置1(TF0==1),如果我们不使用中断函数也是可以在主函数里等待判断“if(TF0==1)”。TF0跟外部中断0的IE0一样,被置1了需要软件清零。


4.工作模式1的代码


这里我们用定时器0来实现间隔50ms的流水灯实验


#include  

#include //详见第六章第8讲

 

void main()

{   

    u8 i=0;

    LED_Init();   //初始化LED硬件模块 

    TMOD = 0x01;  //设置定时器0为工作模式1

    TH0  = 0x4C;  //设置定时时间为50ms

    TL0  = 0x00;

    TR0  = 1;     //启动定时器0

     

    while(1)

    {

        if (TF0 == 1)     //判断定时器0是否溢出,每隔50ms就可以进入一次这个if语句

        {

            TF0 = 0;      //定时器0溢出后,清0溢出标志

            TH0 = 0x4C;   //重新赋初值,保证下次溢出间隔时间还是50ms

            TL0 = 0x00;

            P0=~(0x01<            i++;

        }   

        if(i>=8)i=0;

    }

}


5.定时器1的使用


如果我们用定时器1实现上处代码同样的功能,那么TMOD只要初始化为“TMOD=0x10;”


还有把TH0,TL0,TR0,TF0这些全部改为TH1,TL1,TR1,TF1即可,所以说这两个定时器的工作原理都是一样的。


#include  

#include //详见第六章第8讲

 

void main()

{   

    u8 i=0;

    LED_Init();   //初始化LED硬件模块 

    TMOD = 0x10;  //设置定时器1为工作模式1

    TH1  = 0x4C;  //设置定时时间为50ms

    TL1  = 0x00;

    TR1  = 1;     //启动定时器1

     

    while(1)

    {

        if (TF1 == 1)     //判断定时器1是否溢出,每隔50ms就可以进入一次这个if语句

        {

            TF1 = 0;      //定时器1溢出后,清0溢出标志

            TH1 = 0x4C;   //重新赋初值,保证下次溢出间隔时间还是50ms

            TL1 = 0x00;

            P0=~(0x01<            i++;

        }   

        if(i>=8)i=0;

    }

}


推荐阅读

史海拾趣

EDAC公司的发展小趣事

ECS-A公司是一家专注于电子元器件生产的公司。在发展过程中,ECS-A公司意识到全球化是不可避免的趋势。因此,公司决定实施全球化战略,通过在海外设立生产基地、研发中心和销售网络,拓展国际市场。经过多年的努力,ECS-A公司的产品已经出口到全球多个国家和地区,公司也在多个国家和地区建立了分支机构。这一全球化战略不仅使ECS-A公司的销售额持续增长,也提升了公司的国际竞争力。

BROTHER公司的发展小趣事

在电子产品领域取得一定成就后,BROTHER并没有停止前进的步伐。公司开始寻求多元化业务的拓展,以应对市场变化和风险。除了传统的缝纫机和电子产品外,BROTHER还开始涉足打印机、传真机、扫描仪等办公设备领域。通过不断创新和研发,BROTHER成功推出了一系列高品质、高性能的办公设备产品,满足了不同客户的需求。同时,公司还积极开拓新的市场领域,如智能家居、物联网等前沿领域,为未来发展奠定了坚实基础。

Fluke公司的发展小趣事

随着全球市场的不断扩大,BROTHER意识到要实现持续发展,必须走国际化道路。因此,公司在上世纪五十年代开始积极实施国际化战略。首先,BROTHER在美国纽约建立了销售总部,以更好地服务北美市场。随后,公司又在欧洲等地建立生产基地和销售网络,进一步拓展国际市场。通过国际化战略的实施,BROTHER不仅提升了品牌知名度和市场份额,还积累了丰富的跨国经营经验。

DAESAN公司的发展小趣事

随着全球化进程的加速,DAESAN公司开始将目光投向国际市场。他们制定了详细的国际化战略,积极拓展海外市场。通过与国外企业的合作和交流,DAESAN公司逐渐建立起全球化的生产和销售网络。他们的产品不仅畅销亚洲市场,还成功打入欧美等发达国家市场。国际化战略的实施,使DAESAN公司的品牌知名度和影响力得到了显著提升。

Avalon Photonics公司的发展小趣事

随着公司的发展,Avalon Photonics开始寻求国际合作,以进一步拓展市场。公司与欧洲一家知名的科研机构建立了战略合作关系,共同研发新一代的光子学设备。这一合作不仅带来了技术上的互补,也为Avalon打开了欧洲市场的大门。通过国际合作,Avalon的产品逐渐在国际市场上获得认可,公司规模也逐步扩大。

乔光电子(FTR)公司的发展小趣事

随着公司的发展,Avalon Photonics开始寻求国际合作,以进一步拓展市场。公司与欧洲一家知名的科研机构建立了战略合作关系,共同研发新一代的光子学设备。这一合作不仅带来了技术上的互补,也为Avalon打开了欧洲市场的大门。通过国际合作,Avalon的产品逐渐在国际市场上获得认可,公司规模也逐步扩大。

问答坊 | AI 解惑

程控滤波资料和论文集锦

本帖最后由 paulhyde 于 2014-9-15 03:13 编辑 我最近,在做程控滤波,就搜集了一些资料和论文集锦,供大家参考哦,这只是其中的一部分, 如果有需要的,我还会继续传哦,先传这么多吧!!!!    …

查看全部问答>

模板使用 编译选项-frepo 问题

之前写的一个程序,中间用到模板类,模板类的所有定义和实现都在同一个h文件中,使用-frepo开关编译。之前一直都是好好的,今天换了台机器,编译出来的代码在download的目标机的时候说一大堆函数未定义,仔细看了全部都是该模板类的函数。但同样代 ...…

查看全部问答>

Bank调用

大家好,我想问一下跨BANK调用是不是不可以的,要怎样才可以实现两个BANK之间调用?谢谢…

查看全部问答>

运动控制器的芯片选型

最近在筹备运动控制器,要求至少3轴联动,定位精度0.01mm,伺服周期1ms以下,可实现空间圆弧插补。 看了TI公司的F2810、F2812、F28235、F28335、F28345,低价格的F28035、F2802;F28335和F28345是浮点DSP,2009年TI报价分别是15.65和14.42美元,相 ...…

查看全部问答>

【高分请教】Windows下如何自动安装驱动程序

Hi, 小弟目前做的项目需要在Windows下安装一个简单的USB驱动,驱动程序由第三方提供(没有经过MS认证),包含DLL、INF、SYS等等文件。 一般情况下,当即插即用设备连上PC后,如果PC中没有该设备的驱动,会弹出安装驱动的提示,用户根据提示来一步 ...…

查看全部问答>

WinCE下应用程序读.txt文件乱码

编写一个在WinCE下运行的 ,基于MFC的应用程序,读取.txt文件 文件内容的结构如下 书名1;价格1 书名2;价格2 书名3;价格 3 。。。。。。 CFile myfile(L\"D:\\\\food.txt\", CFile::modeRead); int length = myfile.GetLength(); char ...…

查看全部问答>

请教达人

我想采集几路直流电压信号到计算机,然后经过运算再输出到外围显示一些数字,不知道硬件电路需要些什么?因为我不是学计算机的,所以希望由一些市场上可以买到的模块拼请来实现,希望哪位达人知道一下,谢谢了!…

查看全部问答>

请问各位高手,北桥芯片具体什么作用啊?

我有个疑问,就是主板上的北桥芯片起什么作用,虽然在网上一搜一大堆,但无非就是说是连接CPU和内存,AGP,的作用,起中间枢纽的作用,回答的非常初级,也没有作实质上的解释,但我想知道的是,如果撇开北桥怎么样?如果要从内存取数据,CPU直接先送 ...…

查看全部问答>

用Micro Framework 3.0对GPIO的操作

我的开发环境是VS2008,我想写一个WinCE下对S3C2440的GPIO操作的程序,应该怎样写呢?比如,我希望操作GPB的某个管脚,应当怎样写代码?另外,Micorsoft.SPOT.Hardware下的CPU.PIN的用法有些不解,(CPU.PIN)15是什么意思呢?是表示芯片的第15个管脚 ...…

查看全部问答>

高分请教简单问题:AT89s52的访问外部地址问题

我的硬件原理图如下链接:请放心打开! http://www.dzjia.cn/html/jiejuefangan/20070619/24939_2.html 如图示:P2.7接到RC500的NCS片选脚上,这时我想要访问RC500的内部地址,我就应该先定义要访问的地址,如下: #define Page_Sel      ...…

查看全部问答>