MSP430單片機(jī)的通用IO接口_第1頁(yè)
MSP430單片機(jī)的通用IO接口_第2頁(yè)
MSP430單片機(jī)的通用IO接口_第3頁(yè)
MSP430單片機(jī)的通用IO接口_第4頁(yè)
MSP430單片機(jī)的通用IO接口_第5頁(yè)
已閱讀5頁(yè),還剩37頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第3章MSP430單片機(jī)的通用IO接口I/O口是單片機(jī)控制系統(tǒng)對(duì)外溝通的最基本部件,從基本的鍵盤、LED顯示到復(fù)雜的外設(shè)芯片等,都是通過(guò)I/O口的輸入、輸出操作來(lái)進(jìn)行讀取或控制的。為滿足單片機(jī)系統(tǒng)對(duì)外部設(shè)備控制的需要,MSP430提供了許多功能強(qiáng)大、使用方便靈活的輸入/輸出接口。為了減少芯片引腳的數(shù)量以降低芯片的成本,又提供更多功能的I/O口,現(xiàn)在許多單片機(jī)都采用了I/O口復(fù)用技術(shù),即端口可作為通用的I/O口使用,也可作為某個(gè)特殊功能的端口使用,用戶可根據(jù)系統(tǒng)的實(shí)際需要來(lái)定義使用。這樣就為設(shè)計(jì)開發(fā)提供了方便,簡(jiǎn)化了單片機(jī)系統(tǒng)的硬件設(shè)計(jì)工作。

MSP430F249單片機(jī)的每組I/O口都有4個(gè)控制寄存器,分別為方向控制寄存器PxDIR、輸入寄存器PxIN、輸出寄存器PxOUT和功能選擇寄存器PxSEL,此處,小寫字母“x”表示6組I/O口的數(shù)字序號(hào),x=1~6,即P1口的方向控制寄存器為P1DIR,P6口的方向控制寄存器為P6DIR。另外,P1和P2口還具有3個(gè)中斷寄存器,分別為中斷允許寄存器PxIE、中斷沿選擇寄存器PxIES和中斷標(biāo)志寄存器PxIFG,此處,x=1~2。Px口的每個(gè)引腳都可以單獨(dú)配置成輸入或者輸出方向的控制。需要注意的是:MSP430系列單片機(jī)端口輸出電流最大為6mA,當(dāng)需要驅(qū)動(dòng)比較大的負(fù)載的時(shí)候,需要利用三極管或者緩沖器來(lái)提高端口的驅(qū)動(dòng)能力。MSP430單片機(jī)的I/O口為雙向I/O口,因此在使用I/O口前首先要用方向選擇寄存器來(lái)設(shè)置每個(gè)I/O口的方向,在程序運(yùn)行中還可以動(dòng)態(tài)改變I/O口的方向。例如P1.0、P1.1、P1.2接有按鍵,P1.4、P1.5、P1.6接有LED,通用I/O接口應(yīng)用示例如圖3.1所示。P1DIR|=BIT4+BIT5+BIT6;//P1.4、P1.5、P1.6設(shè)為輸出P1DIR&=~(BIT0+BIT1+BIT2);//P1.0、P1.1、P1.2設(shè)為輸入(可省略)圖3.1通用I/O接口應(yīng)用示例圖P1OUT=BIT4+BIT5+BIT6;//P1.4~P1.6輸出高電平//二極管陽(yáng)極接高電平,二極管不發(fā)光if((P1IN&BIT0)==0)P1OUT|=BIT4;//P1.4輸出低電平點(diǎn)亮LED實(shí)例3.1彩燈控制

