MSP430中Timer_A and Timer_B的UART運用

發(fā)布時(shí)間:2008-1-1 14:46    發(fā)布者:MSP430
關(guān)鍵詞: MSP430 , Timer_A , Timer_B , UART
自1996年MSP430十六位單片機問(wèn)世以來(lái),它的低功耗性能及豐富的片內資源受到各方面的好評,本文針對MSP430F13x及 MSP43014X 系列單片機中的定時(shí)器進(jìn)行介紹,利用定時(shí)器A(Timer_A)和定時(shí)器B(Timer_B)中的捕獲比較寄存器來(lái)開(kāi)發(fā)多個(gè)串行通信口,使十六位單片機在通信領(lǐng)域發(fā)揮更大的潛力。

關(guān)鍵詞 Timer_A Timer_B 捕獲/比較寄存器 UART口

一、 概述

MSP430具有豐富的外圍模塊,如MSP430F149就包含:12位A/D,精密模擬比較器,硬件乘法器,2組頻率可達8MHZ的時(shí)鐘模塊,2個(gè)可以實(shí)現異步、同步及多址訪(fǎng)問(wèn)的串行通行接口,采用了超低功耗技術(shù),可以進(jìn)行在線(xiàn)調試與編程,其指令周期可達125ns。MSP430F14X 系列目前在市場(chǎng)的售價(jià)大約為60元人民幣,與其它單片機相比,MSP430具有更高的性?xún)r(jià)比和優(yōu)越性,適合做測控、通訊等嵌入系統。本文介紹利用 MSP430中的定時(shí)器解決多串口通信。

目前美國德州儀器所出的所有FLASH 單片機都含有Timer_A,而在MSP430F13X系列和MSP43014X系列中既含有Timer_A也含有Timer_B,在F13X中有一個(gè)帶有3個(gè)捕獲/比較模塊的Timer_B,在F14X中有一個(gè)帶有7個(gè)捕獲/比較模塊的Timer_B,它們均是擴展UART口的核心。

Timer_A和Timer_B都是非常有用的定時(shí)器,Timer_A具有以下特點(diǎn):

(1) 十六位計數器,有四種工作模式(停止、增計數、連續、增/減計數)
(2) 可以選擇計數器時(shí)鐘源(外設的,內置的快慢速均可)
(3) 三個(gè)具有可配置輸入端的捕獲/比較寄存器(具有自動(dòng)鎖存功能)
(4) 可用于串行通信

與Timer_A相比,Timer_B可進(jìn)行8、10、12、16位計數,但在Timer_B中未實(shí)現鎖存功能。Timer_A和Timer_B可支持同時(shí)進(jìn)行的多時(shí)序控制、多個(gè)捕獲/比較功能、多種輸出波形(PWM波形),也可以是上述功能的組合。

二、 可行性分析

首先,收和發(fā)是針對不同的定時(shí)器,它們的中斷源不同,中斷標志會(huì )記住不同中斷。其次,同一定時(shí)器的不同捕獲寄存器(不包括CCR0)的中斷標志有優(yōu)先級、共用一個(gè)中斷向量的中斷標志,中斷向量寄存器(TAIV或TBIV)用于確定產(chǎn)生中斷請求的中斷源,所以當出現同發(fā)或者同收現象時(shí),可以根據中斷向量寄存器中的內容來(lái)確定具體的中斷操作,在進(jìn)入一個(gè)中斷后,中斷向量寄存器會(huì )保存另外中斷源的中斷向量,直到前一中段結束而執行該中斷,即不會(huì )丟失另外的中斷。

三、 系統原理

計算機進(jìn)行串行通信的高電平為-5~-15V,低電平為5~15V,而從MSP430單片機輸出的信號的高電平為3V,低電平0V,要實(shí)現MSP430與計算機通信必須進(jìn)行電平轉換。實(shí)現這一轉換,可以利用MAX202E來(lái)實(shí)現。

