物联网实训开发-指导书(8)

2019-03-21 20:45

I/O接口功能选择 位 名称 复位 读/写 P0SEL(0XF3-P0口功能选择) P0_7~P0_0功能选择 7:0 SELP0[7:0] 0X00 R/W 0 GPIO 1 外设 P1_7~P1_0功能选择 7:0 SELP1[7:0] 0X00 R/W 0 GPIO 1 外设 描述 P1SEL(0XF4-P1口功能选择) 7 - 0 P2SEL(0XF5-P2口功能选择) 不使用 R0 P1口外设优先级控制。当PERCFG同时分配USART0和USART1到同一引脚时,该位决6 PRI3P1 0 R/W 定其优先级顺序。 0 USART0优先; 1 USART1优先 P1口外设优先级控制。当PERCFG同时分配USART1和Timer3到同一引脚时,该位决定5 PRI2P1 0 R/W 其优先级顺序。 0 USART1优先; 1 Timer3优先 P1口外设优先级控制。当PERCFG同时分配Timer1和Timer4到同一引脚时,该位决定其4 PRI1P1 0 R/W 优先级顺序。 0 Timer1优先; 1 Timer4优先 P1口外设优先级控制。当PERCFG同时分配USART0和Timer1到同一引脚时,该位决定其优先级顺序。 0 USART0优先; 1 Timer1优先 P2_4功能选择 3 PRI0P1 0 R/W 2 SELP2_4 0 R/W 0 GPIO 1 外设 P2_3功能选择 0 GPIO 1 外设 P2_0功能选择 0 GPIO 1 外设 1 SELP2_3 0 R/W 0 SELP2_0 0 R/W

表3-3 I/O接口方向选择 P0口、P1口、P2口方向

位 名称 复位 读/写 P0DIR(0XFD-P0口方向) 描述 P0_7~P0_0方向选择 0 输入input 1 输出output P1_7~P1_0方向选择 7:0 DIRP0[7:0] 0X00 R/W P1DIR(0XFD-P1口方向) 7:0 DIRP1[7:0] 0X00 R/W 0 输入input 1 输出output P2DIR(0XFD-P2口方向) P0口外设优先级控制。当PERCFG同时分配几个外设到同一引脚时,该两位将决定其优先级顺序。 00 第1高优先级:USART0 第2高优先级:USART1 第3高优先级:Timer1 01 第1高优先级:USART1 第2高优先级:USART0 7:6 PRIP0 00 R/W 第3高优先级:Timer1 10 第1高优先级:Timer1通道0、1 第2高优先级:USART1 第3高优先级:USART0 第4高优先级:Timer1通道2、3 11 第1高优先级:Timer1通道2、3 第2高优先级:USART0 第3高优先级:USART1 第4高优先级:Timer1通道0、1 5 4:0 - 0 R0 未使用 P2_4~p2_0 I/O方向选择 0 输入input 1 输出output

表3-4 I/O接口输入模式选择 P0口、P1口、P2口输入模式 位 名称 复位 读/写 描述 P0INP(0X8F-P0输入模式) DIRP2_[4:0] 00000 R/W

7:0 MDP0[7:0] 0X00 R/W P0_7~P0_0输入模式 0 上拉/下拉 1 三态 P1INP(0XF6-P1输入模式) P1_7~P1_0输入模式 7:0 MDP0[7:0] 0X00 R/W 0 上拉/下拉 1 三态 P2口上拉/下拉选择,对所有P2口引脚设置为上拉/下拉输入 0 上拉 1下拉 P1口上拉/下拉选择,对所有P1口引脚设置为上拉/下拉输入 0 上拉 1下拉 P0口上拉/下拉选择,对所有P0口引脚设5 PRIP0 0 R/W 置为上拉/下拉输入 0 上拉 1下拉 P2_4~P2_0输入模式 4:0 MDP2_[4:0] 00000 R/W 0 上拉/下拉 1 三态 P2INP(0XF7-P2输入模式) 7 PRIP2 0 R/W 6 PRIP1 0 R/W

由上述几个表可知,当用作通用I/O时,引脚可以组成3个8位口,定义为P0口、P1口、P2口。其中,P0口和P1口是完全8位口,而P2口仅5位可用。所有I/O口均可位寻址,或通过特殊功能寄存器由P0、P1和P2字节寻址。每个口可以单独设置为通用I/O或者外设特殊功能I/O。所有的I/O口用于输出,均具备4mA的驱动能力,出了两个高输出口P1_0和P1_1外,他们具备20mA的驱动能力。

寄存器PxSEL(其中x为I/O口标号,其值为0~2),用来设置I/O口为8位通用I/O或者外部设备特殊功能I/O。任何一个I/O口在使用之前,必须首先对其寄存器PxSEL赋值。默认情况下,每当复位以后,所有I/O引脚都设置为通用I/O;且均为输入。

在任何时候,若改变I/O的方向,只需设置寄存器PxDIR即可。设置PxDIR中的指定位为1,那么其对应的引脚就被设置为输出;为0,则对应的引脚就被设置为输入。

当使用输入时,每个通用I/O引脚可以设置为上拉、下拉或者三态模式。作为缺省情况,复位之后,所有口均为上拉输入。要取消其上拉或者下拉,就要将PxINP中的对应位设置为1.

在本实验中,为了驱动4个LED灯的亮灭,需要将相应的I/O口设置为输出模式,并使用相应的I/O口输出“1”或者“0”来切换LED的亮灭状态。在亮灭之间,插入一定的

延时,才能保证看到LED的闪烁效果。

6.3.5 实验步骤

3.5.1 建立一个新工程

注意:本步骤,请用户自行参考实验《建立一个简单的试验工程》,这里就不再赘述。

3.5.2 添加或新建程序文件

如何添加或者新建程序文件,请参考实验《建立一个简单的试验工程》,这里就不

再赘述。

程序清单1:

#include \ // 引用头文件 #include \

/********************************************************************* * 函数名称:delay * 功 能:软件延时 * 入口参数:无 * 出口参数:无 * 返 回 值:无

********************************************************************/ void delay(void) { int16 i; uint8 j;

for(i = 0; i < 1000; i++) {

for(j = 0; j < 200; j++) {

asm(\ asm(\ asm(\ } } }

/********************************************************************* * 函数名称:main

* 功 能:main函数入口 * 入口参数:无 * 出口参数:无

* 返 回 值:无

********************************************************************/ void main(void) {

LED1_DDR |= LED1_BV; // 设置P1.0,P1.1,P1.4为输出 LED2_DDR |= LED2_BV;

LED3_DDR |= LED3_BV;

LED4_DDR |= LED4_BV; // 设置P0.1为输出

while(1)

{

HAL_TURN_ON_LED1(); HAL_LED_BLINK_DELAY(); HAL_TURN_ON_LED2(); HAL_LED_BLINK_DELAY(); HAL_TURN_ON_LED3();

HAL_LED_BLINK_DELAY();

HAL_TURN_ON_LED4(); // 点亮四个LED HAL_LED_BLINK_DELAY(); delay(); // 延时 HAL_TURN_OFF_LED1();

HAL_LED_BLINK_DELAY(); HAL_TURN_OFF_LED2(); HAL_LED_BLINK_DELAY(); HAL_TURN_OFF_LED3();

HAL_LED_BLINK_DELAY();

HAL_TURN_OFF_LED4(); // 熄灭四个LED HAL_LED_BLINK_DELAY(); delay(); } }

程序清单2:

/******************************************************************************

* 文件名称: hal_board_cfg.h

* 功 能:板级类型定义描述库 * 作 者:POWER * 公 司:

* 日 期:2009-06-09

******************************************************************************/

#ifndef HAL_BOARD_CFG_H


物联网实训开发-指导书(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:中国汽车检测器市场竞争态势及未来五年发展规划分析报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: