版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)C語言程序設(shè)計(jì)--我的嵌入式C,來了1第1章--緒論.pptx2第2章--MSP430系列單片機(jī)概述.pptx3第3章(C語言).ppt4第4章(IO).ppt5第5章MSP430定時(shí)器A.ppt6第6章串行口.pptx7第7章比較器.pptx8第8章MSP430模數(shù)轉(zhuǎn)換ADC12模塊.ppt9第9章DAC12模塊.pptx10第10章DMA模塊.pptx11第11章基于MSP430的液晶顯示系統(tǒng)控制.pptx12第12章綜合應(yīng)用實(shí)踐.pptx全套PPT課件我大二就學(xué)過C了,干嘛還學(xué)單片機(jī)C還想用匯編大規(guī)模編寫程序與硬件打交道?累C可以直接描述枯燥的硬件驅(qū)動(dòng)?城里人真會(huì)玩C是嵌入系統(tǒng)開發(fā)的主力軍!額,這樣的呀!單片機(jī)C語言程序設(shè)計(jì),嗯,51單片機(jī)的C嗎?太Low!你的菜!何必為難自己!MSP430是個(gè)什么鬼?玩過低功耗嗎,有啥意義?低功耗是個(gè)大領(lǐng)域!WhoisthemostNB!何出此言?低功耗咋實(shí)現(xiàn)的?P=UI,知道不?電流不變,你說功耗和誰成正比?低功耗的設(shè)計(jì)準(zhǔn)則1)電源低2)時(shí)鐘慢3)系統(tǒng)靜供電電壓:1.8-3.6V我吃的少、干得多時(shí)鐘多源:32.768K、800K、8M夠用就好,絕不浪費(fèi)睡眠更省電五種睡眠模式,任君選擇多管齊下,功耗最低可達(dá):0.1UAMSP430超值產(chǎn)品線競(jìng)爭(zhēng)對(duì)手預(yù)覽典型的電池供電應(yīng)用中,99到99.9%的時(shí)間處于睡眠模式MSP430與8位單片機(jī)對(duì)比功耗更低;低至什么程度呢?
(參數(shù)@2.2V)
0.1μARAM保持0.4μA睡眠模式
(VLO)0.7μA實(shí)時(shí)時(shí)鐘模式
從睡眠模式下喚醒
<1μs
低10倍的功耗睡眠模式功耗對(duì)比
@3V(uA)012345678PIC12F508AtmelATTinySTM8L151MSP430膩害不?超低功耗特性集成模擬模塊開發(fā)簡(jiǎn)單BORMPYAESDMASub1GHzRFADC12(A)SVSSVMComp_BUSCILDOPMMRTC_A/BLCDCC430Speed25MhzFlash8-16kBRAMto4kBGPIO40BORMPYEDIUSBADC10,12(A)DMAAESComp_BSVSSVMRTC_A/BUSCILDOPMMRTC_A/BF5xxSpeed25MhzFlash8-256kBRAMto16kBGPIO32-83BORLCDDAC12MPYComp_ADMAOpAmpSVSUSCI/WDT+USARTUSCIESP430SIFBasicTimerRTC_CSD16(_A)ADC10,12F4xxSpeed8/16MhzFlash4-120kBRAMto8kGPIO14-80BORADC10,12SD16_ADAC12MPYSVSComp_A+DMAOpAmpUSCIUSIBORADC10Comp_A+TempUSIF2xxSpeed16MhzFlash1-120kBRAMto8kB
GPIO10-64G2xxSpeed16MhzFlash0.5-2kBRAM120kB
GPIO10$0.25Comp_ADAC12BORSVSDMAMPYUSARTADC10.12F1xxSpeed8MhzFlash1-60kBRAMto10kBGPIO14-48MSP43016-bitRISCCPU共有特性:
16-bittimersWatchdogTimerInternalDigitallyControlledOscillatorExt32-kHzcrystalsupport<50nApinleakage<6μswakeupMSP430產(chǎn)品列表集|200+器件命名規(guī)則作業(yè)
1)簡(jiǎn)述超低功耗單片機(jī)特點(diǎn)?
2)簡(jiǎn)述超低功耗單片機(jī)系統(tǒng)的設(shè)計(jì)原則?
3)超低功耗單片機(jī)的應(yīng)用場(chǎng)合是什么?
4)MSP430的主要特點(diǎn)是什么?
第二章
MSP430系列單片機(jī)概述2.1MSP430F169的結(jié)構(gòu)外設(shè)很豐富16位定時(shí)器12位AD轉(zhuǎn)換12位DA轉(zhuǎn)換比較器外設(shè)很豐富I2C總線DMAUSARTMSP430x1xx:31款不同的MCU
USART:SPI+UART28
16位精簡(jiǎn)指令集高度正交化,支持7種尋址方式正交化設(shè)計(jì),每條指令全部支持7種尋址方式
寄存器資源豐富
寄存器操作為單周期
16位地址總線
常數(shù)發(fā)生器
直接的存儲(chǔ)器到存儲(chǔ)器訪問MSP430CPU的主要特點(diǎn):2.2MSP430F169的中央處理器1.寄存器尋址 例:MOVR4, R52.變址尋址
例:MOVR5, x(R4)3.符號(hào)尋址
例:MOVR6, label4.絕對(duì)尋址 例:MOVR7, &variable5.寄存器間接尋址
例:MOV@R9, R4
6.寄存器間接增量尋址
例:MOV@R5+
, R67.立即數(shù)尋址 例:MOV#1000h
,R4CPU寄存器資源豐富,16個(gè)16-bit寄存器R0~R15。其中,R0~R3具有特殊功能:程序計(jì)數(shù)器R0/PC、堆棧指針R1/SP、狀態(tài)寄存器R2/SR/CG1和常數(shù)發(fā)生器R3/CG2;R4~R15為通用寄存器。程序計(jì)數(shù)器PC
程序計(jì)數(shù)器PC總是指向程序存儲(chǔ)器中下一條將要執(zhí)行的指令的地址。MSP430指令長(zhǎng)度分別為2、4或6字節(jié)長(zhǎng),PC相應(yīng)遞增。
PC內(nèi)容總是偶數(shù),指向偶字節(jié)地址。PC是16位寄存器,可以尋址64K存儲(chǔ)空間,對(duì)程序存儲(chǔ)器的訪問以字為單位。在執(zhí)行條件或無條件轉(zhuǎn)移指令、調(diào)用指令或響應(yīng)中斷時(shí),程序計(jì)數(shù)器PC都會(huì)被賦新值,其他情況下,程序計(jì)數(shù)器PC的值自動(dòng)增加。堆棧指針SP
堆棧是遵循“先入后出”原則的特殊數(shù)據(jù)存儲(chǔ)區(qū),用來保護(hù)現(xiàn)場(chǎng)數(shù)據(jù):(1)系統(tǒng)調(diào)用子程序或進(jìn)入中斷服務(wù)程序時(shí),將PC值(程序未跳轉(zhuǎn)之前的值)壓入堆棧進(jìn)行保護(hù),然后程序計(jì)數(shù)器PC被賦予子程序入口地址或中斷向量地址,執(zhí)行子程序或中斷服務(wù)程序。子程序或中斷服務(wù)程序執(zhí)行完畢后,遇到返回指令,則將堆棧的內(nèi)容送到程序計(jì)數(shù)器PC中,程序又返回主程序繼續(xù)執(zhí)行;(2)堆棧可在函數(shù)調(diào)用期間保存寄存器變量、局部變量和參數(shù)等。
堆棧指針SP則總是指向堆棧的頂部,即棧頂。根據(jù)堆棧地址的生成方向,堆棧可分為“向下增長(zhǎng)型(高地址向低地址增長(zhǎng))”或“向上增長(zhǎng)型(低地址向高地址增長(zhǎng))”。
MSP430堆棧屬于“向下增長(zhǎng)型”,即系統(tǒng)在將數(shù)據(jù)壓入堆棧時(shí),即壓棧,總是先將堆棧指針SP值減2,然后再將數(shù)據(jù)送到SP所指向的RAM單元中。將數(shù)據(jù)從堆棧中彈出,即彈棧,與壓棧過程相反:先將數(shù)據(jù)從SP所指向的內(nèi)存單元中讀取出來,再將SP值加2。狀態(tài)寄存器SR
狀態(tài)寄存器SR/R2反映了程序執(zhí)行過程中控制器的現(xiàn)場(chǎng)狀態(tài),用于指示ALU的運(yùn)算結(jié)果狀態(tài)以及CPU、時(shí)鐘狀態(tài)等。15~9876543210Bit8V溢出標(biāo)志位,當(dāng)算術(shù)運(yùn)算結(jié)果超出有符號(hào)數(shù)范圍時(shí)置位,否則為0Bit7SCG1系統(tǒng)時(shí)鐘控制位1。置位,禁止SMCLK。Bit6SCG0系統(tǒng)時(shí)鐘控制位0。復(fù)位,使能直流發(fā)生器;SCG0置位,且DCOCLK沒有被用作MCLK或SMCLK時(shí),直流發(fā)生器才能被禁止。Bit5OSCOFF晶體控制位。
復(fù)位,激活LFXT1。OSCOFF置位且LFXT1CLK不用于MCLK或
SMCLK時(shí),LFXT1禁止;
置位,使晶體振蕩器處于停止?fàn)顟B(tài)。設(shè)置OSCOFF=1必須同時(shí)設(shè)置
CPUOFF=1,只有系統(tǒng)允許的外部中斷或NMI可喚醒CPU。
Bit4CPUOFFCPU控制位。置位使CPU進(jìn)入關(guān)閉模式,此時(shí)除了
RAM內(nèi)容、端口、寄存器保持外,CPU處于停止?fàn)顟B(tài),可用所有允許的中斷將CPU從此狀態(tài)喚醒。
0CPU進(jìn)入關(guān)閉模式
1CPU處于工作狀態(tài)Bit3GIE可屏蔽中斷控制位。置位允許可屏蔽中斷,復(fù)位禁止所有可屏蔽中斷。該位由中斷復(fù)位,RETI指令置位,也可以用指令改變。
0允許可屏蔽中斷
1禁止所有可屏蔽中斷Bit2N負(fù)標(biāo)志,當(dāng)運(yùn)算結(jié)果為負(fù)時(shí)置位,否則為0。Bit1Z零標(biāo)志,當(dāng)運(yùn)算結(jié)果為0時(shí)置位,否則為0。Bit0C進(jìn)位標(biāo)志,當(dāng)運(yùn)算結(jié)果產(chǎn)生進(jìn)位時(shí)置位,否則為0。
常數(shù)發(fā)生器CG1和CG2
R2和R3為常數(shù)發(fā)生器,利用CPU的27條內(nèi)核指令配合常數(shù)發(fā)生器可以生成一些簡(jiǎn)潔高效的模擬指令。表
CG1、CG2產(chǎn)生常數(shù)值通用寄存器
R4到R15為通用工作寄存器。具有暫存運(yùn)算結(jié)果,執(zhí)行算數(shù)邏輯運(yùn)算等功能,是控制器訪問最頻繁的場(chǎng)所,可以進(jìn)行字節(jié)、字操作,可作為地址指針或數(shù)據(jù)寄存器,使用通過寄存器可以大大提高程序的執(zhí)行效率,當(dāng)中斷發(fā)生時(shí),需對(duì)其內(nèi)容進(jìn)行保護(hù)。2.3系統(tǒng)復(fù)位和工作模式2.3.1系統(tǒng)復(fù)位和初始化1.系統(tǒng)復(fù)位
MSP430系列單片機(jī)有兩種復(fù)位方式:上電復(fù)位POR(Power–OnReset);上電清除PUC(Power–UpClear)。不同的信號(hào)可觸發(fā)不同的復(fù)位方式,而系統(tǒng)初始化的狀態(tài)取決于復(fù)位方式。(1)POR信號(hào)在以下3種事件發(fā)生時(shí)會(huì)產(chǎn)生:器件上電RST/NMI引腳配置為復(fù)位模式,當(dāng)此引腳出現(xiàn)低電平信號(hào)當(dāng)PORON=1時(shí),SVS處于低電平狀態(tài)(2)PUC信號(hào)的產(chǎn)生與POR有一定關(guān)系,其由以下事件產(chǎn)生:POR信號(hào)發(fā)生時(shí)看門狗模式下,看門狗定時(shí)器溢出向看門狗控制寄存器寫入錯(cuò)誤的安全鍵值片內(nèi)Flash寫入錯(cuò)誤的安全鍵值POR信號(hào)產(chǎn)生會(huì)使系統(tǒng)復(fù)位并產(chǎn)生PUC信號(hào),而PUC信號(hào)產(chǎn)生不會(huì)導(dǎo)致POR信號(hào)的產(chǎn)生。系統(tǒng)復(fù)位后(PUC或POR),從地址0FFFEH開始讀取復(fù)位中斷向量,程序會(huì)從中斷向量所指向的地址開始執(zhí)行。系統(tǒng)復(fù)位(POR信號(hào))后,系統(tǒng)的初始狀態(tài)為:
引腳配置為復(fù)位模式I/O引腳配置為輸入模式狀態(tài)寄存器復(fù)位看門狗定時(shí)器進(jìn)入看門狗模式程序計(jì)數(shù)器(PC)裝入復(fù)位向量地址0FFFEH,CPU從此地址開始執(zhí)行外圍模塊被初始化,其寄存器的值為默認(rèn)值(參考相關(guān)數(shù)據(jù)手冊(cè))軟件初始化工作系統(tǒng)復(fù)位后,用戶需使用軟件進(jìn)行必要的初始化工作:初始化堆棧指針SP,一般指向RAM頂部按實(shí)際應(yīng)用要求初始化看門狗按實(shí)際應(yīng)用要求配置片內(nèi)外設(shè)典型復(fù)位電路MSP430單片機(jī)典型復(fù)位電路有三種:(1)RST/MIN引腳上接100K上拉電阻;(2)在(1)的基礎(chǔ)上,再在
引腳處接0.1uf的電容,電容一端接地,可使復(fù)位更加可靠;(3)在(2)的基礎(chǔ)上,再在電阻上并接一個(gè)型號(hào)為IN4008的二極管,可以可靠的實(shí)現(xiàn)系統(tǒng)斷電后立即上電。MSP430有1種活動(dòng)模式(AM)和5種低功耗模式(LPM0、LPM1、LPM2、LPM3和LPM4),而不同的工作模式是通過設(shè)置狀態(tài)寄存器SR的SCG1,SCG0,CPUOFF,OSCOFF等位來設(shè)置的。模式控制位CPU狀態(tài)振蕩器及時(shí)鐘狀態(tài)AMSCG1=0SCG01=0OscOFF=0CPUOFF=0CPU、MCLK、SMCLK、ACLK均處于活動(dòng)狀態(tài)LPM0SCG1=0SCG0=0OscOFF=0CPUOFF=1CPU、MCLK禁止,SMCLK、ACLK活動(dòng)LPM1SCG1=0SCG0=1OscOFF=0CPUOFF=1CPU禁止,如果DCO未用做MCLK或SMCLK,直流發(fā)生器被禁止,否則仍保持工作;SMCLK、ACLK活動(dòng);LPM2SCG1=1SCG0=0OscOFF=0CPUOFF=1CPU、MCLK、SMCLK、DCO禁止;如果DCO未用做MCLK或SMCLK,則自動(dòng)禁止;直流發(fā)生器保持工作;ACLK活動(dòng);LPM3SCG1=1SCG0=1OscOFF=0CPUOFF=1CPU、MCLK、SMCLK、DCO禁止;直流發(fā)生器被禁止;ACLK活動(dòng);LPM4SCG1=1SCG0=1OscOFF=1CPUOFF=1CPU和所有的時(shí)鐘被禁止2.模式及功耗在各個(gè)模式下,MSP430單片機(jī)功率消耗與工作模式、供電電壓、振蕩頻率等有關(guān),圖2.7給出了在1MHz振蕩頻率下,不同供電電壓下各模式功耗情況。2.4MSP430存儲(chǔ)器結(jié)構(gòu)與FLASH操作
MSP430系列的存儲(chǔ)空間采用“馮-諾依曼”結(jié)構(gòu),一共64KB空間,ROM、RAM在同一地址空間,使用一組地址數(shù)據(jù)總線,空間包括:程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器、I/O口、特殊功能寄存器SFR、外圍模塊等。1.FLASH/ROMFLASH/ROM的起始地址取決于單片機(jī)FLASH/ROM的大小,從而不盡相同,但其終止地址都為0FFFFH。Flash可用于存儲(chǔ)代碼或者數(shù)據(jù),用戶還可把重要的字節(jié)或字表格存儲(chǔ)在Flash中,且用前無需將其復(fù)制到RAM區(qū)。中斷向量映射于Flash/ROM地址的最高16個(gè)字中,優(yōu)先級(jí)最高的中斷向量位于Flash/ROM地址空間的最高位置(0FFFEH)。2.RAMRAM的起始地址為0200H。RAM的結(jié)束地址取決于單片機(jī)RAM的大小。RAM可用于存放程序代碼或者數(shù)據(jù)。
3.片內(nèi)外設(shè)模塊外部設(shè)備模塊被映射于地址空間之中。0100-01FFH為16位外部設(shè)備而保留。訪問此模塊應(yīng)該使用字指令。如果使用了字節(jié)指令,則只有偶地址訪問設(shè)備被允許,高字節(jié)位總是全部為0。010-0FFH為8位的外部設(shè)備而保留。訪問此模塊是可使用字節(jié)指令,如果用字指令讀取字節(jié)模塊,將導(dǎo)致高8位產(chǎn)生不可預(yù)見的數(shù)據(jù);如果用字指令去寫8位設(shè)備寄存器,則僅僅低8位被寫入到設(shè)備寄存器中,而高8位的數(shù)據(jù)將會(huì)被忽略。
4.特殊功能寄存器一些片上外設(shè)的功能需要用特殊功能寄存器(SFR)設(shè)置。SFR位于地址空間的低16字節(jié)中,以字節(jié)的方式組織起來的。SFR只允許被字節(jié)指令所訪問。關(guān)于各個(gè)位數(shù)據(jù)的具體應(yīng)用還請(qǐng)參照相關(guān)數(shù)據(jù)手冊(cè)。2.4.2FLASH操作MSP430F16X單片機(jī)有嵌入式FLASH存儲(chǔ)器,是電可擦除的可編程存儲(chǔ)器,可以按位、字節(jié)和字訪問,并且可進(jìn)行編程和擦除,其主要特點(diǎn)有:?
可進(jìn)行位、字節(jié)和字編程操作;?產(chǎn)生內(nèi)部編程電壓;?超低功耗操作;?可通過JTAG、BSL和ISP編程;?保密熔絲燒斷后不能再用JTAG進(jìn)行任何訪問;?1.8~3.6V工作電壓,2.7~3.6V編程電壓;?擦除/編程次數(shù)可達(dá)10萬次,數(shù)據(jù)保持時(shí)間從10年到100年不等;?60KB空間編程時(shí)間小于5秒;?支持段擦除和多段模塊擦除。時(shí)序發(fā)生器的讀/寫頻率f(FTG)為257kHz~476kHz,發(fā)生器時(shí)鐘來自ACLK、MCLK和SMCLK,經(jīng)過分頻器處理后得到適合的時(shí)鐘,產(chǎn)生fx信號(hào),即f(FTG)信號(hào),是時(shí)序發(fā)生器的真正時(shí)鐘源。時(shí)序發(fā)生器產(chǎn)生的信號(hào)包括:FLASH存儲(chǔ)器陣列地址鎖存和數(shù)據(jù)鎖存信號(hào)、編程電壓發(fā)生器所需信號(hào)等。如圖,BUSY信號(hào)表示鎖存器狀態(tài),WAIT信號(hào)表示FLASH操作的狀態(tài),EMEX位可實(shí)現(xiàn)FLASH操作的緊急退出。
時(shí)序發(fā)生器FLASH存儲(chǔ)結(jié)構(gòu)FLASH存儲(chǔ)器可分為主存儲(chǔ)器和信息存儲(chǔ)器兩部分,兩者在操作上沒有區(qū)別,程序代碼和數(shù)據(jù)可以存儲(chǔ)在任意一部分。兩者的主要區(qū)別是段大小和物理地址的不同。主存儲(chǔ)器有兩個(gè)或更多的512字節(jié)的段,信息存儲(chǔ)器有兩個(gè)128字節(jié)的段FLASH操作1.寄存器介紹FLASH編程、擦除等操作首先要對(duì)3個(gè)控制寄存器(FCTL1、FCTL2和FCLT3)進(jìn)行設(shè)置,為了防止編程和擦除周期出現(xiàn)錯(cuò)誤,使用安全鍵值,錯(cuò)誤的口令將產(chǎn)生非屏蔽中斷請(qǐng)求。安全鍵值位于每個(gè)控制字的高字節(jié),讀時(shí)為96H,寫時(shí)為A5H。(1)FCTL1控制寄存器FCTL1,16位寄存器,地址0128H,該寄存器定義了FLASH模塊的擦除和編程操作的控制位。各位定義如下:15…876543210安全鍵值BLKWRTWRTReservedReservedReservedMERASMRASEReservedrw-0rw-0r0r0r0rw-0rw-0r0r0Bit15-8安全鍵值該字段讀出的內(nèi)容總是96H,寫入時(shí)必須為A5H,否則會(huì)引起PUC復(fù)位。Bit7BLKWRT塊寫模式位。如果有較多的連續(xù)數(shù)據(jù)要編程到某一段或某幾段,則可選擇這種方式,這樣可以縮短編程時(shí)間。當(dāng)EXEX置位時(shí),BLKWRT自動(dòng)復(fù)位。在一段程序?qū)懭胪戤呍倬幊唐渌螘r(shí),需對(duì)該位先復(fù)位再置位,在下一段指令執(zhí)行前WAIT位應(yīng)為1。0:塊寫模式關(guān)閉;1:塊寫模式開啟。Bit6WRT
寫模式使能位。
0:寫模式關(guān)閉。為0時(shí)對(duì)FLASH寫操作,非法訪問,ACCVIFG位置位。1:寫模式開啟。Bit2MERAS
主存控制擦除位。0:不擦除。1:主存全擦除,對(duì)主存空寫時(shí)啟動(dòng)擦除操作,操作完成后MERAS自動(dòng)復(fù)位。Bit1ERASE
擦除一段控制位。0:不擦除。1:擦除一段。由空寫指令帶入段號(hào)來指定擦除哪一段,操作完成自動(dòng)復(fù)位。擦寫操作關(guān)系表BLKWRTWRT寫入操作MERASERASE擦除操作X0寫模式關(guān)閉00不擦除01字節(jié)/字寫入01只擦除單個(gè)段11塊寫入10擦除所有的主程序段
11擦除所有的主程序段和信息段FCTL2控制寄存器FCTL2,16位寄存器,地址012AH,該寄存器定義了FLASH模塊的擦除和編程操作所需要的時(shí)鐘。各位定義如下:15
…
8765
…
0安全鍵值FSSELxFNx
Bit15-8安全鍵值該字段讀出的內(nèi)容總是96H,寫入時(shí)必須為A5H,否則會(huì)引起PUC復(fù)位。Bits7-6
FSSELx該兩位用來定義FLASH模塊控制器時(shí)鐘源的選擇。復(fù)位值01。
00ACLK;
10SMCLK;
01MCLK;
11SMCLK;Bits5-0
FNx此6位定義了時(shí)鐘分頻系數(shù)。分頻系數(shù)為FNx的值加1,當(dāng)FNx=00H,則分頻系數(shù)為1。
rw-0rw-1
rw-0FCTL3控制寄存器FCLT3,16位寄存器,地址012CH,該寄存器用于控制FLASH存儲(chǔ)器操作,保存相應(yīng)的狀態(tài)標(biāo)志和錯(cuò)誤條件。其各位定義如下:15…87654321
0安全鍵值ReservedReservedEMEXLOCKWAITACCVIFGKEYVBUSYr0r0rw-0
rw-1
r-1
rw-0
rw-(0)
rw-(0)在PUC期間,其控制位置位或者復(fù)位WAIT,但在POR期間KEYV被復(fù)位。Bit15-8安全鍵值該字段讀出的內(nèi)容總是96H,寫入時(shí)必須為A5H,否則會(huì)引起PUC復(fù)位。
Bit5EMEX
緊急退出位。FLASH操作發(fā)生錯(cuò)誤時(shí)置位該位緊急退出操作。
0:無緊急退出
1:緊急退出Bit4LOCK鎖定位??刂剖欠駥?duì)FLASH存儲(chǔ)器加鎖。在字節(jié)/字寫入或擦除期間,置位該位,使操作正常結(jié)束。在塊編程模式,若BLKWRT=WAIT=1,置位LOCK,則BLKWRT和WAIT都將復(fù)位,塊編程模式結(jié)束。如果在塊編程模式中發(fā)生非法訪問,則ACCVIFG和LOCK將置位。0:不加鎖,允許對(duì)FLASH操作
1:加鎖,禁止對(duì)FLASH操作Bit3WAIT
等待指示位。該位指示FLASH正在進(jìn)行寫操作,該位為只讀。0:FLASH正在操作,不能進(jìn)行下字節(jié)/字寫操作。
1:FLASH完成當(dāng)前操作,可以進(jìn)行下一字節(jié)/字寫操作。Bit2ACCVIFG
非法訪問中斷標(biāo)志位。該位只能軟件清零。
0:沒有對(duì)FLASH存儲(chǔ)器的非法訪問中斷
1:有對(duì)FLASH存儲(chǔ)器的非法訪問中斷Bit1KEYV安全鍵值出錯(cuò)標(biāo)志位。
0:安全鍵值正確;
1:安全鍵值錯(cuò)誤Bit0BUSY忙標(biāo)志位。該位表示FLASH時(shí)序發(fā)生器當(dāng)前狀態(tài),F(xiàn)LASH操作啟動(dòng)時(shí)該位自動(dòng)置1,操作完成后自動(dòng)復(fù)位。用戶在FLASH操作之前要檢查該位。0:不忙;1:忙IE1寄存器IE1寄存器為8位寄存器,中斷允許寄存器。與FLASH操作有關(guān)的位只有第5位ACCIE,該位是FLASH非法訪問中斷允許位。當(dāng)該位為1時(shí),中斷允許;當(dāng)該位為0時(shí),中斷禁止。76543210
ACCVIE
rw-0擦除周期
字節(jié)/字節(jié)寫入周期塊寫入時(shí)間周期注:1.單字節(jié)/字寫入可以從Flash或者RAM發(fā)起,二者在操作、功耗上都有所區(qū)別:從FLASH發(fā)起用戶不需檢測(cè)BUSY位,從RAM發(fā)起用戶需要要判斷BUSY位;2.塊寫入模式只能從RAM發(fā)起,而不能從FLASH發(fā)起。FLASH存儲(chǔ)器塊寫入:voidflash_write_block(char*ptr,char*from,intlen){_DINT();while(FCTL3&BUSY);FCTL3=FWKEY;//Lock=0開鎖FCTL1=FWKEY+BLKWRT+WRT;//使能塊寫入模式while(len){
*ptr++=*from++;//向flash寫入數(shù)據(jù)len--;while(!(FCTL3&WAIT));
//判斷WAIT信號(hào),為1可進(jìn)入下一字節(jié)寫入}FCTL1=FWKEY;//BLKWRT清0while(FCTL3&BUSY);FCTL3=FWKEY+LOCK;//置位LOCK_EINT();}2.5MSP430的基礎(chǔ)時(shí)鐘模塊MSP430基礎(chǔ)時(shí)鐘模塊與其低功耗相匹配,用戶可以利用三種時(shí)鐘信號(hào),找到功能實(shí)現(xiàn)和低功耗的平衡?;A(chǔ)時(shí)鐘模塊無需外部器件,利用一個(gè)外部電阻、一個(gè)或兩個(gè)外部晶振或者諧振器,在軟件的配置控制下,為系統(tǒng)提供時(shí)鐘信號(hào)。MSP430基本時(shí)鐘模塊包含兩個(gè)或三個(gè)時(shí)鐘源:(1)LFXT1CLK:低頻/高頻振蕩器。可外接32768Hz的時(shí)鐘芯片,或者450kHz~8MHz的標(biāo)準(zhǔn)晶體或諧振器;(2)XT2CLK:高頻振蕩器。外接450kHz~8MHz的標(biāo)準(zhǔn)晶體、諧振器和外部時(shí)鐘源。較常用的晶體振蕩器是8MHZ;(3)DCOCLK:內(nèi)部數(shù)控RC振蕩器。注:MSP430系列單片機(jī)中的型號(hào)不同,時(shí)鐘模塊也有所不同,但這些模塊產(chǎn)生出來的結(jié)果是相同的。如MSP430x20xxLFXT1不支持高頻模式,沒有XT2,不支持晶體振蕩器;MSP430x21xx沒有內(nèi)部低功耗/低頻振蕩器,沒有XT2,不支持晶體振蕩器;在MSP430F13、14中是有XT2振蕩器的,而MSP430F11X,F(xiàn)11X1中是用LFXT1CLK來代替XT2CLK時(shí)鐘信號(hào)的.在時(shí)鐘模塊中有3個(gè)(對(duì)于F13,F(xiàn)14)時(shí)鐘信號(hào)源(或2個(gè)時(shí)鐘信號(hào)源,對(duì)于F11X、F11X1)。MSP430單片機(jī)時(shí)鐘模塊有3個(gè)時(shí)鐘信號(hào)輸出,可滿足內(nèi)部電路的不同需要:(1)ACLK:輔助時(shí)鐘信號(hào)。ACLK是從FLXT1CLK信號(hào)經(jīng)1/2/4/8(由BCSCTL1寄存器設(shè)置DIVA相應(yīng)位設(shè)置)分頻后得到。ACLK可用于提供CPU外圍功能模塊作時(shí)鐘信號(hào)使用。(2)MCLK:主時(shí)鐘信號(hào)。MCLK的振蕩源可由軟件配置選擇來自LFXT1CLK、XT2CLK(部分型號(hào)有)或DCOCLK。MCLK經(jīng)1/2/4/8分頻(軟件設(shè)置)后給CPU或系統(tǒng)提供時(shí)鐘信號(hào)。(3)SMCLK:子系統(tǒng)時(shí)鐘信號(hào)。SMCLK的振蕩源可由軟件配置選擇來自LFXT1CLK、XT2CLK(部分型號(hào)有)或DCOCLK。SMCLK經(jīng)1/2/4/8分頻后(軟件設(shè)置)給各獨(dú)立外設(shè)模塊提供時(shí)鐘信號(hào)。當(dāng)處理器發(fā)生PUC復(fù)位后,MCLK和SMCLK的振蕩源來自DCOCLK(默認(rèn)值為800kHz),ACLK振蕩源來自LFXT1(處于低頻模式)。設(shè)置狀態(tài)寄存器SR的SCG0,SCG1,OSCOFF和CPUOFF位,可以設(shè)置CPU的操作模式,使能或關(guān)斷部分基礎(chǔ)時(shí)鐘模塊?;A(chǔ)時(shí)鐘模塊可以在程序運(yùn)行的任何時(shí)候用軟件進(jìn)行配置。2.5.1.1低頻振蕩器LFXT1低頻振蕩器LFXT1是MSP430各系列單片機(jī)所必有的,在使用32.768KHz外部時(shí)鐘晶振并處于低頻LF模式時(shí)(XTS=0),電流消耗非常小。2.5.1.2XT2CLK高頻振蕩器MSP430部分器件(X13X、X14X、X15X、X16X、X43X、X44等)有高頻振蕩器XT2。XT2為XT2CLK提供時(shí)鐘源,特性與XT1在HF模式下相同。MSP430外接高頻振蕩器XT2的頻率為450kHz~8MHz。系統(tǒng)頻率和系統(tǒng)工作電壓關(guān)系緊密,二者關(guān)系如圖。2.5.2時(shí)鐘模塊的寄存器DCO.2DCO.1DCO.0MOD.4MOD.3MOD.2MOD.1MOD.0DCOCTL寄存器DCOCTL寄存器各位定義如下:6543210Bit7~6DCOx
定義8種頻率之一,可分段調(diào)節(jié)DCOCLK頻率,相鄰兩種頻率相差10%。Bit4~0MODx
定義在DCOx對(duì)應(yīng)的頻率和DCOx+1的對(duì)應(yīng)頻率之間調(diào)整(細(xì)調(diào))。
MODx負(fù)責(zé)混合兩個(gè)DCO頻率fDCO
和fDCO+1之間產(chǎn)生一個(gè)有效的頻率并擴(kuò)展時(shí)鐘驅(qū)動(dòng)能力,減少電磁干擾。XT2OFFXTSDIVA.1DIVA.0XT5VRsel.2Rsel.1Rsel.0BCSCTL1寄存器BCSCTL1是一個(gè)8位的基本時(shí)鐘系統(tǒng)控制寄存器1,該寄存器的位分配如圖下。6543210Bit7XT2OFF控制XT2振蕩器的開啟與關(guān)閉。
0開啟
1關(guān)閉(默認(rèn)為關(guān)閉)Bit6XTS控制LFXT1工作模式,選擇須結(jié)合實(shí)際晶體振蕩器的連接情況。0LFTX1工作在低頻模式(默認(rèn))1LFTX1工作在高頻模式(必須連接相應(yīng)的高頻時(shí)鐘源)Bit5~4DIVA.x控制ACLK分頻00不分頻(默認(rèn))012分頻104分頻118分頻Bit3XT5V此位設(shè)置為0。Bit2~0RSELx控制某個(gè)內(nèi)部電阻以決定標(biāo)稱頻率000選擇最低的標(biāo)稱頻率
…
111選擇最高的標(biāo)稱頻率SELM.1SEML.0DIVM.1DIVM.0SELSDIVS.1DIVS.0DCORBCSCTL2寄存器6543210Bit7~6SELMx
選擇MCLK時(shí)鐘源。
00時(shí)鐘源為DCOCLK(默認(rèn))
01時(shí)鐘源為DCOCLK10時(shí)鐘源為L(zhǎng)FXT1CLK(對(duì)于MSP430F11/12X),時(shí)鐘源為XT2CLK(對(duì)于MSP430F13/14/15/16X)
11時(shí)鐘源為L(zhǎng)FXTICLKBit5~4DIVMx
選擇MCLK分頻。
001分頻
012分頻
104分頻
118分頻Bit3SELS選擇SMCLK時(shí)鐘源。0時(shí)鐘源為DCOCLK(默認(rèn))
1時(shí)鐘源為L(zhǎng)FXT1CLK(對(duì)于MSP430F11/12X),時(shí)鐘源為XT2CLK(對(duì)于MSP430F13/14/15/16X)Bit2~1DIVSx選擇SMCLK分頻001分頻012分頻104分頻118分頻Bit0DCOR選擇DCO電阻0選擇內(nèi)部電阻1選擇外部電阻
OFIE
IE1寄存器IE1是一個(gè)8位的中斷使能寄存器,該寄存器各位定義如下。6543210rw-0OFIE:晶體出錯(cuò)中斷使能控制位。
0中斷不允許
1中斷使能
OFIFG
IFG1寄存器IFG1是一個(gè)8位的中斷標(biāo)準(zhǔn)寄存器,該寄存器各個(gè)位定義如下:76543210rw-1OFIFG:晶體出錯(cuò)中斷標(biāo)志。
0沒有中斷產(chǎn)生
1有中斷產(chǎn)生PUC復(fù)位后,DCOCLK為默認(rèn)MCLK時(shí)鐘信號(hào),根據(jù)實(shí)際需要可再設(shè)置。設(shè)置順序:(1)復(fù)位OSCOFF;(2)清除OFIFG;(3)延時(shí)等待t≧50us;(4)檢查OFIFG,若置位,重復(fù)(3)、(4)步驟,直到OFIFG=0;
設(shè)置MCLK取自XT2,SMCLK取自MCLK且八分頻。#include"msp430x16x.h"voidint_clk(){uchari;BCSCTL1&=~XT2OFF;//打開XT振蕩器BCSCTL2|=SELM1+SELS+DIVS_3;//MCLK8MandSMCLK1M
do{IFG1&=~OFIFG;//清除振蕩錯(cuò)誤標(biāo)志
for(i=0;i<100;i++) _NOP(); //延時(shí)等待
}while((IFG1&OFIFG)!=0); //如果標(biāo)志為1繼續(xù)循環(huán)等待IFG1&=~OFIFG;}MSP430中斷源很多,每個(gè)中斷源都有指定的優(yōu)先級(jí),離CPU越近的模塊,其優(yōu)先級(jí)越高。中斷優(yōu)先級(jí)決定了,當(dāng)多個(gè)中斷來臨時(shí),優(yōu)先級(jí)高的中斷先被響應(yīng)。MSP430中斷分為3種:
(1)系統(tǒng)復(fù)位(2)不可屏蔽中斷(3)可屏蔽中斷中斷嵌套多個(gè)中斷請(qǐng)求發(fā)生時(shí),CPU首先響應(yīng)最高優(yōu)先級(jí)中斷。中斷響應(yīng)后,自動(dòng)關(guān)閉總中斷(GIE復(fù)位),則不會(huì)響應(yīng)其它中斷。在中斷服務(wù)程序中打開總中斷,才可產(chǎn)生中斷嵌套。實(shí)現(xiàn)中斷嵌套需要注意以下幾點(diǎn):(1)多個(gè)中斷同時(shí)到來,按優(yōu)先級(jí)來執(zhí)行,即中斷優(yōu)先級(jí)只體現(xiàn)在多個(gè)中斷同時(shí)到來時(shí),高優(yōu)先級(jí)先響應(yīng);(2)對(duì)于單源中斷,只要響應(yīng)中斷,系統(tǒng)硬件自動(dòng)清中斷標(biāo)志位;對(duì)于多中斷源的標(biāo)志位保持,需軟件復(fù)位(對(duì)于定時(shí)器的比較/捕獲中斷,只要訪問TAIV/TBIV,標(biāo)志位被自動(dòng)清除)。中斷向量和特殊功能寄存器中斷源中斷標(biāo)志系統(tǒng)中斷字地址優(yōu)先級(jí)上電、外部復(fù)位、看門狗、FLASHWDTIFG,KEYV①RESET0FFFEH15NMI、振蕩器錯(cuò)誤、Flash非法訪問NMIIFG①③,OFIFG①③,ACCVIFG①③不可屏蔽0FFFCH14Timer_B7TBCCR0CCFIG②可屏蔽0FFFAH13Timer_B7TBCCR1~TBCCRC6CCFIGx,TBIFG①②可屏蔽OFFF8H12比較器ACAIFG可屏蔽0FFF6H11看門狗定時(shí)器WDTIFG可屏蔽0FFF4H10USART0接收URXIFG0可屏蔽0FFF2H9USART0發(fā)送/I2C發(fā)送/接收/其它UTXIFG0,I2CIFG可屏蔽0FFF0H8ADC12ADC12IFG①②可屏蔽0FFEEH7TIMER_A3TACCR0CCFIG②可屏蔽0FFECH6TIMER_A3TACCR1~TACCRC2CCFIGx,TAIFG①②可屏蔽0FFEAH5I/O口P1(8位標(biāo)志)P1IFG.0~P1IFG.7①②可屏蔽0FFE8H4USART1接收URXIFG1
0FFE6H3USART1發(fā)送UTXIFG1
0FFE4H2I/OP2(8位標(biāo)志)P2IFG.0~P2IFG.7①②可屏蔽0FFE2H1DAC12,DMADAC12_0FIG,DAC12_1FIG,DMA0IFG,DMA1IFG,DMA2IFG①②可屏蔽0FFE0H0最低UTXIE02URXIE0ACCVIENMIIE
OFIEWDTIE相關(guān)寄存器與中斷相關(guān)的SFR有以下幾種:(1)中斷使能寄存器1中斷使能寄存器1,8位寄存器,地址00H。使能某些模塊中斷。分配如下:76543210rw-0rw-0rw-0
rw-0
rw-0
rw-0Bit7UTXIE0 USART0:UART和SPI發(fā)送中斷使能信號(hào)。Bit6URXIE0 USART0:UART和SPI接收中斷使能信號(hào)。Bit5ACCVIE Flash訪問錯(cuò)誤中斷使能信號(hào)。Bit4NMIIE 非屏蔽中斷使能信號(hào)。Bit1OFIE 振蕩器故障中斷使能信號(hào)。Bit0WDTIE 看門狗定時(shí)器中斷使能信號(hào)。
UTXIE1URXIE1
中斷使能寄存器2中斷使能寄存器2,8位寄存器,地址01H。使能某些模塊中斷。分配如下:76543210rw-0rw-0Bit5UTXIE1 USART1:UART和SPI發(fā)送中斷使能信號(hào)。Bit4URXIE1 USART1:UART和SPI接收中斷使能信號(hào)
UTXIFG0URXIFG0
NMIIFG
OFIFGWDTIFG中斷標(biāo)志寄存器1中斷標(biāo)志寄存器,8位寄存器,地址02H,指示相應(yīng)模塊中斷標(biāo)志位。分配如下:76543210rw-1rw-0rw-0
rw-0
rw-0其各位意義如下:Bit7UTXIFG0 USART0:UART和SPI發(fā)送標(biāo)志位。Bit6URXIFG0 USART0:UART和SPI接收標(biāo)志位。Bit4NMIIFG 通過引腳設(shè)置。Bit1OFIFG 振蕩器失標(biāo)志位。Bit0WDTIFG 溢出或安全值錯(cuò)誤;Vcc上電復(fù)位;
UTXIFG1URXIFG1
中斷標(biāo)志寄存器2中斷標(biāo)志寄存器2,8位寄存器,地址03H,指示相應(yīng)模塊的中斷標(biāo)志位,分配如下:76543210rw-1rw-0其各位意義如下:Bit5UTXIFG1 USART1:USART和SPI發(fā)送標(biāo)志位。Bit4URXIFG1 USART1:USART和SPI接收標(biāo)志位。UTXE0URXE0,USPIE0
中斷使能寄存器1中斷使能寄存器1,8位寄存器,地址04H,使能相應(yīng)模塊中斷,分配如下:
76543210rw-0rw-0其各位意義如下:Bit75UTXE0 USART0:USART發(fā)送使能。Bit6URXE0 USART0:USART接收使能。
USPIE0 USART0:SPI(同步外設(shè)接口)發(fā)送和接收使能。
UTXE1URXE1,USPIE1
中斷使能寄存器2中斷使能寄存器1,8位寄存器,地址05H,使能相應(yīng)模塊中斷,分配如下:76543210
rw-0rw-0=其各位意義如下:Bit5UTXE1 USART1:UART發(fā)送使能。Bit4URXE1 USART1:UART接收使能。USPIE1 USART1:SPI(同步外設(shè)接口)發(fā)送和接收使能。電源監(jiān)測(cè)模塊SVS2.7.1電源監(jiān)測(cè)模塊概述包括MSP430F16X在內(nèi)的部分MSP430單片機(jī)片內(nèi)具有電源電壓監(jiān)測(cè)模塊(SVS:supplyvoltagesupervisor),用來監(jiān)控AVCC供電電壓或外部電壓,它可以保證單片機(jī)工作于正常的電壓。當(dāng)AVCC或外部電壓降低到用戶選擇電壓值以下,SVS會(huì)產(chǎn)生一個(gè)POR復(fù)位信號(hào)或設(shè)置標(biāo)志。SVS的主要特點(diǎn):AVCC電壓監(jiān)測(cè);可選的POR復(fù)位信號(hào);軟件可設(shè)置SVS比較器輸出信號(hào);鎖存低電壓狀態(tài),并可由軟件處理;可選擇的14個(gè)門限電壓;可以監(jiān)控外部輸入電壓。VLDxPORONSVSONSVSOPSVSFG電源管理系統(tǒng)寄存器SVS只應(yīng)用于控制的寄存器SVSCTL,POR之后復(fù)位。該寄存器定義如下:76543210RW-0+RW-0+RW-0+RW-0+RW-0+R+R+RW-0+Bit4~7VLDx
電壓等級(jí)檢測(cè)。這些位開啟SVS和選擇SVS的工作門限電壓。這些參數(shù)需要參考數(shù)據(jù)手冊(cè),以下為SP430F169參數(shù)。0000 SVS關(guān)閉0001 1.9V0010 2.1V0011 2.2V0100 2.3V0101 2.4V0110 2.5V0111 2.65V1000 2.8V1001 2.9V1010 3.05V1011 3.2V1100 3.35V1101 3.5V1110 3.7V1111將SVSIN的外部輸入電壓與1.2V進(jìn)行比較Bit3PORONPOR開啟。該位使能SVSFG標(biāo)志位產(chǎn)生POR信號(hào)使設(shè)備復(fù)位。0 SVSFG不產(chǎn)生POR1 SVSFG產(chǎn)生PORBit2SVSONSVS開啟。該位反映SVS的工作狀態(tài),但是不開啟SVS。SVS的開啟是通過設(shè)置VLDx>0實(shí)現(xiàn)的,0 SVS狀態(tài)關(guān)閉1 SVS狀態(tài)開啟Bit1SVSOP SVS輸出。該位反映SVS比較器的輸出值。0 SVS比較器輸出為低1SVS比較器輸出為高Bit0SVSFG SVS標(biāo)志位。該位指示一個(gè)低電壓條件。低電壓條件產(chǎn)生后,SVSFG會(huì)保留到通過軟件復(fù)位。0 沒有低電壓條件出現(xiàn)1存在或者有低電壓條件產(chǎn)生設(shè)置SVS,使Vcc低于2.65V時(shí),產(chǎn)生POR復(fù)位。實(shí)例代碼如下。
#include<msp430x16x.h>voidmain(void){ WDTCTL=WDTPW+WDTHOLD; //關(guān)閉看門狗
SVSCTL=0x70+PORON;//2.65V,使能SVSPOR
for(;;)
……}第三講MSP430單片機(jī)C語言程序設(shè)計(jì)基礎(chǔ)
C語言支持大多數(shù)類型的單片機(jī)的程序開發(fā),有很強(qiáng)的通用性;
C語言為結(jié)構(gòu)式語言,既有高級(jí)語言的特點(diǎn),又有匯編語言的特點(diǎn),其編寫不依賴計(jì)算機(jī)硬件的應(yīng)用程序;C語言簡(jiǎn)潔緊湊、運(yùn)算符豐富、程序設(shè)計(jì)自由度大、可移植性好、開發(fā)迅捷,是單片機(jī)進(jìn)行開發(fā)的首選語言。C語言與匯編語言混合編程:C語言來構(gòu)建程序框架,用匯編程序作為子程序處理對(duì)效率要求高的相關(guān)應(yīng)用。
3.1IARC430語言基礎(chǔ)
適用于MSP430系列的C語言簡(jiǎn)稱C430,C430是在標(biāo)準(zhǔn)的C語言基礎(chǔ)上進(jìn)行了擴(kuò)展。
3.2IARC430編譯器支持的數(shù)據(jù)類型C430的數(shù)據(jù)類型可分為:基本類型指針類型枚舉類型兩種擴(kuò)展類型基本類型(1)整型表3.1IARC430編譯器支持的整型數(shù)據(jù)類型類型字節(jié)數(shù)據(jù)取值范圍說明基本型short2-32768~32767短整數(shù)int2-32768~32767整數(shù)long4-231~231-1長(zhǎng)整數(shù)標(biāo)識(shí)型unsignedshort20~65535無符號(hào)短整數(shù)unsignedint20~65535無符號(hào)整數(shù)unsignedlong40~232-1無符號(hào)長(zhǎng)整數(shù)
(2)實(shí)型
實(shí)數(shù)(realnumber)又稱浮點(diǎn)數(shù)(floating-pointnumber),指帶小數(shù)的數(shù)值型數(shù)據(jù),IARC430編譯器的浮點(diǎn)數(shù)為32位或者64位。表3.2IARC430編譯器支持的實(shí)型數(shù)據(jù)類型類型字節(jié)數(shù)據(jù)取值范圍說明float4±1.18E38~±3.39E+38浮點(diǎn)數(shù)double4±1.18E38~±3.39E+38雙精度浮點(diǎn)數(shù)longdouble4±1.18E38~±3.39E+38長(zhǎng)雙精度浮點(diǎn)數(shù)注意:所有的實(shí)型常量其類型均為雙精度型。
(3)字符型表3.3IARC430編譯器支持的字符型數(shù)據(jù)類型類型字節(jié)數(shù)據(jù)取值范圍說明unsignedchar10~255無符號(hào)字符char10~255等效于unsignedcharsignedchar1-128~127有符號(hào)字符2.指針類型
枚舉型是一個(gè)集合,集合中的元素(枚舉成員)是一些命名的整型常量,元素之間用逗號(hào),隔開;第一個(gè)枚舉成員的默認(rèn)值為整型的0,后續(xù)枚舉成員的值在前一個(gè)成員上加1;可以人為設(shè)定枚舉成員的值,從而自定義某個(gè)范圍內(nèi)的整數(shù);枚舉型是預(yù)處理指令#define的替代;類型定義以分號(hào);結(jié)束
枚舉的定義枚舉類型定義的一般形式為:
enum枚舉名{枚舉值表};
注:在枚舉值表中應(yīng)羅列出所有可用值。這些值也稱為枚舉元素。例:enumweekday{sun,mou,tue,wed,thu,fri,sat};
該枚舉名為weekday,枚舉值共有7個(gè),即一周中的七天。凡被說明為
weekday類型變量的取值只能是七天中的某一天。2.枚舉變量的說明:即先定義后說明,同時(shí)定義說明或直接說明。設(shè)有變量a,b,c被說明為上述的weekday,可采用下述任一種方式:enumweekday{sun,mou,tue,wed,thu,fri,sat};enumweekdaya,b,c;enumweekday{sun,mou,tue,wed,thu,fri,sat}a,b,c;enum{sun,mou,tue,wed,thu,fri,sat}a,b,c;main(){enumweekday{sun,mon,tue,wed,thu,fri,sat}a,b,c;a=sun;b=mon;c=tue;printf("%d,%d,%d",a,b,c);}
#ifdef__IAR_SYSTEMS_ASM__#defineDEFC(name,address)sfrbname=address;#defineDEFW(name,address)name=address;#endif/*__IAR_SYSTEMS_ASM__*/
表3.10IARC430編譯器支持的整型數(shù)據(jù)類型類型字節(jié)數(shù)據(jù)取值范圍說明sfrb100H~FFH字節(jié)類型的特殊功能寄存器或外圍模塊sfrw1100H~1FFH字類型的特殊功能寄存器或外圍模塊unsignedchar10~255無符號(hào)字符char10~255等效于unsignedcharsignedchar1-128~127有符號(hào)字符short2-32768~32767短整數(shù)int2-32768~32767整數(shù)unsignedshort20~65535無符號(hào)短整數(shù)unsignedint20~65535無符號(hào)整數(shù)long4-231~231-1長(zhǎng)整數(shù)unsignedlong40~232-1無符號(hào)長(zhǎng)整數(shù)pointer20000H~0FFFFH指針enum1~4枚舉
Switch(I){Case0: …;
break;Case1: …; break;…break;Default: …;
break;}(2)Switch語句注意:switch語句執(zhí)行完某一個(gè)分支時(shí)一定要加break,意為跳出switch語句,否則還會(huì)繼續(xù)執(zhí)行下面的分支。
Switch(I){Case0: …;
break;Case1: …; break;…break;Default: …;
break;}(2)Switch語句注意:switch語句執(zhí)行完某一個(gè)分支時(shí)一定要加break,意為跳出switch語句,否則還會(huì)繼續(xù)執(zhí)行下面的分支。
函數(shù)定義的一般形式:類型說明符函數(shù)名(參數(shù)列表)如:Inta=0,b=0,c;-全局變量intfunc(chara,charb);-定義函數(shù)Intmain(void)-主函數(shù){ c=func(a,b);-調(diào)用函數(shù)}Intfunc(chara,charb)-實(shí)現(xiàn)函數(shù){ intc;-局部變量 c=a+b;returnc;}
3.5C語言的運(yùn)算符算數(shù)運(yùn)算符: +、-、*、/; %-模運(yùn)算(如5%2=1); ++、--;邏輯運(yùn)算符: >、>=、<、<=、==、!=、&&、||、!、=;()-強(qiáng)制轉(zhuǎn)換,如(int)a—將a轉(zhuǎn)換為整型; …符號(hào)含義&按位與|按位或^按位異或~按位取反。一元運(yùn)算符<<左移操作。左邊移出的位舍去,右邊移入的位補(bǔ)0>>右移操作。右邊移出的位舍去,左邊移入的位對(duì)無符號(hào)數(shù)補(bǔ)0;對(duì)有符號(hào)數(shù)補(bǔ)符號(hào)位
位運(yùn)算符
位運(yùn)算(&,|,^,~,<<,>>)1&1=1,1&0=0;0&1=0;0&0=01|1=1,1|0=|;0|1=1;0|0=01^1=0,1^0=0;0^1=1;0^0=0~1=0,~0=1;0x8f&0x80=0x80;1000,1111&1000,0000=1000,00000x80|0x01=0x81;1000,0000|0000,0001=1000,00010x80^0x01=0x81;~0x01=0xfe;0x01>>1結(jié)果為0;0x01<<1結(jié)果為0x20
例:unsignedcharx=0x55;unsignedchary=0x37;unsignedcharz;z=x&y; 則 z=0x15z=x|y; 則 z=0x77z=x^y; 則 z=0x62z=~x; 則 z=0xAAz=x<<2; 則 z=0x54z=x>>1; 則 z=0x2A3.6程序設(shè)計(jì)的三種基本結(jié)構(gòu)
順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。 控制語句為:
If…else…、for、while、do…while、continue、break、switch…case、goto、return;
如:if(a>=b)c=a; elsec=b; for(I=0;I<100;I++){} while(a>0);do{}while(a>0);
3.7C語言中的IO操作
回顧:數(shù)組、指針、結(jié)構(gòu)、聯(lián)合intarray[5]={1,2,3,4,5};int*pointer;structdate
{
intmonth;
intyear;
}date1;
unionnum{
inta;
charb;
}num1;
Array[0]=date1.month;
Array[1]=num1.a;
3.8C語言上機(jī)過程
例.
用按鍵控制節(jié)日彩燈顯示的變化
方法1:端口2使用字節(jié)操作
方法2:
端口2使用位域方法第四講MSP430的IO結(jié)構(gòu)及應(yīng)用一、MSP430F169單片機(jī)內(nèi)部資源
MSP430系列單片機(jī)端口包括型號(hào)不同,包含的端口種類也不同,具體可見各數(shù)據(jù)手冊(cè)。MSP430F169單片機(jī)具有豐富的I/O資源,共有6組I/O端口,P1~P6,每組I/O端口可獨(dú)立編程且有8個(gè)引腳,但不提供位操作指令。每個(gè)I/O引腳可做普通輸入輸出引腳,也可做第二功能引腳。P1、P2口的每個(gè)引腳都可以單獨(dú)設(shè)置成中斷,且可設(shè)置成邊沿(上升沿、下降沿)觸發(fā)。掌握:I/O的工作模式、接口電路及應(yīng)用。
4.1I/O端口特點(diǎn)及結(jié)構(gòu)MSP430F169單片I/O機(jī)的I/O口主要有以下特點(diǎn):每個(gè)I/O端口可以獨(dú)立進(jìn)行位操作;每組I/O口輸入、輸出任意組合;P1、P2口支持中斷,其觸發(fā)邊沿可編程選擇;可編程選擇引腳的第二功能,以適合不同的I/O操作;豐富的寄存器資源:每個(gè)端口具有獨(dú)立的輸入和輸出控制寄存器;x=1、2,y=0~7x=3~6,y=0~7表4.1P1口引腳功能表PnSel.xPnDIR.x功能模塊方向控制PnOUT.x復(fù)用功能輸出PnIN.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年石家莊郵電職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫標(biāo)準(zhǔn)卷
- 2024年考上大學(xué)祝福語(49篇)
- 易錯(cuò)點(diǎn)03 中國古代史中的時(shí)間問題(一)-備戰(zhàn)2023年中考?xì)v史考試易錯(cuò)題(解析版)
- 2025高壓配電施工及設(shè)備供應(yīng)合同
- 2024年度四川省公共營養(yǎng)師之三級(jí)營養(yǎng)師綜合練習(xí)試卷B卷附答案
- 2024年度四川省公共營養(yǎng)師之二級(jí)營養(yǎng)師題庫檢測(cè)試卷B卷附答案
- 新型復(fù)合材料項(xiàng)目可行性研究報(bào)告模板及范文
- 2022-2027年中國止吐藥行業(yè)市場(chǎng)全景評(píng)估及發(fā)展戰(zhàn)略規(guī)劃報(bào)告
- 2024年中國高鐵行業(yè)數(shù)據(jù)報(bào)告(純數(shù)據(jù)版)
- 2025年環(huán)保塑膠項(xiàng)目可行性研究報(bào)告
- 2023年下半年網(wǎng)絡(luò)規(guī)劃師考試真題及答案-上午卷
- 氮?dú)饩彌_罐安全操作規(guī)程
- 金工釩鈦科技有限公司-年處理600萬噸低品位釩鈦磁鐵礦選礦項(xiàng)目可行性研究報(bào)告
- 國能神皖安慶發(fā)電有限責(zé)任公司廠內(nèi)108MW-108MWh儲(chǔ)能項(xiàng)目環(huán)境影響報(bào)告表
- 鐵路試驗(yàn)檢測(cè)技術(shù)
- 2023-2024人教版小學(xué)2二年級(jí)數(shù)學(xué)下冊(cè)(全冊(cè))教案【新教材】
- 小學(xué)奧數(shù)基礎(chǔ)教程(附練習(xí)題和答案)
- 九年級(jí)語文上學(xué)期教學(xué)工作總結(jié)
- TWSJD 002-2019 醫(yī)用清洗劑衛(wèi)生要求
- GB/T 7324-2010通用鋰基潤滑脂
- 杭州地鐵一號(hào)線工程某盾構(gòu)區(qū)間實(shí)施施工組織設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論