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

📄 main.c

📁 SM5964在系统编程的源代码,通过COMM串行口进行程序下载,方便嵌入式系统开发
💻 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 + -