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

📄 test.lst.svn-base

📁 串口通信 单片机程序 isp在线下载功能
💻 SVN-BASE
字号:
C51 COMPILER V6.12  TEST                                                                   10/14/2008 15:04:16 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE TEST
OBJECT MODULE PLACED IN .\test.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE .\test.c DEBUG OBJECTEXTEND

stmt level    source

   1          //库文件
   2          #include <stdio.h>
   3          #include "W78E516B.H"	//本地目录中,W78E516B头文件
   4          #include "APROM.H"	//本地目录中,自定义头文件
   5          //定时中断0
   6          void Timer0 (void) interrupt 1 using 1
   7          {
   8   1          TR0=0;										 //关中断
   9   1          TF0=0;
  10   1      }
  11          //串口处理程序
  12          void Serial(void) interrupt 4 using 3
  13          {
  14   1      	 uint i,j,CodeTemp;							//CodeTemp为指令临时变量,i为Index,j为串口数据
  15   1      	 //未接收到数据
  16   1          if(RI==0)
  17   1          { 
  18   2      	 	  TI=0;
  19   2        	 }
  20   1      	 //接收到数据,做判断
  21   1          else
  22   1          {
  23   2              JmpLDROM=1;
  24   2              i=0;										//i从0~8,目前上位机使用9个字符作为升级指令SYNTEC001
  25   2              while(1)
  26   2              {
  27   3      		  	j=SBUF;									//接收串口数据
  28   3                  CodeTemp=UpdateCommandCode[i];
  29   3      				//不是升级指令 
  30   3                  if(j!=CodeTemp)               	        
  31   3                  {
  32   4      				JmpLDROM=0;	
  33   4                      goto ERROR;						//不是升级指令出口
  34   4                  }
  35   3      				//判断Index是否为最后一个字符,即判断完毕
  36   3                  while(i==UpdateCommandCodeTotalNumber)//i=8
  37   3                  { 
  38   4      					goto OK;								//通信正常,并且接收完毕,并且为升级指令出口
  39   4      				}
  40   3                  RecDataCheck();						//检测串行通信是否正常
  41   3      				//通信超时
  42   3                  if(TimerOut==1)
  43   3                  { 
  44   4                 	   JmpLDROM=0;
  45   4                  	goto ERROR; 						//通信错误出口
  46   4                  }
  47   3                  i++;
  48   3              }
  49   2          }
  50   1          OK: 													//成功
  51   1      		;												
  52   1          ERROR: 												//错误
  53   1      	 	;											
  54   1          RI=0;
  55   1          TR0=0;
C51 COMPILER V6.12  TEST                                                                   10/14/2008 15:04:16 PAGE 2   

  56   1      
  57   1      }
  58          
  59          //主程序
  60          void main(void)
  61          {
  62   1      	 int i,k;								//i为Index,8ms的循环使用,k为查询串口次数index,
  63   1          k=0;
  64   1          InitialProgram();					//初始化程序
  65   1          JmpLDROM=0;							//跳转LDROM状态位,1跳转,0不跳转
  66   1          while(1)
  67   1          {
  68   2      	     if(JmpLDROM==1)					//跳转 LDROM状态位为1
  69   2      	     {
  70   3      	        ES=0;							//关串口
  71   3      
  72   3      	        ChangeAPtoLD();				//跳转LDROM
  73   3      	     }
  74   2      	     for(i=0;i<8000;i++);	     	//8ms循环判断一次JmpLDROM 
  75   2      		  {
  76   3      	         ;
  77   3      		  }
  78   2      	     k++;
  79   2      	    if(k==25)							//循环判断25次后如果还是不能接收正确并跳转LDROM,则说明不用升级直接执行用户应用程序,
             -根据需要可以修改
  80   2      	 	 {
  81   3      			goto	UserApplication;
  82   3      		 }
  83   2          }
  84   1      
  85   1      	 //用户应用程序
  86   1          UserApplication:
  87   1      	 P2 = 0xaa;							//测试进入用户程序
  88   1      		;										//
  89   1      
  90   1      }
  91          //初始化程序
  92          void InitialProgram(void)
  93          {
  94   1              IE=0x00;
  95   1              ET0=1;          // timer0 interrupt enable
  96   1              ES=1;           // RS-232 interrupt enable
  97   1              EA=1;           // all interrupt enable
  98   1              // Timer2BaudRate();
  99   1              SCON=0x50;      // mode=mode1 ,ren=enable
 100   1              T2CON=0x30;     // Timer2=BaudRate CLK
 101   1      
 102   1              RCAP2H = 0xff;			//Fosc = 11.0592M
 103   1              RCAP2L = 0xdc;			//BaudRate = 9600
 104   1      
 105   1              TH2=RCAP2H;
 106   1              TL2=RCAP2L;
 107   1              TR2=1;
 108   1      }
 109          
 110          //串口通信检测
 111          void RecDataCheck(void)
 112          {
 113   1              uint delay;
 114   1              RI=0;
 115   1              TimerOut=0;
 116   1      
C51 COMPILER V6.12  TEST                                                                   10/14/2008 15:04:16 PAGE 3   

 117   1              TMOD=0x11;																	//工作方式1,16位定时器
 118   1              TR0=1;
 119   1      
 120   1              for(delay=50; delay>0; delay--)									  	//50*1ms=50ms
 121   1              {																				//11.0592M
 122   2                    TH0 = 0xfc; 															// th0=(65536-(1000*(Fosc/12000000)))/256, delay x 1ms
 123   2                    TL0 = 0x66; 															// tl0=65536-(1000*(Fosc/12000000)),  delay x 1ms
 124   2                    for(TF0=0; TF0==0; )												//处理定时器未溢出时,判断接收位
 125   2                    {
 126   3                      while(RI==1)														//正常
 127   3                      { 
 128   4      					 	goto OK ; 
 129   4      					 }
 130   3                    }
 131   2              }
 132   1              TimerOut=1;																	//通信超时
 133   1              OK: ;																			//通信正常
 134   1      }
 135          
 136          //APROM 跳转 LDROM ,即ISP模式
 137          void ChangeAPtoLD(void)
 138          {
 139   1      		  //单片机重启,软复位
 140   1              CHPENR=0x87;       													  	// write enable
 141   1              CHPENR=0x59;        														// write enable
 142   1              CHPCON=0x03;        														// bank=4k,flash mode
 143   1              TL0=0xfe;
 144   1              TH0=0xff;
 145   1              TR0=1;																			//打开定时器T0中断,从Idle模式唤醒MCU
 146   1              PCON=0x01;           														// enter idle mode
 147   1      }
 148          
 149          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    243    ----
   CONSTANT SIZE    =      9    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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