發(fā)送特性的實(shí)現是用比較功能將數據從輸出單元的引腳移出,波特率是用定時(shí)器定時(shí)產(chǎn)生中斷來(lái)實(shí)現的。

接收特性的實(shí)現是利用定時(shí)器的捕獲功能實(shí)現接收數據的檢測,當檢測到起始位時(shí),將定時(shí)器設置為比較模式,接收的位被EQUx信號自動(dòng)鎖存。這樣就不會(huì )因CPU無(wú)法及時(shí)響應而造成接收錯,提高了接收控制的靈活性,從而CPU因不需等待接收而提高其利用率。

以MSP430F149為例,Timer_A的捕捉/比較寄存器具有將輸入信號鎖存的功能,故利用它實(shí)現輸入信號的準確接收;而 Timer_B捕捉/比較寄存器不具有將輸入信號鎖存的功能,不宜將其作為串口的輸入,本例利用它控制串口的輸出。因Timer_A只有三個(gè)捕捉/比較寄存器,故利用它們可以開(kāi)發(fā)出三個(gè)UART口,加上其本身的兩個(gè)UART口,MSPF149最終可有五個(gè)UART口,硬件電路簡(jiǎn)圖如圖(1)(其中,UTXD1、URXD1的電平轉換與其它幾個(gè)UART的 硬件連接 一樣)

四、主程序工作過(guò)程及軟件框圖

用Timer_A和Timer_B要實(shí)現多個(gè)UART口,合理選取Timer_A和Timer_B的工作模式非常重要。經(jīng)分析,我們選取 Timer_A和Timer_B工作在連續記數模式。在主程序中,需要發(fā)送數據時(shí),由主程序調用發(fā)送子程序(其主要作用是初始化用于發(fā)送數據的 Timer_B,經(jīng)過(guò)初始化以后,由定時(shí)器定時(shí)產(chǎn)生中斷來(lái)發(fā)送數據)。而接收模塊初始化以后,接收數據的起始位的檢測由定時(shí)器的捕獲功能自動(dòng)實(shí)現,不需軟件控制,當捕獲器檢測到起始位以后由接收中斷服務(wù)子程序實(shí)現數據的接收,其軟件框圖如下:

以Timer_A的CCR0的接收、Timer_B的CCR0的發(fā)送為例,其中斷服務(wù)子程序分別如下:

1、 發(fā)送中斷服務(wù)子程序:

TX_LOOP
      ADD   #Bitime,&TBCCR0   
      BIT    #0001H,R5
      JNZ    TX1
      BIC    #OUT,&TBCCTL0
      JMP    TX2
TX1  BIS     #OUT,&TBCCTL0     
TX2  SUB    #01H,R6         
      JNZ    TX3
      BIC    #CCIE,&TBCCTL0
TX3  RRA    R5
RETI

2、 接收中斷服務(wù)子程序:

RX_LOOP
     CMP   #0009H,R8  
     JNZ    RX_START     
     BIC    #CAP,&CCTL0  
     MOV   &TAR,&CCR0
     ADD   #Bitime1_5,&CCR0      
     MOV   #0000H,R7   
     DEC    R8
     JMP    RXEND
RX_START
     BIT    #SCCI,&CCTL0
     RRC.B  R7
     SUB    #01H,R8
     JNZ    RXEND1
     BIC    #CCIE,&CCTL0
RXEND1     
     ADD   #Bitime,&CCR0  
RXEND
     RETI   

利用Timer_A和Timer_B實(shí)現UART功能的完整調試程序見(jiàn)附頁(yè):(在程序中,考慮到接收與發(fā)送的多個(gè)UART的中斷具有相似之處,我們在程序中僅對兩個(gè)發(fā)送口和兩個(gè)接收口進(jìn)行了調試,經(jīng)調試,證實(shí)了利用Timer_A和Timer_B可以實(shí)現多個(gè)UART口功能。

五、對Timer_A和Timer_B實(shí)現的UART口的實(shí)時(shí)性、誤差分析:

1. 接收和發(fā)送的實(shí)時(shí)性:

在發(fā)送數據時(shí),如果定時(shí)器的計數時(shí)鐘頻率比較高,例如,當定時(shí)器的計數時(shí)鐘頻率為8MHZ,波特率為9600時(shí),接收/發(fā)送相鄰比特的間隔為833個(gè)時(shí)鐘周期,即使延時(shí)幾十個(gè)時(shí)鐘周期(按理論,只要小于250個(gè)時(shí)鐘周期即可)發(fā)送下一個(gè)比特也能正確接收該字節。在接收數據時(shí),由于定時(shí)器具有自動(dòng)鎖存功能,對數據位的接收只要在下一位數據到來(lái)之前接收即可。由此可見(jiàn),用定時(shí)器實(shí)現的UART口完全可以實(shí)現實(shí)時(shí)性,這完全可以用于對實(shí)時(shí)性要求比較高的系統。

2. 接收和發(fā)送一個(gè)字節的CPU占用率:

由于是利用中斷來(lái)喚醒接收和發(fā)送中斷服務(wù)的,在接收和發(fā)送的位間隔時(shí)間中CPU可以繼續執行其他程序。CPU占用率可用以下公式計算:

CPU占用率=(發(fā)送或接收一位總的占用時(shí)鐘周期*波特率)/CPU頻率

經(jīng)計算,發(fā)送和接收一個(gè)字節的CPU占用率(以最高時(shí)鐘頻率8MHZ、波特率為9600為例)分別約為:3.31%和3.39%。

3. 時(shí)間誤差分析:

對于一般的UART口來(lái)說(shuō),由于字節間存在累積誤差,因此,對波特率的要求較高,需要時(shí)鐘頻率非常接近波特率的整數倍。而實(shí)際波特率往往是通過(guò)時(shí)鐘分頻得到,無(wú)法產(chǎn)生精確的波特率,不可避免地會(huì )擴大累積誤差。對于利用定時(shí)器實(shí)現的UART口來(lái)說(shuō),在發(fā)送或接收下一個(gè)字節時(shí),定時(shí)器重新開(kāi)始該字節內的計數,因此,字節之間不存在累積誤差,僅存在字節內的累積誤差,因此,這大大降低了時(shí)鐘接近波特率的整數倍的要求,在定時(shí)器的計數時(shí)鐘頻率比較高(為波特率的幾百倍時(shí))時(shí),時(shí)鐘的選擇將不受限制。

在定時(shí)器實(shí)現的UART口中,當定時(shí)器的計數時(shí)鐘頻率比較高時(shí),字節內產(chǎn)生的累積誤差也非常小。例如,當定時(shí)器的計數時(shí)鐘頻率為 8MHZ,波特率為9600時(shí),要求定時(shí)器每計數833.333時(shí)發(fā)送一個(gè)比特,然而,定時(shí)器只能計整數,因此選擇每計數833時(shí)發(fā)送一個(gè)比特。在這種情況下,每一位所產(chǎn)生的誤差只有千之幾,這樣的誤差較一般的UART口來(lái)說(shuō)是非常小的。

4. 與一般的UART口的性能比較:

UART口的實(shí)現在各種不同類(lèi)型的微處理機系統中都不同,可能是用通用的I/O端口以等待的方式用軟件實(shí)現位的處理,這樣的處理方式需要極大的CPU開(kāi)銷(xiāo),因此增大了功耗,也降低了CPU的可用性。而用定時(shí)器實(shí)現的UART口,在發(fā)送或接收時(shí)的位間隔期間,CPU可以繼續執行其他的程序,加上MSP430單片機自身的特點(diǎn),它甚至可以在超低功耗模式下接收和發(fā)送。

六、結束語(yǔ)

MSP430單片機的定時(shí)器功能強大,中斷源較多,可以任意嵌套,它給工程開(kāi)發(fā)人員提供了較多的選擇余地。上面僅介紹了用TIMER_A、 TIEMR_B來(lái)擴充UART口,開(kāi)發(fā)人員只要熟悉定時(shí)器的工作原理,就可以根據自己的需要,從多種方法中選出最優(yōu)方案。MSP430單片機所具有的較高性?xún)r(jià)比及優(yōu)越性必將使其成為眾多單片機中出色的一員。