任務(wù)要求:利用MSP430F249單片機(jī)的P1口控制8個(gè)發(fā)光二極管LED1~LED8,P1口接入三個(gè)開關(guān)K1~K3,當(dāng)K1閉合時(shí),LED1和LED4閃爍,閃爍時(shí)間1s;當(dāng)K2閉合時(shí),LED2和LED5閃爍,閃爍時(shí)間2s;當(dāng)K3閉合時(shí),LED1~LED8循環(huán)閃爍,閃爍時(shí)間1s。分析說(shuō)明:發(fā)光二極管LED是一種半導(dǎo)體器件,當(dāng)兩端壓降大于1V時(shí),通過(guò)5mA左右的導(dǎo)通電流時(shí)即可發(fā)光。導(dǎo)通電流越大,亮度越高,但若電流過(guò)大,會(huì)燒毀二極管,一般我們控制在3~20mA。在這里,給發(fā)光二極管串聯(lián)一個(gè)電阻的目的就是為了限制通過(guò)發(fā)光二極管的電流不要太大,因此這個(gè)電阻又稱為“限流電阻”,通常取300~1000Ω。MSP430F249單片機(jī)的I/O口輸出電流最大為6mA,所有電流之和不超過(guò)48mA。且當(dāng)其I/O口輸出“0”時(shí),可以吸收最大40mA的電流。因此采用單片機(jī)I/O口控制發(fā)光二極管負(fù)極的設(shè)計(jì)。圖3.2實(shí)例3-1彩燈控制硬件電路圖#include<MSP430f249.h>#defineucharunsignedchar#defineuintunsignedint/*********軟件延遲ms子程序*********/voiddelayus(uintt){

uinti;

while(t--)

