C8051F340 学****笔记定时计数器 0和定时计数器 1 作者 Jql 注: 原文中的程序少了几个空格, 在这里我已经补上空格了,直接生成 HEX 烧写成功可正常运行.---- 小丁. 声明:本笔记绝对原创仅供学****使用定时器 0和定时器 1都是 16位的寄存器,在被访问时以两个字节的形式出现:一个低字节( TL0 或 TL1 )和一个高字节( TH0 或 TH1 , TCON 用于允许定时器 0 和定时器 1 以及指示它们的状态,的 ET0 位置 1 来允许定时器 0 中断,通过将 ET1 位置 1 来允许定时器 1 中断, TMOD 中的方式选择位 T1M1-T0M0 来选择工作方式,每个定时器都可以被独立配置。有四种方式:方式0、1、2、3 定时器 0 与定时器 1 基本相同,一下只介绍定时器 0— 13位定时计数器 13 位定时计数器使用 TH 的8 位和 TL 的低 5 位,高三位未用。 13 位定时计数器计到 0x1FFF (全 1 )后再计一次将发生溢出, 使计数值回到 0x0000 ,计数值为 8191. 定时器 0与定时器 1需要配置三个寄存器 TMOD TCON CKCON 选择计数器/ 定时器的时钟源。当被 C/T0 位(( ) 设置为逻辑 1 时,出现在所选定时器 0 输入引脚( T0 )上的负跳变使定时器寄存器加 1,该功能可用于检测外部计数脉冲的个数。方式 1— 16位计数器/定时器(与方式 0基本一样) 方式 2—自动重装载的 8位计数器/定时器 TL0 保持计数值,而 TH0 保持重载值,当 TL0 中的计数值发生溢出(从全 1到 0x00 )时,定时器溢出标志 TF0 ( )被置位, TH0 中的重载值被重新装入到 TL0 。当工作于方式 2时, 定时器 1的操作与定时器 0完全相同。方式 3—两个 8位计数器/定时器(仅定时器 0) 下面介绍一个采用定时计数器编写的延时 10ms 的子程序,在任何一个主函数中,可调用这个子函数来获得精确地延时,要想获得精确地长时间的延时只需修改这其中的参数即可,本程序为本人所写,亲测通过。#include "" #define uint unsigned int #define uchar unsigned char sbit P22=P2^2; sbit P23=P2^3; uint xdata time,x; void Timer_Init() { TMOD = 0x01; TL0 = 0x18; TH0 = 0xFC; } Void Port_IO_Init() { P2MDOUT = 0x0C; XBR1 = 0x40; } Void Oscillator_Init() { = 0x83; } Void Init_Device(void)
C8051F340学习笔记—Timer0_and_Timer1_利用多余的定时计数器实现精确地延时 来自淘豆网www.taodocs.com转载请标明出处.