实现单片机和计算机之间的数据交换, Windows 环境下的Visual Basic 6.0 作为可视化的编程工具, 具有完整的基于组件设计的可视化集成开发环境、操作简单、界面友好的特点。 上位机通信程序是用VB6.0 使用MAX232 来进行数据通信的协议, 既可 以使用查询方式又可以使用事件驱动方式来完成串行通信。 1 上位机程序 Private Sub Form- Load( ) MSComm1.CommPort=1‘选择通信端口1’ MSComm1.InputLen=0‘串行数据接收缓冲区初始化’ MSComm1.Settings=“9600, n, 8, 1” 设置端口参数: 波特率为9 600 b/s, 无奇偶校验位, 8 位数据, 1 位停 止位。 MSComm1.PortOpen=True ‘打开串口’ MSComm1.RThreshold=1 ‘有一个字符就接收’ ENDSub Private Sub MSComm1_OnComm( ) Select Case MSComm1.CommEvent Case comEvReceive DimBuffer As Variant, i MSComm1.InputMode=comInputModeBinary MSComm1.InputLen=0 Do’该循环判断输入缓冲区是否有数据 DoEvents Loop Until MSComm1.InBufferCount>=1 Buffer=MSComm1.Input For i = LBound( Buffer) To UBound( Buffer) List1.AddItemBuffer( i) ‘把接收到的数据显示在列表框中’ Next i Case Else End Select End Sub Private Sub CommandClose- Click( ) IfMSComm1.PortOpen=True Then MSComm1.PortOpen=False ‘关闭串行端口’ x=MsgBox(“关闭通信! ”, 16) End If ENDSub 2 下位机程序 #include #include #include #include #include #define uint unsigned int #define uchar unsigned char sbit P1_5=P1^5; //RS485 的控制位 uchar flag; //结果为负和正的标志位 void delay( unsigned int count) //延时子程序 { unsigned int i; while( count) { i=200; while( i>0) i- - ; count- - ; } } void main( void) { SCON=0X50; TMOD=0X21; //定时器1, 工作在方式2 TL1=0XFD; //所用晶振为11.0592, 波特率设定为9 600 b/s TH1=0XFD; TR1=1; //启动定时器1 EA=1; ES=1; ?? do{ P1_5=1; //串行发控制位 tmpchange( ) ; //数据采集函数调用 ?? SBUF=TEMP; //把数据送入串行口缓冲寄存器 if( TI==0) TI=0; } while( 1) ; } |
|