找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 11847|回復(fù): 15
打印 上一主題 下一主題
收起左側(cè)

51單片計算機串口開發(fā)詳解

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:70941 發(fā)表于 2014-12-26 00:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
一.51單片計算機串口結(jié)構(gòu)圖如下:


二. SCON 是一個特殊功能寄存器說明:
         用以設(shè)定串行口的工作方式、接收/發(fā)送控制以及設(shè)置狀態(tài)標志


        各位功能如下:
        SM0和SM1 為工作方式選擇位
   

        SM2,多機通信控制位,主要用于方式2和方式3。當(dāng)接收機的SM2=1時可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數(shù)據(jù)進入SBUF,并激活RI,進而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。當(dāng)SM2=0時,不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進入SBUF,并激活RI(即此時RB8不具有控制RI激活的功能)。通過控制SM2,可以實現(xiàn)多機通信。
在方式0時,SM2必須是0。在方式1時,若SM2=1,則只有接收到有效停止位時,RI才置1。
        REN,允許串行接收位。由軟件置REN=1,則啟動串行口接收數(shù)據(jù);若軟件置REN=0,則禁止接收。
        TB8,在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,可以用軟件規(guī)定其作用。可以用作數(shù)據(jù)的奇偶校驗位,或在多機通信中,作為地址幀/數(shù)據(jù)幀的標志位。
在方式0和方式1中,該位未用。
        RB8,在方式2或方式3中,是接收到數(shù)據(jù)的第九位,作為奇偶校驗位或地址幀/數(shù)據(jù)幀的標志位。在方式1時,若SM2=0,則RB8是接收到的停止位。
        TI,發(fā)送中斷標志位。在方式0時,當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行發(fā)送停止位的開始時,由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請。在中斷服務(wù)程序中,必須用軟件將其清0,取消此中斷申請。
        RI,接收中斷標志位。在方式0時,當(dāng)串行接收第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行接收停止位的中間時,由內(nèi)部硬件使RI置1,向CPU發(fā)中斷申請。也必須在中斷服務(wù)程序中,用軟件將其清0,取消此中斷申請。

三.串口開發(fā)例程,下面程式實現(xiàn)向單片機發(fā)關(guān)信息后,它收完后再返回送回來。

#include<reg52.h>
unsigned  char flag,a;
void main()
{

   TMOD=0x20; //設(shè)置定時器1為工作方式2,串口是靠在、定時器工作的
   TH1=0xfd;
   TL1 =0xfd; //裝串口初值,設(shè)置串口波特率9600,計算出來的
   TR1=1;//打開定時器

   REN=1;  // 打開串口允許位
   SM0=0;
   SM1=1;//設(shè)置串口工作方式1
   EA=1;  //打開總中斷
   ES=1;  //打開串口中斷
   
   while(1)
   {
        if (RI==1)  //這個是用來讀取到P1口
       {
         RI=0;
         P1=SBUF:
       }


        if(flag==1)   //表明串口收到的數(shù)據(jù)可以用來發(fā)送
        {
          ES=0;  //防止TI進入串口中斷關(guān)串口中斷
          flag=0;
          SBUF=a; //向發(fā)送SBUF送a
          while(!TI); //等待 發(fā)送結(jié)束。未發(fā)送結(jié)束之前T1一直是0
          TI=0;      // 通過軟件將TI置0防止中斷后進入中斷服務(wù)程序
          ES=1;
         }
   }
}
void ser() interrupt 4  
{
   RI=0;
   P1=SBUF;
   a=SBUF;
   flag=1;
}

附:max232芯片接線圖

max 232 內(nèi)部合并了MC1488和MC1489能夠?qū)崿F(xiàn)TTL電平和232電平的雙向轉(zhuǎn)換


除了232接口外還有其它的接口,都有自己不同的特性



           RS-485是一點對多點的通信接口,一般采用雙絞線的結(jié)構(gòu)。普通的PC機一般不帶RS485接口,因此要使用RS-232C/RS-485轉(zhuǎn)換器。對于單片機可以通過芯片MAX485來完成TTL/RS-485的電平轉(zhuǎn)換。在計算機和單片機組成的RS-485通信系統(tǒng)中,下位機由單片機系統(tǒng)組成,上位機為普通的PC機,負責(zé)監(jiān)視下位機的運行狀態(tài),并對其狀態(tài)信息進行集中處理,以圖文方式顯示下位機的工作狀態(tài)以及工業(yè)現(xiàn)場被控設(shè)備的工作狀況。系統(tǒng)中各節(jié)點(包括上位機)的識別是通過設(shè)置不同的站地址來實現(xiàn)的。

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏9 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:60673 發(fā)表于 2014-12-27 22:21 | 只看該作者
值得擁有
回復(fù)

