📄 main.c
字号:
#include "main.h"
#include "sm5964.h"
#include "comm.h"
#include "myapp.h"
#include "isp.h"
//#include <string.h>
#include <absacc.h>
//unsigned char read_flash(unsigned int page,unsigned char addr);
void InitSystem();
void ResetSystem();
void InitParameter();
void Delay1ms(unsigned char num);
unsigned char MyIspFlag _at_ 0x32;//由应用程序部分传送过来的变量,共用
unsigned char g_MachineNo;//机器编号
unsigned char g_Buzz_LcdLigth_FlahPage_Statue;
unsigned char NumCounter;
unsigned int i;
/*
*********************************************************
**主程序main()
*********************************************************
*/
void main()
{
unsigned char flagIsp=0;//标志是否下载
NumCounter=0;
EA=0;
WatchDog();
//====================================
//1.初始化硬件,参数,串口
//1.1.初始化硬件,允许片内XDATA
InitSystem();
Delay1ms(50);
//1.2.初始化参数
InitParameter();
//1.3.初始化串口
InitComm(Baud38400);
WatchDog();
//======================================isp
//3.判断是否唤醒下载
if(MyIspFlag==0x55)
{
MyIspFlag=0;
IspServer();
flagIsp=1;//已经下载
}
//======================================isp
//4.判断是否强制下载
if(flagIsp==0)
{
#ifdef ENABLE_ISP
if(PIN_ENISP==0)
{
IspServer();
flagIsp = 1;
}
#endif
}
//======================================isp
//5.判断是否PC机控制进入下载
if( flagIsp==0)
{
if(CheckPcCmd()==ID_OK)
{
IspServer();
flagIsp = 1;
}
}
//======================================isp
//6.判断用户程序是否完整
while(1)
{
WatchDog();
if(CheckAppPrg()!=ID_OK)
{
IspServer();
}
else
{
ResetSystem();//进入用户应用程序
}
}
}
//////////////////////////////////////////////////////////
/*
*********************************************************
**初始化系统
*********************************************************
*/
void InitSystem()
{
EA=0;
TR1=0;
TR2=0;
TR0=0;
ES=0;
SCONF =0x00;
RS82C55=0x81; //0x81; PortA--out PortB--out PortC--In~Out
// g_MachineNo=read_flash(WORKMODE_PAGE,MACHINENO_OFFSET);
g_MachineNo=0;
PIN_TXEN=RS485_COMM_DISENABLE;//不允许发送
//SCONF:
//WDR 7 6 5 4 3 ISPE OME ALEI
SCONF =VALUE_SCONF;//允许IPSE OME
ISPFD =0x55;
ISPFD =0xaa;
ISPFD =0x55;
}
/*
*********************************************************
**恢复系统
*********************************************************
*/
void ResetSystem()
{
unsigned int addr;
EA =0;
T2CON=0x00;
IP=0X00;
TR2=0;
EA=0;
SCONF=0x00;//不允许ISP,XDATA
//恢复串口动作
TMOD=0x00;
PCON=0x00;
SCON=0x00;
TR1 =0x00;
PIN_TXEN=RS485_COMM_DISENABLE;//不允许发送
//main地址
addr = ChipRead(0x01);
addr <<= 8;
addr += ChipRead(0x02);
jmpmain(addr);
}
/*
*********************************************************
**初始参数
*********************************************************
*/
void InitParameter()
{
for (i=0;i<215;i++)
{
g_CommBuffer[i]=0xff;
}
}
/*
*********************************************************
**延迟时间函数
*********************************************************
*/
void Delay1ms(unsigned char num)
{
unsigned int k;
for(i=0;i<num;i++)
{
for(k=0;k<100;k++)WatchDog();
}
}
/*
void setflashHIADDR(value) {\
g_Buzz_LcdLigth_FlahPage_Statue=0xC0; \
g_Buzz_LcdLigth_FlahPage_Statue|=(value&0x7f); \
PA82C55=g_Buzz_LcdLigth_FlahPage_Statue ; \
}
void set_flash_page(page)
{
setflashHIADDR( page>>6 );
}
*/
/*
*********************************************************
**读取机号
*********************************************************
*/
/*
unsigned char read_flash(unsigned int page,unsigned char addr)
{
unsigned char xdata *rdaddr;
unsigned char bf=0;
set_flash_page(page);
page<<=8;
page&=0x3f00;
rdaddr=addr|FLASH_CS|page;
bf=*rdaddr;
return (bf);
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -