基础必备知识
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
如果对你有用的话,可不可以点个赞呢