⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 6545.txt

📁 计数综合程序!已经调试通过
💻 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 + -