📄 6545.txt
字号:
定时计数综合程序
如图所示,在P1.7端接一个发光二极管,要求利用c/~t控制,使led亮1 s,灭1 s,周而复始!
硬件电路(略)
定时/计数器简称定时器,8051单片机有2个16位的定时/计数器:定时器0(T0)和定时器1(T1)。T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。作计数器时,通过引脚T0(P3.4)和T1(P3.5)对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。
分析:要时使led亮1m,灭1m,也就是从P1.7端输出一周期1 s的方波(半周期为500ms),定时器共有四种工作方式,以6Mhz的晶振为例,一个定时计数系统的最大定时为131ms,远远小于500ms,因此必须使用两个定时器。
分析计算:500ms=5*100ms,定时/计数器0用作定时100ms,定时/计数器1用作计数,定/计时器0为中断方式,定/计时器1为查询方式。
定时器共有2个控制寄存器TMOD和TCON,由软件写入TMOD和TCON 两个8位寄存器,设置各个定时器的操作方式和控制功能.
TMOD
GATE
C/T
M1
M0
GATE
C/T
M1
M0
GATE 中断门控 gate=0 与int0无关 gate=1与int0有关
C/T 模式选择 =0定时模式 =1计数模式
TCON
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
88
8F
8E
8D
8C
8B
8A
89
88
TRi=0 停Ti计数 TRi=1 启Ti计数
TFi=0 无Ti中断(硬件复位) TRF=1 有溢出中断
1.定时器初值的计算
定时器为加1计数器,计数器溢出产生中断。
设:t-定时时间,TC-机器周期,fosc-晶振频率,
L-计数器长度(13、16、8),X-定时器初值
t=(2L-X)′TC= (2L-X)′12/ fosc
X= 2L - t ′12/ fosc
假设fosc=12MHz,最大定时时间(初值X=0)
方式0:t=(2L-X)′12/ fosc=213 ′12/(12 ′ 106) =8.192ms
方式1:t=216 ′12/(12 ′ 106) =65.536ms
方式2:t=28 ′12/(12 ′ 106) =0.256ms
方式3:t=28 ′12/(12 ′ 106) =0.256ms
2. 定时器初始化
(1)写TMOD,确定工作方式。
(2)写THi、TLi,装入计数初值。
(3)置TRi=1,启动Ti。
(4)置EA=1,开CPU中断,置ETi=1,开Ti中断。
#include<reg51.h>
sbit P1_0=P1^0;
sbit P1_7=P1^7;
void timer0(void) interrupt 1 using 1
{
P1_0= P1_0^0; // P1.0取反
TH0=0x3c;
TL0=0xB0;
}
void main()
{
TMOD=0x0D1;
TCON=0x80;
IE=0x82;
TH0=0x3c;
TL0=0xB0;
TH1=0x0FA;
TL1=0x0FA;
TR0=1;
TR1=1;
while(1)
{
if(TF1)
{
P1_7= P1_7^0;
TF1=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -