串行通信技術(shù)-模擬信號(hào)轉(zhuǎn)換接口_第1頁(yè)
串行通信技術(shù)-模擬信號(hào)轉(zhuǎn)換接口_第2頁(yè)
串行通信技術(shù)-模擬信號(hào)轉(zhuǎn)換接口_第3頁(yè)
串行通信技術(shù)-模擬信號(hào)轉(zhuǎn)換接口_第4頁(yè)
串行通信技術(shù)-模擬信號(hào)轉(zhuǎn)換接口_第5頁(yè)
已閱讀5頁(yè),還剩12頁(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)介

1、微機(jī)原理與應(yīng)用實(shí)驗(yàn)報(bào)告6實(shí)驗(yàn)9串行通信技術(shù)實(shí)驗(yàn)10A模擬信號(hào)轉(zhuǎn)換接口實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)九串行通信技術(shù)、實(shí)驗(yàn)?zāi)康? .了解異步串行通信原理;2 .掌握MSP430異步串行通信模塊及其編程方法;二、實(shí)驗(yàn)任務(wù)1) 了解MSP430G2553實(shí)驗(yàn)板USB轉(zhuǎn)串口的通信功能,掌握串口助手的使用(1)利用PC機(jī)的串口助手程序控制串口,實(shí)現(xiàn)串口的自發(fā)自收功能為實(shí)現(xiàn)PC串口的自發(fā)自收功能,須現(xiàn)將實(shí)驗(yàn)板上的擴(kuò)展板去下,并將單片機(jī)板上的BRXDF口BTXD用杜邦線進(jìn)行短接,連接圖如下所示:EZVCC10SBWTCK3SBWTDIO6BTXD4P1.129VCC7TEST/SBWTCK5RSI/SBWTDIO3P1.21B

2、RXD由此可以實(shí)現(xiàn)PC串口的自收自發(fā)功能。(2)思考題:異步串行通信接口的收/發(fā)雙方是怎么建立起通信的首先在異步通信中,要求接收方和發(fā)送方具有相同的通信參數(shù),即起始位、停止位、波特率等等。在滿(mǎn)足上面條件的情況下,發(fā)送方對(duì)于每一幀數(shù)據(jù)按照起始位數(shù)據(jù)位停止位的順序進(jìn)行發(fā)送,而接收方則一直處于接受狀態(tài),當(dāng)檢測(cè)到起始位低電平時(shí),看是采集接下來(lái)發(fā)送方發(fā)送過(guò)來(lái)的數(shù)據(jù),這樣一幀數(shù)據(jù)(即一個(gè)字符)傳送完畢,然后進(jìn)行下一幀數(shù)據(jù)的接受。這樣兩者之間就建立起了通信。2.查詢(xún)方式控制單片機(jī)通過(guò)板載USB轉(zhuǎn)串口與PC機(jī)實(shí)現(xiàn)串行通信(1)硬件連接圖/通信設(shè)置/時(shí)鐘設(shè)置/循環(huán)等待接受緩沖器滿(mǎn)/讀接受緩沖器并保存/檢測(cè)發(fā)送完

3、畢信號(hào)/接受完畢信號(hào)/檢測(cè)接受完畢信號(hào)2) )C語(yǔ)言程序采用SMCLK=1.0MHz時(shí),程序如下:#include"io430.h"#include"in430.h"unsignedinti,j,done,count;charstring32;voidUSCIA0_int();voidCLOCK_int();intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;USCIA0_int();CLOCK_int();while(1)done=0;count=0;for(

4、i=0;i<32;i+)while(IFG2&UCA0RXIFG)=0);stringi=UCA0RXBUF;if(stringi='')done=1;break;count=i;if(done=1)for(j=0;j<=count;j+)while(IFG2&UCA0TXIFG)=0);UCA0TXBUF=stringj;done=0;voidUSCIA0_int()UCA0CTL1|=UCSWRST;P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;UCA0CTL1|=UCSSEL_2+UCRXEIE;UCA0BR1=0;UC

