中颖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 端口输出2VP0V0 = 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){// 读取bit0P0_2 = P0_0;}
}

本系列博文代码开源地址:
https://gitee.com/xundh/learn-sinowealth-51

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超详细!211页网络协议与管理,看完终于明白了(建议收藏)

与其说计算机改变了世界,不如说是计算机网络改变了世界。作为计算机网络通信实体之间的语言,网络通信协议对计算机正常通信起着极大的作用。 那么到底什么是网络协议与管理呢?今天给大家分享一份211页网络协议与管理文档,包含概念…

碧桂园服务净利降两成,关联交易收入仅占2.9%,发力增值服务充电桩日进超10万

自2018年分拆上市以来,碧桂园服务经历过非常高速的发展,曾是物管市场的“并购王”,但从2023年开始,希望从外延式的增长向内生式增长转型,将往期的经验与教训,通过投后管理沉淀下来,向高质量发展…

nginx多https证书配置精简

其实有很多方式,网上看到一个这个方法,给大家介绍一下。 首先,开启支持-TLS SNI support Nginx开启单IP多SSL证书支持-TLS SNI support Nginx支持单IP多域名SSL证书需要OpenSSL支持,首先需要编译安装一个高版本的openssl。 检查…

04 Python进阶:MySQL-PyMySQL

什么是 PyMySQL? PyMySQL 是一个用于 Python 的纯 Python MySQL 客户端库,提供了与 MySQL 数据库进行交互的功能。PyMySQL 允许 Python 开发人员连接到 MySQL 数据库服务器,并执行诸如查询、插入、更新和删除等数据库操作。 以下是 PyMySQL …

第29篇:秒表计时器

Q:本期我们采用计数器来实现秒表计时器,循环进行0~9计时。 A:在数码管HEX0上循环从0到9计数,间隔时间为1s,使用计数器实现1s时间间隔。 DE2-115开发板提供了50MHz时钟,触发器直接以50MHz信号作为同步时钟…

过亿级别的用户数据如何检查用户名是否存在?

目录 引言用户名存在性检查的挑战用户规模庞大带来的性能挑战数据一致性与并发性问题防止恶意行为的挑战 常见的解决方案基于数据库的方案基于缓存的方案基于分布式系统的方案基于搜索引擎的方案 案例分析与实践经验分享社交媒体平台的用户名检查方案 引言 随着互联网的普及和数…

PS从入门到精通视频各类教程整理全集,包含素材、作业等(9)复发

PS从入门到精通视频各类教程整理全集,包含素材、作业等 最新PS以及插件合集,可在我以往文章中找到 由于阿里云盘有分享次受限制和文件大小限制,今天先分享到这里,后续持续更新 第一课 ——第三课素材文件 https://www.alipan.c…

怎么在UE过场动画中加入振动效果

我们已经学会了怎么在游戏中加入振动效果,比较典型的交互场景如:在开枪时让手柄同步振动,实现起来真的很简单,就是定义场景和事件,然后在游戏事件发生时播放特定的振动资源文件,跟播放音效是极其相似的&…

探索Linux的挂载操作

在Linux这个强大的操作系统中,挂载操作是一个基本而重要的概念。它涉及到文件系统、设备和数据访问,对于理解Linux的工作方式至关重要。那么,挂载操作究竟是什么,为什么我们需要它,如果没有它,我们将面临什…

基因组de novo组装

分以下几个部分: CLR组装 HIFI组装 ONT组装 二、三代数据矫正 组装结果评估 一、CLR组装 下机数据: 主要用那个bam文件 软件:wtdbg2 第一步:bam转fasta文件 参考:https://www.jianshu.com/p/03c7eb11102d # 进行基…

基于单片机放大电路程控放大特性参数设计

**单片机设计介绍,基于单片机放大电路程控放大特性参数设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机放大电路程控放大特性参数设计是一个结合了单片机编程和放大电路技术的综合性项目。以下是对该设计项目的概…

第⑪讲:Ceph集群OSD扩容方案及实现横向和纵向扩容

文章目录 1.Ceph集群OSD扩容方案2.实现OSD的横向扩容4.实现OSD的纵向扩容 1.Ceph集群OSD扩容方案 Ceph集群OSD的扩容支持两种方式: 横向扩容 通过增加OSD节点来达到扩容的目的。使用横向扩容要完成以下几个步骤: 在新的机器中进行初始化操作、配置Yum源…

AJAX —— 学习(三)(完结)

目录 一、jQuery 中的 AJAX (一)get 方法 1.语法介绍 2.结果实现 (二)post 方法 1.语法介绍 2.结果实现 (三)通用型的 AJAX 方法 1.语法介绍 2.结果实现 二、AJAX 工具库 axios &#xff08…

idea开发 java web 高校学籍管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 高校学籍管理系统是一套完善的完整信息系统,结合java web开发和bootstrap UI框架完成本系统 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 前段主要技术 css jq…

人工智能、深度伪造和数字身份:企业网络安全的新前沿

深度伪造(Deepfakes)的出现打响了网络安全军备竞赛的发令枪。对其影响的偏执已经波及到一系列领域,包括政治错误信息、假新闻和社交媒体操纵。 深度伪造将加剧公共领域对信任和沟通的本已严峻的压力。这将理所当然地引起监管机构和政策制定者…

Ubuntu22.04安装Anaconda

一、下载安装包 下载地址:https://www.anaconda.com/download#Downloads 参考:Ubuntu下安装Anaconda的步骤(带图) - 知乎 下载Linux 64-Bit (x86) installer 二、安装 在当前路径下,执行命令: bash Ana…

每日面经:计算机网络part1

1. 计算机网络的组成部分有哪些? a. 硬件设备:计算机网络由各种硬件设备组成,包括计算机、服务器、路由器、交换机、网卡等。这些设备通过物理连接(如网线、光纤)相互连接。 b. 协议:计算机网络中的通信需…

硬件项目开发过程详细介绍

对于很多未毕业的学生以及刚参加工作的工程师,经常弄不清楚硬件项目的开发过程?本文将通过详细的步骤来对硬件项目开发过程进行详细的介绍。 硬件项目开发是一个复杂而精细的过程,需要经过多个阶段来完成。在这个过程中,团队成员…

【智能排班系统】基于SpringSecurity实现登录验证、权限验证

文章目录 SpringSecurity介绍sss-security实现依赖工具类Jwt工具JSON响应工具加密工具类 用户上下文用户信息实体类用户上下文 自定义重写自定义无权限的报错自定义密码加密自定义用户类 过滤器登录过滤器权限过滤器 Service登录Service 配置类说明登录验证权限验证IP流量限制 …

【.Net】Polly

文章目录 概述服务熔断、服务降级、服务限流、流量削峰、错峰、服务雪崩Polly的基本使用超时策略悲观策略乐观策略 重试策略请求异常响应异常 降级策略熔断策略与策略包裹(多种策略组合) 参考 概述 Polly是一个被.NET基金会支持认可的框架,同…