AT89S51单片机的定时/计数器T0的应用

发布者:EtherealBeauty最新更新时间:2023-05-19 来源: elecfans关键字:AT89S51  单片机  定时  计数器T0 手机看文章 扫描二维码
随时随地手机看文章

1.实验任务

用AT89S51单片机的定时/计数器T0产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加1,秒计数到60时,自动从0开始。硬件电路如下图所示


2.电路原理图

AT89S51单片机的定时/计数器T0的应用

图4.15.1

3.系统板上硬件连线

(1).把“单片机系统”区域中的P0.0/AD0-P0.7/AD7端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P0.0/AD0对应着a,P0.1/AD1对应着b,……,P0.7/AD7对应着h。

(2).把“单片机系统”区域中的P2.0/A8-P2.7/A15端口用8芯排线连接到“四路静态数码显示模块”区域中的任一个a-h端口上;要求:P2.0/A8对应着a,P2.1/A9对应着b,……,P2.7/A15对应着h。

4.程序设计内容

AT89S51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。只要通过设置特殊功能寄存器TMOD,即可完成。定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。

现在我们选择16位定时工作方式,对于T0来说,最大定时也只有65536us,即65.536ms,无法达到我们所需要的1秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取T0的最大定时为50ms,即要定时1秒需要经过20次的50ms的定时。对于这20次我们就可以采用软件的方法来统计了。

因此,我们设定TMOD=00000001B,即TMOD=01H

下面我们要给T0定时/计数器的TH0,TL0装入预置初值,通过下面的公式可以计算出

TH0=(216-50000) / 256

TL0=(216-50000) MOD 256

当T0在工作的时候,我们如何得知50ms的定时时间已到,这回我们通过检测TCON特殊功能寄存器中的TF0标志位,如果TF0=1表示定时时间已到。

5.程序

AT89S51单片机的定时/计数器T0的应用

图4.15.2

6.汇编源程序(查询法)

SECOND EQU 30H

TCOUNT EQU 31H

ORG 00H

START: MOV SECOND,#00H

MOV TCOUNT,#00H

MOV TMOD,#01H

MOV TH0,#(65536-50000) / 256

MOV TL0,#(65536-50000) MOD 256

SETB TR0

DISP: MOV A,SECOND

MOV B,#10

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,B

MOVC A,@A+DPTR

MOV P2,A

WAIT: JNB TF0,WAIT

CLR TF0

MOV TH0,#(65536-50000) / 256

MOV TL0,#(65536-50000) MOD 256

INC TCOUNT

MOV A,TCOUNT

CJNE A,#20,NEXT

MOV TCOUNT,#00H

INC SECOND

MOV A,SECOND

CJNE A,#60,NEX

MOV SECOND,#00H

NEX: LJMP DISP

NEXT: LJMP WAIT

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END

7.C语言源程序(查询法)

#include

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};

unsigned char second;

unsigned char tcount;

void main(void)

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

TR0=1;

tcount=0;

second=0;

P0=dispcode[second/10];

P2=dispcode[second];

while(1)

{

if(TF0==1)

{

tcount++;

if(tcount==20)

{

tcount=0;

second++;

if(second==60)

{

second=0;

}

P0=dispcode[second/10];

P2=dispcode[second];

}

TF0=0;

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

}

}

}

8.汇编源程序(中断法)

SECOND EQU 30H

TCOUNT EQU 31H

ORG 00H

LJMP START

ORG 0BH

LJMP INT0X

START: MOV SECOND,#00H

MOV A,SECOND

MOV B,#10

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,B

MOVC A,@A+DPTR

MOV P2,A

MOV TCOUNT,#00H

MOV TMOD,#01H

MOV TH0,#(65536-50000) / 256

MOV TL0,#(65536-50000) MOD 256

SETB TR0

SETB ET0

SETB EA

SJMP $

INT0X:

MOV TH0,#(65536-50000) / 256

