新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 從零開始學單片機(九)串口通信

        從零開始學單片機(九)串口通信

        作者: 時間:2016-11-22 來源:網絡 收藏
        串口通信單片機一個重要的部分,單片機和PC,單片機和單片機之間的通信大都用串口。單片機的串口是全雙工異步串口通信方式。通過TXD(P3.1)發送,RXD(P3.0)引腳接收輸入。串口傳送數據是一幀一幀發送的,它有四種工作方式,同時也可以做并行I/O的擴展。

        本文引用地址:http://www.104case.com/article/201611/319880.htm

        圖上是串口的結構圖。

        SBUF是數據緩沖寄存器,發送和接收用的是一個地址,但是不用擔心沖突,讀只能從接收緩沖區,寫只能在發送緩沖區里。

        寄存器SCON(SM0 SM1 SM2 REN TB8 RB8 TI RI)

        SM0和SM1: 工作方式選擇(0-3),方式1和方式3使用T1產生波特率,方式0和方式2是固定速率。

        SM2 :在方式2和方式3的多級通信控制位

        REN:允許串行接收控制位,0禁止接收

        TB8:對于方式2和方式3,是發送的第9位

        RB8:對于方式2和方式3,是接收的第9位;對于方式1,是接收到的停止位

        TI:發送中斷標志,發送完一幀后置位,必須由軟件清零

        RI:發送中斷標志,接收完一幀后置位,必須由軟件清零

        寄存器PCON(最高位SMOD)

        SMOD=1時,波特率加倍

        程序:PC與單片機通信,PC發送字符,單片機接收后返回給PC

        PC端程序,VB編寫,使用MSCOMM控件

        Private Sub Command1_Click()

        MSComm1.Output = Text1.Text 發送數據

        End Sub

        Private Sub Form_Load()

        MSComm1.CommPort = 4 設置串口的端口號

        MSComm1.Settings = "9600,n,8,1" 設置串口的波特率等參數

        MSComm1.RThreshold = 1 設置最小接收的字節數

        MSComm1.PortOpen = True 打開串口

        End Sub

        Private Sub MSComm1_OnComm()

        Select Case MSComm1.CommEvent

        Case comEvReceive

        Text2.Text = Text2.Text & MSComm1.Input 接收數據

        End Select

        End Sub

        單片機程序:

        #include

        void UartInit();

        void UartSendChar(unsigned char ch);

        void main(void)

        {

        UartInit();

        while(1);

        }

        void UartInit()

        {

        SCON = 0x50; // SCON: 模式1

        TMOD = 0x20; // TMOD: 定時器1 模式2

        PCON = 0x00; // SMOD=0;

        TH1 = 0xFD; // Baud:9600 波特率=2SMOD×fosc/(32×12×(256-TH1))

        TL1 = 0xFD;

        IE = 0x90;

        TR1 = 1;

        EA = 1;

        }

        void UartSendChar(unsigned char ch)

        {

        SBUF = ch;

        while(TI==0);

        TI=0;

        }

        void UartRec() interrupt 4

        {

        unsigned char ch;

        ch = SBUF;

        if(RI)

        {

        RI = 0;

        UartSendChar(ch);

        }

        }



        關鍵詞: 單片機串口通

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 通渭县| 施秉县| 营口市| 贵阳市| 旌德县| 玉山县| 郸城县| 璧山县| 谷城县| 温泉县| 大关县| 桐柏县| 万全县| 西乡县| 信阳市| 交口县| 柞水县| 驻马店市| 大足县| 和林格尔县| 乌拉特后旗| 八宿县| 兴隆县| 克什克腾旗| 石渠县| 扬州市| 周至县| 河北区| 邮箱| 柘荣县| 云安县| 自贡市| 昭觉县| 黄石市| 石首市| 左权县| 西青区| 双牌县| 青川县| 沁源县| 遵义县|