回覆列表
  • 1 # 使用者1163201958491

    1、51微控制器SCON=0xDA,工作在方式3.(方式2也可以)

    串列埠 1 模式 3:

    波特率是可變的,其它和模式2 相同

    11 位資料透過TxD/P3.1 傳送,透過RxD/P3.0 接收。一幀資料包含一個起始位(0),8 個數據位(低位在

    先),一個可程式設計的第9 位,和一個停止位(1)。傳送時,第9 位資料位來自特殊功能暫存器SCON 的

    TB8 位.接收時,第9 位進入特殊功能暫存器SCON 的RB8 位。

    SMOD

    串列埠1波特率在模式3 = ( 2 / 32 ) x BRT獨立波特率發生器的溢位率

    當SMOD = 0時,串列埠1波特率 = BRT 獨立波特率發生器的溢位率 / 32,

    當SMOD = 1時,串列埠1波特率 = BRT 獨立波特率發生器的溢位率 / 16,

    BRT獨立波特率發生器的溢位率 = Fosc/12/( 256 - BRT ),當BRTx12 = 0時,

    BRT獨立波特率發生器的溢位率 = Fosc / ( 256 - BRT ),當BRTx12 = 1時

    TB8:傳送時校驗位,可以奇校驗或偶校驗(直接置0或1),然後再發送。

    RB8:接收時校驗位,判斷接資料是否正確。

    2、程式

    /*****************************************

    *串列埠1中斷

    *****************************************/

    void RXD_Int_Service() interrupt 4

    {

    uint8 ch;

    if(RI)

    {

    RI=0;

    Usart1.RxdDly=6; //超過0.3S清空計數

    Usart1.RxdBuf[Usart1.RxdCnt]=ch;

    Usart1.RxdCnt++;

    if(Usart1.RxdCnt>=10)

    {

    Usart1.RxdTrue=1; //接收正確。

    Usart1.RxdNum=Usart1.RxdCnt;

    Usart1.RxdCnt=0;

    }

    }

    if(TI)//防止傳送中斷

    {

    TI=0;

    }

    }

    void Timer0_InSevice() interrupt 1

    {

    TH0=0xdc; //定義50ms 正常值0xfe 0x0c ,修正值:0xfe 0x16;

    TL0=0x00; //11.0592MHz晶振

    if(Usart1.RxdDly)

    {

    Usart1.RxdDly--; //0.3S沒有接收到資料,清0計數。

    if(Usart1.RxdDly==0)

    {

    Usart1.RxdCnt =0; //記數清0.

    }

    }

    }

  • 中秋節和大豐收的關聯?
  • 吳三桂造反的目的,是恢復漢人江山,為何得不到漢人支援而失敗?