MOV TL0,#(65536-50000) MOD 256

INC TCOUNT

MOV A,TCOUNT

CJNE A,#20,NEXT

MOV TCOUNT,#00H

INC SECOND

MOV A,SECOND

CJNE A,#60,NEX

MOV SECOND,#00H

NEX: MOV A,SECOND

MOV B,#10

DIV AB

MOV DPTR,#TABLE

MOVC A,@A+DPTR

MOV P0,A

MOV A,B

MOVC A,@A+DPTR

MOV P2,A

NEXT: RETI

TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

END

9.C语言源程序(中断法)

#include

unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,0x00};

unsigned char second;

unsigned char tcount;

void main(void)

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

TR0=1;

ET0=1;

EA=1;

tcount=0;

second=0;

P0=dispcode[second/10];

P2=dispcode[second];

while(1);

}

void t0(void) interrupt 1 using 0

{

tcount++;

if(tcount==20)

{

tcount=0;

second++;

if(second==60)

{

second=0;

}

P0=dispcode[second/10];

P2=dispcode[second];

}

TH0=(65536-50000)/256;

TL0=(65536-50000)%6;

}


关键字:AT89S51  单片机  定时  计数器T0 引用地址:AT89S51单片机的定时/计数器T0的应用

上一篇:AT89S51单片机实现可预置可逆4位计数器的设计
下一篇:AT89S51单片机串行口的内部结构及功能介绍

推荐阅读最新更新时间:2024-11-08 11:43

