Transcript GPIO
[1003] Lecture 2
GPIO
Lab1 利用LED進行GPIO的輸出
Lab2 利用Button搭配LED實作GPIO
的輸入
[1003] Lecture 2
Lab1 點亮D1 LED
[1003] Lecture 2
點亮D1 LED
[1003] Lecture 2
P5.5 是位於Port5上的5號bit
P5.7 P5.6 P5.5 P5.4 P5.3 P5.2 P5.1 P5.0
BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
P5DIR
P5OUT BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
點亮LED,是對外輸出訊號1
將GPIO 埠口設為輸出
使用PxDIR暫存器
將GPIO 埠口的輸出設為1
使用PxOUT
[1003] Lecture 2
PxDIR、PxOUT的型式為一組8bits的位
元組,形如:
00000000
由右至左為Px.0~Px.7
PxDIR中的bit 對應到各個埠口
bit = 0 為INPUT
bit = 1 為OUTPUT
PxOUT中的bit 對應到各埠口
即為各埠口的輸出
[1003] Lecture 2
使用標準位元定義
EX:
BIT0 = 0x0001;
BIT1 = 0x0002;
BIT2 = 0x0004;
BIT3 = 0x0008;
BIT4 = 0x0010;
BIT5 = 0x0020;
BIT6 = 0x0040;
BIT7 = 0x0080;
[1003] Lecture 2
使用標準位元定義
EX:
BIT5 = 0x0020;
0000 0000 0010 0000
20hex = 32dec = 100000bin
[1003] Lecture 2
因此,點亮D1的敘述,即為
P5DIR |= BIT5;
//PORT5 的bit5設為1表示輸出訊號
P5OUT|= BIT5;
//PORT5 的bit5設為1表示輸出訊號為1
[1003] Lecture 2
接著,若要使LED自行閃爍,我們該怎
麼做?
[1003] Lecture 2
接著,若要使LED自行閃爍,我們該怎
麼做?
使用XOR的邏輯
X
Y
X XOR Y
0
0
0
0
1
1
1
0
1
1
1
0
XOR的運算子是 “ ^ ”
[1003] Lecture 2
閃爍LED的語法為:
P5OUT^= BIT5
加入一些delay,使得結果更容易觀察
__delay_cycles(100000);
[1003] Lecture 2
程式碼1 點亮D1:
#include “msp430x54x.h”
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P5DIR|= BIT5;
P5OUT|= BIT5;
※禁止複製貼上以免發生格式錯誤。
[1003] Lecture 2
程式碼2 閃爍D1:
#include “msp430x54x.h”
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P5DIR|= BIT5;
P5OUT^= BIT5;
__delay_cycles(100000);
※禁止複製貼上以免發生格式錯誤。
[1003] Lecture 2
練習:
加入D2 LED。
撰寫一個程式,使得D2 和D1能夠交替閃
爍。
加分題:
加入D3 LED。
撰寫一個程式,使得D3能夠跟著D2閃爍。
[1003] Lecture 2
Lab2 GPIO 輸入
[1003] Lecture 2
線路圖
[1003] Lecture 2
線路圖
[1003] Lecture 2
GPIO 作為輸入時用到的暫存器
PxDIR
GPIO 介面方向;0為輸入,1為輸出。
PxREN
GPIO Resistor Enable;是否使用上拉/下拉電阻。
bit = 0 為不用;
bit = 1 為使用。
PxOUT
在使用GPIO 作為輸入且Resistor enabled的情況
下,PxOUT提供了選擇上拉/下拉電阻的功能。
bit = 0 為下拉電阻
bit = 1 為上拉電阻
[1003] Lecture 2
以第一個按鍵為例P2.0
GPIO作為輸入所以Direction 設為0
P2DIR &= ~BIT0;
接著啟用上拉/下拉電阻
P2REN|=BIT0;
由電路圖我們知道,button按下為0電位(GND),
放開為1電位,故我們上拉電阻。
P2DIR|=BIT0;
[1003] Lecture 2
我們將按鍵輸入的功能加入LED發光的程式
利用輪詢的方式,使得按鍵壓下是D2,放開是
D1
[1003] Lecture 2
程式碼:
#include “msp430x54x.h”
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P2DIR&=~BIT0;
P2REN|=BIT0;
P2OUT|=BIT0;
P5DIR|= BIT4+BIT5;
while(1)
{
if(BIT0&P2IN)
P5OUT = BIT5;
else
P5OUT=BIT4;
}
}
[1003] Lecture 2
練習:
加入Key2,分別以Key1 控制LED D1、
Key2 控制LED D2。
壓一下開始閃爍,再壓一下停止。
[1003] Lecture 2
完成後,找到專案裡面的source file,以附
檔形式寄到 [email protected],並在
郵件中註明姓名、系級與學號。