參考文獻

   1. 胡大可.《MSP430系列FLASH型超低功耗16位單片機》.北京航空航天大學(xué)出版設,2001
   2. 《MSP430系列軟件用戶(hù)指南》.利爾達(中國)電子有限公司
   3. 《MSP430 ASSERMBLER,LINKER,AND LIBRARIAN PROMGRAMING》.利爾達(中國)電子有限公司
   4. 鄔寬明.《單片機外圍器件使用手冊-數據傳輸接口器件分冊》.北京航空航天大學(xué)出版設

完整的調試程序源代碼

#include  "msp430x14x.h"
     ORG   0FFFEH   
     DW    MAIN        /*設置上電起始地址*/
     RSEG  UDATA0
     DS    0            
Bitime     EQU  209H   /*發(fā)送比特的時(shí)間間隔,時(shí)鐘平率為5.030MHZ,波特率為9600比特/秒*/
Bitime1_5  EQU  30EH   /*起始位與第一個(gè)比特的時(shí)間間隔*/
TX_Count   EQU  000AH  /*發(fā)送數據的計數值*/
RX_Count   EQU  0009H  /*接收數據的計數值*/
CHECKDATA  EQU  0300H  /*存儲通道1(CCR0)接收數據的起始地址*/
CHECKDATA1 EQU  0500H  /*存儲通道1(CCR1)接收數據的起始地址*/
     RSEG  CSTACK      /*定義堆棧段*/
     DS    0
     RSEG  CODE        /*代碼段開(kāi)始*/
     DS    0
MAIN
    MOV    #(WDTPW+WDTHOLD),&WDTCTL  /* 關(guān)閉看門(mén)狗*/
INITSYS
     MOV    #SFE(CSTACK),SP
     MOV.B  #(RSEL2+RSEL1+RSEL0),&BCSCTL1   /*設置基礎時(shí)鐘模塊*/
     MOV.B  #(DCO2+DCO1+DCO0),&DCOCTL      
     BIC.B  #OSCOFF,SR                     
     PUSH   #0FFFFH                         /*基礎時(shí)鐘的調整時(shí)鐘*/
LOOP         
     DEC    0(SP)
     JNZ    LOOP
     MOV.B  #SELM_1,&BCSCTL2                /* 選擇系統時(shí)鐘源*/
SetupTA      MOV  #(TASSEL_2+MC1),&TACTL    /*設置定時(shí)器A的時(shí)鐘源及工作模式*/     
             MOV  #(TBSSEL_2+MC1),&TBCTL    /*設置定時(shí)器B的時(shí)鐘源及工作模式*/   
SetupC0      MOV  #OUT,&TBCCTL0             /*通道1發(fā)送空閑數據*/
             MOV  #OUT,&TBCCTL1             /*通道2發(fā)送空閑數據*/
Setupp1_2    MOV.B  #00H,&1DIR  /*設置定時(shí)器A和定時(shí)器B輸入/出數據的管腳*/
             BIS.B  #06H,&1SEL  /*P1.1和P1.2用于接收數據*/
             BIS.B  #03H,&4DIR  /*P4.0和P4.1用于發(fā)送數據*/
             BIS.B  #03H,&4SEL                                                   
Delay        PUSH   #00FFH      /*用于延時(shí)*/
Delay2       DEC    0(SP)   
             JNZ    Delay2
             INCD   SP
             MOV    #GIE,SR     /*開(kāi)中斷*/
/*--------------調試發(fā)送、接受模塊的功能-----------------------*/
      MOV    #CHECKDATA,R14    /*設置接收通道1數據的起始地址*/
      MOV    #CHECKDATA1,R4    /*設置接收通道2數據的起始地址*/
      MOV    #35H,R5           /*R5、R9用于存儲發(fā)送的數據*/
      MOV    #39H,R9           /*發(fā)送數據可以放于RAM中,或用變量代替R5,R9*/
      MOV    #00H,R10
      CALL   #RX_Ready         /*開(kāi)啟接收端口*/  
      CALL   #TX_Byte          /*發(fā)送2個(gè)通道的可以同時(shí)開(kāi)啟,但這里先開(kāi)啟通道1*/
TEST_TX12
      CMP    #00H,R6          /*判斷通道1發(fā)送是否完畢,可以在中斷服務(wù)程序中設置發(fā)送完標志*/
      JNZ    TEST_TX22
      MOV    #0035H,R5       /*發(fā)送的數據沒(méi)有設置奇偶校驗位,但可以根據情況設置*/
      CALL   #TX_Byte        /*發(fā)送完畢繼續發(fā)送以便于調試發(fā)送數據是否正確*/
TEST_TX22
      CMP    #00H,R10        /*判斷通道2發(fā)送是否完畢,可以在中斷服務(wù)程序中設置發(fā)送完標志*/
      JNZ    TEST_RX12
      MOV    #0039H,R9       /*發(fā)送完畢繼續發(fā)送以便于調試發(fā)送數據是否正確*/
      CALL   #TX_Byte1
      JMP    TEST_RX12
TEST_RX12                  
      CMP    #00H,R8         /*判斷通道1數據是否接收完*/
      JNZ    TEST_RX22
      MOV    R7,R15          /*將接暫時(shí)數據存儲于R15中,也可以利用RAM來(lái)存儲*/
      MOV    #RX_Count,R8    /*接收控制*/
      MOV    #(CCIE+CAP+CCIS_0+CM_2+OUT),&CCTL0  /*準備接受下一個(gè)數據*/
LOAD  MOV.B  R15,0(R14)   /*將接收數據存儲在RAM中,用于調試接收是否正確,可以奇偶校驗來(lái)判斷*/
      INC    R14          /*R14用于存儲接收數據存放的地址,可以用變量代替*/
TEST_RX22      
      CMP    #00H,R12       /*判斷通道2數據是否接收完*/
      JNZ    TEST_TX12      
      MOV    R11,R13        /*將接暫時(shí)數據存儲于R13中,也可以利用RAM來(lái)存儲*/
      MOV    #RX_Count,R12  /*接收控制*/
      MOV    #(CCIE+CAP+CCIS_0+CM_2+OUT),&CCTL1
LOAD1 MOV.B  R13,0(R4)     /*將接收數據存儲在RAM中,用于調試接收是否正確,可以奇偶校驗來(lái)判斷*/
      INC    R4            /*R4用于存儲接收數據存放的地址,可以用變量代替*/
      JMP    TEST_TX12
/*------------調試代碼段結束------*/                 

/************發(fā)送數據子程序*****************/
TX_Byte                             /*通道1的發(fā)送中斷服務(wù)子程序*/
     MOV    #TX_Count,R6            /*R6用于存放發(fā)送的比特數,可以用變量代替*/
     BIS    #0FF00H,R5              /*用于設置停止位*/
     MOV    #(CCIE+CLLD_3),&TBCCTL0  /*設置定時(shí)器B的CCR0的工作模式*/
     MOV    #Bitime,&TBCCR0          /*設置第一位的中斷時(shí)間*/
     ADD    &TBR,&TBCCR0
     BIC    #OUT,&TBCCTL0            /*發(fā)送起始位*/
     ADD    #Bitime,&TBCCR0          /*下一位的接收時(shí)間*/
     RET
