历史上的今天
返回首页

历史上的今天

今天是:2025年03月24日(星期一)

正在发生

2021年03月24日 | 51单片机定时/计数器使用方法

2021-03-24 来源:eefocus

定时/计数器的使用方法:

1、根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。

2、根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器TH0/TH1和TL0/TL1。

3、根据需要开放定时/计数器中断(后面需要编写中断服务程序)。

4、设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始工作。

5、等待定时/计数器时间到,到则执行中断服务程序;如用查询处理则编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。


/******************************************************************************************/

/*                                                                                                                                                                                  */

/*                采用定时/计数器设计的60分钟倒计时程序,实现60分钟倒计时。利用4位数码管显示分、秒。*/

/*        数码管每秒更新一次,秒表由59倒计时到00,则分钟减1。                                                                     */

/*                                                                                        */

/******************************************************************************************/



#include

#define uint unsigned int

#define uchar unsigned char

#define LED P2 // 数码管段选

// 数码管位选

sbit WE1 = P0^0;

sbit WE2 = P0^1;

sbit WE3 = P0^2;

sbit WE4 = P0^3;



uint min = 59;

uint sec = 59;

uint i;



uchar num_table[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; // 0~9十六进制代码。



void display(); // 数码管显示程序

void delay(uint x); // 延时程序



void main() {

        TMOD = 0x01;// 使用方式1

        TH0 = 0xD8;// 初值寄存器高8位

        TL0 = 0xF0;// 初值寄存器低8位

        EA = 1;// 允许中断请求总控制

        ET0 = 1;// 定时/计数器T0溢出中断允许

        TR0 = 1;// 定时/计数器T0的启动位

        i = 0;

        while (1)

        {

                 display();

        }

}



void time0_int(void) interrupt 1 {// 中断服务程序

        TH0 = 0xD8;

        TL0 = 0xF0;

        i++;

        if (i == 100) {

                 sec--;

                i = 0;

                if (sec == 0) {

                        sec = 59;

                        min--;

                        if (min == 0) min = 59;

                }

        }

}



void display() {

        uint min_s = min/10;

        uint min_g = min%10;

        uint sec_s = sec/10;

        uint sec_g = sec%10;



        WE1 = 1;

        LED = num_table[min_s];

        delay(1);

        WE1 = 0;

        WE2 = 1;

        LED = ~(~num_table[min_g]|0x80); // 显示时后添加一个小数点

        delay(1);

        WE2 = 0;

        WE3 = 1;

        LED = num_table[sec_s];

        delay(1);

        WE3 = 0;

        WE4 = 1;

        LED = num_table[sec_g];

        delay(1);

        WE4 = 0;

}



void delay(uint x) {

        uint i;

        while (x-- != 0)

        {

                for (i = 0; i < 300; i++);

        }


推荐阅读

史海拾趣

BERNSTEIN公司的发展小趣事

BERNSTEIN公司的历史可以追溯到Weimar时期,当时Bernstein兄弟在莱比锡创立了“Monopol”公司,专注于为电气建筑服务控制系统生产和制造低压产品。初创时期,公司面临着资金短缺、市场竞争激烈等诸多困难。然而,Bernstein兄弟凭借对技术的执着追求和对市场的敏锐洞察,成功研发出了一系列具有竞争力的产品,并逐渐在市场上站稳脚跟。

CDIL[Continental Device India Pvt. Ltd.]公司的发展小趣事

自1964年起,CDIL便踏上了半导体制造的先驱之路。当时,电子产业正处于蓬勃发展的初期,CDIL凭借对技术的敏锐洞察和不懈追求,迅速成为印度乃至全球半导体制造领域的佼佼者。其硅芯片和器件的制造质量和技术水平均达到了世界级标准,为印度电子产业的发展奠定了坚实基础。

安美通(APPCON)公司的发展小趣事

安美通非常重视企业文化建设和团队建设。公司倡导创新、务实、合作的企业文化,为员工提供了一个宽松、自由、充满激情的工作环境。同时,公司还积极开展各类培训活动,提升员工的专业素养和综合能力。这些措施使得安美通的团队更加团结、高效,为公司的持续发展提供了有力的保障。

这五个故事虽然只是安美通发展过程中的一部分,但它们充分展示了安美通在电子行业中不断努力、创新、拓展的精神和成果。未来,安美通将继续秉承这种精神,不断推动公司的发展和进步。

Connection One公司的发展小趣事

为了进一步提升国际竞争力,Connection One公司开始实施全球化战略布局。公司在全球范围内设立研发中心和销售网络,以便更好地了解当地市场需求并提供定制化产品。这一举措不仅加速了公司的国际化进程,还为其带来了更多的商业机会。

益升华(Essentra)公司的发展小趣事

作为一家有社会责任感的企业,益升华(Essentra)公司始终关注环保问题。公司积极采用环保材料和工艺,减少生产过程中的废弃物排放和能源消耗。同时,公司还倡导员工参与环保活动,提高环保意识。此外,益升华(Essentra)公司还积极推广循环经济和可持续发展理念,努力为社会和环境做出贡献。

Bel Power Solutions公司的发展小趣事

在国内市场取得一定成绩后,Bel Power Solutions开始积极拓展国际市场。公司通过与全球知名企业的合作,成功将产品打入国际市场,并赢得了良好的声誉。同时,公司还积极寻求与系统集成商、分销商等建立长期稳定的合作关系,共同开拓市场。这些合作伙伴关系的建立,不仅为公司带来了更多的商业机会,还提升了公司的品牌影响力和市场份额。

问答坊 | AI 解惑

监视电视系统防雷防护技术方案简介

一、 闭路监视电视系统简介:     CCTV系统结构:     电视监控系统(Closed Circuit Television,简称CCTV),一般由以下三部分组成:     前端部分:     主要由黑白(彩色)摄像机、镜头、云台、防 ...…

查看全部问答>

Altium Designer 使用

Altium Designer 使用 —— 快速制作原理图封装当制作引脚数比较多的器件的原理图封装时,可以使用AD提供的“smart grid insert”功能快速制作原理图封装库。本文以制作K9F1G08为例,进行简单说明。K9F1G08的引脚分布如图1所示:1. 打开 excel ,按 ...…

查看全部问答>

一个划时代的伟大产品-超级硬件调试器横空出世

一个划时代的伟大产品-超级硬件调试器横空出世     程序员中多年来一直流传着一种传说,除了市面上能够见到的为数不多的几种调试软件之外,还存在着一种神秘的硬件调试器,其功能强大无比。任何调试软件调不了的程序,硬件调试器都能搞 ...…

查看全部问答>

螺旋

哪位大侠知道怎么样把一张背景图采用螺旋方式显示吗?就是顺时针扇形方式来显示 给人动态效果,而不是一次性把图片显示出来!…

查看全部问答>

最新cadence(allegro)视频教程

本人从朋友那里得到一份cadence(allegro)视频教程15.5板本,是一个培训班的内部视频讲义,清晰度很高,很具体详细,是自学的好资料。如果您没时间看书或者想很快学会allegro的话就请联系:13783696474   或者QQ:20247125    ...…

查看全部问答>

新人报道

我是刚刚来到的新人,刚刚接触WINCE。现在跟老师做着一个项目,需要将一个PC上的一个写好的软件移植到wince6.0下面,平台在mini的6410上搭建,还需要搞好一个ccd摄像头的驱动(有可二次开发的开发包),想问问,如果要入门,那么我应该先看拿些书籍 ...…

查看全部问答>

f2812 SCI RS485 调试

1.最近我用sci调试RS485的时候遇到一个怪现象: 有时候(不是全部,重新加载程序的时候一般都是)cpu明明有数据发出来,SCIRX,SCITX波形正常,可是485驱动芯片出来的两线信号发不出来,示波器只能看到负半波.只要我把与其通信的人机界面的通讯口拔出来 ...…

查看全部问答>

【汇总】德仪MSP430视频

MSP430Ware 入门介绍较以往其他版本,德州仪器 IDE CCS V5.1 程序更加简练有效,运行更加快捷,开发环境也更加直观。这里将着重介绍CCS v5.1一个新的组成部份- TI资源管理器(TI Resource Explorer)。TI资源管理器向客户提供一种直接简单的途径进 ...…

查看全部问答>

STM32-FSMC-LCD详解

/*来源于网络非原创*/ STM32-FSMC-LCD详解LCD有如下控制线: CS:Chip Select 片选,低电平有效 RS:Register Select 寄存器选择 WR:Write 写信号,低电平有效 RD:Read 读信号,低电平有效 RESET:重启信号,低电平有效 DB0-DB15:数据线 ...…

查看全部问答>

时钟的触发时序执行时间?

最近在学习FPGA方面知识,对时钟触发有了了解,但有好多问题有些不明白。希望大虾解释 如: always(posedge CLK) begin //执行任务块 end 假如时钟的周期为50nS,占空比50%;所执行的任务块比较耗时间,超过50nS,而此时任务块尚未完全执行完 ...…

查看全部问答>