for(i=1300;i>0;i--);}voidmain(void){

uintmask=0x01;WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗

P1DIR=0xFF;//設(shè)置方向?yàn)檩敵?/p>

P1SEL=0x00;//設(shè)置為普通I/O口

P1OUT=0xFF;//LED輸出全部關(guān)閉

while(1){if((P2IN&0x07)==0x06)//K1開關(guān)閉合

{P1OUT^=(BIT0+BIT4);//LED0,LED4閃爍delayus(100);//延遲0.1s}elseif((P2IN&0x07)==0x05)//K2開關(guān)閉合

{P1OUT^=(BIT1+BIT5);//LED1,LED5閃爍

delayus(200);//延遲0.2s}elseif((P2IN&0x07)==0x03)//K3開關(guān)閉合

{P1OUT=~mask;//LED逐個(gè)點(diǎn)亮

delayus(100);//延遲0.1smask+=mask;//mask的值從0x01,0x02,0x04...0x80,對(duì)應(yīng)8個(gè)LED

if(mask==0x100)//恢復(fù)到0x01mask=0x01;}if((P2IN&0x07)==0x07)P1OUT=0xFF;//無(wú)鍵按下,關(guān)閉全部LED}}在output選file項(xiàng)中,勾選Overridedefault選項(xiàng),輸入文件名和類型,選擇other單選按鈕,在Output選項(xiàng)中可以有很多種不同的輸出格式選擇。我們可以選擇其中三種格式,一種是即intelstandard(intel公司標(biāo)準(zhǔn)),此時(shí)文件名應(yīng)該為flash.hex,這個(gè)輸出格式可以供proteus進(jìn)行仿真,但是不能源碼調(diào)試,或者作為單片機(jī)下載的二進(jìn)制文件;一種是即TI公司對(duì)MSP430系列單片機(jī)利用BSL方式進(jìn)行燒寫的一種格式,此時(shí)文件名應(yīng)該為flash.txt;還有一種是這是proteus對(duì)MSP430系列單片機(jī)實(shí)現(xiàn)源碼級(jí)調(diào)試一種文件格式,此時(shí)文件名應(yīng)該為flash.d90,為以后程序調(diào)試方便,可以選擇最后一種。其他的輸出文件格式就不一一介紹了。實(shí)例3-2花樣彩燈控制任務(wù)要求:利用MSP430F249單片機(jī)的P1口控制8個(gè)發(fā)光二極管LED1~LED8,點(diǎn)亮順序如表3-9所示,每個(gè)發(fā)光二極管點(diǎn)亮?xí)r間為0.5s。#include<MSP430f249.h>#defineucharunsignedchar#defineuintunsignedint#defineSHIFT_NUM8//移位循環(huán)次數(shù)8enumLED_MODE{LEFT_SHIFT_ON,//單個(gè)LED左移模式

RIGHT_SHIFT_ON,//單個(gè)LED右移模式

LEFT_SHIFT_OFF,//多個(gè)LED左移模式

RIGHT_SHIFT_OFF,//多個(gè)LED右移模式};enumLED_MODEmode;/*********軟件延遲ms子程序*********/voiddelayus(uintt){

uinti;

while(t--)

for(i=1300;i>0;i--);}voidmain(void){

uintmask=0x01;

uchari;

ucharmode=LEFT_SHIFT_ON;WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗

P1DIR=0xFF;//設(shè)置方向?yàn)檩敵?/p>

P1SEL=0x00;//設(shè)置為普通I/O口

P1OUT=0xFF;//LED輸出全部關(guān)閉

while(1){

for(i=0;i<SHIFT_NUM;i++){

switch(mode){caseLEFT_SHIFT_ON://單個(gè)LED左移模式

mask<<=1;

if(mask==0x100)//下一個(gè)狀態(tài)的初始值

mask=0x80;break;caseRIGHT_SHIFT_ON://單個(gè)LED右移模式

mask>>=1;

if(mask==0x00)//下一個(gè)狀態(tài)的初始值

mask=0x01;break;caseLEFT_SHIFT_OFF://多個(gè)LED左移模式

mask<<=1;mask|=1;

if(mask==0x1FF)//下一個(gè)狀態(tài)的初始值

mask=0x7F;break;caseRIGHT_SHIFT_OFF://多個(gè)LED右移模式

mask>>=1;mask&=~0x80;

if(mask==0x00)//下一個(gè)狀態(tài)的初始值

mask=0x01;break;}P1OUT=~mask;//LED輸出

delayus(100);//延遲0.1s}mode++;//顯示模式變換

mode%=4;}}實(shí)例3-3

帶按鍵選擇的花樣燈任務(wù)要求:利用MSP430F249單片機(jī)的P1口控制8個(gè)發(fā)光二極管LED1~LED8,發(fā)光二極管根據(jù)P0口的接入的開關(guān)K1~K5完成不同的顯示花樣變換。當(dāng)K1閉合時(shí),LED1和LED2點(diǎn)亮,延遲0.1s之后LED2和LED3點(diǎn)亮,最后是LED7和LED8點(diǎn)亮后重新開始;當(dāng)K2閉合時(shí),LED1~LED8相當(dāng)于8位二進(jìn)制數(shù),延遲0.1s之后加一并點(diǎn)亮對(duì)應(yīng)的LED;當(dāng)K3閉合時(shí),先LED1~LED4點(diǎn)亮,延遲0.1s后LED5~LED8點(diǎn)亮;隨后LED1~LED2、和LED5~LED6點(diǎn)亮,延遲0.1s后LED3~LED4、LED7~LED8逐次點(diǎn)亮,最后LED1、LED3、LED4、LED6點(diǎn)亮,延遲0.1s后LED2、LED4、LED6、LED8點(diǎn)亮后重新開始;當(dāng)K4閉合時(shí),顯示如圖3.xxxx,圖中0部分為發(fā)光的LED。即先點(diǎn)亮P1.0~P1.3引腳連接的4個(gè)LED,然后讓LED從右向左移動(dòng),當(dāng)P1.7引腳連接的LED點(diǎn)亮后,下一步重新點(diǎn)亮P1.0,依次循環(huán)。圖3.14實(shí)例3-3硬件電路圖#include<MSP430f249.h>#defineucharunsignedchar#defineuintunsignedint/*********軟件延遲ms子程序*********/voiddelayus(uintt){

uinti;

while(t--)

for(i=1300;i>0;i--);}voidmain(void){

uchari;

ucharval=0;ucharmask1=0x80;

ucharmask2=0x01;ucharmode=4;staticunsignedcharLEDs=0x0f;//靜態(tài)變量用于存儲(chǔ)LEDs發(fā)光狀態(tài)WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗

P1DIR=0xFF;//設(shè)置方向?yàn)檩敵?/p>

P1SEL=0x00;//設(shè)置為普通I/O口

P1OUT=0xFF;//LED輸出全部關(guān)閉

while(1){if((P2IN&0x1F)==0x01E)//K1開關(guān)閉合

{val=0x03;for(i=0;i<8;i++)//兩位LED同時(shí)移動(dòng)

{P1OUT=~val;val<<=1;delayus(1000);}}elseif((P2IN&0x1F)==0x1D)//K2開關(guān)閉合{P1OUT=~(val++);//LED按照二進(jìn)制數(shù)據(jù)累加顯示

delayus(1000);}elseif((P2IN&0x1F)==0x1B)//K3開關(guān)閉合

{switch(mode){case4://每四個(gè)一組LED間隔顯示

P1OUT=0xF0;delayus(1000);P1OUT=0x0F;delayus(1000);break;case2://每?jī)蓚€(gè)一組LED間隔顯示

P1OUT=0xCC;delayus(1000);P1OUT=0x33;delayus(1000);break;case1://每一個(gè)LED間隔顯示

P1OUT=0x55;delayus(1000);P1OUT=0xAA;delayus(1000);break;}mode/=2;

if(mode==0)mode=4;}elseif((P2IN&0x1F)==0x17)//K4開關(guān)閉合

{P1OUT=~(mask1|mask2);//兩個(gè)LED對(duì)向移動(dòng)顯示

mask1>>=1;mask2<<=1;delayus(1000);if((mask1|mask2)==0x00){mask1=0x80;mask2=0x01;}}elseif((P2IN&0x1F)==0x0F)//K5開關(guān)閉合

{P1OUT=LEDs;//四個(gè)LED循環(huán)顯示

delayus(1000);if(((LEDs&0x01)==0X01)&&(LEDs!=0x0F)){

LEDs=LEDs<<1;

LEDs+=1;}else

LEDs=LEDs<<1;

if(LEDs==0xE0)

LEDs+=1;}P1OUT=0xFF;//關(guān)閉全部LED}}實(shí)例3-416個(gè)花樣燈控制任務(wù)要求:利用MSP430F249單片機(jī)的P1和P4口控制16個(gè)發(fā)光二極管LED1~LED16,發(fā)光二極管有8種花樣顯示,顯示速度可調(diào),由P2口三個(gè)按鍵K1~K3控制,分別是模式按鍵、加速和減速按鍵。這三個(gè)按鍵和前面所用的開關(guān)不同,按鍵在按下后會(huì)在內(nèi)部彈性元件的作用下自動(dòng)彈起。模式按鍵按下一次,花樣顯示模式變換一次,按下8次后循環(huán)到第一種模式,加速和減速按鍵可以控制LED的閃爍速度。圖3.1616個(gè)LED花樣燈硬件電路圖3.3LED數(shù)碼管顯示顯示字符P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0共陰極段碼共陽(yáng)極段碼hgfedcba0001111113FHC010000011006F92010110115BA43010011114FB040110011066995011011016D926011111017D8270000011107F88011111117F809011011116F90A011101117788b011111007C83C0011100139C6d010111105EA1E011110017986F01110111718E實(shí)例3-5

單個(gè)數(shù)碼管顯示任務(wù)要求:使用MSP430F249單片機(jī)實(shí)現(xiàn)單個(gè)8段共陰極數(shù)碼管的顯示,依次循環(huán)顯示0~15的十六進(jìn)制數(shù),即“0~F”。#include<MSP430x24x.h>unsignedcharconstled_tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共陰數(shù)碼管編碼表0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voiddelayus(unsigned

intt){unsignedinti;

while(t--)

for(i=1330;i>0;i--);}voidmain(void){unsignedchari;WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗

P1DIR=0xFF;//設(shè)置方向?yàn)檩敵?/p>

P1OUT=0x00;while(1){

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論