1,451
社区成员
发帖
与我相关
我的任务
分享
#include <reg52.h>
typedef unsigned char BYTE;
#define RELOAD_COUNT 0xFF //22.1184MHz,12T,SMOD=0,57600bps
void Initialize_Stoppage();
void SendToPort(BYTE Buf);
//入口函数
main()
{
Initialize_Stoppage();
while(1){
}
}
//初始化串口中断,注意频率是57600,晶振用的是 22.1184 M 的
void Initialize_Stoppage()
{
TMOD = 0x20;
PCON = 0x00;
SCON = 0x50;
TL1 = RELOAD_COUNT;
TH1 = RELOAD_COUNT;
ES = 1;
TR1 = 1;
EA = 1;
}
//串口中断处理过程
void COM_Event () interrupt 4
{
BYTE dat = 0;
if(RI == 1)
{
dat = SBUF;
RI = 0;
//这里是收到什么就发什么出去
SendToPort(dat);
}else{
TI = 0;
}
}
//发送串口信息给上位机函数过程
void SendToPort(BYTE Buf)
{
ES = 0;
TI = 0;
SBUF = Buf;
while(TI == 0);
TI = 0;
ES = 1;
}
Dim ReadBytes() As Byte, ReadCount As Long
' 连接串口
Private Sub Command1_Click()
'连接串口1
ConnectPort 1
End Sub
' 向串口发送信息
Private Sub Command2_Click()
Dim tmpArray() As Byte
tmpArray = StrConv(Text1.Text, vbFromUnicode)
MSComm1.Output = Bytes
End Sub
' 收到串口信息直接显示出来
Private Sub MSComm1_OnComm()
Dim X As Long
On Error Resume Next
If MSComm1.CommEvent = comEvReceive Then
ReadBytes = MSComm1.Input
ReadCount = UBound(ReadBytes)
For X = 0 To ReadCount
Text2.Text = Text2.Text & " " & String(2 - Len(Hex(ReadBytes(X))), "0") & Hex(ReadBytes(X))
Next X
End If
End Sub
' 连接串口的函数
Private Function ConnectPort(Optional hPort As Integer = 1) As Boolean
On Error Resume Next
MSComm1.PortOpen = False
If Err.Number <> 0 Then
Err.Clear
End If
MSComm1.CommPort = hPort
MSComm1.Settings = "57600,N,8,1"
MSComm1.PortOpen = True
If Err.Number <> 0 Then
Err.Clear
MsgBox "打开端口错误,请您确定.",64,"错误"
Exit Function
End If
MSComm1.RThreshold = 1
MSComm1.SThreshold = 1
MSComm1.InputMode = comInputModeBinary
End Function