合泰8位单片机IO口支持推挽输出、输入悬空、输入上拉三种模式,下图为HT66F3195的输入 / 输出引脚逻辑功能的内部结构图。
相关寄存器如下图所示
每个输入输出口的寄存器由数据寄存器(Px)方向寄存器(PxC)上拉寄存器(PxPU)组成。特殊的PA口还有一个唤醒源配置寄存器(PAWU)。
数据寄存器(Px):在输出时控制端口的输出电平信号。在输入时读取端口上的电平信号。1为高电平;0为低电平。
方向寄存器(PxC):控制端口的的方向,是输入还是输出。0为输出;1为输入
上拉寄存器(PxPU):端口上拉电阻控制寄存器。0关闭上拉;1打开上拉。
特殊的:PA口唤醒源配置寄存器(PAWU):其作用是指定PA口作为MCU休眠时唤醒源。其唤醒机制是下降沿唤醒。0为关闭唤醒;1为使能唤醒。
合泰8位单片机种类复杂,型号繁多。有不少型号的IO口第一功能不是输入输出功能。而是默认复用成了其他功能。如HT66F018这个型号与AD输入口共用的引脚第一功能是模拟输入。也有可能是LCD驱动引脚。比如HT67F489这个型号与LCD驱动引脚共用的引脚第一功能是LCD驱动引脚功能。所以在使用时一定要查看寄存器手册。
具体查看方式有两种。第一种是其复用功能寄存器统一归类在输入输出端口章节,如下图所示,查看对应端口的复用寄存器默认功能。
第二种是在特定章节。如HT66F018,通过引脚图查看某个引脚功能的功能,如PB0端口有复用模拟输入,外部中断功能,那么就去对用章节查看,如下图,PB0的默认配置为模拟输入口。
总结下来合泰较老的型号,如果IO带有模拟输入,比较器,LCD功能,那么该引脚大概率第一功能不是输入输出口。而较新出的信号一般第一功能都是输入输出功能。所以一定要仔细阅读手册。如果不是输入输出功能请先关闭其复用功能。
输入输出配置操作如下:
配置为输入:
1、设置方向寄存器:
_pac4 = 1; //S1->PA4设置为输入
2、配置上拉(可选):
_papu4 = 1; //使能PA4上拉
以上两步完成输入配置。
读取端口状态:
u8 status = _pa4; //读取PA4电平 位操作
u8 status = _pa&0x10; //读取PA4电平 字操作
以上为输入功能配置操作。
配置为输出:
1、设置方向寄存器:
_pac3 = 0; //LED1->PA3设置为输出
以上一步完成输出配置。
控制输出电平:
_pa3 = 1; //PA3输出高电平 位操作
_pa |= 0x08; //PA3输出高电平 字操作
_pa3 = 0; //PA3输出低电平 位操作
_pa &= 0xf7; //PA3输出低电平 字操作
以上为输出功能配置操作。操作比较简单,主要还是要注意IO口的第一功能是什么。这一点是比较坑的。
以上代码在HT66F3195评估板上验证通过。有需要的可以自行购买: