430單片機個人總結_第1頁
430單片機個人總結_第2頁
430單片機個人總結_第3頁
430單片機個人總結_第4頁
430單片機個人總結_第5頁
已閱讀5頁,還剩6頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、430單片機個人總結一 時鐘部分(msp430f149單片機)1、關于XT2XT2Sx=11、XT2OFF=0時,XT2來源于外部時鐘信號,也就是可以直接在XT2IN管腳上施加一個時鐘信號,而不需要在XT2IN和XT2OUT上加時鐘源 圖12、關于XT1當LFXT1Sx=11、OSCOFF=0時,XIN和XOUT之間可以不加晶振,只需在XIN管腳上施加一個時鐘信號既可當在XIN和XOUT兩端加高頻晶振時,晶振之間需要配置電容當在XIN和XOUT兩端加低頻晶振時,晶振之間可以不加電容,而通過單片機內部給其配置電容 圖23、關于MCLKPUC信號之后,MCLK來源于DCO時鐘信號(可以不設置,系統

2、PUC之后會有一個默認值),如果要設置MCLK來源于XT1或者XT2,步驟如下:1、打開需要的晶體振蕩器;(作為MCLK的時鐘源,而不是默認的DCO)2、清除OFIFG標志位;3、延時50us;4、測試OFIFG標志位。若OFIFG=0,說明設置成功;若OFIFG=1,設置未成功,重復23步驟;程序如下 BCSCTL1 &=XT2OFF; / XT2 is on do IFG1 &=OFIFG; / clear OSCFault flag for(i=255;i>0;i-); / time for flag to set while(IFG1 & OFIFG);

3、BCSCTL2 |=SELM_2+DIVM_3; /f(mclk)=f(XT2)/8;二 IO口部分(msp430f149單片機)430單片機的IO口都是復用的,除了做普通IO口用外,還可以作為片內外設用,圖3所示為 msp430g2553單片機的P1.6、P1.7管腳說明,可以發現P1.6管腳除了作為普通的IO之外,還可以作為TA0.1、TCLK等用,那么應該如何選擇這些管腳的功能呢?1、 給寄存器PxSEL(圖4)賦值,確定管腳是作為IO用,還是作為片內外設用,當PxSEL=0時,用作IO,當PxSEL=1時,用作片內外設;2、給寄存器PxDIR(圖5)賦值,確定管腳的輸出方向(作為IO時

4、,用來設置是input還是output;作為片內外設時,用來設置是輸出的片內外設還是輸入的片內外設,如P1.6管腳用作片內外設時,TA0.1是輸出,CA6是輸入),當PxDIR=0時,用作輸入,當PxDIR=1時,用作輸出; 圖3 圖4三 中斷函數標準中斷函數的格式為;#pragam vector=中斷向量_interrupt void ISR(void)用戶程序;四 低功耗模式進入低功耗程序模式為(以進入低功耗LPM0模式為例):_EINT();LPM0;以上兩句程序等價為:_BIS_SR(LPM0_bits + GIE);那么退出低功耗程序為:LPM0_EXIT;五 Flash操作(msp

5、430f149單片機)Flash被劃分成main memory和information memory,兩者沒有太大區別,只是兩者的容量和物理地址不同。CPU:中央處理器(center processing unit),是一臺計算機的運算核心和控制核心。它的功能是解釋處理指令。主要由運算器(算術邏輯運算單元ALU,arithmetic logic unit)、高速緩沖存儲器(cache)、數據總線(data bus)、控制總線(control bus)、地址總線(address bus)組成。它與內部存儲器(memory,程序存儲器和數據存儲器)和輸入/輸出(I/O)設備合稱為電子計算機三大核心

6、部件。Flash就是memory的一種。對flash進行操作時,其頻率需在257kHz476KHz之間,同時單片機的供電電壓不能低于2.7V。對flash的操作有三種:讀、寫和擦除;默認方式是讀。擦除操作:對flash進行擦除操作時,需要進行一個假寫入,假寫入的目的是啟動flash時鐘發生器和啟動擦除操作,若果假寫入的地址不在需要擦除的段內,該假寫入不能啟動該段的擦除。 擦除flash所需的時間是固定的,并不取決于需要擦擦除的flash的數量,mass擦除的時間t= 10593/fFTG,segment擦除的時間t=4819/fFTG,色寫入flash步驟:1、關閉看門狗電路和總中斷;2、設置

7、FCTL2(FCTL2寄存器用來設置flash timing);3、設置指針指向需要寫入段的首地址;4、設置FCTL1、FCTL3(FCTL1用來控制flash的操作方式是寫操作還是擦除操作,默認是讀操作;FCTL3用來控制能否對flash進行操作),需要首先設置FCTL1控制flash為擦除操作(在寫入之前需要先擦除);5、假寫入(用來啟動擦除操作,若是從flash中啟動擦除操作(?),那么在擦除過程中,CPU將會停止運行;擦除完成后,CPU繼續執行后面的代碼);怎么理解從flash中啟動擦除操作?個人理解:就是通過上位機下載到單片機的程序保存在flash中,而沒有保存到RAM中。擦除指令代

8、碼也是保存在flash中。6、擦除操作完成后,設置FCTL1(設置Flash為寫入模式);7、寫入flash程序;8、寫入完成后,設置FCLT1、FCTL3(FCTL1設置flash為默認模式;FCTL3鎖存flash,讓程序無法對flash進行操作)c語言程序如下:void main(void) uchar *Flash_ptr; / flash pointer uint i,value; /value為需要寫入的數值; WDTCTL=WDTPW + WDTHOLD; /關閉看門狗; FCTL2=FWKEY + FSSEL0+FN0; /設置flash timing value=0; Fla

9、sh_ptr=(uchar *) 0x1080; /設置flash pointer為需要寫入的flash段的首地址 FCTL1=FWKEY+ERASE; /設置flash為擦除模式; FCTL3= FWKEY; /打開flash操作,默認為讀模式,用戶不能對flash進行其他操作 *Flash_ptr=2; /假寫入一個數值(假寫入的目的是啟動擦除操作) FCTL1=FWKEY+WRT; /設置flash為寫模式 for(i=0;i<128;i+) /寫入程序 *Flash_ptr+=value; FCTL1=FWKEY; /關閉寫入模式 FCTL3=FWKEY+LOCK; /關閉fla

10、sh,用戶不能對flash寫/擦除操作,只能讀如何理解從flash啟動對flash的操作、從RAM啟動flash的操作?回答:對flash進行的這段代碼存放在哪里,就是從哪里啟動flash的操作,如果該段代碼放在RAM中,那么即是從RAM啟動flash的操作;如果這段代碼放在flash中,即是從flash啟動flash操作。如何判斷程序是存放在Flash中還是RAM中?回答:x86架構的PC機cpu在運行時,程序是存儲在RAM中的,PC機在運行程序的時候將程序從外存(硬盤)調入到RAM中運行,CPU從RAM中讀取程序和數據;而單片機等嵌入式系統則是存放在flash中的,單片機程序是固化在fla

11、sh中,CPU運行時直接從flash中讀取程序,從RAM中讀取數據。造成以上差別的原因在于:x86架構的CPU是基于馮.諾依曼體系的,即數據和程序存儲在一起的,而且pc機的RAM資源相當豐富,客觀上能夠有承受大量的程序數據;單片機的架構大多是哈佛體系的,即程序和數據分開存儲,而且單片機的片內RAM資源是相當有限的,內部的RAM過大會帶來成本的大幅度提高。馮.諾依曼結構(又稱普林斯頓結構)和哈佛結構的區別?回答:兩者的區別在于程序空間和數據空間是否是一體的。馮諾依曼結構是將程序空間和數據空間合在一起的存儲器結構。程序指令存儲地址和數據存儲地址指向同一個存儲的不同物理地址,因此程序指令和數據指令的

12、寬度相同。取指令和取操作數都在同一條總線上,通過分時復用的方式進行的,缺點是在高速運行時,不能達到同時取指令和取操作數,從而形成了傳輸過程的瓶頸。常見的微控制器和中央處理器有:Intel公司的x86微處理器、Intel公司的其他中央處理器、安謀公司的ARM7、MIPS公司的mips處理器。哈佛體系的內部程序空間和數據空間是分開的,這樣就可以同時去指令和操作數,從而大大提高了運算能力。常見的微控制器和中央處理器有:microchip公司的PIC系列芯片、摩托羅拉的MC68系列、zilog公司的Z8系列。Atmel公司的AVR系列、安謀公司的ARM9、ARM10和ARM11、51單片機。在通用計算

13、機系統中(PC機),應用軟件的多樣性是的計算機要不斷地變化所執行的代碼的內容,并且頻繁地對數據域代碼占有的存儲器進行重新分配,這種請款下,馮諾依曼結構占有絕對優勢,因為同一編址可以最大限度地利用資源,而哈佛結構的計算機應用在這種請款下會對存儲器資源產生理論上最大可達50%的浪費;但是再嵌入式應用中,系統要執行的任務相對單一,程序一般是固化在硬件里。當然這時使用馮諾依曼結構液可以,代碼區和數據區在編譯時一次性分配好了而已,但是其靈活性得不到體現,所以現在大量單片機還是使用的哈佛結構。為什么說哈佛結構在嵌入式計算機中占有優勢呢?回答:嵌入式計算機在工作時與通用計算機有著一些區別:嵌入式計算機在工作

14、期間的絕大部分時間是無人值守的,而通用計算機工作期間一般是有人操作的;嵌入式計算機的故障可能會導致災難性的后果,而通用計算機一般就是死死機,重新啟動集合,這兩點決定了對嵌入式計算機的一個基本要求:可靠性。使用馮諾依曼機構的計算機,程序空間不封閉,其程序空間的數據在運行期理論上可以被修改,此外程序一旦跑飛也有可能運行到數據區。雖然都是一些不常見的特殊情況,但是看看哈佛機構的計算機在這些情況下是怎樣的:程序只能在密閉的代碼區中運行,不可能跑飛到數據區。總結馮諾依曼原理:程序只是一種特殊的數據,它可以像數據一樣被處理,因此可以和數據一起存儲在同一個存儲器中,數據總線和地址總線復用。哈佛結構是一種并行

15、結構,程序存儲器和數據存儲器是兩個獨立的存儲器,每個存儲器獨立編址、獨立訪問,與兩個存儲器對應的是系統的4條總線:程序的數據總線和地址總線、數據的數據總線和地址總線六 UART通信(msp430f149單片機)UART通信又稱串行異步通信,串行同步/異步收發器通過RXD/TXD管腳將430單片機和外部系統相連。如果RXD/TXD管腳沒有接受/發送數據,則RXD/TXD管腳一致保持高電平狀態。UART的數據幀結構為:1位停止位、8位數據位、1位奇偶校驗位、1位停止位,在實際數據發送過程中,串口是以字符為基本單位來發送的。 收發步驟(UART初始化設置): 1、設置IO口為RXD、TXD; 2、設

16、置SWRST=1(正常情況時,一個PUC(上電復位)信號后,SWRST自動設置=1,因此可以不用設置SWRST); 3、設置相關寄存器(RXD/TXD使能、數據格式、波特率的時鐘源、波特率大小); 4、清除SWRST(即設置SWRST=0),這樣USART模塊才能工作; 5、打開接收、發送中斷(?);6、接收/發送處理程序部分;void uart_init() /uart初始化函數 P3SEL |=BIT4+BIT5; /set P3.4 as TXD,P3.5 as RXD ME1 |=UTXE0+URXE0; /Enable USART0 transmit and recieve UCTL

17、0 |=CHAR; /8 bit character UTCTL0 |=SSEL0; / UCLK = ACLK UBR00 =0x0D; /32768/2400 UBR10 =0x00; UMCTL0 =0x6B; UCTL0 &=SWRST; / 初始化UART0狀態機 IE1 |=URXIE0; /enable RXD interrupt 發送程序處理部分: 先判斷UxTXBUF是否空閑;若空閑,則將要發送的數據送入到UxTXBUF中;程序如下所示: while(!(IFG1 & UTXIFG0);TXBUF0 =value; (value為要發送的變量)七 上電復位(P

18、OR)和上電清除(PUC)PUC信號是上電清除信號。POR(Power-On-Reset)是上電復位信號,它只在以下兩個事件發生時產生:1、芯片上電。2、RST/NMI設置成復位模式,在RST/NMI引腳上出現低電平信號。POR信號的產生總會產生PUC(Power-UP-Clear)信號,但PUC信號的發生不會產生POR信號。PUC信號是上電清除信號,產生它的事件為:1、發生POR信號。2、處于看門狗模式下,看門狗定時時間到。3、看門狗定時器寫入錯誤的安全鍵值。4、RST/NMI設置成NMI模式,在RST/NMI引腳上出現低電平信號,5、FLASH存儲器寫入錯誤的安全鍵值。八 WDT+模塊(m

19、sp430g2553單片機)WDT+模塊通過WDTCTL寄存器中的WDTTMSEL位來進行對應的功能選擇,可以設置為watchdog模式,也可以設置為internal timer模式。Watchdog模式:什么是看門狗?回答:在由單片機構成的微型計算機系統中,由于單片機的工作常常會受到來自外界電磁場的干擾,造成程序的跑飛,而陷入死循環,程序的正常運行被打斷,由單片機控制的系統無法繼續工作,會造成整個系統陷入停滯狀態,發生不可預料的后果,所以出于對單片機運行狀態進行實時監測的考慮,便產生了一種專門用于檢測單片機程序運行的芯片,俗稱“看門狗”。Internal timer模式:簡單來說就是定時器模

20、式。九 比較器comparator_A+(msp430g2553單片機)Comparator_A+是一個模擬電壓比較器,所有msp430x2xx系列的單片機均有此模塊。操作步驟:1. 使能比較器模塊,即設置CAON位;2. 參考電壓大小選擇,即設置CAREFx位;3. 參考電壓方向選擇(參考電壓是接入到比較器的+端還是-端),即設置CAEX位和CARSEL位;4. 待比較的電壓輸入位選擇,即是選擇CA0、還是CA1、還是CA2等;5. 因為第四步中設置了比較電壓輸入位,而這些位是與IO口復用,因此需要設置P口的功能選擇位PxSEL以及方向位PxDIR;十 定時器(msp430g2553單片機)

21、MSP430有兩個16位定時器Timer_A和Timer_B,兩者基本相同。在430單片機的定時器模塊,經常會看見“Timer_A3、Timer_B3”和“Timer_B7”,這里的“3”和“7”是指Timer_A、Timer_B模塊分別具有3個或7個捕獲/比較寄存器。Timer_A大致可分為四個功能模塊:計數器、比較/捕獲寄存器0、比較/捕獲寄存器1、比較/捕獲寄存器2。比較模式和捕獲模式在單片機內部有不同的硬件電路。Timer_A模塊將定時器和捕獲/比較模塊集成到了一起。對定時器的處理均是通過中斷方式進行的。在Timer_A模塊中,具有兩個中斷向量,分別是TACCR0中斷向量和TAIV中斷

22、向量。TACCR0模塊單獨對應TACCR0中斷向量,是一個單源中斷,TACCR1、TACCR2、TAIFG對應TAIV中斷向量,是一個多源中斷。因此2個中斷向量實際上對應了4個中斷。Msp430g2553有兩個Timer_A模塊,分別是Timer0_A3、Timer1_A3。Timer0_A3中用的很多寄存器都采用簡寫的方式,且容易理解記憶,而Timer1_A3中很多寄存器沒有采用簡寫的方式,并且其書寫方式與Timer0_A3中寄存器的書寫方式不一樣,因此在實際編程使用時,需重點注意!因為一個Timer_A模塊具有2個中斷向量,因此2553單片機具有4個定時器中斷向量,Timer0_A3對應的

23、中斷向量為TIMER0_A0_VECTOR、TIMER0_A1_VECTOR;Timer1_A3對應的中斷向量為TIMER1_A0_VECTOR、TIMER1_A1_VECTOR。前者的優先級均高于后者的優先級。Timer0_A3的CCR0對應TIMER0_A0_VECTOR中斷,Timer0_A3的CCR1、CCR2、定時器溢出對應TIMER0_A1_VECTOR中斷。對于中斷過程的理解計數器是主體,它是一個可開啟和關閉的定時器。如果開啟它就是一直在循環計數,會有一個溢出中斷。如在連續計數模式時,當從0計數到0xffff時就會產生一個中斷。那么如何實現定時功能呢?這需要靠3個比較/捕獲寄存器

24、(下用CCRx表示)。當計數器寄存器TAR中的值增加到與CCR0或CCR1或CCR2寄存器中的值相等時,會分別觸發對應的CCRx中斷,這樣可以通過定時器A得到3個定時時間。CCRx有3個中斷,再加上計數器本身的溢出中斷,因此Timer_A模塊共有4個中斷CCR0比較特殊,通過它可以改變計數器的最大計數值,當計數器計數到CCR0的值時自動將計數器清零,但是需要設置相應的工作模式,模式列表如下:MCxMode說明00停止定時器暫停01增計數計數器計數到CCR0,再清零計數10連續計數計數器計數到0xffff,再清零計數11增減計數增計數到CCR0,再減計數到0范例:Description:采用Ti

25、mer0_A3定時器,連續計數模式,利用定時器溢出中斷在P2.1產生頻率約為 的方波信號,利用CCR0比較中斷(初值設為40000)在P2.2產生頻率約為 的方波信號(SMCLK默認約為1MHz)。void main() WDTCTL =WDTPW+WDTHOLD; /stop watchdog P2DIR |=0xff; /set P2 as output TACCTL0 =CCIE; / enable CCRx interrupt TACCR0 =50000; / CCR0初值 TACTL =TASSEL_2+TACLR+MC_2+TAIE; /定時器A的時鐘源為SMCLK,計數器清零,連

26、續計數模式,溢出中斷允許 _EINT(); LPM0;#pragma vector=TIMER0_A0_VECTOR_interrupt void Timer_A0(void) P2OUT =BIT2; /P2.2取反 CCR0 +=50000; /CCR0置入計數值#pragma vector=TIMER0_A1_VECTOR_interrupt void Timer_A1(void) switch(TAIV) case 2:break; /CCR1中斷未用 case 4:break; /CCR2中斷未用 case 10:P2OUT =BIT1; /p2.1 取反 break; 如何理解比較

27、和捕獲?比較:CCR0中開始時有一個初始值,計數器在時鐘的觸發下,不斷的計數,當計數器中的值等于CCR0中的值時,觸發產生一個中斷。因此,比較模式一般是用在定時功能的。是定時器的默認模式。捕獲:外部輸入信號觸發中斷,讀取計時器的計數值,就可以測量信號脈寬、周期等參數。捕獲的方式有上升沿捕獲、下降沿捕獲、上升/下降沿捕獲。在捕獲模式,當滿足捕獲條件,硬件自動將計數器TAR數據寫入相應的寄存器CCRx。如測量某窄脈沖(高電平)的脈沖長度,可定義上升沿和下降沿都捕獲。在上升沿捕獲一個定時器數據;再等待下降沿的到來,在下降沿又捕獲到一個定時器數據。那么兩次捕獲的定時器數據差就是窄脈沖的寬度(時間)。根

28、據下表來確定捕獲模式的輸入信號源。Timer0_A3 signal connectionsInput pin numberDevice input signalModule input nameModule blockModule output signalOutput pin numberPW20,N20PW28RHB32PW20,N20PW28RHB32P1.0-2P1.0-2P1.0-31TACLKTACLKTimerNAACLKACLKSMCLKSMCLKPinOscPinOscPinOscTACLKINCLKP1.1-3P1.1-3P1.1-1TA0.0CCI0ACCR0TA0P1.

29、1-3P1.1-3P1.1-1ACLKCCI0BP1.5-7P1.5-7P1.5-5VssGNDP3.4-15P3.4-13VccVccP1.2-4P1.2-4P1.2-2TA0.1CCI1ACCR1TA1P1.2-4P1.2-4P1.2-2CAOUTCCI1BP1.6-14P1.6-22P1.6-21VssGNDP2.6-19P2.6-27P2.6-26VccVccP3.5-19P3.5-18P3.0-19P3.0-17TA0.2CCI2ACCR2TA2P3.0-19P3.0-17PinOscPinOscPinOscTA0.2CCI2BP3.6-20P3.6-19VssGNDVccVcc注釋

30、:上表中的“Px.x-x”的意義,“Px.x”代表P口,“x”代表對應封裝中的第x號管腳;“PW20,N20”、“PW28”、“RHB32”代表封裝;“TAx.x”中第一個“x”代表定時器模塊x(2553單片機有兩個Timer_A模塊,分別是Timer0_A3和Timer1_A3,因此這里的“x”只能取0和1),第2個“x”代表定時器模塊中的第x個捕獲比較寄存器(2553單片機的兩個定時器模塊都具有3個捕獲比較寄存器,因此這里的“x”可取值0,1,2)如何用Timer的比較/捕獲方式來軟件模擬UART通信?接收過程: 上圖所示為一個3位數據幀的時序。首先確定起始位,用來進行幀同步。利用Time

31、r的捕獲模式來捕獲起始位的下降沿。定義Timer的CAP位為1,則進入捕獲模式,如圖所示,在A點捕獲到起始位,系統將此刻的定時器值T存放到CCRx中,并由于捕獲而產生中斷。在中斷處理程序中,對A點所產生中斷的處理非常重要,一進入中斷就將捕獲功能轉換為比較功能。另外設置TACTL中的MC0=1,啟動定時器的增計數模式,并將1.5位的時間間隔(1.5T)加到CCRx中,即CCRx=1.5T。同時將單片機內部的計數器TAR清零。這樣當單片機內部的計數器TAR的值達到1.5T(B點)時,就會由此比較功能觸發中斷,這樣就實現了1.5位時間間隔的精確定時。由于1.5T的時間跳過了起始位,剛好是在第一位數據位的中間,這時的數據位是最穩定的,沒有電平的突變,在中斷處理程序中可以讀取輸入引腳的狀態,從而接收到Bit1的信息。同時重新設定CCRx的值,將其設定為一位數據位T的時間,TAR清零重新開始計數,當TAR計數達到CCRx的值時,又產生一次中斷,這時剛好是在第二位的數據位的中間部分,中斷服務程序中可以讀取Bit2的信息。如此重復8次,就可以完成一個字節數據的接收。收完一個字符后,再重復上述過程,可以連續接收多個字符。發送過程:先利用比較功能產生一個間隔為1位時間(T)的時序,相當于一個波

溫馨提示

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

評論

0/150

提交評論