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