GPIO的配置及使用(MC9S08AW60)

发布者:不加糖的302最新更新时间:2021-10-14 来源: eefocus关键字:GPIO  配置  MC9S08AW60 手机看文章 扫描二维码
随时随地手机看文章

基础必备知识

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号引脚为输出摆率控制)


常用GPIO的配置

(1)控制LED时只需要配置:数据寄存器、方向寄存器、输出驱动能力(电流的高低)寄存器。


(2)用开关时只需要配置:方向寄存器、内部输入上拉寄存器(外部有接上拉电阻时这个寄存器也不用配置)。

读取开关状态时用数据寄存器读取,如下:


key =PTBD_PTBD3   //读取B接口3号引脚的值(1或0)


实例

一、用AW60点亮一个LED

LED负极接低电平,正极接B接口的5号引脚。


代码如下


#include           //调用头文件

#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;     //PTB设置为输出

PTBDS=0x20;     //初始化PTB5号引脚为高驱动

PTBD=0x00;       //初始状态PTB输出低电平,灯灭

}


二、用两个开关控制八个LED的亮灭

1、开关1按下八个LED同时亮灭,开关2按下四个LED同时亮灭,开关1、2都按下八个LED右流水灯,开关1、2都不按下八个LED左流水灯。

2、开关用上拉输入接在C接口的 0、1号引脚

3、八个LED正极都接+5V,负极接B接口的8个引脚。


代码如下


#include /* for EnableInterrupts macro */

#include "derivative.h" /* include peripheral declarations */


void Delay(uint Temp);  子函数声明


void main(void) 

{

  uchar b=0x01,c=0x80;

  EnableInterrupts; /* enable interrupts */

  SOPT_COPE=0;   //关闭看门狗复位功能,避免程序复位

  PTBDD=0xff;   //定义PTB八个引脚为输出

  PTBD=0xff;    //初始化PTB八个引脚输出高电平

  PTCDD=0xfc;  //定义PTC0和PTC0引脚为输入

  PTCPE=0x03;  //定义PTC0和PTC0引脚为上拉电阻

  for(;;)

  {

    __RESET_WATCHDOG(); /* feeds the dog */

  if(!PTCD_PTCD0&&PTCD_PTCD1)  //开关1按下

  {

  PTBD=0x00;   //8个LED一起亮

  Delay(1000);

  PTBD=0xff;   //8个LED一起灭

  Delay(1000);

  }

 

  if(PTCD_PTCD0&&!PTCD_PTCD1)  开关2按下

  {

  PTBD=0xf0;    //前4个LED一起亮,后4个LED一起灭

  Delay(1000);

  PTBD=0x0f;    //前4个LED一起灭,后4个LED一起亮

  Delay(1000);

  }

  if(!PTCD_PTCD0&&!PTCD_PTCD1)  //开关1、2都按下,右流水灯

  {

    PTBD=~b;

    Delay(1000);

    b=b<<1;

    if(b==0x00)

  b=0x01;

  }

  if(PTCD_PTCD0&&PTCD_PTCD1)  //开关1、2都不按下,左流水灯

  {

    PTBD=~c;

    Delay(1000);

    c=c>>1;

    if(c==0x00)

  c=0x80;

  }

  } 

}


void Delay(uint Temp)  //延时函数,单位是ms

{

uchar a,b;

for(;Temp>0;Temp--)

{

for(b=30;b>0;b--)

{

for(a=10;a>0;a--);

}

}

}


想了解键盘中断的配置及使用请看

https://blog.csdn.net/qq_45390365/article/details/109398444

关键字:GPIO  配置  MC9S08AW60 引用地址:GPIO的配置及使用(MC9S08AW60)

上一篇:mc9s08dz60 BootLoader基于bin文件
下一篇:飞思卡尔电机驱动

推荐阅读最新更新时间:2024-11-09 14:27

