中颖51芯片学习2. IO端口操作

一、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 。
位定义如下表所示:

寄存器位7位6位5位4位3位2位1位0
P0CR (E1H, Bank0)P0CR.7P0CR.6P0CR.5P0CR.4P0CR.3P0CR.2P0CR.1P0CR.0
P1CR (E2H, Bank0)P1CR.7P1CR.6P1CR.5P1CR.4P1CR.3P1CR.2P1CR.1P1CR.0
P2CR (E3H, Bank0)P2CR.7P2CR.6P2CR.5P2CR.4P2CR.3P2CR.2P2CR.1P2CR.0
P3CR (E4H, Bank0)--P3CR.5P3CR.4P3CR.3P3CR.2P3CR.1P3CR.0
读/写读/写读/写读/写读/写读/写读/写读/写读/写
复位值 (POR/WDT/LVR/PIN)00000000
  • 值0为输入模式;
  • 值1为输出模式。

代码示例:

P1CR |=0x01;    //配置Port P1端口的bit0为输出模式 

(2)端口上拉电阻控制寄存器

当IO端口作为输入时,每个I/O端口带有由PxPCRy控制的内部上拉电阻,详细定义如下:

寄存器位7位6位5位4位3位2位1位0
P0PCR (E9H, Bank0)P0PCR.7P0PCR.6P0PCR.5P0PCR.4P0PCR.3P0PCR.2P0PCR.1P0PCR.0
P1PCR (EAH, Bank0)P1PCR.7P1PCR.6P1PCR.5P1PCR.4P1PCR.3P1PCR.2P1PCR.1P1PCR.0
P2PCR (EBH, Bank0)P2PCR.7P2PCR.6P2PCR.5P2PCR.4P2PCR.3P2PCR.2P2PCR.1P2PCR.0
P3PCR (ECH, Bank0)--P3PCR.5P3PCR.4P3PCR.3P3PCR.2P3PCR.1P3PCR.0
读/写读/写读/写读/写读/写读/写读/写读/写读/写
复位值 (POR/WDT/LVR/PIN)00000000
  • 值0:内部拉电阻关闭;
  • 值1:内部上拉电阻开启。

使用示例:

P0PCR |= 0x02;   // P0PCR.1 内部上拉电阻开启

(3)端口数据寄存器

端口数据寄存器用来读写端口值,定义如下:

寄存器位7位6位5位4位3位2位1位0
P0 (80H, Bank0)P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0
P1 (90H, Bank0)P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0
P2 (A0H, Bank0)P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0
P3 (B0H, Bank0)--P3.5P3.4P3.3P3.2P3.1P3.0
读/写读/写读/写读/写读/写读/写读/写读/写读/写
复位值(POR/WDT/LVR/PIN)00000000

使用示例:

P1_0 = 0;       // 控制P1_0pin输出低电平
P1 = 0;         // 控制P1 8个引脚全输出低电平

(4)P0口输出电压控制寄存器

P0.0~P0.3口可输出 1/2VDD 电压,由P0V0单独控制。

寄存器第7位第6位第5位第4位第3位第2位第1位第0位
P0V0 (AFH, Bank0)P0V0P0R1P0R0--P03VOP02VOP01VO
读/写读/写读/写读/写--读/写读/写读/写
复位值(POR/WDT/LVR/PIN)00--0000
位编号位符号说明
7-6PORX (x=0-1)P0RX:分压电阻选择
00: 分压电阻选择10K
分压电阻选择20K
分压电阻选择40K
分压电阻选择80K
3-0P0xVO(x=0-3)P0.x输出电平选择
0: 普通I/O
1: Pxy输出VDD/2

示例,让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口输入电平逻辑控制,即控制输入时的高、低电平阈值。

寄存器第7位第6位第5位第4位第3位第2位第1位第0位
PIMS0 (D4H, Bank1)P07SP06S--P03SP02SP01SP00S
读/写读/写读/写--读/写读/写读/写读/写
复位值(POR/WDT/LVR/PIN)00----00

值说明:

位编号位符号说明
7-6P0xSP0.x 输入电平逻辑控制位(不包含端口数据寄存器输入)
0:输入高电平阈值为0.8V DD ,输入低电平阈值为0.2V DD (带施密特)
1:输入高电平阈值为2.0V,输入低电平阈值为0.8V(V DD = 4.5-5.5V)(TTL逻辑)
输入高电平阈值为0.25V DD +0.8,输入低电平阈值为0.15V DD (V DD = 2.7V-4.5V)
注:PowerDown模式下,TLL逻辑无效。
1-0P0xSP0.x 输入电平逻辑控制位(不包含端口数据寄存器输入)
0:输入高电平阈值为0.8V DD ,输入低电平阈值为0.2V DD (带施密特)
1:输入高电平阈值为2.0V,输入低电平阈值为0.8V(V DD = 4.5-5.5V)(TTL逻辑)
输入高电平阈值为0.25V DD +0.8,输入低电平阈值为0.15V DD (V DD = 2.7V-4.5V)
注:PowerDown模式下,TLL逻辑无效。
PIMS1

控制功能与PIMS0类似 。

D5H,Bank1第7位第6位第5位第4位第3位第2位第1位第0位
PIMS1-P15SP14S--P11SP10S
读/写-读/写读/写--读/写读/写
复位值 (POR/WDT/LVR/PIN)-00--00

其中:

  • P15S、P14S 值定义与 P07S、P06S 值定义相同,
  • P11S、P10S 值定义与 P01S、P00S 值定义相同。
PIMS2
D6H,Bank1第7位第6位第5位第4位第3位第2位第1位第0位
PIMS2P27SP26S------
读/写读/写读/写------
复位值 (POR/WDT/LVR/PIN)00------

其中:

  • P27S、P26S的P07S、P06S 值定义相同。
PIMS3
D7H,Bank1第7位第6位第5位第4位第3位第2位第1位第0位
PIMS2--P35SP34SP33SP32SP31SP30S
读/写--读/写读/写读/写读/写读/写读/写
复位值 (POR/WDT/LVR/PIN)--000000

其中: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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/521956.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试(二)--测试用例

一、什么是用例: 用例就是用户使用案例的简称。以手机用例为例: 1.是否能开机:打开手机按下电源键3秒,看是否能开机。 2.验证内存:打开手机设置查看内存是否为64G. 3.验证屏幕:打开手机在白屏背景下检查屏幕是否有黑点…

【MySQL】数据操作语句(DML)

👦个人主页:Weraphael ✍🏻作者简介:目前学习计网、mysql和算法 ✈️专栏:MySQL学习 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你有帮助的话 欢迎 评论&#x1f4ac…

LeetCode 1017. 负二进制转换

