單片機c語言教程:C51開關(guān)分支語句
SM0、SM1 為串行口工作模式設(shè)置位,這樣兩位能對應(yīng)進行四種模式的設(shè)置??幢?8-2 串行口工作模式設(shè)置。
SM0 | SM1 | 模 式 | 功 能 | 波特率 |
0 | 0 | 0 | 同步移位寄存器 | fosc/12 |
0 | 1 | 1 | 8 位 UART | 可變 |
1 | 0 | 2 | 9 位 UART | fosc/32 或 fosc/64 |
1 | 1 | 3 | 9 位 UART | 可變 |
表 8-2 串行口工作模式設(shè)置
在這里只說明最常用的模式 1,其它的模式也就一一略過,有興趣的朋友能找相關(guān)的 硬件資料查看。表中的 fosc 代表振蕩器的頻率,也就是晶體震蕩器的頻率。UART 為(Universal Asynchronous Receiver)的英文縮寫。
SM2 在模式 2、模式 3 中為多處理機通信使能位。在模式 0 中要求該位為 0。
REM 為允許接收位,REM 置 1 時串行口允許接收,置 0 時禁止接收。REM 是由軟件置位或 清零。如果在一個電路中接收和發(fā)送引腳 P3.0,P3.1 都和上位機相連,在軟件上有串行口中斷 處理程序,當(dāng)要求在處理某個子程序時不允許串行口被上位機來的控制字符產(chǎn)生中斷,那么可 以在這個子程序的開始處加入 REM=0 來禁止接收,在子程序結(jié)束處加入 REM=1 再次打開串行口 接收。大家也能用上面的實際源碼加入 REM=0 來進行實驗。
TB8 發(fā)送數(shù)據(jù)位 8,在模式 2 和 3 是要發(fā)送的第 9 位。該位能用軟件根據(jù)需要置位或 清除,通常這位在通信協(xié)議中做奇偶位,在多處理機通信中這一位則用于表示是地址幀還是 數(shù)據(jù)幀。
RB8 接收數(shù)據(jù)位 8,在模式 2 和 3 是已接收數(shù)據(jù)的第 9 位。該位可能是奇偶位,地址/ 數(shù)據(jù)標(biāo)識位。在模式 0 中,RB8 為保留位沒有被使用。在模式 1 中,當(dāng) SM2=0,RB8 是已接 收數(shù)據(jù)的停止位。
TI 發(fā)送中斷標(biāo)識位。在模式 0,發(fā)送完第 8 位數(shù)據(jù)時,由硬件置位。其它模式中則是在 發(fā)送停止位之初,由硬件置位。TI 置位后,申請中斷,CPU 響應(yīng)中斷后,發(fā)送下一幀數(shù)據(jù)。 在任何模式下,TI 都必須由軟件來清除,也就是說在數(shù)據(jù)寫入到 SBUF 后,硬件發(fā)送數(shù)據(jù),
中斷響應(yīng)(如中斷打開),這個時候 TI=1,表明發(fā)送已完成,TI 不會由硬件清除,所以這個時候必須用軟件對其清零。
RI 接收中斷標(biāo)識位。在模式 0,接收第 8 位結(jié)束時,由硬件置位。其它模式中則是在接 收停止位的半中間,由硬件置位。RI=1,申請中斷,要求 CPU 取走數(shù)據(jù)。但在模式 1 中,SM2=1 時,當(dāng)未收到有效的停止位,則不會對 RI 置位。同樣 RI 也必須要靠軟件清除。
常用的串行口模式 1 是傳輸 10 個位的,1 位起始位為 0,8 位數(shù)據(jù)位,低位在先,1 位停止 位為 1。它的波特率是可變的,其速率是取決于定時器 1 或定時器 2 的定時值(溢出速率)。 AT89c51 和 AT89C2051 等 51 系列芯片只有兩個定時器,定時器 0 和定時器 1,而定時器 2是 89C52 系列芯片才有的。
評論