s3c2440上linux-2.6.28.7内核配置及Qtopia文件系统移植和搭建
一、linux-2.6.28.7内核配置过程 1,新编译好的内核下载到FLASH中,启动linux以后报错,说找不到rootfs入口,解决方法是内核编译选项中选中“file system- yaffs2 fs support”,以及 let yaffs to its ecc . 2,烧写好内核及文件系统后,发现无论怎么点击触摸屏,系统都没有反应,可是开发板自带的kernel烧上去后就没有问题,所以,判断问题还是出于内核配置的问题。解决办法是内核配置“device drivers- input device- (*)touchscreen interface并且(*)touchscreen event”, 以及“device
[单片机]
MSP432P401R学习:GPIO(输入、输出、中断)
开发环境搭建完成后,就可以开始学习MSP432401R的开发使用了。在开始学习之前最好将芯片手册、开发板手册、SDK手册下载好,想看的时候就可以随时打开来看,快速上手。CCS里的Resource Explorer也是比较方便的工具,把所有相关的文档、例程都整合在了一起,比较方便查看。 输出(OUTPUT) 和学习其他的单片机一样,就从点亮LED开始。MSP432P401R launchpad板子上自带了一个红色LED和一个RGB LED,分别接在P1.0和P2.0、P2.1、P2.2口,如果想单独使用这几个GPIO的话,可以将跳线帽拿掉,使之不与LED相连。 接下来就尝试用代码来点亮这几个LED。之前也在网上看过寄存器版的
[单片机]
MSP432P401R学习:<font color='red'>GPIO</font>(输入、输出、中断)
PIC中断配置相关总结
1.PIC单片机的中断系统图如下所示 图种的最右侧 到CPU的中断是指 产生CPU中断请求,CPU将对该中断执行对应响应操作,也就是保护现场和转跳到特定程序地址执行(中断服务函数)。根据系统图可得到一些结论: 1. GIE 为总中断使能位 2. PEIE为外设中断使能位 3. 一个中断源要让CPU产生响应,需要满足对应的使能位IE打开 并且 中断标志位IF为1(中断已满足) 4. 中断使能位IE 和 中断标志位IF的独立的,只要中断满足,对应IF就会置1,而不管是否中断使能 2. 中断响应操作流程 1.从第2点可以看出,将发生中断响应后,GIE位被清0了,说明此时再来中断,不会再次响应了,因为总开关被
[单片机]
PIC中断<font color='red'>配置</font>相关总结
[单片机框架][bsp层][cx32l003][bsp_uart] URAT串口配置和使用
本产品带有 2 个通用 UART 模块(UART0/1),支持半双工和全双工传输;支持 8bit、9bit 数据格式; 支持 Mode0/1/2/3 四种不同传输模式; UART0 的波特率可以由 TIM10 产生或者自动波特率发生器产 生,UART1 的波特率可以由 TIM11 产生或者自动波特率发生器产生;支持多机通讯模式;支持自动 地址识别;支持给定地址和广播地址。 通用 UART(UART0/1)只有一个时钟输入 PCLK, 寄存器配置逻辑和数据收发逻辑都工作在该时钟域。 工作模式 Mode 0(同步模式,半双工) 当工作在 Mode0 时,UART 工作在同步模式,其波特率为固定的 PCLK 时钟的 1/12。UAR
[单片机]
[单片机框架][bsp层][cx32l003][bsp_uart] URAT串口<font color='red'>配置</font>和使用
基于stm32单片机的通用定时器配置
stm32单片机的定时器资源相当丰富,它的定时器分为高级控制定时器、通用定时器和基本定时器,具体这些定时器资源在哪个系列的片子有就得看不同的片子的手册了。他们具体有什么区别,我也是刚接触这个,看他的数据手册介绍也是茫然,主要是刚开始摸,那些功能都没用到,反正用做定时作用的话哪种定时器都行。在这我就把我自己配置通用定时器的方法及心得简短做个总结,以防以后忘记了。我配置的是定时器2(TIM2)。 通用定时器的时钟可来自于外部或内部,选用默认即是采用内部的。通用定时器的时钟来源为APB1总线,所以首先,得将APB1外设时钟打开。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE)
[单片机]
STM32F1系列HAL库配置系统时钟
其实一开始对于时钟我也是知之甚少,在MSP432中我就一直忽视时钟配置,其实也是在STM32学习时落下的病根,现在趁有空补一下。 时钟简单讲解 对于时钟系统,在之前我写启动文件涉及到,其实,每个功能的实现都涉及到时钟。我们首先说明一下RCC RCC:复位和时钟控制 什么是复位,什么又是时钟?在STM32参考手册中文版我们可以看到 注意“除了时钟控制器的RCC_CSR寄存器中的复位标志位和备份区域中的寄存器(见图4)以外,系统复位将复位所有寄存器至它们的复位状态。”这句话告诉我们复位时,让寄存器(除了上述提及的CSR以及备份区域寄存器外)恢复至初始状态,也就是我们上电后寄存器的默认状态。 我们使用时也是在不断复位中使用的
[单片机]
STM32F1系列HAL库<font color='red'>配置</font>系统时钟
iPhone14系列配置参数解密:全系6G内存,Pro版才是真正迭代产品
近日,中国台湾集邦咨询在一份研究报告中称,由于iPhone 13系列持续热销,再加上iPhone SE3新机的助力,2022年一季度iPhone销量达到6000万台,同比表现优异,年增长率达到11.1%。其中包括蚕食了相当一部分华为空出的高端市场空间,以此弥补了因俄乌冲突造成的销量损失。 该研究报告还表示,今年下半年推出iPhone14系列同样包括四款新机,与此前不同的是,仅Pro版搭载了最新A16处理器。集邦咨询认为,这样做除了考虑到终端定价策略外,还可以突出iPhone14系列市场定位的差异性,有望带来更低的起售价格,以吸引更多的消费群体。 该报告还对iPhone14系列的配置参数进行了预测,与此前爆料一致的是,iPhon
[手机便携]
iPhone14系列<font color='red'>配置</font>参数解密:全系6G内存,Pro版才是真正迭代产品
教你如何配置STM32引脚
stm32是一种32位的单片机。单片机是嵌入式系统中最常用的核心部件,stm32本质上也是一种单片机。STM32系列基于专门要求高性能,低成本,低功耗的嵌入式应用专门设计的ARM Cortex-M0,Cortex-M1,Cortex-M3,Cortex-M4,Cortex-M7等。其中Cortex-M0主打的是低功耗和混合信号的处理,M3主要用来替代ARM7,重点侧重能耗和性能的均衡,而M7则重点放在高性能控制运算领域。本文将教你如何配置STM32的引脚。 一、推挽输出: 可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。 推挽
[单片机]

