C#與51單片機(jī)串口通信
C#與51單片機(jī)串口通信
51接受數(shù)據(jù),PC發(fā)送數(shù)據(jù)。
通過(guò)單片機(jī)的數(shù)碼管將PC發(fā)送的16進(jìn)制數(shù)據(jù)顯示出來(lái)。
51接受數(shù)據(jù)代碼:
#include
#include
#include
sbit LS138A = P2^2; //定義138譯碼器的輸入A腳由P2.2控制
sbit LS138B = P2^3; //定義138譯碼器的輸入腳B由P2.3控制
sbit LS138C = P2^4; //定義138譯碼器的輸入腳C由P2.4控制
unsigned char ch;
bit read_flag= 0 ;
//此表為 LED 的字模, 共陰數(shù)碼管 0-9 -
unsigned char code Disp_Tab[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
void delay(unsigned int i);
void init_serialcom( void )
{
SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr
//UART為模式1,8位數(shù)據(jù),允許接收
TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload
//定時(shí)器1為模式2,8位自動(dòng)重裝
PCON |= 0x80 ; //SMOD=1;
TH1 = 0xF3; // //baud*2 /* 波特率4800、數(shù)據(jù)位8、停止位1。效驗(yàn)位無(wú) (12M)
IE |= 0x90 ; //Enable Serial Interrupt
TR1 = 1 ; // timer 1 run
TI=1;
}
//向串口發(fā)送一個(gè)字符
void send_char_com( unsigned char ch)
{
SBUF=ch;
while (TI== 0);
TI= 0 ;
}
//串口接收中斷函數(shù)
void serial () interrupt 4 using 3
{
if (RI)
{
RI = 0 ;
ch=SBUF;
read_flag= 1 ; //就置位取數(shù)標(biāo)志
}
}
main()
{
int LedNumVal = 0;
unsigned char LedOut[3];
int i = 0;
init_serialcom(); //初始化串口
while ( 1 )
{
if (read_flag) //如果取數(shù)標(biāo)志已置位,就將讀到的數(shù)從串口發(fā)出
{
read_flag= 0 ; //取數(shù)標(biāo)志清0
send_char_com(ch);
LedNumVal = ch;
}
LedOut[0]=Disp_Tab[LedNumVal / 100];
LedOut[1]=Disp_Tab[(LedNumVal / 10) % 10];
LedOut[2]=Disp_Tab[LedNumVal % 10]|0x80;
for( i=0; i<3; i++) //實(shí)現(xiàn)8位動(dòng)態(tài)掃描循環(huán)
{
P0 = LedOut[i]; //將字模送到P0口顯示
switch(i) //使用switch 語(yǔ)句控制位選
{
case 0:LS138A=0; LS138B=0; LS138C=0; break;
case 1:LS138A=1; LS138B=0; LS138C=0; break;
case 2:LS138A=0; LS138B=1; LS138C=0; break;
}
delay(100);
}
}
}
void delay(unsigned int i)
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
C#發(fā)送數(shù)據(jù)代碼:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.IO.Ports;
namespace 交通燈串口通信
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private SerialPort com;
private void button1_Click(object sender, EventArgs e)
{
com = new SerialPort();
com.BaudRate = 4800;
com.PortName = "COM4";
com.DataBits = 8;
com.Open();
Byte[] data = new Byte[4];
data[0] = 0x10;
com.Write(data, 0, 1);
com.Close();
}
}
}