使用道具 舉報

板凳
ID:71354 發(fā)表于 2014-12-30 11:45 | 只看該作者
很詳細的資料,謝謝分享
回復(fù)

使用道具 舉報

地板
ID:71354 發(fā)表于 2014-12-30 11:51 | 只看該作者
經(jīng)過驗證,程序可用
回復(fù)

使用道具 舉報

5#
ID:11942 發(fā)表于 2015-1-7 13:14 | 只看該作者
詳細的資料,謝謝
回復(fù)

使用道具 舉報

6#
ID:28571 發(fā)表于 2015-4-16 20:28 | 只看該作者
好東西,學(xué)習(xí)一下,謝謝!
回復(fù)

使用道具 舉報

7#
ID:79943 發(fā)表于 2015-5-15 10:22 | 只看該作者
    SM2,多機通信控制位,主要用于方式2和方式3。當(dāng)接收機的SM2=1時可以利用收到的RB8來控制是否激活RI(RB8=0時不激活RI,收到的信息丟棄;RB8=1時收到的數(shù)據(jù)進入SBUF,并激活RI,進而在中斷服務(wù)中將數(shù)據(jù)從SBUF讀走)。當(dāng)SM2=0時,不論收到的RB8為0和1,均可以使收到的數(shù)據(jù)進入SBUF,并激活RI(即此時RB8不具有控制RI激活的功能)。通過控制SM2,可以實現(xiàn)多機通信。
在方式0時,SM2必須是0。在方式1時,若SM2=1,則只有接收到有效停止位時,RI才置1。
        REN,允許串行接收位。由軟件置REN=1,則啟動串行口接收數(shù)據(jù);若軟件置REN=0,則禁止接收。
        TB8,在方式2或方式3中,是發(fā)送數(shù)據(jù)的第九位,可以用軟件規(guī)定其作用�?梢杂米鲾�(shù)據(jù)的奇偶校驗位,或在多機通信中,作為地址幀/數(shù)據(jù)幀的標志位。
在方式0和方式1中,該位未用。
        RB8,在方式2或方式3中,是接收到數(shù)據(jù)的第九位,作為奇偶校驗位或地址幀/數(shù)據(jù)幀的標志位。在方式1時,若SM2=0,則RB8是接收到的停止位。
        TI,發(fā)送中斷標志位。在方式0時,當(dāng)串行發(fā)送第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行發(fā)送停止位的開始時,由內(nèi)部硬件使TI置1,向CPU發(fā)中斷申請。在中斷服務(wù)程序中,必須用軟件將其清0,取消此中斷申請。
        RI,接收中斷標志位。在方式0時,當(dāng)串行接收第8位數(shù)據(jù)結(jié)束時,或在其它方式,串行接收停止位的中間時,由內(nèi)部硬件使RI置1,向CPU發(fā)中斷申請。也必須在中斷服務(wù)程序中,用軟件將其清0,取消此中斷申請。
回復(fù)

使用道具 舉報

8#
ID:89610 發(fā)表于 2015-12-24 11:45 | 只看該作者
很好的帖子
回復(fù)

使用道具 舉報

9#
ID:74145 發(fā)表于 2016-3-17 23:11 | 只看該作者
很好的帖子   幫助很大
回復(fù)

使用道具 舉報

10#
ID:109441 發(fā)表于 2016-3-18 00:34 | 只看該作者
很好的帖子   幫助很大很好的帖子   幫助很大
回復(fù)

使用道具 舉報

11#
ID:135676 發(fā)表于 2016-9-1 15:11 | 只看該作者
我用這個程序在我的實驗板上調(diào)試,可以通過,但燒入單片機運行,串口無顯示,為何?
回復(fù)

使用道具 舉報

12#
ID:3802 發(fā)表于 2019-1-25 10:52 | 只看該作者
值得擁有
回復(fù)

使用道具 舉報

13#
ID:860602 發(fā)表于 2021-1-9 21:07 | 只看該作者
RS-485還要在終端接120歐姆電阻,防止信號反射
回復(fù)

使用道具 舉報

14#
ID:299193 發(fā)表于 2021-2-17 15:50 | 只看該作者
真是個好貼,我正好在學(xué)習(xí),謝謝!
回復(fù)

使用道具 舉報

15#
ID:513213 發(fā)表于 2021-2-20 23:20 | 只看該作者
很詳細的資料,謝謝分享
回復(fù)

使用道具 舉報

16#
ID:47634 發(fā)表于 2021-2-22 10:44 | 只看該作者
感謝樓主,很好的學(xué)習(xí)資料
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表