推荐帖子

分享MSP430F5529时钟模块总结
开始学习MSP430系列一款新CPU,F5529。按照之前学430的方法,我开始了解他的时钟部分,我参照TI官方例程学习,其中有段程序让我在实验室困惑了很久,这句注释如下:ACLK=n/a,MCLK=SMCLK=BRCLK=defaultDCO=1.048576MHZ都知道msp430的时钟系统灵活多变,他的USC模块有三个时钟(MCLK,SMCLK,ACLK)和五个时钟源(XT1CLK,VLO,REFOCLK,DCO,XT2)PUC之后,UCS模块的默认配置如下:1.XT
fish001 微控制器 MCU
第一时间抢先报:ADI创新大赛获奖作品图赏
呵呵下午去参观了在华中举行的ADI创新设计大赛颁奖礼,感觉学生们太可爱了。在过一两天文章中详述方案,先上图,大家也可以猜猜是啥方案。第一时间抢先报:ADI创新大赛获奖作品图赏4
soso 电子竞赛
加密U盘开发问题,是否和主控芯片有关?(高手帮忙)
需要开发一个加密U盘,就是要实现类似iFormat的加密。看来很多资料,还是无从下手。密码存放在那里?如何重新更改fat分区信息?这个操作是不是和主控有关系呢?希望大家一起讨论。加密U盘开发问题,是否和主控芯片有关?(高手帮忙)呵呵,刚好完成了一个加密U盘。一般来说,在U盘上不存密码,而是存储使用RSA加密的一段数据;用户登录时输入私钥,用私钥解密该数据,如果能解密成功就允许登录;剩下的看你的密级做了。那不是相当于这个登陆私钥只是做登陆用的。U盘中实际的数据是明
xstlovezxh 嵌入式系统
推荐一些满足美国能源部标准doe6 的AC-DC转换器类产品
InnoSwitch产品系列InnoSwitch™系列IC将初级、次级和反馈电路同时集成到一个表面贴装离线式反激开关IC中。InnoSwitchIC集成了初级FET、初级侧控制器、用于同步整流的次级侧控制器以及可省去光耦器的创新性的FluxLink™技术产品详情LinkSwitch产品系列LinkSwitch™系列IC是一种低功率离线式开关器件,它们同时将高精度控制器和高压MOSFET集成在一个低引脚数封装内。LinkSwi
eric_wang 电源技术
[Coremark跑分评测] Nucleo-L432KC Coremark跑分
测试对象:Nucleo-L432KC测试环境:Windows+Eclipse+Ac6测试代码:从eembc.org官网,下载的跑分软件下载地址:http://www.eembc.org/coremark/index.phpCoreMark代码移植方法:参考文档:《如何将CoreMark程序移植到STM32上》值得注意的是,帖子中的串口设置,奇偶失能参数:Parity在设置为Odd时,本次测试通过VC
wolfgang2016 stm32/stm8
关于中断事件EVENT
在IIC_INIT中建立事件gI2CEvent=CreateEvent(NULL,FALSE,FALSE,NULL);(为自动重置)在中断线程I2C_IntrThread中SetEvent(gI2CEvent)后进入IIC_READ函数的ret=WaitForSingleObject(gI2CEvent,I2C_RW_TIMEOUT);为什么还需要ResetEvent(gI2CEvent)???我看书中介绍操作系统会自动设置为无信号状态。DWORDIIC_Read
liaohuchen 嵌入式系统
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved