松翰单片机SONIX SN8P2511程序模板

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#define MAIN_GLOBAL
#include "..\inc\config.h"
#include "..\inc\SN8P2501B.h"
//****************************************************************//
// 主函数 //
// 功能: 调用各个主函数 //
//****************************************************************//
void main(void)
{
InitCPU();
Ram_init();
while(1)
{
if(TimeFlag)
{
TEST = !TEST;
TimeFlag=0;
Time_Fun();
}
_clrwdt();
}
}

//****************************************************************//
// 继电器输出 //
// 功能: 工作输出 //
//****************************************************************//
void Work_Fun(void)
{
;
}

//****************************************************************//
// 硬件初始化 //
// 功能: 硬件初始化 输入输出 定时器开关 AD初始化 //
//****************************************************************//
void InitCPU(void) //单片机初始化
{
FGIE=0; //关总中断
//------------------------------I/O口输出--------------------------
//---------------P0---------------
FP00M=0;//
// FP01M=1;//
// FP02M = 0;
// FP03M = 0;
// FP04M=0;//
P0UR = _0000_0001b;
//---------------P1---------------
FP10M=0;//
// FP11M=0;//
FP12M=1;// 输出
FP13M=0;// 按键
// FP14M=1;//
// FP16M=1;//
// FP15M=1;//
// FP17M=1;//
P1UR = _0000_1001b;
//---------------P2---------------
FP20M=0;//
FP21M=0;//
FP22M=0;//
FP23M=0;//
FP24M=0;//
FP25M=0;//
// FP26M=0;//
// FP27M=1;//
P2UR = _0011_1111b;
//---------------P5---------------
// FP50M=1;//
// FP51M=1;//
// FP52M=1;//
// FP53M=0;//
FP54M=1;//
// P5UR = _0000_0000b;
//------------------------------T0--------------------------------
FT0ENB = 0;
FT0IEN = 0;
FT0IRQ = 0;
T0M = 0X60;//时钟为FCPU/4
T0C=7; //T0 间隔250uS
FT0ENB = 1;
FT0IEN = 1;

FGIE=1; //开总中断
}

//****************************************************************//
// 变量初始化函数 //
// 功能: 对程序中的变量进行赋初值 //
//****************************************************************//
void Ram_init(void)
{
_nop();
_nop();
Move_Key = 0x70;
// Open_FLAG = 1;

}

//****************************************************************//
// 走时函数 //
// 功能: 对程序中计时功能进行计数和赋值 //
//****************************************************************//
void Time_Fun(void)
{
static uchar Time_5ms_Cnt = 0,Time_10ms_Cnt = 0,Time_200ms_Cnt = 0,Time_1S_Cnt = 0;
static uchar Leave_Out_ID = 0,Leave_Out_Time_Cnt = 0,YiWei_ID = 0,Leave_Out_Cnt = 5

;
static uchar Move_IN_Cnt = 0;
uchar tmp1;
if(Leave_Data_Out_Flag)
{
if(!Leave_Out_ID)
{
Leave_Out_Time_Cnt ++;
LEAVE_DATA_OUT_ON();
if(Leave_Out_Time_Cnt > 8)
{
Leave_Out_Time_Cnt = 0;
Leave_Out_ID = 1;
}
}
else if(Leave_Out_ID == 1)
{
Leave_Out_Time_Cnt ++;
LEAVE_DATA_OUT_OFF();
if(Leave_Out_Time_Cnt > 5)
{
Leave_Out_Time_Cnt = 0;
Leave_Out_ID = 2;
}
}
else if(Leave_Out_ID == 2)
{
if(!Leave_Out_Time_Cnt)
{
tmp1 = Leave_ID;
tmp1 |= Move_Key;
tmp1 >>= YiWei_ID;
tmp1 &= 1;
if(tmp1)
Leave_Out_Time_Cnt = 0;
else
Leave_Out_Time_Cnt = 2;
YiWei_ID ++;
if(YiWei_ID >= 9)
{
Leave_Out_ID = 0;
YiWei_ID = 0;
Leave_Out_Time_Cnt = 0;
Leave_Data_Out_Flag = 0;
}
}
if(Leave_Data_Out_Flag)
{
Leave_Out_Time_Cnt ++;
if(Leave_Out_Time_Cnt <= 4)
LEAVE_DATA_OUT_ON();
else if(Leave_Out_Time_Cnt < 6)
LEAVE_DATA_OUT_OFF();
else
Leave_Out_Time_Cnt = 0;
}
}
}

Time_5ms_Cnt ++;
if(Time_5ms_Cnt >= 5) //接收5ms去扫描
{
Time_5ms_Cnt = 0;
if(MOVE_IN) //倾倒了
{
Move_IN_Cnt ++;
if(Move_IN_Cnt >= 10)
{
Move_IN_Cnt = 15;
Move_Key = 0x80;
Leave_ID = 0;
}
}
else
{
if(!K8_IN)
Leave_ID = 8;
else if(!K7_IN)
Leave_ID = 7;
else if(!K6_IN)
Leave_ID = 6;
else if(!K5_IN)
Leave_ID = 5;
else if(!K4_IN)
Leave_ID = 4;
else if(!K3_IN)
Leave_ID = 3;
else if(!K2_IN)
Leave_ID = 2;
else if(!K1_IN)
Leave_ID = 1;
Move_IN_Cnt = 0;
Move_Key = 0x70;
}
}

Time_10ms_Cnt ++;
if(Time_10ms_Cnt >= 10) //发送10MS去扫描
{
Time_10ms_Cnt = 0;
}

Time_200ms_Cnt ++;
if(Time_200ms_Cnt >= 200)
{
Time_200ms_Cnt = 0;
if(!Leave_Data_Out_Flag)
{
Leave_Out_Cnt ++;
if(Leave_Out_Cnt >= 10)
{
Leave_Out_Cnt = 0;
Leave_Data_Out_Flag = 1;
}
}
}
}

__interrupt isr1(void) //TC0定时器中断入口
{
static uchar Time1MS = 0;
if(FT0IRQ) //TC0 //定时0.125ms
{
T0C=6; //T0 间隔250uS
Time1MS ++;
if(Time1MS >= 4) //1MS中断函数
{
Time1MS = 0;
TimeFlag = 1;
}
}
FT0IRQ = 0;
}

相关文档
最新文档