定时计数综合程序
如图所示,在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亮
分析计算: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 |
|
8E |
8D |
|
8B |
|
89 |
88 |
TRi=0 停Ti计数 TRi=1 启Ti计数
TFi=0 无Ti中断(硬件复位) TRF=1 有溢出中断
1.定时器初值的计算
定时器为加1计数器,计数器溢出产生中断。
设:t-定时时间,TC-机器周期,fosc-晶振频率,
L-计数器长度(13、16、8),X-定时器初值
t=(
X=
假设fosc=12MHz,最大定时时间(初值X=0)
方式0:t=(
方式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=0x
TL0=0xB0;
}
void main()
{
TMOD=0x0D1;
TCON=0x80;
IE=0x82;
TH0=0x
TL0=0xB0;
TH1=0x0FA;
TL1=0x0FA;
TR0=1;
TR1=1;
while(1)
{
if(TF1)
{
P1_7= P1_7^0;
TF1=0;
}
}
}