5、A0BR0=104;UCA0MCTL=UCBRS_1;UCA0CTL1&=UCSWRST;端口設(shè)置時(shí)鐘選擇設(shè)置(SMCLK)/波特率設(shè)置voidCLOCK_int()if(CALBC1_1MHZ!=0xff)BCSCTL1=CALBC1_1MHZ;DCOCTL=CALDCO_1MHZ;設(shè)置時(shí)鐘為1MHz采用smclklMHZ其中SMCLK=1MHz,波特率采用的是9600,采用低頻波特方式,則N=1000000/9600=104.1666;故UCA0BR1=0UCA0BR0=104,UCBRS=1;當(dāng)采用外部晶振時(shí),時(shí)鐘采用默認(rèn)設(shè)置即可,程序如下:#include"io430

6、.h"#include"in430.h"unsignedinti,j,done,count;charstring32;voidUSCIA0_int();intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;USCIA0_int();while(1)done=0;count=0;for(i=0;i<32;i+)while(IFG2&UCA0RXIFG)=0);stringi=UCA0RXBUF;if(stringi='')done=1;break

7、;/通信設(shè)置/循環(huán)等待接受緩沖器滿(mǎn)/讀接受緩沖器并保存/檢測(cè)發(fā)送完畢信號(hào)/接受完畢信號(hào)/檢測(cè)接受完畢信號(hào)端口設(shè)置時(shí)鐘選擇設(shè)置(SMCLK)/波特率設(shè)置)count=i;if(done=1)(for(j=0;j<=count;j+)(while(IFG2&UCA0TXIFG)=0);UCA0TXBUF=stringj;)done=0;)voidUSCIA0_int()(UCA0CTL1|=UCSWRST;P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;UCA0CTL1|=UCSSEL_1+UCRXEIE;UCA0BR1=0;UCA0BR0=3;UCA0MCTL

8、=UCBRS_3;UCA0CTL1&=UCSWRST;)也是采用了低頻波特率方式,所以關(guān)于波特率設(shè)置的相關(guān)計(jì)算和上面是一樣的。(3)思考:如果在兩個(gè)單片機(jī)之間進(jìn)行串行通信,應(yīng)該如何設(shè)計(jì)連線和編程?由于在上面的連線中將單片機(jī)上的P1.2和BRXD相連,P1.1和BTXD相連,所以若要在兩個(gè)單片機(jī)之間進(jìn)行通信,首先應(yīng)該將兩個(gè)單片機(jī)的P1.2和P1.1交叉相連,并根據(jù)上面的程序進(jìn)行相同的關(guān)于端口和波特率相關(guān)的設(shè)置即可實(shí)現(xiàn)兩個(gè)單片機(jī)之間的通信。3 .(提高)利用PC機(jī)RS232通信接口與單片機(jī)之間完成串行通信(1)硬件連接圖在實(shí)驗(yàn)時(shí),采用了將PC機(jī)的串口com1直接連接至MSP430F149的

9、孔型D9連接器上,G2553單片機(jī)的輸出引腳P1.1和P1.2分別與F149單片機(jī)上的URXD1和UTXD1相連接,連接圖如下所示:Fl小板電平轉(zhuǎn)換電路PC機(jī)D9計(jì)型連接器M5P430G2553(2)C語(yǔ)言程序當(dāng)采用波特率9600bps、無(wú)校驗(yàn)、8位數(shù)據(jù)位、先低后高、一個(gè)停止位時(shí),所采用的程序和任務(wù)2中相同,這里不再贅述。當(dāng)采用波特率38400bps、無(wú)校驗(yàn)、8位數(shù)據(jù)位、先低后高、一個(gè)停止位時(shí),由于采用外部晶振已經(jīng)不能夠產(chǎn)生這樣高的波特率,所以采用SMCK=1MHz的時(shí)鐘,所采用的程序只需將任務(wù)二中關(guān)于時(shí)鐘選擇和時(shí)鐘設(shè)置的相關(guān)部分進(jìn)行修改即可,具體程序見(jiàn)下面所示:#include"i

10、o430.h"#include"in430.h"unsignedinti,j,done,count;charstring32;voidUSCIA0_int();voidCLOCK_int();intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;USCIA0_int();CLOCK_int();while(1)done=0;count=0;for(i=0;i<32;i+)/循環(huán)等待接受緩沖器滿(mǎn)/讀接受緩沖器并保存/檢測(cè)發(fā)送完畢信號(hào)/接受完畢信號(hào)while(IFG2&a

11、mp;UCA0RXIFG)=0);stringi=UCA0RXBUF;if(stringi='')done=1;break;count=i;if(done=1)/檢測(cè)接受完畢信號(hào)(for(j=0;j<count;j+)(while(IFG2&UCA0TXIFG)=0);UCA0TXBUF=stringj;done=0;voidUSCIA0_int()(UCA0CTL1|=UCSWRST;P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;/端口設(shè)置UCA0CTL1|=UCSSEL_2+UCRXEIE;/時(shí)鐘選擇設(shè)置UCA0BR1=0;UCA0BR

12、0=1;/波特率設(shè)置UCA0MCTL=UCBRF_10+UCBRS_0+UCOS16;UCA0CTL1&=UCSWRST;voidCLOCK_int()(if(CALBC1_1MHZ!=0xff)(BCSCTL1=CALBC1_1MHZ;/采用smclk1MHZDCOCTL=CALDCO_1MHZ;(3)思考題:設(shè)計(jì)單片機(jī)與PC機(jī)進(jìn)行串行通信時(shí),硬件設(shè)計(jì)有哪些需要注意的事項(xiàng)?首先最基本的是,單片機(jī)和PC機(jī)上所選擇的通信協(xié)議應(yīng)該是一致的,然后可以選擇多種路徑,其中包括USB,串口等。另外需要注意的是要統(tǒng)一兩者之間的邏輯電平,如果電平不同,則需要在中間加入電平轉(zhuǎn)換電路。4 .(提高)中斷方

13、式控制串行通信的收發(fā)(1)硬件連接圖由于只是將接收和發(fā)送改為了中斷實(shí)現(xiàn),其他功能并沒(méi)有改變,所以這里的硬件連接圖和任務(wù)2中的是相同的,這里不再重復(fù)。(2)C語(yǔ)言程序#include"io430.h"#include"in430.h"unsignedinti,j,done,count;charstring32;voidUSCIA0_int();intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;USCIA0_int();i=0;j=0;done=0;IE2|=UC

14、A0RXIE;_EINT();while(1)if(done=1)IE2|=UCA0TXIE;elseIE2&=UCA0TXIE;voidUSCIA0_int()UCA0CTL1|=UCSWRST;P1SEL|=BIT1+BIT2;P1SEL2|=BIT1+BIT2;/端口設(shè)置UCA0CTL1|=UCSSEL_1+UCRXEIE;/時(shí)鐘選擇設(shè)置UCA0BR1=0;UCA0BR0=3;/波特率設(shè)置UCA0MCTL=UCBRS_3;UCA0CTL1&=UCSWRST;#pragmavector=USCIAB0RX_VECTOR/接收中斷子程_interruptvoidUCA0RX_

15、ISR()stringi=UCA0RXBUF;if(stringi='')done=1;count=i;i=0;)i+;)#pragmavector=USCIAB0TX_VECTOR/發(fā)送中斷子程_interruptvoidUCA0TX_ISR()if(j<count)UCA0TXBUF=stringj;j+;)elsedone=0;j=0;)(3發(fā)送中斷的允許位不能夠一直處于打開(kāi)狀態(tài),因?yàn)楫?dāng)發(fā)送緩沖器為空時(shí),發(fā)送中斷標(biāo)志位就會(huì)被置位,向系統(tǒng)發(fā)出中斷請(qǐng)求,從而轉(zhuǎn)去執(zhí)行發(fā)送中斷子程。而當(dāng)無(wú)法送內(nèi)容時(shí)和剛發(fā)送完內(nèi)容后發(fā)送緩沖器都處于空的狀態(tài),若發(fā)送中斷允許位一直打開(kāi),在沒(méi)有接

16、受完畢進(jìn)入發(fā)送時(shí)就會(huì)不斷地向系統(tǒng)發(fā)出中斷請(qǐng)求,從而導(dǎo)致系統(tǒng)不能正常。所以,發(fā)送中斷允許為應(yīng)該在接受完畢準(zhǔn)備發(fā)送時(shí)打開(kāi),發(fā)送完畢后立即關(guān)閉。三、實(shí)驗(yàn)中遇到的問(wèn)題和解決辦法1 .在任務(wù)二中使用SMCLK完成通信時(shí),最開(kāi)始始終無(wú)法完成通信,后來(lái)發(fā)現(xiàn)是由于SMCLK的時(shí)鐘頻率并不是剛好的1MHz,所以后來(lái)通過(guò)利用示波器測(cè)量實(shí)際的頻率,重新計(jì)算產(chǎn)生波特率的相關(guān)的參數(shù)解決了問(wèn)題;2 .對(duì)于利用中斷完成任務(wù)二的要求中,起初無(wú)法完成通信,后來(lái)發(fā)現(xiàn)是中斷中由于在賦值完一次之后,先使i進(jìn)行了加1,然后才判斷對(duì)應(yīng)的字符是否是'',所以單片機(jī)一直沒(méi)有發(fā)送到PC機(jī)上內(nèi)容。實(shí)驗(yàn)十模擬信號(hào)轉(zhuǎn)換接口一、實(shí)驗(yàn)?zāi)?/p>

17、的1,了解模/數(shù)轉(zhuǎn)換的工作原理,掌握MSP430單片機(jī)內(nèi)ADC10*H/數(shù)轉(zhuǎn)換模塊的控制和應(yīng)用。二、實(shí)驗(yàn)任務(wù)1.卞H/數(shù)轉(zhuǎn)換器ADC10的編程控制(1)硬件連接圖(2)程序設(shè)計(jì)思路首先需要利用示波器測(cè)量單片機(jī)板上的Vcc的大小,確定數(shù)/模轉(zhuǎn)換公式中的參考電壓的取值。在編程時(shí),由于測(cè)量的是穩(wěn)恒電壓,所以ADC的一些設(shè)置采用默認(rèn)值即可,通過(guò)幾次采樣得到的值進(jìn)行平均減小誤差,然后轉(zhuǎn)換為模擬值,利用得到的結(jié)果跟2.2和2.8進(jìn)行比較,然后通過(guò)比較結(jié)果控制L1燈的亮滅。(3)C語(yǔ)言程序#include"io430.h"#include"in430.h"unsign

18、edbuffer32;unsignedinti,sum;floatvin;intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;P1SEL&=BIT1;P1SEL2&=BIT1;P1DIR|=BIT1;P1OUT|=BIT1;ADC10AE0|=BIT0;ADC10CTL0&=ENC;ADC10CTL1|=INCH_0;ADC10CTL0|=ADC10ON+ENC;while(1)/P1.1設(shè)置為GPIO用來(lái)控制L1/允許A0管腳模擬輸入/禁止ADC10轉(zhuǎn)換采樣通道為A0給內(nèi)核供

19、電允許轉(zhuǎn)換主循環(huán)sum=0;for(i=0;i<4;i+)/軟件啟用采樣ADC10CTL0|=ADC10SC;while(ADC10CTL0&ADC10IFG)=0);bufferi=ADC10MEM;sum=sum+bufferi;/通過(guò)公式計(jì)算出測(cè)量的電壓值vin=(sum/4)*3.5/1023);if(vin>2.80)P1OUT&=BIT1;if(vin<2.20)P1OUT|=BIT1;(4)思考題:如果模擬信號(hào)從P1.5輸入,應(yīng)該如何編程?若模擬信號(hào)從P1.5輸入只需將允許管腳模擬輸入和采樣通道的選擇進(jìn)行修改即可,其他的不用改變。并在硬件上使模擬

