单片机rs232与vb通信

上传人:wt****50 文档编号:39986642 上传时间:2018-05-21 格式:DOC 页数:4 大小:30KB
返回 下载 相关 举报
单片机rs232与vb通信_第1页
第1页 / 共4页
单片机rs232与vb通信_第2页
第2页 / 共4页
单片机rs232与vb通信_第3页
第3页 / 共4页
单片机rs232与vb通信_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《单片机rs232与vb通信》由会员分享,可在线阅读,更多相关《单片机rs232与vb通信(4页珍藏版)》请在金锄头文库上搜索。

1、单片机单片机 RS232 与与 VB 通信通信/-函数声明,变量定义- #include #define COUNT 10 / 定义接收缓冲区大小 unsigned char bufferCOUNT; /定义接收缓冲区 unsigned char point; /定义接收数据个数指示变量 void UART_init(); /串口初始化函数 void COM_send(void); /串口接收函数 unsigned char CLU_checkdata(void);/计算校验位函数 /- / 函数名称: UART_init()串口初始化函数 / 函数功能: 在系统时钟为 11.059MHZ 时

2、,设定串口波特率为 9600bit/s / 串口接收中断允许,发送中断禁止 /- void UART_init() /初始化串行口和波特率发生器 SCON =0x58; /选择串口工作方式,打开接收允许 TMOD =0x21; /定时器 1 工作在方式 2,定时器 0 工作在方式 1 TH1 =0xfd; /实现波特率 9600(系统时钟 11.0592MHZ) TR1 =1; /启动定时器 T1 ET1 =0; ES=1; /允许串行口中断 PS=1; /设计串行口中断优先级 EA =1; /单片机中断允许 /- / 函数名称: com_interrup()串口接收中断处理函数 / 函数功能

3、: 接收包括起始位S在内的十位数据到数据缓冲区 /- com_interrupt(void) interrupt 4 using 3 unsigned char RECEIVR_buffer; if(RI) /处理接收中断 RI=0; /清除中断标志位 RECEIVR_buffer=SBUF; /接收串口数据 if(point=0) /如果还没有接收到起始位 if(RECEIVR_buffer=S) /判断是否起始标志位 point+; /是准备接收下一位 else point=0; /不是,继续等待起始位 else if(point0 /不够,把接收到的数据放入接收缓存区 else poin

4、t=0; /缓冲区已满,清除缓存区内数据重新接收 If(TI) /处理发送中断 TI=0; /- / 函数名称: COM_send()串口发送函数 / 函数功能: 把数据缓冲区的十位数据发送出去 /- void COM_send(void) for(point=0;point=10,TI=1;point+) /连续发送十位数据 /把缓存区的数据都发送到串口 SBUF=bufferpoint; TI=0; /- / 函数名称: CLU_checkdata()计算校验位函数 / 输入变量: 无 / 输出变量: checkdata,包括起始位在内的前九位数据的校验和 / 函数功能: 计算校验和 /-

5、 unsigned char CLU_checkdata(void) /计算校验位 unsigned char checkdata=0; for(point=0;point9,TI=1;point+) checkdata=checkdata|bufferpoint; return(checkdata); /- / 函数名称: 主函数 / 函数功能: 调度个子函数,完成通信过程 /- void main(void) unsigned char checkdata; do UART_init(); /初始化串口 if(point=10) /判断数据是否接收完成 checkdata=CLU_chec

6、kdata; /调用求校验和函数 if(checkdata=buffer9) /判断校验和是否正确 COM_send(); /正确则调用发送程序 point=0; while(1); VB 控制通信程序:/-SComm 控件的常用属性和方法- Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口状态。 InputMode:设置或返回接收数据的类型。 Inputlen:设置或返回一次从接收缓冲区中读取字节数。 InBufferSize:设置或返回接收缓冲区的大小,缺省值为 l 024 字节。 InBufferCount:

7、设置或返回接收缓冲区中等待计算机接收的字符数。 Input:从接收缓冲区中读取数据并清空该缓冲区,该属性设计时无效,运行时只读。 OutBufferSize:设置或返回发送缓冲区的大小,缺省值为 512 字节。 OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数。 Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。 设置好这些属性和方法,程序很容易就可以编出来了,其中要注意的是串口的波特串设置,OnComm 事件的程序编写。 程序的设计是这样的,计算机向单片机发送一个S,表示通信开始。然后紧接着又发送 9 个字符,其中最后一个字符是前面 9 个字符(包括

8、S)的校验和。单片机正确接收到 10 个字符后,把 10 个字符从新又送回来。 /-初始化串口设计- Private Sub Form_Load() Comm1.Setting“9600,n,8,1,“ 设置波特率和发送字符格式 Comm1.CommPort1 设置通讯串口 Comm1.InputLen0 设置或返回一次从接收缓冲区中读取字节数,0 表示一次读取所有数据 Comm1.InBuffersize512 Comm1.InBufferCount0 Comm1.OutBufferCount=0 Comm1.Rthreshold1 Comm1.PortOpenTrue End Sub 打开

9、串口 /-给单片机发送S,开始通信- Private Sub Command1_C1ick() Timer1.EnabledTrue End Sub Private Sub Command2_C1ick() Varbuffet“S” Comm1.Ouputvarbuffe Timer2.EnabledTrue End Sub Private Sub Form_Unload(Cancel As Integer) Comm1.PortOpenFalse End Sub /-向单片机发送数据- Private Sub Timer2_ Timer() OutputsignalStr(Text2.text) 向单片机发送数据 Temp(1)Cbyte(outputsignal) Varbuffertemp Comml.Outputvarbuffer Timer2.EnabledFalse End Sub /-接收单片机发送的数据,并显示- Private Sub Comm1_OnComm() Select C

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号