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

下載本文檔

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

文檔簡介

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

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

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

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逐個點亮

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

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

RIGHT_SHIFT_ON,//單個LED右移模式

LEFT_SHIFT_OFF,//多個LED左移模式

RIGHT_SHIFT_OFF,//多個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è)置方向為輸出

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

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

while(1){

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

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

mask<<=1;

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

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

mask>>=1;

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

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

mask<<=1;mask|=1;

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

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

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

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

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

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

mode%=4;}}實例3-3

帶按鍵選擇的花樣燈任務(wù)要求:利用MSP430F249單片機的P1口控制8個發(fā)光二極管LED1~LED8,發(fā)光二極管根據(jù)P0口的接入的開關(guān)K1~K5完成不同的顯示花樣變換。當(dāng)K1閉合時,LED1和LED2點亮,延遲0.1s之后LED2和LED3點亮,最后是LED7和LED8點亮后重新開始;當(dāng)K2閉合時,LED1~LED8相當(dāng)于8位二進(jìn)制數(shù),延遲0.1s之后加一并點亮對應(yīng)的LED;當(dāng)K3閉合時,先LED1~LED4點亮,延遲0.1s后LED5~LED8點亮;隨后LED1~LED2、和LED5~LED6點亮,延遲0.1s后LED3~LED4、LED7~LED8逐次點亮,最后LED1、LED3、LED4、LED6點亮,延遲0.1s后LED2、LED4、LED6、LED8點亮后重新開始;當(dāng)K4閉合時,顯示如圖3.xxxx,圖中0部分為發(fā)光的LED。即先點亮P1.0~P1.3引腳連接的4個LED,然后讓LED從右向左移動,當(dāng)P1.7引腳連接的LED點亮后,下一步重新點亮P1.0,依次循環(huán)。圖3.14實例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)變量用于存儲LEDs發(fā)光狀態(tài)WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗

P1DIR=0xFF;//設(shè)置方向為輸出

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同時移動

{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://每四個一組LED間隔顯示

P1OUT=0xF0;delayus(1000);P1OUT=0x0F;delayus(1000);break;case2://每兩個一組LED間隔顯示

P1OUT=0xCC;delayus(1000);P1OUT=0x33;delayus(1000);break;case1://每一個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);//兩個LED對向移動顯示

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

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

單個數(shù)碼管顯示任務(wù)要求:使用MSP430F249單片機實現(xiàn)單個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è)置方向為輸出

P1OUT=0x00;while(1){

溫馨提示

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

評論

0/150

提交評論