解题思路 相关代码 class Solution {public String baseNeg2(int n) {if(n0) return "0";String s"";while(n!0)if(Math.abs(n)%20){nn/(-2);ss0;}else{ss1; n (n-1)/(-2);}String t reverse(s);return t;}public String reverse(String s){Str…

大广赛车机主体设计实践指南:必备技能速成攻略解读!

车机主体设计是什么 汽车作为代步工具距今已有 130 多年的历史。目前,在视觉范围内如此关注车载 HMI 的历史也只是近十年的事情,因为在过去,人们最注重的还是汽车技术的发展。但随着以交通安全为主的自动驾驶技术的不断发展,智能…

【nginx】使用nginx部署https协议

一、客户有证书提供 客户有证书的,或者有域名申请了免费证书的,直接根据下面的第5步骤,配置nginx即可。 二、 自己生成证书 1. 安装openssl-Win64 OpenSSL v3.1.1 Light 附下载地址 Win32/Win64 OpenSSL Installer for Windows - Shinin…

网站统计中的数据收集原理及实现

网站数据统计分析工具是网站站长和运营人员经常使用的一种工具,比较常用的有谷歌分析、百度统计和腾讯分析等等。所有这些统计分析工具的第一步都是网站访问数据的收集。目前主流的数据收集方式基本都是基于javascript的。本文将简要分析这种数据收集的原理&#xf…

宏集PLC如何为楼宇自动化行业提供空调、供暖与通风的解决方案?

一、应用背景 楼宇自动化行业是通过将先进的技术和系统应用于建筑物中,以提高其运营效率、舒适度和能源利用效率的行业,其目标是使建筑物能够自动监控、调节和控制各种设备和系统,包括照明系统、空调系统、安全系统、通风系统、电力供应系统…

建模实例评点(2)领域类图-食谱

1 00:00:00,290 --> 00:00:04,120 这是之前我们给一个用户 2 00:00:04,130 --> 00:00:05,360 给他出食谱的 3 00:00:05,370 --> 00:00:06,480 这样做的一个 4 00:00:06,650 --> 00:00:08,000 你认为你系统最重要的 5 00:00:08,010 --> 00:00:09,360 一个核心…

计算机网络 实验指导 实验8

三层交换机的访问控制 1.实验拓扑图: 名称接口IP地址网关Switch AF0/1192.168.1.1/24F0/2172.1.1.1/24Switch BF0/1192.168.1.2/24F0/2172.2.2.1/24PC1172.1.1.2/24172.1.1.1PC2172.1.1.3/24172.1.1.1PC3172.2.2.2/24172.2.2.1PC4172.2.2.3/24172.2.2.1 2.实验目的…

支付宝会员签到领取积分

一、背景 跟一位喜欢薅羊毛的好友聊天,说现在好多app上的积分能兑换实物,就是需要每天自己去点开app签到,app太多签不过来或者有的时候会忘记签到,虽然流程不复杂,但要是有款工具每天自动签到就好了。 我给他介绍了一…

市场首款!华邦电子发布内置PQC算法的闪存产品

3月27日,全球领先的半导体内存解决方案供应商华邦电子股份有限公司推出TrustME Secure Flash W77Q系列的最新扩展,包括256Mb、512Mb和1Gb器件。 这些突破性的安全闪存设备是市场上首款针对后量子密码学(PQC)实施Leighton-Micali签…

nginx支持的多种负载均衡策略

目录 1.轮询(默认) 2. ip_hash 3. 加权轮询(weight) 4. fair(第三方) 5. 最少连接(least_conn) 1.轮询(默认) 将请求依次分配给每个服务器,确…

Linux:IO多路转接之poll

文章目录 select的缺点pollstruct pollfd解决缺点的方式 代码实现 本篇总结的是poll的相关内容,在总结poll的内容前,先回顾一下select的缺点 select的缺点 select的缺点也比较明显 等待的fd是有上限的,在我们当前这个版本来说,…

信号处理之(文件批处理+小波分解+波形图的生成)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、前期准备工作之数据自动读取二、前期准备工作之信号分解(小波分解)三、前期准备工作之数据可视化(波形图展示&#xff0…

Redis的配置文件详解

单位:Redis配置对大小写不敏感! 注意这里:任何写法都可,不区分大小写。 units are case insensitive so 1GB 1Gb 1gB are all the same.包含:搭建Redis集群时,可以使用includes包含其他配置文件网络&…

个推助力小米汽车APP实现智能用户触达,打造智能出行新体验

4月3日,小米SU7首批交付仪式在北京亦庄的小米汽车工厂总装车间举行,全国28城交付中心也同步开启首批交付。随着小米SU7系列汽车的正式发售和交付,小米汽车APP迎来了用户体量的爆发式增长。 小米汽车APP是小米汽车官方推出的手机应用&#xff…

大型语言模型(LLMs)面试常见问题解析

概述 这篇文章[1]是关于大型语言模型(LLMs)的面试问题和答案,旨在帮助读者准备相关职位的面试。 token? 在大型语言模型中,token 指的是什么? 分词(Tokenization):可以将…

力扣热题100_链表_138_随机链表的复制

文章目录 题目链接解题思路解题代码 题目链接 138. 随机链表的复制 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&a…

事件时间+时间窗口,最后一个窗口不执行问题踩坑与源码分析

事件时间时间窗口,最后一个窗口不执行问题踩坑与源码分析 1. 结论 在使用事件时间和时间窗口的过程中,当最后一个事件的事件时间未达到时间窗口的最大时间,窗口不会触发。 举例说明,在按小时的滚动窗口中,假设当前时…

开启虚拟机时出现此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态怎么解决

问题描述 虚拟机安装完成后,点击开启此虚拟机弹出系统提示 原因分析: Intel VT-x 处于禁用状态,需要开启。 解决方案: 以联系小新笔记本电脑为例,进入BIOS界面,将Intel Virtual Technology设置成Enabl…