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

下載本文檔

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

文檔簡介

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

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和中斷標志寄存器PxIFG,此處,x=1~2。Px口的每個引腳都可以單獨配置成輸入或者輸出方向的控制。需要注意的是:MSP430系列單片機端口輸出電流最大為6mA,當需要驅動比較大的負載的時候,需要利用三極管或者緩沖器來提高端口的驅動能力。MSP430單片機的I/O口為雙向I/O口,因此在使用I/O口前首先要用方向選擇寄存器來設置每個I/O口的方向,在程序運行中還可以動態(tài)改變I/O口的方向。例如P1.0、P1.1、P1.2接有按鍵,P1.4、P1.5、P1.6接有LED,通用I/O接口應用示例如圖3.1所示。P1DIR|=BIT4+BIT5+BIT6;//P1.4、P1.5、P1.6設為輸出P1DIR&=~(BIT0+BIT1+BIT2);//P1.0、P1.1、P1.2設為輸入(可省略)圖3.1通用I/O接口應用示例圖P1OUT=BIT4+BIT5+BIT6;//P1.4~P1.6輸出高電平//二極管陽極接高電平,二極管不發(fā)光if((P1IN&BIT0)==0)P1OUT|=BIT4;//P1.4輸出低電平點亮LED實例3.1彩燈控制

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

P1DIR=0xFF;//設置方向為輸出

P1SEL=0x00;//設置為普通I/O口

P1OUT=0xFF;//LED輸出全部關閉

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

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

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

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

{P1OUT=~mask;//LED逐個點亮

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

if(mask==0x100)//恢復到0x01mask=0x01;}if((P2IN&0x07)==0x07)P1OUT=0xFF;//無鍵按下,關閉全部LED}}在output選file項中,勾選Overridedefault選項,輸入文件名和類型,選擇other單選按鈕,在Output選項中可以有很多種不同的輸出格式選擇。我們可以選擇其中三種格式,一種是即intelstandard(intel公司標準),此時文件名應該為flash.hex,這個輸出格式可以供proteus進行仿真,但是不能源碼調試,或者作為單片機下載的二進制文件;一種是即TI公司對MSP430系列單片機利用BSL方式進行燒寫的一種格式,此時文件名應該為flash.txt;還有一種是這是proteus對MSP430系列單片機實現(xiàn)源碼級調試一種文件格式,此時文件名應該為flash.d90,為以后程序調試方便,可以選擇最后一種。其他的輸出文件格式就不一一介紹了。實例3-2花樣彩燈控制任務要求:利用MSP430F249單片機的P1口控制8個發(fā)光二極管LED1~LED8,點亮順序如表3-9所示,每個發(fā)光二極管點亮時間為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;//關閉看門狗

P1DIR=0xFF;//設置方向為輸出

P1SEL=0x00;//設置為普通I/O口

P1OUT=0xFF;//LED輸出全部關閉

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

帶按鍵選擇的花樣燈任務要求:利用MSP430F249單片機的P1口控制8個發(fā)光二極管LED1~LED8,發(fā)光二極管根據(jù)P0口的接入的開關K1~K5完成不同的顯示花樣變換。當K1閉合時,LED1和LED2點亮,延遲0.1s之后LED2和LED3點亮,最后是LED7和LED8點亮后重新開始;當K2閉合時,LED1~LED8相當于8位二進制數(shù),延遲0.1s之后加一并點亮對應的LED;當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點亮后重新開始;當K4閉合時,顯示如圖3.xxxx,圖中0部分為發(fā)光的LED。即先點亮P1.0~P1.3引腳連接的4個LED,然后讓LED從右向左移動,當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;//關閉看門狗

P1DIR=0xFF;//設置方向為輸出

P1SEL=0x00;//設置為普通I/O口

P1OUT=0xFF;//LED輸出全部關閉

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

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

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

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

{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開關閉合

{P1OUT=~(mask1|mask2);//兩個LED對向移動顯示

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

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

單個數(shù)碼管顯示任務要求:使用MSP430F249單片機實現(xiàn)單個8段共陰極數(shù)碼管的顯示,依次循環(huán)顯示0~15的十六進制數(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;//關閉看門狗

P1DIR=0xFF;//設置方向為輸出

P1OUT=0x00;while(1){

溫馨提示

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

評論

0/150

提交評論