单片机C51串口中断接收和发送测试例程(含通信协议的实现)

源代码在线查看: 单片机c51串口中断接收和发送测试例程(含通信协议的实现).txt

软件大小: 3 K
上传用户: aspen
关键词: C51 单片机 串口中断 接收
下载地址: 免注册下载 普通下载 VIP

相关代码

				
				 单片机C51串口中断接收和发送测试例程(含通信协议的实现)
				  
				
				 
				
				
				
				  通信协议: 第1字节,MSB为1,为第1字节标志,第2字节,MSB为0,为非第一字节标志,其余类推……,最后一个字节为前几个字节后7位的异或校验和。  
				  测试方法:可以将串口调试助手的发送框写上 95 10 20 25,并选上16进制发送,接收框选上16进制显示,如果每发送一次就接收到95 10 20 25,说明测试成功。  
				
				
				//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收  
				//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的  
				
				
				#include   
				#include   
				
				#define INBUF_LEN 4 //数据长度  
				
				unsigned char inbuf1[INBUF_LEN];  
				unsigned char checksum,count3;  
				bit read_flag= 0 ;  
				
				void init_serialcomm( void )  
				{  
				SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr  
				TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload  
				PCON |= 0x80 ; //SMOD=1;  
				TH1 = 0xF4 ; //Baud:4800 fosc=11.0592MHz  
				IE |= 0x90 ; //Enable Serial Interrupt  
				TR1 = 1 ; // timer 1 run  
				// TI=1;  
				}  
				
				//向串口发送一个字符  
				void send_char_com( unsigned char ch)  
				{  
				SBUF=ch;  
				while (TI== 0 );  
				TI= 0 ;  
				}  
				
				//向串口发送一个字符串,strlen为该字符串长度  
				void send_string_com( unsigned char *str, unsigned int strlen)  
				{  
				unsigned int k= 0 ;  
				do  
				{  
				send_char_com(*(str + k));  
				k++;  
				} while (k < strlen);  
				}  
				
				
				//串口接收中断函数  
				void serial () interrupt 4 using 3  
				{  
				if (RI)  
				{  
				unsigned char ch;  
				RI = 0 ;  
				ch=SBUF;  
				if (ch> 127 )  
				{  
				count3= 0 ;  
				inbuf1[count3]=ch;  
				checksum= ch- 128 ;  
				}  
				else  
				{  
				count3++;  
				inbuf1[count3]=ch;  
				checksum ^= ch;  
				if ( (count3==(INBUF_LEN- 1 )) && (!checksum) )  
				{  
				read_flag= 1 ; //如果串口接收的数据达到INBUF_LEN个,且校验没错,  
				//就置位取数标志  
				}  
				}  
				}  
				}  
				
				
				main()  
				{  
				init_serialcomm(); //初始化串口  
				while ( 1 )  
				{  
				if (read_flag) //如果取数标志已置位,就将读到的数从串口发出  
				{  
				read_flag= 0 ; //取数标志清0  
				send_string_com(inbuf1,INBUF_LEN);  
				}  
				}  
				
				}  
				  
				
				
				
				 
				
				
				
				
				【热点推荐信息:】 电子连接器解决方案
				 
				【>>>>>察看网友评论 , 或发表您对本文的看法】【 推荐 】  
				  
				
				
				
				 
				
				 本站介绍|  合作联络|  欢迎投稿|  广告业务| 网站地图| 加入收藏| 站内搜索| 联系我们 
				
				
				--------------------------------------------------------------------------------
				
				
				ICP许可证号:[京 041110]
				总部:北京市海淀区中关村南大街2号数码大厦A座32层3215室 
				联系电话:010-51626290 传真: 010-51626279 info@21ic.com 
				Better View:800*600 Best View:1024x768 为了本系统能够更好的为您服务,请使用IE4.0或以上版本浏览器 
				
				除特别声明外的站内文章均为作者高论,并不代表21IC之观点
				版权所有 谢绝转载(C)21IC中国电子网 2000-2007 
				 
							

相关资源