單片機(jī)串口實(shí)驗(yàn)_第1頁(yè)
單片機(jī)串口實(shí)驗(yàn)_第2頁(yè)
單片機(jī)串口實(shí)驗(yàn)_第3頁(yè)
單片機(jī)串口實(shí)驗(yàn)_第4頁(yè)
單片機(jī)串口實(shí)驗(yàn)_第5頁(yè)
已閱讀5頁(yè),還剩9頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論