20、信號(hào)從P1.5輸入即可。需要修改的指令如下所示:ADC10AE0|=BIT0;/允許A0管腳模擬輸入ADC10CTL1|=INCH_0;/采樣通道為A02.(提高)改用中斷的方式實(shí)現(xiàn)任務(wù)1(1)硬件連接圖硬件連接圖任務(wù)一中相同,所以在這里不再給出。(2)C語(yǔ)言程序#include"io430.h"#include"in430.h"unsignedbuffer32;unsignedinti=0,sum;floatvin;intmain(void)/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTH

21、OLD;P1SEL&=BIT1;P1SEL2&=BIT1;P1DIR|=BIT1;P1OUT|=BIT1;ADC10AE0|=BIT0;ADC10CTL0&=ENC;ADC10CTL1|=INCH_0;ADC10CTL0|=ADC10ON+ENC;ADC10CTL0|=ADC10IE;_EINT();ADC10CTL0|=ADC10SC;sum=0;while(1)/允許A0管腳模擬輸入/禁止ADC10轉(zhuǎn)換采樣通道為A0給內(nèi)核供電允許轉(zhuǎn)換/打開(kāi)總控位/軟件啟動(dòng)轉(zhuǎn)換if(vin>2.80)P1OUT&=BIT1;if(vin<2.20)P1OUT|=B