怎样分析单片机程序
分析单片机程序是为编写程序做准备,包括对硬件电路和软件功能的分析,提出了实用的分析方法,并总结出分析程序的一般步骤和应注意的问题。 设计单片机程序不是从零开始,而是先对已有的相关程序进行阅读分析。分析程序是设计、修改、优化、维护的重要步骤。因此,掌握单片机程序的分析方法是非常必要的。 1 详细阅读设备使用说明书 可投产(使用)的单片机系统都附有使用说明书(手册),它介绍了该产品的(工作原理)技术指标、使用步骤、操作方法和注意事项,同时还有系统的有关状态、显示、报警等信息。这为阅读程序、划分模块分析功能提供了极大的帮助。若有该系统,应对其反复操作,熟悉使用步骤和操作方法。操作时应全面详细,确保程序和外围电路的每一部分都
[单片机]
51单片机定时器\计数器的工作原理
定时器/计数器的结构: PS:此处涉及到了TCON和TMOD特殊功能寄存器,详见51单片机之特殊功能寄存器SFR篇 TH0、TH1:俩个加法型的计数变量,当外部产生一次时钟信号时,计数加一,直到加到最大值时发生溢出 何时处于计数器方式?何时处于定时器方式? 1、当计数变量使用单片机内部的时钟作为时钟源,我们称这种方式为定时器方式 2、当计数变量使用片外引脚P3.4、P3.5上存在的方波脉冲的时候,我们称这种方式为计数器方式 在使用片外引脚P3.4、P3.5上存在的方波脉冲时,需要俩个机器周期的时间才能确定一次脉冲信号,即需要产生下降沿时才能确定一次脉冲信号 TCON和TMOD特殊功能寄存器: 定时器/计数器工
[单片机]
51<font color='red'>单片机</font>之<font color='red'>定时</font>器\<font color='red'>计数器</font>的工作原理
多频段MCU通过Thread、Zigbee、Bluetooth®5和Sub-1 GHz等多协议连接楼
为满足楼宇、工厂和电网日益增长的连接需求,德州仪器(TI)近日推出其最新的SimpleLink™无线和有线微控制器(MCU)。这些新器件为Thread、Zigbee®、Bluetooth®5和Sub-1 GHz提供业界领先的低功耗和同时运行多协议多频段连接。凭借更大存储和无限制的连接选项,扩展的SimpleLink MCU平台可为设计人员提供在TI 基于Arm® Cortex®-M4内核的MCU上的100%代码重用,以增强并将传感器网络连接到云。 新型SimpleLink MCU支持以下无线连接选项: ·Sub-1GHz:CC1312R无线MCU。 ·多频段(Sub-1 GHz、Bluetooth低功耗、Thread和
[嵌入式]
AT89c51与AT89S51单片机的区别
AT89S51 是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统供给高性价比的解决方案。 AT89S51具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层
[单片机]
ADI新款精密模拟微控制器集成了片上数据转换器
    Analog Devices, Inc.推出两款高集成度精密模拟微控制器,分别为 ADuC7023 和 ADuC7122。这两款器件集成了片上存储器、数据转换器和众多模拟外设,可提供业界最高水平的可编程性能和最小的封装尺寸。ADuC7023 和 ADuC7122 精密模拟微控制器采用闪存容量高达 126KB 的 ARM7 处理器,可以在基于固定和可调谐频率激光的光收发器和模块应用中实现数字诊断,并能确保精确控制光驱动器和诊断过程。     这两款最新的微控制器集成了片上12位 ADC(模数转换器)和 DAC(数模转换器),与竞争性分立方案相比,这种整体解决方案可减小高达75%的尺寸。ADuC7023 和 ADuC712
[单片机]
STM32单片机的系统定时器初始化设置
正如之前文章所述,在使用外设功能时,都必须提前对其精心初始化才能使用其功能。 以下是系统定时器初始化的程序清单。 #include“stm32f10x_lib.h” unsigned char sys_nub;//系统定时器中断计数变量 //SysTick 设置 void SysTIck_Config(void) { //失能SysTIck定时器 SysTIck_CounterCmd(SysTIck_Counter_Disable); //失能SysTick中断 SysTick_ITConfig(DISABLE); //设置SysTick时钟源 SysTick_ClockSourceConfig(SysTick_Source_
[单片机]
STM32<font color='red'>单片机</font>的系统<font color='red'>定时</font>器初始化设置
MCS-51单片机的程序状态寄存器PSW有什么用?
PSW是一个8位寄存器,用于设定CPU的状态和指示指令执行后的状态。 CY(PSW.7):进位标志。在执行加减运算指令时,如果运算结果的最高位(D7)发生了进位或借位,则CY由硬件自动置1。 AC(PSW.6):半进位标志位,也称为辅助标志位。在执行加减运算指令时,如果运算结果的低半字节(D3)发生了向高半字节进位或借位,则AC由硬件自动置1。 F0、F1(PSW.5 和PSW.1):用户标志位。用户可以根据需要对F0、F1赋予一定的含义,由用户置1和清0,作为软件标志。 RS1、RS0(PSW.4 和PSW.3):工作寄存器组选择控制位。通过对这两位设定,可以从4个工作寄存器组中选择一组作为当前工作寄存器。
[单片机]
MCS-51<font color='red'>单片机</font>的程序状态寄存器PSW有什么用?
【GD32 MCU 移植教程】2、从 GD32F303 移植到 GD32F503
1. 前言 GD32E503 系列是 GD 推出的 Cortex_M33 系列产品,该系列资源上与 GD32F303 兼容度非常高,本应用笔记旨在帮助您快速将应用程序从 GD32F303 系列微控制器移植到 GD32E503 系列微控制器。 2. 引脚兼容性 GD32F303 与 GD32E503 在相同封装下是 Pin To Pin 兼容的。但由于 GD32E503 较 GD32F303多了 SHRTIMER、SQPI 功能,所以两者引脚定义有细微差别,如下表所示: 表 1 GD32F303 系列和 GD32E503 系列引脚区别 3. 内部资源兼容性 下表给出了 GD32F303 与 GD32F503 的资源对比总览(
[单片机]
【GD32 <font color='red'>MCU</font> 移植教程】2、从 GD32F303 移植到 GD32F503
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved