單片機8051串行接口的C編程_第1頁
單片機8051串行接口的C編程_第2頁
單片機8051串行接口的C編程_第3頁
單片機8051串行接口的C編程_第4頁
單片機8051串行接口的C編程_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第第6 6章章 80518051串行口的串行口的C C編程編程 本章主要介紹串行通信概念及51系列單片機的串行口問題,將具體介紹以下內容:51單片機串行口-串行口結構、串行口的控制寄存器、串行口的工作方式、串行口的初始化、應用舉例。計算機串行通信基礎-基本概念。通信方式6.1 6.1 計算機串行通信基礎計算機串行通信基礎基本概念并行通信方式空間上區(qū)分各位數據 及聯絡控制信號。占 用傳輸線多,速度快。串行通信方式時間上區(qū)分各位數據 及聯絡控制信號。占 用傳輸線少,速度慢。6.2 516.2 51單片機串行口單片機串行口 一、串行口結構 8051系列單片機片上有UART(通用異步收發(fā))用于串行通信

2、,發(fā)送時數據由TXD端發(fā)出,接收時數據由RXD端輸入。TTL電平:短距離機間通信RS232電平:與計算機通信。(驅動芯片MAX232) 二、串行口的控制寄存器與串行口有關的控制寄存器有:1 1串行口控制寄存器SCOND7D6D5D4D3D2D1D0SM0 SM1 SM2 REN TB8 RB8TIRI工作方式控制位中斷標志接收允許位(硬件置位,軟件清0)0 禁止1 允許(軟件設置)工作方式控制位SM0、SM1SM0 SM1 工作方式 說明 波特率 0 0 方式0 同步移位寄存器 fosc/12 0 1 方式1 10位異步收發(fā) 由定時器控制 1 0 方式2 11位異步收發(fā) fosc/32或fos

3、c/64 1 1 方式3 11位異步收發(fā) 由定時器控制2 2電源控制寄存器PCOND7D6D5D4D3D2D1D0SMODGF1 GF0PDIDLSMOD:串行口波特率加倍位。1 方式1,3波特率=定時器1溢出率/16; 方式2波特率=fosc/32。0 方式1,3波特率=定時器1溢出率/32; 方式2波特率=fosc/64。 三、串行口的工作方式串行口共有四種工作方式 方式110位異步通信方式 10位=1位起始位(0)+8位數據位+1位停止位(1)其中起始位和停止位在發(fā)送時是自動插入的。發(fā)送:SBUF=?; SBUF=“abc”; 例子:SBUF=“a”; SBUF=0 x61; 發(fā)送條件T

4、I=0;(軟件清0)發(fā)送完畢TI=1;(硬件置位)接收:?=SBUF; 例子:serial_data=SBUF;接收條件REN=1;(軟件置位)收到數據RI=1; (硬件置位)讀數完畢RI=0; (軟件清0)波特率=2SMOD*(定時器1的溢出率)/32 例子:波特率=9600,fosc=11.059M,則設置 PCON=0 x00; /SMOD=0; TMOD=0 x20; TH1=0 xfd; TL1=0 xfd; TR1=1; /啟動定時器1 ES=1; /開串行口中斷 EA=1; /開CPU中斷 四、串行口的初始化1.串行口波特率 使用單片機串口時,選用的晶振比較固定6MHz,12MH

5、z,11.0592MHz。常用于和計算機的通信;選用的波特率也相對固定。串行口常用的波特率及相應的設置見表8-3。2.初始化步驟 設置產生波特率的定時器1、串行口控制和中斷控制。具體步驟:(1)確定定時器1的工作方式,編程TMOD寄存器;(2)計算定時器1的初值,裝載TH1和TL1;(4)確定串行口的控制,編程SCON和PCON;(5)開CPU和源中斷,編程IE中的ES和EA位。(3)啟動定時器1,編程TCON中的TR1位; 五、串行口應用舉例例1:發(fā)送字符串程序#include#define uchar unsingned char#define uint unsigned intuchar

6、 idata trdata10=M,C,S,-,5,1,0 x0d,0 x0a,0 x00; main() uchar i; uint j; /*在11.0592MHz下,設置9600波特率,方式1*/ TMOD=0 x20; /設置定時器1的方式 TH1=0 xfd; /設置定時器1的初值 TL1=0 xfd; SCON=0 x50; /設置串行口方式1,并允許接收 PCON=0 x00; TR1=1; /啟動定時器1 while(1) i=0; while(trdatai!=0 x00) /發(fā)送字符串 SBUF=trdatai; while(TI=0); TI=0; i+; for(j=0

7、;j12500;j+); /延時 例2:發(fā)送單字符子函數void send_char(uchar hex) SBUF=hex; while(TI=0); TI=0;例3:發(fā)送字符串子函數void send_string(uchar *string) while(*string!=0) send_char(*string); string+; 例4:發(fā)送字符串程序。例1的程序可以改寫成調用子函數的方式。 main() uint j; while(1) send_string(trdata); for(j=0;j12500;j+); main() uint j; while(1) send_str

8、ing(“MCS-51”); send_char(0 x0d); send_char(0 x0a); for(j=0;j12500;j+); 或者:例5:串行口發(fā)送接收程序,將接收到的字符發(fā)送出去。 main() unsigned char a; /*在11.0592MHz下,設置19200波特率,方式1*/ TMOD=0 x20; /設置定時器1的方式 TH1=0 xfd; /設置定時器1的初值 TL1=0 xfd; SCON=0 x50; /設置串行口方式1,并允許接收 PCON=0 x80; TR1=1; /啟動定時器1 while(1) while(RI=0); RI=0; a=SBU

9、F; SBUF=a; while(TI=0); TI=0; 例6:單片機fosc=11.0592MHz,波特率9600,設置8個字節(jié)的隊列緩沖區(qū)用于接收。根據接收到的命令執(zhí)行不同的操作。計算機端發(fā)送的命令格式:#+命令+*命令類型:(1)啟動 #start*(2)停止 #stop*(3)暫停 #pause*#include#define uchar unsigned char#define buffer_size 8 /緩沖區(qū)大小uchar comrxdbufbuffer_size;/串口接收緩沖區(qū)uchar comrxdwrite; bit cmdbegin,cmdok; /命令起始和結束標

10、志main() /*在12MHz下,設置4800波特率,方式1*/ TMOD=0 x20; /設置定時器1的方式 TH1=0 xf3; /設置定時器1的初值 TL1=0 xf3; SCON=0 x50; /設置串行口方式1,并允許接收 PCON=0 x80; TR1=1; /啟動定時器1 ES=1; EA=1; for(;) if(cmdok) cmdok=0; if(string_compare(“start,5)!=0) /處理啟動命令 else if(string_compare(“stop,4)!=0) /處理停止命令 else if(string_compare(“pause,5)!=0) /處理暫停命令 void serial() interrupt 4 using 1 uchar a; if(RI) RI=0; a=SBUF; if(a=#)cmdbegin=1;comrxdwrite=0; else if(a=*)cmdbegin=0;cmdok=1; else if(cmdbegin=1) comrxdbufcomrxdwrite=a; comrxdwrite+; if(comrxdwrite=buffer_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論