22、IT1;ADC10CTL0|=ADC10SC;/軟件啟動(dòng)轉(zhuǎn)換#pragmavector=ADC10_VECTOR/中斷子程_interruptvoidADC10_ISR()bufferi=ADC10MEM;sum=sum+bufferi;i+;if(i=4)vin=(sum/4)*3.5/1023);sum=0;i=0;3.(提高)制作數(shù)字電壓表(1)硬件連接圖(2)程序設(shè)計(jì)思路其中最基本的任務(wù)和上面兩個(gè)任務(wù)中完成方式相同,在這里需要改進(jìn)的就是將測(cè)得的電壓值進(jìn)行數(shù)碼管顯示,只需要利用之前實(shí)驗(yàn)中設(shè)計(jì)的數(shù)碼管顯示模塊就可以了。(3)C語(yǔ)言程序#include"io430.h"#

23、include"in430.h"unsignedbuffer32;unsignedinti=0,sum;unsignedcharNUMtab10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;intvin;floatvinl;voidseg(intnumber);intmain(void)(/StopwatchdogtimertopreventtimeoutresetWDTCTL=WDTPW+WDTHOLD;P1SEL&=(BIT0+BIT1+BIT2+BIT3);P1SEL2&=(BIT0+BIT1+B

24、IT2+BIT3);P1DIR|=(BIT0+BIT1+BIT2+BIT3);P2SEL=0;P2SEL2=0;P2DIR=0xff;ADC10AE0|=BIT5;允許A0管腳模擬輸入(改為BIT5)ADC10CTL0&=ENC;/禁止ADC10轉(zhuǎn)換ADC10CTL1|=INCH_5;采樣通道為A0(改為INCH_5)ADC10CTL0|=ADC10ON+ENC;/給內(nèi)核供電允許轉(zhuǎn)換ADC10CTL0|=ADC10IE;_EINT();ADC10CTL0|=ADC10SC;sum=0;while(1)(seg(vin);ADC10CTL0|=ADC10SC;#pragmavector=ADC10_VECTOR_interruptvoidADC10_ISR()(bufferi=ADC10MEM;sum=sum+bufferi;i+;if(i=4)(vin1=100*(sum/4)*3.4962/1023);vin=(int)vin1;sum=0;i=0;voidseg(intnumber

溫馨提示

  • 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)論