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

📄 zhu1126_96.lst

📁 动力环境监控系统 动力环境监控系统
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V6.02  ZHU1126_96                                                             12/11/2003 11:17:47 PAGE 1   


C51 COMPILER V6.02, COMPILATION OF MODULE ZHU1126_96
OBJECT MODULE PLACED IN F:\MAIN00\ZHU9600_A\ZHU1126_96.OBJ
COMPILER INVOKED BY: C:\COMP51\C51.EXE F:\MAIN00\ZHU9600_A\ZHU1126_96.C DB SB OE LA

stmt level    source

   1          //修改为各自的函数
   2          //2003.7.24,9:56
   3          //模拟数据上传,上层通信良好;下层通信没做
   4          //修改串口波特率容错没做,(办法为5分钟没收到数据就重新设置波特率),
   5          //修改波特率等待数据发完才开锁,才进行修改
   6          //完成与AIDI模块的通信,能实时上AIDI模块的数据2003.7.31;10:59
   7          #include"zhu_ini.h"
   8          #include"zhu1126.h"
   9          
  10          
  11          void Feed_watchdog()		//喂狗
  12          {
  13   1      	FeedDogFlag=0;
  14   1      	_nop_();
  15   1      	FeedDogFlag=1;
  16   1      }
  17          
  18          void Delay_nop0(uchar n)//n个nop延时
  19          {
  20   1      	uchar data i;
  21   1      	for(i=0;i<n;i++)
  22   1      	{
  23   2      		_nop_();
  24   2      	}
  25   1      }
  26          
  27          uchar Read_ID()		//读ID号
  28          {
  29   1      	return(XBYTE[0x2000]);
  30   1      }
  31          
  32          void baud_select(uchar channel_s,uchar baud_s)//波特率选择
  33          {
  34   1      	uchar data baud00,setmodem;
  35   1      	uint  data dptr00;
  36   1      	switch(channel_s)
  37   1      	{
  38   2      		case 1:
  39   2      			dptr00=0xA000;
  40   2      			setmodem=0x36;
  41   2      			break;
  42   2      		case 2:
  43   2      			dptr00=0xA001;
  44   2      			setmodem=0x76;
  45   2      			break;
  46   2      		case 3:
  47   2      			dptr00=0xA002;
  48   2      			setmodem=0xB6;
  49   2      			break;
  50   2      		default:return;
  51   2      	}
  52   1      	switch(baud_s)
  53   1      	{
  54   2      		case 1:
  55   2      			baud00=96;
C51 COMPILER V6.02  ZHU1126_96                                                             12/11/2003 11:17:47 PAGE 2   

  56   2      			break;	//1200
  57   2      		case 2:
  58   2      			baud00=48;
  59   2      			break;	//2400
  60   2      		case 3:
  61   2      			baud00=24;
  62   2      			break;	//4800
  63   2      		case 4:
  64   2      			baud00=12;
  65   2      			break;	//9600
  66   2      		case 5:
  67   2      			baud00=6;
  68   2      			break;	//19200
  69   2      		case 6:
  70   2      			baud00=3;
  71   2      			break; //38400
  72   2      		default:return;
  73   2      	}
  74   1      	XBYTE[0xA003]=setmodem;		//计数器方式设置
  75   1      	XBYTE[dptr00]=baud00;		//设置波特率
  76   1      	XBYTE[dptr00]=0;		//高八位
  77   1      }
  78          void hex2asc0(uchar * asc2char,uchar chChar)
  79          {
  80   1      	uchar data hByte,lByte;
  81   1      	hByte=( chChar & 0xF0 )>>4;
  82   1      	lByte=( chChar & 0x0F );
  83   1      	if(hByte>=0 && hByte<10)
  84   1      	{
  85   2      		*asc2char++ = hByte + 48;
  86   2      	}
  87   1      	else if (hByte>9 && hByte<16)
  88   1      	{
  89   2      		*asc2char++ = hByte + 55;
  90   2      	}
  91   1      
  92   1      	if(lByte>=0 && lByte<10)
  93   1      	{
  94   2      		*asc2char++ = lByte + 48;
  95   2      	}
  96   1      	else if (lByte>9 && lByte<16)
  97   1      	{
  98   2      		*asc2char++ = lByte + 55;
  99   2      	}
 100   1      }
 101          
 102          void hex2asc1(uchar * asc2char,uint chInt)
 103          {
 104   1      	uchar data hhByte,hlByte,lhByte,llByte;
 105   1      	hhByte=( chInt & 0xF000 )>>12;
 106   1      	hlByte=( chInt & 0x0F00 )>>8;
 107   1      	lhByte=( chInt & 0x00F0 )>>4;
 108   1      	llByte=( chInt & 0x000F );
 109   1      	if(hhByte>=0 && hhByte<10)
 110   1      	{
 111   2      		*asc2char++ = hhByte + 48;
 112   2      	}
 113   1      	else if (hhByte>9 && hhByte<16)
 114   1      	{
 115   2      		*asc2char++ = hhByte + 55;
 116   2      	}
 117   1      
C51 COMPILER V6.02  ZHU1126_96                                                             12/11/2003 11:17:47 PAGE 3   

 118   1      	if(hlByte>=0 && hlByte<10)
 119   1      	{
 120   2      		*asc2char++ = hlByte + 48;
 121   2      	}
 122   1      	else if (hlByte>9 && hlByte<16)
 123   1      	{
 124   2      		*asc2char++ = hlByte + 55;
 125   2      	}
 126   1      
 127   1      	if(lhByte>=0 && lhByte<10)
 128   1      	{
 129   2      		*asc2char++ = lhByte + 48;
 130   2      	}
 131   1      	else if (lhByte>9 && lhByte<16)
 132   1      	{
 133   2      		*asc2char++ = lhByte + 55;
 134   2      	}
 135   1      
 136   1      	if(llByte>=0 && llByte<10)
 137   1      	{
 138   2      		*asc2char++ = llByte + 48;
 139   2      	}
 140   1      	else if (llByte>9 && llByte<16)
 141   1      	{
 142   2      		*asc2char++ = llByte + 55;
 143   2      	}
 144   1      }
 145          
 146          void InterruptInt0() interrupt 0 using 1	//外部中断0
 147          {
 148   1      	uchar data state,ReceByte;
 149   1      	bit tempFlag0,tempFlag1;
 150   1      	tempFlag1 = RamRom_Convert;
 151   1      	tempFlag0 = RamIO_Convert;		//保护地址状态
 152   1      	RamRom_Convert=1;			//128RAM
 153   1      	RamIO_Convert=1;			//切换RAM与端口
 154   1      	state=XBYTE[0x4001];			//port1c;
 155   1      	if( state & 2 )				//接收状态
 156   1      	{
 157   2      		ReceByte = XBYTE[0x4000];
 158   2      		if( ReceCount1 >= MaxRece1 )
 159   2      		{
 160   3      			ReceCount1 = 0;		//接收计数器循环
 161   3      		}
 162   2      		else if( ReceByte != 13 )	//'\r'=13
 163   2      		{
 164   3      			ReceSbuf1[ReceCount1++]=ReceByte;
 165   3      			led2Flag=0;		//正在接收点亮通信灯
 166   3      		}
 167   2      		else
 168   2      		{
 169   3      			ReceSbuf1[ReceCount1++]=ReceByte;
 170   3      			ReceEndFlag1=1;		//收到一包数据
 171   3      		}
 172   2      	}
 173   1      //数据接收
 174   1      	else if( (state & 1) && SendingFlag1 )	//发送状态
 175   1      	{
 176   2      		NoReceFlag = 0;			//没有发送标准位置一(有发送)
 177   2      		bNeedSend1 = 0;			//启动发送标志位清零
 178   2      		if ( SendCount1 >= MaxSend1 )	//关闭发送,越界不发送
 179   2      		{
C51 COMPILER V6.02  ZHU1126_96                                                             12/11/2003 11:17:47 PAGE 4   

 180   3      			SendingFlag1 = 0;	//发完一包数据
 181   3      			#ifdef	OpenEn
 182   3      			SendEn&=0xFD;		//模拟开关不切换
 183   3      			#else
              			for(state=0;state<100;state++)
              			{
              				_nop_();
              			}	//关闭发送中断使能,关闭模拟开关
              			SendEn&=0xF9;	//D5:继电器控制位,D3:发送进外部中断,D2:模拟开关,D1:发送进外部中断0
              			#endif
 190   3      			XBYTE[0xE000]=SendEn;
 191   3      		}
 192   2      		else if( SendSbuf1[SendCount1] != 10 )	//'\n'=10
 193   2      		{
 194   3      			XBYTE[0x4000]=SendSbuf1[SendCount1++];
 195   3      			SendingFlag1=1;	//正在发送数据
 196   3      			led2Flag=0;	//正在发送点亮通信灯
 197   3      		}
 198   2      		else		//
 199   2      		{
 200   3      			SendingFlag1 = 0;	//发完一包数据
 201   3      			#ifdef	OpenEn
 202   3      			SendEn&=0xFD;	//模拟开关不切换
 203   3      			#else
              			for(state=0;state<100;state++)
              			{
              				_nop_();
              			}	//关闭发送中断使能,关闭模拟开关
              			SendEn&=0xF9;	//D5:继电器控制位,D3:发送进外部中断,D2:模拟开关,D1:发送进外部中断0
              			#endif
 210   3      			XBYTE[0xE000]=SendEn;
 211   3      		}
 212   2      	}
 213   1      	ledled=AddLed;		//更换指示灯
 214   1      	RamRom_Convert= tempFlag1;
 215   1      	RamIO_Convert = tempFlag0;	//恢复地址状态
 216   1      }
 217          
 218          void InterruptInt1() interrupt 2 using 1	//外部中断1
 219          {
 220   1      	uchar data state,ReceByte;
 221   1      	bit tempFlag0,tempFlag1;
 222   1      	tempFlag1 = RamRom_Convert;
 223   1      	tempFlag0 = RamIO_Convert;		//保护地址状态
 224   1      	RamRom_Convert=1;			//128RAM
 225   1      	RamIO_Convert=1;	//切换RAM与端口
 226   1      	state=XBYTE[0x6001];	//port1c;
 227   1      	if(state&2)		//接收状态
 228   1      	{
 229   2      		ReceByte=XBYTE[0x6000];
 230   2      		if( ReceCount2 >= MaxRece2 )
 231   2      		{
 232   3      			ReceCount2 = 0;		//接收计数器循环
 233   3      		}
 234   2      		else if( ReceByte != 13 )	//'\r'=13
 235   2      		{
 236   3      			ReceSbuf2[ReceCount2++] = ReceByte;
 237   3      			led2Flag = 0;		//正在接收点亮通信灯
 238   3      		}
 239   2      		else
 240   2      		{
 241   3      			ReceSbuf2[ReceCount2++]=ReceByte;
C51 COMPILER V6.02  ZHU1126_96                                                             12/11/2003 11:17:47 PAGE 5   

 242   3      			ReceEndFlag2=1;		//收到一包数据
 243   3      		}
 244   2      	}
 245   1      	else if( state & 1 &&SendingFlag2 )	//发送状态
 246   1      	{
 247   2      		NoReceFlag = 0;			//没有发送标志位置一(有发送)
 248   2      		bNeedSend2 = 0;			//启动发送标志位清零
 249   2      		if ( SendCount2 >= MaxSend2 )
 250   2      		{
 251   3      			SendCount2 = 0;
 252   3      			SendingFlag2=0;		//发完一包数据
 253   3      			#ifdef	OpenEn
 254   3      			SendEn&=0xDF;		//继电器不切换
 255   3      			#else
              			for(state=0;state<100;state++)
              			{
              				_nop_();
              				_nop_();
              			}	//关闭发送中断使能,关闭模拟开关
              			SendEn&=0xD7;	//D5:继电器控制位,D3:发送进外部中断,D2:模拟开关,D1:发送进外部中断0
              			#endif
 263   3      			XBYTE[0xE000]=SendEn;
 264   3      		}
 265   2      		else if( SendSbuf2[SendCount2] != 10 )	//'\n'=10
 266   2      		{
 267   3      			XBYTE[0x6000]=SendSbuf2[SendCount2++];
 268   3      			SendingFlag2=1;	//正在发送数据
 269   3      			led2Flag=0;	//正在发送点亮通信灯
 270   3      		}
 271   2      		else		//
 272   2      		{
 273   3      			SendingFlag2=0;	//发完一包数据
 274   3      			#ifdef	OpenEn
 275   3      			SendEn&=0xDF;	//继电器不切换
 276   3      			#else
              			for(state=0;state<100;state++)
              			{
              				_nop_();
              				_nop_();
              			}	//关闭发送中断使能,关闭模拟开关
              			SendEn&=0xD7;	//D5:继电器控制位,D3:发送进外部中断,D2:模拟开关,D1:发送进外部中断0
              			#endif
 284   3      			XBYTE[0xE000]=SendEn;
 285   3      		}
 286   2      	}
 287   1      	ledled=AddLed;		//更换指示灯
 288   1      	RamRom_Convert= tempFlag1;
 289   1      	RamIO_Convert = tempFlag0;	//恢复地址状态
 290   1      }
 291          
 292          void InterruptT1() interrupt 3 using 2	//50ms定时1中断
 293          {
 294   1      	static uchar xdata ledcount0;
 295   1      	static uchar xdata ledcount1;
 296   1      	static uchar xdata ledcount2;
 297   1      	static uchar xdata ledcount3;
 298   1      	bit tempFlag0,tempFlag1;

⌨️ 快捷键说明

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