基礎必備知識
AW60有7個GPIO介面,分別是A、B、C、D、E、F、G,每個介面最多對應8個GPIO引腳,但對每個GPIO介面編程時,暫存器設定都要是8位,只是沒有引腳的位無效,用8位二進制數表示暫存器的值,8位二進制數從右向左依次表示為GPIO 0~7個 引腳,以0b開頭的數是二進制,0x開頭的數是十六進制(0b00001111=0x0f,0b11110000=0xf0,就是把二進制傳化為十六進制),用單片機實作什么功能其實就是對暫存器進行操作,
每個I/O(GPIO)管腳(引腳)的功能受5個暫存器的控制:
一、資料暫存器
(1)命名規則:PT+該埠(介面)的名稱+D
如:PTAD、PTBD、PTCD等
(2)設定每個引腳的輸出電平:1為高電平,0為低電平
如:PTAD=0b11111111 等價于 PTAD=0xff
(3)單獨對每一個引腳配置資料暫存器:PTxDn(x:介面;n:引腳)
如:PTAD0=1(設定A介面的0號引腳為高電平);PTBD3=0(設定B介面的3號引腳為低電平)
二、方向暫存器
(1)命名規則:PT+該埠(介面)的名稱+DD
如:PTADD、PTBDD、PTCDD等
(2)設定每個引腳是輸入還是輸出:1為輸出,0為輸入
如:PTADD=0b11111111 等價于 PTADD=0xff :設定A介面的8個引腳都是輸出;PTBDD=0b00001111(0x0f):設定B介面的0 ~ 3個引腳為輸出,4 ~ 7個引腳為輸入,
(3)單獨對每一個引腳配置方向暫存器:PTxDDn(x:介面;n:引腳)
如:PTADD0=1(設定A介面的0號引腳為輸出);PTBDD3=0(設定B介面的3號引腳為輸入)
三、輸出驅動能力(電流的高低)暫存器
(1)命名規則:PT+該埠(介面)的名稱+DS
如:PTADS、PTBDS、PTCDS等
(2)設定每個引腳的驅動能力:1為高驅動(接LED),0為低驅動(接IC)
如:PTADS=0b11111111 等價于 PTADS=0xff:設定A介面的8個引腳都是高驅動 ;PTBDS=0b00001111(0x0f):設定B介面的0 ~ 3個引腳為高驅動,4 ~ 7個引腳為低驅動,
(3)單獨對每一個引腳配置輸出驅動能力暫存器:PTxDSn(x:介面;n:引腳)
如:PTADS0=1(設定A介面的0號引腳為高驅動);PTBDS3=0(設定B介面的3號引腳為低驅動)
四、設定單片機內部輸入上拉暫存器
(1)命名規則:PT+該埠(介面)的名稱+PE
如:PTAPE、PTBPE、PTCPE等
(2)設定每個引腳為上拉輸入:1為允許內部輸入上拉,0為禁止內部輸入上拉(該引腳不設定為上拉輸入)
如:PTAPE=0b11111111 等價于 PTAPE=0xff:設定A介面的8個引腳都是上拉輸入 ;PTBPE=0b00001111(0x0f):設定B介面的0 ~ 3個引腳為上拉輸入,4 ~ 7個引腳不設定為上拉輸入,
(3)單獨對每一個引腳配置內部輸入上拉暫存器:PTxPEn(x:介面;n:引腳)
如:PTAPE0=1(設定A介面的0號引腳為上拉輸入);PTBPE3=0(不設定B介面的3號引腳為上拉輸入)
五、輸出擺率控制暫存器
(1)命名規則:PT+該埠(介面)的名稱+SE
如:PTASE、PTBSE、PTCSE等
(2)設定每個引腳為輸出擺率控制:1為允許輸出擺率控制,0為禁止輸出擺率控制(該引腳不設定為輸出擺率控制)
如:PTASE=0b11111111 等價于 PTASE=0xff:設定A介面的8個引腳為輸出擺率控制 ;PTBSE=0b00001111(0x0f):設定B介面的0 ~ 3個引腳為輸出擺率控制,4 ~ 7個引腳不設定為輸出擺率控制,
(3)單獨對每一個引腳配置輸出擺率控制暫存器:PTxSEn(x:介面;n:引腳)
如:PTASE0=1(設定A介面的0號引腳為輸出擺率控制);PTBSE3=0(不設定B介面的3號引腳為輸出擺率控制)
控制LED時只需要配置:資料暫存器、方向暫存器、輸出驅動能力(電流的高低)暫存器
用開關時只需要配置:方向暫存器、內部輸入上拉暫存器(外部有接上拉電阻時這個暫存器也不用配置);讀取開關狀態時用資料暫存器讀取
key = PTBD3 //讀取B介面3號引腳的值(1或0)
PS:用AW60點亮一個LED(LED其中一端接低電平,用B介面的5號引腳控制)
代碼如下
#include <hidef.h> //呼叫頭檔案
#include "derivative.h"
void GPIO_init(void); //子函式宣告
void main(void) //主函式
{
DisableInterrupts; //關閉中斷,本程式未用到中斷
SOPT_COPE=0; //關閉看門狗復位功能,避免程式復位
GPIO_init(); //引腳初始化
for(;;) //主程式主回圈
{
PTBD=0x20; //其中PTB5號引腳輸出高電平,燈亮
}
}
void GPIO_init(void) //子函式定義
{
PTBDD=0xff; //PTD設定為輸出
PTBDS=0x20; //初始化PTB5號引腳為高驅動
PTBD=0x00; //初始狀態PTB輸出低電平,燈滅
}
練習題:用一個開關控制一個LED的亮滅
1、開關按下LED亮
2、開關用上拉輸入接在C介面的6號引腳
3、LED其中一端接低電平,用A介面的4號引腳輸出高低電平控制LED
如果對你有用的話,可不可以點個贊呢
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/182905.html
標籤:其他
上一篇:廣度優先搜索練習之神奇的電梯
下一篇:在字串中提取首個整數并區分正負
