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

📄 timer0.c

📁 小区可视对讲键盘检测程序.利用pt6964芯片.
💻 C
字号:
#include<STC12C5410AD.h>
#include<buzzer.h>
#include<uart.h>
#define RELOAD_H            ( 65536-3000)/256;
#define RELOAD_L            ( 65536-3000 )%256;
/*----------------------------------------------------------------------------------
extern variables
-----------------------------------------------------------------------------------*/
extern unsigned char refresh_flag;
extern unsigned char keyscan_flag;
extern unsigned char keyscan_tubefresh_counter;
extern unsigned char ad_counter;
extern unsigned char adc_flag;
extern unsigned char uart_counter,send_flag;
extern unsigned char buzzer_timer;
extern unsigned char buzzer_timer_trigger;
/*-----------------------------------------------------------------------------------
功能:定时器0初始化(晶振18.4M,计数周期为0.66us)   
名称:Timer0_Init()  
输入:无
输出:无
返回:无
-------------------------------------------------------------------------------------*/
void Timer0_Init(void)
{
//工作方式控制寄存器TMOD
//--------------------------------------------------------------------------------------
//TMOD寄存器用于定义定时/计数器的操作方式及工作模式,其格式如下:
//	7		6		5		4		3		2		1		0
//	GATE	C/T		M1		M0		GATE	C/T		M1		M0
//--------------------------------------------------------------------------------------
//其中低4位(0~3)位定义定时/计数器0,高4位(4~7)定义定时/计数器1
//--------------------------------------------------------------------------------------
// M1  M0 为操作方式选择位
// 0   0   方式0     13位计数器
// 0   1   方式1     16位计数器
// 1   0   方式2     自动再装入的8位计数器
// 1   1   方式3 	 将定时/计数器0分成两个8位计数器.
//--------------------------------------------------------------------------------------
//C/T:选择定时器或计数模式. C/T=1时为计数模式  当C/T=0时为定时模式 
//--------------------------------------------------------------------------------------
//	GATE:选通控制.当GATE=1时,只有当 INTx端口为高电平且TRx置位为1时才选通定时器/计数器x;
//              当GATE=0时,只需TRx置位为1即选通定时/计数器x.

  TMOD |= 0x01;    	//定时器0,方式1
  TL0 = 22;	 		//TL0定时器0低8位计数器
  TH0 = 22;	 		//TH0定时器0高8位计数器
  TR0 = 1;         	//定时器/计数器0启动位.TR0=1:开始计时或计数 TR0=1禁止计时或计数 
  ET0 = 1;         	//定时器/计数器0中断使能
  EA = 1;			//全局中断使能
}

/*-----------------------------------------------------------------------------------
功能:定时器0中断服务程序     
名称:Timer0_ISR(void) interrupt 1   
输入:无
输出:无
返回:无
备注:10ms中断一次
-------------------------------------------------------------------------------------*/
void Timer0_ISR(void) interrupt 1
{

//---digit tube about--------------------------------------------------------------
	refresh_flag = 1;

//----keyboard about----------------------------------------------------------------
	keyscan_tubefresh_counter++;
	if( keyscan_tubefresh_counter >= 5 ) 
	{
	refresh_flag = 0;
	keyscan_tubefresh_counter = 0;
	keyscan_flag = 1;
	}
//----ad about----------------------------------------------------------------------
	ad_counter++;
	if(ad_counter >= 250)
	{
	ad_counter = 0;
	adc_flag = 1 ;
	}
//--------uart about----------------------------------------------------------------
	uart_counter++;
	if(uart_counter >= 250)
	{
	uart_counter = 0;
	send_flag =1;
	}
//------------buzzer about-----------------------------------------------------------
	if(buzzer_timer_trigger)
	{
		buzzer_timer++;
		if(buzzer_timer >= 254)
		{
		buzzer_timer = 0;
		buzzer_timer_trigger = 0;
		close_buzzer();
		}
	}

//定时器0初值重装            
	TL0 = RELOAD_L;
	TH0 = RELOAD_H; 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -