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

📄 comcjj.lst

📁 用c语言编写的单片机程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 240   1      	if(!com_r_num)//桢号是0x00时
 241   1      	{
 242   2      		inf_r_total++;
 243   2      		w_b.w = inf_r_len;
 244   2      		*pinf_r_buff_wr = w_b.b.l; 
 245   2      		pinf_r_buff_wr++;
 246   2      		*pinf_r_buff_wr = w_b.b.h; 			pinf_r_buff_wr++;
 247   2      		inf_r_len = 0x0000;
 248   2      	}
 249   1      	for(i = 0x00; i < tmp_len; i++)
 250   1      	{
 251   2      		*pinf_r_buff_wr = data_r_tmp_buff[i];
 252   2      		pinf_r_buff_wr++;
 253   2      	}
 254   1      		inf_r_buff_empty = FALSE;		
 255   1      }
 256          
 257          
 258          void prc_com_r_ok(void)
 259          {
 260   1      	byte tmp_len = NULL_BYTE; 
 261   1      	tmp_len = com_len;
 262   1      	prc_com_r_data(tmp_len);
 263   1      }
 264          
 265          /*当com_r_buff_empty = TRUE,即fifi为空时,在主程序中就不会调用com_r_prc解包函数*/
 266          void chk_empty(void)
 267          {
 268   1      	if(pcom_r_buff_prc == com_r_buff + COM_R_BUFF_LEN)
 269   1      	{
 270   2      		if(pcom_r_buff_wr == com_r_buff)
 271   2      			com_r_buff_empty = TRUE;//prc指针读到fifo末尾时,写指针在fifo开头位置,则fifo为空
 272   2      		pcom_r_buff_prc = com_r_buff;//把prc指针移到fifo开头位置
 273   2      	}
 274   1      	else
 275   1      	{
 276   2      		pcom_r_buff_prc++;	
 277   2      		if(pcom_r_buff_wr == pcom_r_buff_prc)
 278   2      			com_r_buff_empty = TRUE;//若prc指针在fifo中间,当prc指针加1后与写指针相等,则fifo也为空
 279   2      	}
 280   1      }
 281          
 282          void com_r_prc(void)//解包
 283          {
 284   1      	byte tmp;
 285   1      	tmp = *pcom_r_buff_prc;//当前读指针prc
 286   1      	switch(st_com_r)
 287   1      	{
 288   2      		case ST_COM_R_IDLE://0xff
 289   2      			if(tmp == COM_R_HEAD)
 290   2      				st_com_r = ST_COM_R_DADR;
 291   2      				
 292   2      			chk_empty();
 293   2      			pcom_r_buff_rd = pcom_r_buff_prc;//把读指针rd移到当前读指针prc的位置
C51 COMPILER V6.12  COMCJJ                                                                 01/24/2006 10:33:03 PAGE 6   

 294   2      			break;
 295   2      		case ST_COM_R_DADR://目标地址
 296   2      			switch(tmp)
 297   2      			{
 298   3      				case MAC_ESU://0x03
*** ERROR C202 IN LINE 298 OF COMCJJ.C: 'MAC_ESU': undefined identifier
 299   3      					st_com_r = ST_COM_R_SADR;
 300   3      					chk_empty();
 301   3      					break;
 302   3      				case COM_ALL_ADR://0xfd
 303   3      					st_com_r = ST_COM_R_SADR;
 304   3      					chk_empty();
 305   3      					break;				
 306   3      				default:
 307   3      					st_com_r = ST_COM_R_IDLE;
 308   3      					chk_empty();
 309   3      					pcom_r_buff_rd = pcom_r_buff_prc;
 310   3      					break;
 311   3      			}
 312   2      			break;
 313   2      		case ST_COM_R_SADR://源地址
 314   2      			com_r_sadr = tmp;
 315   2      			st_com_r = ST_COM_R_CMD;
 316   2      			chk_empty();
 317   2      			break;
 318   2      		case ST_COM_R_CMD://命令字节
 319   2      			com_r_cmd = tmp;
 320   2      			st_com_r = ST_COM_R_NUM;
 321   2      			chk_empty();
 322   2      			break;
 323   2      		case ST_COM_R_NUM://桢号
 324   2      			com_r_num = tmp;
 325   2      			st_com_r = ST_COM_R_LEN;
 326   2      			chk_empty();
 327   2      			break;
 328   2      		case ST_COM_R_LEN://字长
 329   2      			com_len = tmp;
 330   2      			if(tmp < 0x02)
 331   2      			{
 332   3      				st_com_r = ST_COM_R_IDLE;
 333   3      				chk_empty();
 334   3      				pcom_r_buff_rd = pcom_r_buff_prc;
 335   3      			}
 336   2      			else if(tmp == 0x02)
 337   2      		 	{
 338   3      				st_com_r = ST_COM_R_PERR;
 339   3      				chk_empty();
 340   3      			}
 341   2      			else
 342   2      			{
 343   3      				st_com_r = ST_COM_R_DATA;
 344   3      				com_data_num = NULL_BYTE;
 345   3      				chk_empty();
 346   3      			}
 347   2      			break;
 348   2      		case ST_COM_R_DATA://参数
 349   2      			data_r_tmp_buff[com_data_num] = tmp;
*** ERROR C213 IN LINE 349 OF COMCJJ.C: left side of asn-op not an lvalue
 350   2      			com_data_num++;
 351   2      			if(com_data_num + 0x02 >= com_len)
 352   2      				st_com_r = ST_COM_R_PERR;
 353   2      			chk_empty();
C51 COMPILER V6.12  COMCJJ                                                                 01/24/2006 10:33:03 PAGE 7   

 354   2      			break;
 355   2      		case ST_COM_R_PERR:
 356   2      			com_r_perr = tmp;
 357   2      			st_com_r = ST_COM_R_OK;
 358   2      			chk_empty();
 359   2      			break;
 360   2      		case ST_COM_R_OK://0XFE
 361   2      			if(tmp == COM_R_END)
 362   2      			{
 363   3      				prc_com_r_ok();
 364   3      				
 365   3      				chk_empty();
 366   3      				pcom_r_buff_rd = pcom_r_buff_prc;//如果是0xfe,则把读指针rd移到当前读指针prc的位置rd指针
 367   3      			}
 368   2      			else
 369   2      			{
 370   3      				pcom_r_buff_rd++;
 371   3      				pcom_r_buff_prc = pcom_r_buff_rd;//如果不是0xfe,则把prc指针返回到rd指针位置
 372   3      				com_r_buff_empty = FALSE;
 373   3      			}
 374   2      			st_com_r = ST_COM_R_IDLE;
 375   2      			break;	
 376   2      		default:		break;
 377   2      	}
 378   1      }
 379          
 380          
 381          	
 382          byte get_inf_r_data(void)
 383          {
 384   1      	byte tmp;
 385   1      	tmp = *pinf_r_buff_rd;
 386   1      	if(pinf_r_buff_rd == inf_r_buff + INF_R_BUFF_LEN)
 387   1      		pinf_r_buff_rd = inf_r_buff;
 388   1      	else
 389   1      		pinf_r_buff_rd	++;
 390   1      	if(pinf_r_buff_rd == pinf_r_buff_wr)
 391   1      		inf_r_buff_empty = TRUE;
 392   1      	return(tmp);
 393   1      }
 394          
 395          
 396          
 397          void init_com(void)
 398          {
 399   1      	word i = 0x0000;
 400   1      	byte j = 0x00;
 401   1      	for(i = 0x0000; i < 0x8000; i++)
 402   1      		XBYTE[i] = NULL_BYTE;
*** ERROR C213 IN LINE 402 OF COMCJJ.C: left side of asn-op not an lvalue
 403   1      
 404   1      }
 405          case ST_COM_R232_IDLE://0x7e
*** ERROR C141 IN LINE 405 OF COMCJJ.C: syntax error near 'case'
*** ERROR C129 IN LINE 405 OF COMCJJ.C: missing ';' before ':'
 406          			if(tmp == COM_R232_HEAD)
 407          				st_com_r232 = ST_COM_R232_LEN;
 408          			else
 409          			{
 410          				st_com_r232 = ST_COM_R232_IDLE;
 411          				sum_r232_crc = 0x00;
 412          			}
C51 COMPILER V6.12  COMCJJ                                                                 01/24/2006 10:33:03 PAGE 8   

 413          			chk_empty_rs232();
 414          			pcom_r232_buff_rd = pcom_r232_buff_prc;//把读指针rd移到当前读指针prc的位置
 415          			break;
 416          		case ST_COM_R232_LEN://字长
 417          			com_len232 = tmp;
 418          			if(tmp < 0x02)
 419          			{
 420          				st_com_r232 = ST_COM_R232_IDLE;
 421          				chk_empty_rs232();
 422          				sum_r232_crc = 0x00;
 423          				//pcom_r_buff_rd = pcom_r_buff_prc;
 424          				pcom_r232_buff_prc = pcom_r232_buff_rd;//prc指针返回
 425          			}
 426          			else
 427          			{
 428          				st_com_r232 = ST_COM_R232_NUM;
 429          				com_data232_num = NULL_BYTE;
 430          				sum_r232_crc = 0x00;
 431          				chk_empty_rs232();
 432          			}
 433          			break;
 434          		case ST_COM_R232_NUM://桢号
 435          			com_r232_num = tmp;
 436          			sum_r232_crc += com_r232_num;
 437          			st_com_r232 = ST_COM_R232_CMD;
 438          			chk_empty_rs232();
 439          			break;
 440          		case ST_COM_R232_CMD://命令字节
 441          			data_r232_tmp_buff[com_data232_num] = tmp;
 442          			sum_r232_crc += tmp;
 443          			com_data232_num++;
 444          			if(com_len232 == 0x02)
 445          			{
 446          				st_com_r232 = ST_COM_R232_CRC;
 447          			}
 448          			if(com_len232 > 0x02)
 449          				st_com_r232 = ST_COM_R232_DATA;
 450          			//if(com_r232_len > 0x02)
 451          			//	st_com_r232 = ST_COM_R232_DATA;
 452          			chk_empty_rs232();
 453          			break;
 454          		case ST_COM_R232_DATA://参数
 455          			com_r232_data = tmp;
 456          			sum_r232_crc += tmp;
 457          			st_com_r232 = ST_COM_R232_CRC;
 458          			chk_empty_rs232();
 459          		case ST_COM_R232_CRC:
 460          			if(tmp == sum_r232_crc)
 461          			{
 462          				st_com_r232 = ST_COM_R232_OK;
 463          				sum_r232_crc = 0x00;
 464          			}	
 465          			else
 466          			{
 467          				st_com_r232 = ST_COM_R232_IDLE;
 468          				pcom_r232_buff_prc = pcom_r232_buff_rd;//prc指针返回
 469          				sum_r232_crc = 0x00;
 470          				com_r232_buff_empty = FALSE;
 471          			}
 472          			chk_empty_rs232();
 473          			break;
 474          		case ST_COM_R232_OK://0x0d
C51 COMPILER V6.12  COMCJJ                                                                 01/24/2006 10:33:03 PAGE 9   

 475          			if(tmp == COM_R232_END)
 476          			{
 477          				prc_com_rs232_ok();
 478          				chk_empty_rs232();
 479          				pcom_r232_buff_rd = pcom_r232_buff_prc;//如果是0x0d,则把读指针rd移到当前读指针prc的位置rd指针
 480          			}
 481          			else
 482          			{
 483          				pcom_r232_buff_rd++;
 484          				pcom_r232_buff_prc = pcom_r232_buff_rd;//如果不是0x0d,则把prc指针返回到rd指针位置
 485          				com_r232_buff_empty = FALSE;
 486          			}
 487          			st_com_r232 = ST_COM_R232_IDLE;
 488          			break;	

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

⌨️ 快捷键说明

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