單片機串口實驗_第1頁
單片機串口實驗_第2頁
單片機串口實驗_第3頁
單片機串口實驗_第4頁
單片機串口實驗_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

常熟理工學院課程設計報告 單片機課程設計報告 實驗一 串口通信實驗 系 別 年 級 專 業(yè) 班 級 班 學 號 學生姓名 指導教師 設計時間 目錄1.題目.22.實驗要求.2 2.1實驗目的.2 2.2實驗內(nèi)容.23.總體設計42.1硬件設計42.2軟件設計84. 運行結果125.結論126.心得體會137.參考文獻131. 題目串口通信實驗2. 實驗要求2.1:實驗目的1、 掌握8051單片機串行口工作原理;2、掌握串口編程與調(diào)試方法;3、了解Modbus協(xié)議及其應用;4、了解數(shù)據(jù)傳輸?shù)目煽啃源胧┡cCRC校驗實現(xiàn)方法;5、掌握8051單片機的Modbus編程;2.2:實驗內(nèi)容1、 串口功能驗證:PC機與8051單片機通信實驗:若PC機發(fā)送數(shù)據(jù)a,則單片機接收到a后向PC機發(fā)送a+1;用串口工具軟件(sscom32)觀察通信結果。設計思路: PC機采用主動方式,單片機為被動方式,因單片機端不知道PC何時發(fā)數(shù)據(jù),若單片機采用查詢方式接收,會產(chǎn)生接收不到PC數(shù)據(jù)而“死等”的現(xiàn)象。因此為了不影響單片機端的主程序運行,單片機應采用中斷方式接收;參考源碼:/中斷服務程序unsigned char Rxd_Data;/串口接收數(shù)據(jù)unsigned char Rxd_Over;/串口接收完成標志/串口初始化函數(shù)9600bpsvoid Sbuf_Init(void) SCON=0x50; /10位方式/波特率設置PCON=0x00; /波特率不倍增 TMOD=(TMOD&0x0f)|0x20;/T1方式2 TH1=0xfd; /T1計數(shù)初值 TL1=0xfd;ES=1;EA=1;/串口中斷使能 TR1=1; /啟動定時器 void UART_ISR(void) interrupt 4 if(RI)/接收產(chǎn)生的中斷RI=0;/清接收標志Rxd_Data=SBUF; /接收數(shù)據(jù)Rxd_Over=1;/置Rxd_Over標志 void main(void) Sbuf_Init(); /串口初始化while(1)if(Rxd_Over) /若接收完成/串口數(shù)據(jù)發(fā)送SBUF=a+1; /串口發(fā)送while(TI=0); /等待發(fā)送完成TI=0;/清發(fā)送標志Rxd_Over=0; /清Rxd_Over標志利用此程序可以判斷串口通信是否正常。串口通信失敗的原因有如下幾種情況:(1) 串口線未連接,用一根導線將串口線2,3腳短接,scomm32工具發(fā)送數(shù)據(jù),根據(jù)能否接收數(shù)據(jù)判斷串口線連接是否正常;(2) 最小系統(tǒng)板硬件故障:借助示波器觀察單片機的串口接收與發(fā)送CMOS電平與RS232電平可排查硬件故障;(3) 軟件問題。2、 類Modbus協(xié)議實現(xiàn)(1)上位機發(fā)送:字節(jié)1字節(jié)2字節(jié)3字節(jié)4字節(jié)5字節(jié)6字節(jié)7字節(jié)80x010x030x02a數(shù)據(jù)2數(shù)據(jù)3CRC16_LCRC16_H上位機按如上8字節(jié)定長方式發(fā)送數(shù)據(jù)a,采用CRC16檢驗,CRC16檢驗可采用查表法或即時計算法(已在CRC16.c與CRC16.h中提供,可直接調(diào)用),其中上位機的CRC16可采用提供的ModBus CRC校驗碼計算程序工具先計算得到。(2)下位機接收后回送下位機中斷方式接收到8字節(jié)數(shù)據(jù)后進行CRC計算并與接收的CRC16數(shù)據(jù)進行比較,若一致則回應:字節(jié)1字節(jié)2字節(jié)3字節(jié)4字節(jié)5字節(jié)6字節(jié)7字節(jié)80x010x030x02a+1數(shù)據(jù)20(成功)CRC16_LCRC16_H若接收數(shù)據(jù)錯誤則回應字節(jié)1字節(jié)2字節(jié)3字節(jié)4字節(jié)5字節(jié)6字節(jié)7字節(jié)80x010x030x02*數(shù)據(jù)20xff(失敗)CRC16_LCRC16_H校驗可采用查表法或即時計算法得到。unsigned short int CRC16_S(unsigned char *buf,unsigned char length) /查表法unsigned short int CRC16_C(unsigned char *buf,unsigned char length) /即時計算法3.總體設計3.1硬件設計1.串口結構 TB8(Transmit Bit 8)在方式2、3中,將被發(fā)送數(shù)據(jù)的第9位 (奇偶校驗位等);RB8(Receive Bit 8第9位) TI、RI發(fā)送/接收結束標志位,軟件(手工)清零方式0:移位寄存器輸入輸出方式。數(shù)據(jù)通過RXD輸入輸出,TXD輸出移位脈沖CP。該方式下,收發(fā)數(shù)據(jù)為8位,低位在前。波特率固定(fosc12)。方式1:10位異步方式。10位1位起始位(0)+8位數(shù)據(jù)位+1位停止位(1)。其中起始位和停止位在發(fā)送時自動插入。發(fā)送:SBUFa;發(fā)送條件:TI0,發(fā)送完TI1。接收:bSBUF;接收條件:SCON中的RENl;RI0;SM20或接收到的停止位為l。本次接收有效,將接收到的8位數(shù)據(jù)裝入SBUF中,并將停止位(1)裝入RB8中;否則放棄接收結果。發(fā)送與接收結束標志必須手工清0:TI0;RI0;方式1的波特率可變,計算公式:Baud=2SMOD(T1的溢出率)32。方式2、3:相同:都是11位異步方式。11位1位起始位(0)+9位數(shù)據(jù)位+1位停止位(1)。其中第9位數(shù)據(jù)放在TB8、RB8中,發(fā)送前可通過軟件對TB8賦值(奇偶校驗位等)。它們的操作過程完全一樣。不同:波特率可變否。方式2 Baud=2SMODfosc64;方式3 Baud=2SMOD(T1溢出率/32) 。發(fā)送:SBUFa;第9位數(shù)據(jù)(TB8)輸出之后,置位TI1。接收:bSBUF;接收前提:REN=1;接收到第9位數(shù)據(jù)后,如果同時滿足:(1)RI0;(2)SM20或接收到的第9位為1,則將已接收的數(shù)據(jù)裝入SBUF和RB8,并置位RI;如果條件不滿足,則接收無效。8051第9位可作為數(shù)據(jù)的奇偶校驗位、多機通信中的地址、數(shù)據(jù)標志位等。(4)串行中斷原理執(zhí)行串口發(fā)送指令SBUF=a;通過TXD口發(fā)送串行數(shù)據(jù),發(fā)送結束后CPU自動產(chǎn)生發(fā)送結束標志(TI=1);此時若串行中斷使能,則程序立即停止當前程序,跳轉(zhuǎn)置中斷號為4的串行口中斷入口地址(0x0023),執(zhí)行中斷服務程序void UART_ISR(void) interrupt 4 ,CPU不具有自動清零功能;同樣,若串口在RXD引腳接收到數(shù)據(jù),硬件自動產(chǎn)生接收結束標志(RI=1),若此時若串行中斷使能(ES=1,EA=1),則程序立即停止當前程序,跳轉(zhuǎn)置中斷號為4的串行口中斷入口地址(0x0023),執(zhí)行中斷服務程序void UART_ISR(void) interrupt 4 ,CPU不具有自動清零功能,可通過b=SBUF;指令取出暫存在數(shù)據(jù)緩沖區(qū)內(nèi)的數(shù)據(jù)。因為接收與發(fā)送結束都能進入同一中斷,因此在不具有自動清標志功能,需加判斷標志語句。4.串口操作步驟使用串口前,應對它進行初始化。設置串行口工作方式控制(SCON);設置串口通信波特率:T1(TMOD、TH1、TL1、ET1、EA、TR1 、PCON);串口中斷使能(ES、EA)。具體步驟如下:(1)設置串行口工作方式控制(SCON)如11位波特率可變的異步通信方式:SCONSM0SM1SM2RENTB8RB8TIRISCON=0xd0;()(2)借助T1初使化通信波特率(TMOD)PCONSMOD-87HTMODGATEC/T#M1M0GATEC/T#M1M089HBaud=2SMOD(T1溢出率/32) 令SMOD=0,則9600=1/(n*12/fosc*32) ,若fosc11.0592則n=3T1:采用方式2(8位自動載入)即:PCON=0x00; TMOD=(TMOD&0x0f)|0x20; TH1=0xfd;TL1=0xfd;TR1=1;3.2軟件設計源程序:#include reg51.h#includecrc16.hextern unsigned short int CRC16_S(unsigned char *buf,unsigned char length);extern unsigned short int CRC16_C(unsigned char *buf,unsigned char length);unsigned char Rxd_buf8,Txd_buf8;/中斷服務程序/unsigned char Rxd_Data;/串口接收數(shù)據(jù)unsigned char Rxd_Over;/串口接收完成標志/串口初始化函數(shù)9600bpsvoid Sbuf_Init(void) SCON=0x50; /10位方式/波特率設置PCON=0x00; /波特率不倍增 TMOD=(TMOD&0x0f)|0x20;/T1方式2 TH1=0xfd; /T1計數(shù)初值 TL1=0xfd;ES=1;EA=1;/串口中斷使能 TR1=1; /啟動定時器 void UART_ISR(void) interrupt 4 static unsigned char count=0;static unsigned char pre_data=0,mid_data=0,now_data;if(RI)/接收產(chǎn)生的中斷RI=0;/清接收標志now_data=SBUF;if(pre_data=0x01&mid_data=0x03&now_data=0x02)Rxd_buf0=0x01;Rxd_buf1=0x03;Rxd_buf2=0x02;count=3;elseRxd_bufcount=now_data;count+;if(count=8)count=0;Rxd_Over=1;pre_data=mid_data;mid_data=now_data; void delay(unsigned int n)unsigned int i;for(i=0;in;i+);void main(void) unsigned char i;unsigned int crc_value;Sbuf_Init(); /串口初始化while(1)/串口數(shù)據(jù)發(fā)送if(Rxd_Over) /若接收完成crc_value=CRC16_S(Rxd_buf,6);Rxd_Over=0;if(crc_value%256=Rxd_buf6&crc_value/256=Rxd_buf7)/if(1)Txd_buf0=0x01;Txd_buf1=0x03;Txd_buf2=0x02;Txd_buf3=Rxd_buf3+1;Txd_buf4=0x00;Txd_buf5=0x00;crc_value=CRC16_S(Txd_buf,6);Txd_buf6=crc_value%256;Txd_buf7=crc_value/256;for(i=0;i8;i+)SBUF=Txd_bufi;while(TI=0) ;T1=0;delay(20);elseTxd_buf0=0x01;Txd_buf1=0x03;Txd_buf2=0x02;Txd_buf3=Rxd_buf3+1;Txd_buf4=0x00;Txd_buf5=0xff;crc_value=CRC16_S(Txd_buf,6);Txd_buf6=crc_value%256;Txd_buf7=crc_value/256;for(i=0;i8;i+)SBUF=Txd_bufi;while(TI=0) ;T1=0;delay(20);4.運行結果 正確串口輸出 錯誤的串口輸出5.結論 利用單片機進行串口的連接,輸入與輸出。編寫程序,實現(xiàn)加一功能,當輸入錯誤時,串口輸出FF,當輸入正確時,輸出自動加一,

溫馨提示

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

評論

0/150

提交評論