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

📄 time.c

📁 使用Microchip公司16F648实现4*6键盘程序. 在PICC环境下编译通过,包含RS485通讯. 代码完整,可供参考.
💻 C
字号:
//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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -