一、SH79F9476 I/O端口介绍
1. 特性
SH79F9476提供了30/26位可编程双向 I/O 端口;
端口数据在寄存器Px中;
端口控制寄存器PxCRy是控制端口作为输入还是输出;
端口作为输入时,每个I/O端口均带有PxPCRy控制的内部上拉电阻。
有些I/O引脚功能是复用的,所有功能都允许时,CPU存在优先权避免冲突。
2. 端口模块图
3. 寄存器
(1)端口控制寄存器 PxCRy
寄存器PxCRy用来控制端口的输入、输出功能,其中x的取值范围是0~3, y的取值是0~7 。
位定义如下表所示:
值0为输入模式;
值1为输出模式。
代码示例:
P1CR |=0x01; //配置Port P1端口的bit0为输出模式
(2)端口上拉电阻控制寄存器
当IO端口作为输入时,每个I/O端口带有由PxPCRy控制的内部上拉电阻,详细定义如下:
值0:内部拉电阻关闭;
值1:内部上拉电阻开启。
使用示例:
P0PCR |= 0x02; // P0PCR.1 内部上拉电阻开启
(3)端口数据寄存器
端口数据寄存器用来读写端口值,定义如下:
使用示例:
P1_0 = 0; // 控制P1_0pin输出低电平
P1 = 0; // 控制P1 8个引脚全输出低电平
(4)P0口输出电压控制寄存器
P0.0~P0.3口可输出 1/2VDD 电压,由P0V0单独控制。
示例,让P0_0输出0.2V电压
#include "SH79F9476.h"
void main(){
// 配置Port P0端口Bit0为输出模式
P0CR |= 0x01;
// P0的 0-3 端口输出2V
P0V0 = 0x0f;
// 输出低电平
P0_0 = 1;
while(1);
}
(5)端口模式选择寄存器
PIMS0
控制P0口输入电平逻辑控制,即控制输入时的高、低电平阈值。
值说明:
PIMS1
控制功能与PIMS0类似 。
其中:
P15S、P14S 值定义与 P07S、P06S 值定义相同,
P11S、P10S 值定义与 P01S、P00S 值定义相同。
PIMS2
其中:
P27S、P26S的P07S、P06S 值定义相同。
PIMS3
其中:P35S~P30S 值定义与P07S、P06S 值定义相同。
4. 其它说明
输入端口读操作直接读引脚电平。
输出端口读操作的输入源有两种,一种是从端口数据寄存器读取,另一种是直接读引脚电平。
用读取指令来区分:读 - 改 - 写指令是读寄存器,而其它指令读引脚电平。
不管端口是否共享为其它功能,对端口写操作都是针对端口数据寄存器。
二、示例程序
下面简单的示例程序,设置P0端口的:
Pin0 :输入状态
Pin1 :输出模式,固定输出低电平
Pin2 :输出模式
Pin2的值跟随Pin0变化,Pin0接地时,Pin2输出低电平;Pin0接高电平时,Pin2输出高电平。
#include "SH79F9476.h"
#include "cpu.h"
void main()
{
P0CR &= 0xFE; // 配置Port P0端口的bit0为输入模式
P0CR |= 0x02; // 配置Port P0端口bit1为输出模式
P0CR |= 0x04; // Port P0 bit2 为输出模式
P0V0 = 0x00; // 正常电压输出
P0_1 = 0;
while(1){
// 读取bit0
P0_2 = P0_0;
}
}
本系列博文代码开源地址:
https://gitee.com/xundh/learn-sinowealth-51
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/xundh/article/details/137346435
|