實現單片機和計算機之間的數據交換, 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 <reg51.h>
#include <intrins.h>
#include <stdio.h>
#include <string.h>
#include <absacc.h>
#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) ;
}
|