/*CCR1,CCR2的中斷共用一個(gè)地址,如果CCR2用于模塊功能,必須首先判斷是否為CCR1產(chǎn)生的中斷*/     
TX_Byte1                              /*通道2的發(fā)送中斷服務(wù)子程序*/
      MOV    #TX_Count,R10            /*發(fā)送控制,R10用于存儲通道2的發(fā)送比特位的個(gè)數*/
      BIS    #0FF00H,R9   
      MOV    #(CCIE+CLLD_3),&TBCCTL1     /*設置定時(shí)器B的CCR1的工作模式*/
      MOV    #Bitime,&TBCCR1             /*設置第一位的中斷時(shí)間*/  
      ADD    &TBR,&TBCCR1
      BIC    #OUT,&TBCCTL1               /*發(fā)送起始位*/
      ADD    #Bitime,&TBCCR1            /*下一位的接收時(shí)間*/
      RET   
/*---------準備接受數據-----------------------------*/
RX_Ready
      MOV    #(TASSEL_2+MC_2),&TACTL  /*設置定時(shí)器A的工作模式*/
      MOV    #RX_Count,R8     /*R8,R12用于存儲接收的比特數,可以用變量代替*/
      MOV    #RX_Count,R12                       /*接受控制*/
      MOV    #(CCIE+CAP+CCIS_0+CM_2+OUT),&CCTL0 /* 設置定時(shí)器A的CCR0的工作模式*/
      MOV    #(CCIE+CAP+CCIS_0+CM_2+OUT),&CCTL1  /* 設置定時(shí)器A的CCR1的工作模式*/
      MOV    #0000H,R11                          /* R11 用于存儲CCR1接受的數據*/
      MOV    #0000H,R7                           /* R7用于存儲通道1接受的數據*/
      RET      
/*----------------發(fā)送中斷服務(wù)子程序(CCR0)---------------------*/
TX_LOOP                     /*通道1的發(fā)送中斷服務(wù)子程序*/
     ADD   #Bitime,&TBCCR0  
     BIT   #0001H,R5        /*判斷發(fā)送位為1還是0*/
     JNZ   TX1
     BIC   #OUT,&TBCCTL0   /*發(fā)送起始位*/
     JMP   TX2
TX1  BIS   #OUT,&TBCCTL0   
TX2  SUB   #01H,R6         /*發(fā)送比特數減1*/
     JNZ   TX3
     BIC   #CCIE,&TBCCTL0
TX3  RRA    R5             /*發(fā)送數據存儲于R5中,可以用變量代替,必須與主程序中的設置一致*/
     RETI
/*----------------發(fā)送中斷服務(wù)子程序(CCR1)---------------------*/
TX_LOOP1                   /*通道2的發(fā)送中斷服務(wù)子程序*/
     ADD   #Bitime,&TBCCR1
     BIT   #0001H,R9       /*判斷發(fā)送位為1還是0*/
     JNZ   TX11
     BIC   #OUT,&TBCCTL1   /*發(fā)送起始位*/
     JMP   TX21
TX11 BIS   #OUT,&TBCCTL1     
TX21 SUB   #01H,R10        /*發(fā)送比特數減1*/
     JNZ   TX31
     BIC   #CCIE,&TBCCTL1
TX31 RRA    R9             /*發(fā)送數據存儲于R9中,可以用變量代替,必須與主程序中的設置一致*/
     BIC   #CCIFG,&TBCCTL1 /*中斷完,關(guān)閉中斷標志位*/
     RETI
/*----------------接受中斷服務(wù)子程序(CCR0)---------------------*/
RX_LOOP                 /*通道1的接收中斷服務(wù)子程序*/
     CMP   #0009H,R8    /*判斷接收位數*/
     JNZ   RX_START     
     BIC   #CAP,&CCTL0  /*接收到起始位,將定時(shí)器設置為比較模式*/
     MOV   #Bitime1_5,&CCR0 /*設置第一位的接收時(shí)間*/
     ADD   &TAR,&CCR0      
     MOV   #0000H,R7    /*將接收存儲器清除,準備接收數據*/
     DEC   R8
     JMP   RXEND
RX_START
     BIT    #SCCI,&CCTL0 /*判斷接收位為是0還是1*/
     RRC.B  R7
     SUB    #01H,R8
     JNZ    RXEND1
     BIC    #CCIE,&CCTL0 /*接收完,關(guān)閉中斷允許位,開(kāi)啟在主程序*/
     JMP    RXEND
RXEND1     
     ADD   #Bitime,&CCR0  /*設置下一位的接收時(shí)間*/
RXEND
     RETI   
/*----------------接受中斷服務(wù)子程序(CCR1)---------------------*/
RX_LOOP1              /*通道1的接收中斷服務(wù)子程序*/
     CMP   #0009H,R12 /*判斷接收位數*/
     JNZ   RX_START1   
     BIC   #CAP,&CCTL1 /*接收到起始位,將定時(shí)器設置為比較模式*/
     MOV   #Bitime1_5,&CCR1  /*設置第一位的接收時(shí)間*/
     ADD   &TAR,&CCR1      
     MOV   #0000H,R11         /*將接收存儲器清除,準備接收數據*/
     DEC   R12
     JMP   RXEND10
RX_START1
     BIT    #SCCI,&CCTL1      /*判斷接收位為是0還是1*/
     RRC.B  R11
     SUB    #01H,R12
     JNZ    RXEND11
     BIC    #CCIE,&CCTL1   /*接收完,關(guān)閉中斷允許位,開(kāi)啟在主程序*/
RXEND11        
     ADD   #Bitime,&CCR1   /*設置下一位的接收時(shí)間*/
RXEND10
     BIC   #CCIFG,&CCTL1   /*中斷完,關(guān)閉中斷標志位*/
     RETI   
/*-----------列中斷向量表-----------------*/   
     COMMON INTVEC                 
      ORG  TIMERB0_VECTOR         
       DW   TX_LOOP               
      ORG  TIMERB1_VECTOR
       DW   TX_LOOP1
      ORG  TIMERA0_VECTOR
       DW   RX_LOOP
      ORG  TIMERA1_VECTOR
       DW   RX_LOOP1
      END

說(shuō)明:該程序用于測試利用定時(shí)器實(shí)現UART口的可行性,接收數據直接通過(guò)存儲器所接收的數據來(lái)判斷接收的正確性,在整個(gè)調試過(guò)程中,我們用超級終端隨機發(fā)送數據,利用示波器觀(guān)察UART發(fā)送的數據,通過(guò)在線(xiàn)調試來(lái)觀(guān)察接收的數據是否正確。因此,沒(méi)有考慮寄存器的有限性、數據的奇偶位。在實(shí)際運用系統中,可以用存儲器來(lái)代替某些寄存器,也可以擴充存儲空間和判斷奇偶位。

通過(guò)反復的調試,用定時(shí)器擴充的UART口可以正確無(wú)誤的進(jìn)行接收/發(fā)送。由于該程序僅用于調試用定時(shí)器擴充的UART口的可行性,在實(shí)際運用中可以根據具體情況做相應改動(dòng)。

利用定時(shí)器擴充的另外的一個(gè)UART口與其它兩個(gè)類(lèi)似,在擴充另外一個(gè)UART口時(shí),必須考慮CCR1與CCR2共用一個(gè)中斷向量的中斷標志。

作者簡(jiǎn)介:     丁鵬飛 男,西安郵電學(xué)院電子與信息工程系本科生
徐國軍 男,西安郵電學(xué)院通信工程工程系本科生
電話(huà)號碼:     丁鵬飛(029-5384124),徐國軍(029-5384044)
本文地址:http://selenalain.com/thread-2846-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)在線(xiàn)工具

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页