time.c

来自「使用Microchip公司16F648实现4*6键盘程序. 在PICC环境下编译」· C语言 代码 · 共 136 行

C
136
字号
//timer module.
#include  "pic16f62xa.h"
#include  "pic.h"
#include  "typedefine.h"
#include  "extern.h"

void TimeCntModule(void);

//定时器0初始化
void time0init(void)
{
    OPTION |= 0b00000111;  //bit5 T0CS  清零为选定定时器模式;
    OPTION &= ~0b00111101; //bit4 T0SE  边缘选择;
    TMR0  =  0x80;          
   	T0IE = 1;              // enable timer interrupt.
}//void time0init(void)

// timebase module.
void time_mission (void)         //每500us时间到进入一次;
{
	if(timeflag)
	{
		timeflag = 0;  
	}

	if(TimeBase.bits.time1ms)
	{
	  	if(TimeShift.bits.time1ms)
		{
	 		TimeCntModule();
			TimeShift.bits.time1ms = 0;
		}
	}
	else
	{
		TimeShift.bits.time1ms = 1;
	}

	if(TimeBase.bits.time2ms)
	{
		if(TimeShift.bits.time2ms)
		{
			TimeShift.bits.time2ms = 0;
		}
	}
	else
	{
		TimeShift.bits.time2ms = 1;
	}

	if(TimeBase.bits.time4ms)
	{
		if(TimeShift.bits.time4ms)
		{
			TimeShift.bits.time4ms = 0;
			MissionFlag.bits.ledshow = 1;
            NOP();
		}
	}
	else
	{
		TimeShift.bits.time4ms = 1;
	}

	if(TimeBase.bits.time8ms)
	{
		if(TimeShift.bits.time8ms)
		{
			TimeShift.bits.time8ms = 0;
			MissionFlag.bits.keybitmanage = 1;
		}
	}
	else
	{
		TimeShift.bits.time8ms = 1;
	}
 
	if(TimeBase.bits.time64ms)
	{
		if(TimeShift.bits.time64ms)
		{
			MissionFlag.bits.ledshowdigitcou = 1;
			TimeShift.bits.time64ms = 0;
		}
	}
	else
	{
		TimeShift.bits.time64ms = 1;
	}
}//void time_mission (void) 


//1ms计时函数
void TimeCntModule(void)   
{     
    static int ninemsflag;    
	static uint oneSecCou;
	static uchar keyscancou;
	static uint	KeyScanSecCou;

	keyscancou++;
	if(keyscancou >= 2)
	{
		keyscancou = 0;
 		MissionFlag.bits.scankey = 1;
	}
	
    ninemsflag++ ;      
    if(ninemsflag >= 9)    
	{
		ninemsflag = 0;         
		MissionFlag.bits.keymanage=1;	 
	}

///一个原因:
// 因为,,,,,,字节与字节之间的时间间隔运小于帧与帧之间的时间间隔.
// 当receTimeOut记时到的时候,一帧也早就发送完成拉,
// 接受处理帧程序因该早就开始了处理帧的动作.
// 如果没有处理,这里也不等待了,直接清零  
	if(receTimeOut > 0)
	{
		receTimeOut--;
		if(receTimeOut==0)                // && receCount>0)
		{
			             //出错标记也可在这里清除一次.
			receCount = 0;
			errorCheckout = 0;
//-----------test  需要修改
		    En_Idlesse();
//------------------------
		}
	}
	
}

⌨️ 快捷键说明

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