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

📄 test.c

📁 串口通信 单片机程序 isp在线下载功能
💻 C
字号:
//库文件
#include <stdio.h>
#include "W78E516B.H"	//本地目录中,W78E516B头文件
#include "APROM.H"	//本地目录中,自定义头文件
//定时中断0
void Timer0 (void) interrupt 1 using 1
{
    TR0=0;										 //关中断
    TF0=0;
}
//串口处理程序
void Serial(void) interrupt 4 using 3
{
	 uint i,j,CodeTemp;							//CodeTemp为指令临时变量,i为Index,j为串口数据
	 //未接收到数据
    if(RI==0)
    { 
	 	  TI=0;
  	 }
	 //接收到数据,做判断
    else
    {
        JmpLDROM=1;
        i=0;										//i从0~8,目前上位机使用9个字符作为升级指令SYNTEC001
        while(1)
        {
		  	j=SBUF;									//接收串口数据
            CodeTemp=UpdateCommandCode[i];
		//检测串行通信是否正常
				//通信超时
        								//错误
	 	;											
    RI=0;
    TR0=0;

}

//主程序
void main(void)
{
	 int i,k;								//i为Index,8ms的循环使用,k为查询串口次数index,
    k=0;
    InitialProgram();					//初始化程序
    JmpLDROM=0;							//跳转LDROM状态位,1跳转,0不跳转
    while(1)
    {
	     if(JmpLDROM==1)					//跳转 LDROM状态位为1
	     {
	        ES=0;							//关串口

	        ChangeAPtoLD();				//跳转LDROM
	 					//循环判断25次后如果还是不能接收正确并跳转LDROM,则说明不用升级直接执行用户应用程序,根据需要可以修改
	 	 {
			goto	UserApplication;
		 }
    }

	 //用户应用程序
    UserApplication:
	 P2 = 0xaa;							//测试进入用户程序
		;										//

}
//初始化程序
void InitialProgram(void)
{
        IE=0x00;
        ET0=1;          // timer0 interrupt enable
        ES=1;           // RS-232 interrupt enable
        EA=1;           // all interrupt enable
        // Timer2BaudRate();
        SCON=0x50;      // mode=mode1 ,ren=enable
        T2CON=0x30;     // Timer2=BaudRate CLK

        TL2=RCAP2L;
        TR2=1;
}

//串口通信检测
void RecDataCheck(void)
{
        uint delay;
        RI=0;
        TimerOut=0;

      													// tl0=65536-(1000*(Fosc/12000000)),  delay x 1ms
              for(TF0=0; TF0==0; )												//处理定时器未溢出时,判断接收位
              {
                while(RI==1)														//正常
                { 
					 	goto OK ; 
					 }
              }
        }
        TimerOut=1;																	//通信超时
        OK: ;																			//通信正常
}

//APROM 跳转 LDROM ,即ISP模式
void ChangeAPtoLD(void)
{
		  //单片机重启,软复位
        CHPENR=0x87;       													  	// write enable
       
        TR0=1;																			//打开定时器T0中断,从Idle模式唤醒MCU
        PCON=0x01;           														// enter idle mode
}


⌨️ 快捷键说明

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