出处:https://www.sekorm.com/news/25653139.html

瑞萨科技是世界十大半导体芯片供应商之一,在汽车领域的MCU市场份额更是排在最前列。近日笔者碰到刚接手瑞萨MCU的开发人员,提出一个比较有意思的问题,分享出来以帮助大家更快上手。

我们使用的是瑞萨R5F109GE的开发板,通过开发板来熟悉瑞萨的MCU资源是比较好的办法。这位朋友提出的问题是:R5F109GE使用瑞萨自有的CS+的编译器,但在编程中,无法对单片机IO口进行位操作。比如说做跑马灯实验,需要不断的改变某个IO口的输出信号,而编译器只识别整个IO口寄存器,而无法识别对其中的位操作,这样不利于编程开发。

以其中的IO口P51为例,正常我们希望的是编译器可以识别以下代码,方便理解:

P5.1=1;//P51口输出高电平
//或P51=1;//P51口输出高电平

不过实际上,编译器是无法识别P5.1和P51。我们以前碰到这样的情况,可能需要自己来做下数据处理如下所示:

P5= P5|(1<<1);// P51口输出高电平

这样才能达到我们所要的P51口输出高电平效果。但是,这么长的赋值语句,如果在一个本身就比较长的代码中,很容易引起操作失误。
笔者仔细研究了下瑞萨的CS+ 的编译器,在编译器创建工程默认后的iodefine.h文件中,找到了瑞萨为我们提供的一个更好的解决办法。

如下代码所示:

 typedef struct{unsigned char no0:1;unsigned char no1:1;unsigned char no2:1;unsigned char no3:1;unsigned char no4:1;unsigned char no5:1;unsigned char no6:1;unsigned char no7:1;} __bitf_T;
#define P5           (*(volatile __near unsigned char  *)0xFF05)
#define P5_bit       (*(volatile __near __bitf_T *)0xFF05)

在上面的代码中,CS+编译器的iodefine.h文件中定义了一个8bit的结构体__bitf_T(如果是16位,或者32位只需要往上叠加no个数即可),并定义了P5整个寄存器的地址,以及P5_bit这个__bitf_T型的结构体的地址,都指向PORT5的寄存器地址。此时,我们可以通过以下的简单操作即可实现PORT口的位操作。

P5_bit.no1=1;

编译器会创建P5_bit这个__bitf_T型的结构体,以方便我们调用。如果P51使用的比较频繁,觉得代码还比较长,我们可以在宏定义中添加:

#define P51 P5_bit.no1

这样就可以实现我们一开始所需求的代码:

P51=1; / P51口输出高电平

最后给大家整理下,据说高级工程师都会选择以下的写法:

#define P51 (((volatile __near __bitf_T *)0xFF05)->no1)

P51=1; / P51口输出高电平

【转载】瑞萨CS+ for CC对单片机IO口进行位操作相关推荐

  1. 单片机IO口模拟串口程序(发送+接收

    单片机IO口模拟串口程序(发送+接收)[转] qcmc 发表于 - 2011-6-23 0:42:00 前一阵一直在做单片机的程序,由于串口不够,需要用IO口来模拟出一个串口.经过若干曲折并参考了一些 ...

  2. IO口多路查理复用:三个单片机IO口控制六个LED

    简 介: 本文介绍了单片机的IO控制 LED 中的复用技术,特别查理复用基本原理和特点进行了介绍.使用一款IS31FL3731可以构成16×9的PWM亮度可控的 LED 矩阵. 关键词: 查理复用,C ...

  3. 测量ATMEGA8单片机IO口的输入输出内阻

    ➤ 01背景 在 电子小帮手电路中电源开关电路分析 中介绍测量模块电路实验原理的时候,对于ATmega系列的 单片机的输出端口进行了内部描述 .特别是对于端口做为IO输出口的时候,它可以等效为通过电阻 ...

  4. 如何利用单片机IO口产生两倍的电源电压

    简介 在很多情况下,电子系统中需要获得比工作电源高的电压电源,或者负电源.比如在一些功率器件(MOS)的基极驱动信号.扩展运算放大器的动态范围.一些通信信号(UART232). 现在有很多专门的芯片, ...

  5. 51单片机有几个通用io口_51单片机IO口的四种使用方法

    原标题:51单片机IO口的四种使用方法 传统51单片机IO接口只可以作为标准双向IO接口,如果用其来驱动LED只能用灌电流的方式或是用三极管外扩驱动电路. 灌电流方式 LED正极接VCC,负极接IO口 ...

  6. c语言用p1口进行转弯灯实验,P1.0口转弯灯程序 单片机IO口的应用

    P1.0开关接5V时,右转弯灯闪亮,P1.1开关接5V时左转弯灯闪亮.P1.0.P1.1 开关同时接5V或接地时,转弯灯均不闪亮. 程序框图 P1.0开关接5V时,右转弯灯闪亮,P1.1开关接5V时左 ...

  7. 单片机推挽输出c语言,单片机IO口科普:推挽输出、开漏输出详解

    原标题:单片机IO口科普:推挽输出.开漏输出详解 在学单片机和选用逻辑器件的时候我们常别人说这款芯片是推挽输出驱动能力强,这个引脚是开漏输出需要加上拉电阻. 是不是有时候感觉一头雾水? 今天就详解一下 ...

  8. STC12C5A60S2单片机IO口工作模式设定

    STC12C5A60S2单片机IO口工作模式设定 STC12C5A60S2 系列单片机其所有I/O口均可由软件配置成4种工作类型之一.4种类型分别为:准双向口(标准8051 输出模式).推挽输出.仅为 ...

  9. 想做数码管显示,单片机IO口资源不够?看看WTV890语音芯片能做些啥

    在开发许多产品时许多工程师都会遇到以下问题,如:想驱动4位或10位的LED数码管显示,但是单片机的IO口不够用:要么更换IO口资源更多的MCU来控制,要么更换脚位丰富的单片机,这无疑在MCU上,加了1 ...

最新文章

  1. 目标定位--Deep Self-Taught Learning for Weakly Supervised Object Localization
  2. valorant服务器维护啥情况,valorant连不上服务器怎么办 valorant连不上服务器解决方法介绍...
  3. MySQL基础 (DML)
  4. ITK:复制非复合转换NonCompositeTransform
  5. Linux的tree
  6. 世界杯直播背后:腾讯云极速高清技术部署实录
  7. GCC编译过程与动态链接库和静态链接库
  8. [修正] Berlin 10.1 支持 iPhone 4 (iOS v7.x)
  9. 出现在海马#30524;前的c++
  10. 你所不知道的mybatis居然也有拦截器
  11. 0 full gc时cpu idle_Go语言中如何观察GC
  12. ES查看索引库结构和数据
  13. (第十章)多表查询之in,exitst
  14. JS输入银行卡号,4位自动加空格 ,根据银行卡号获取开户行和银行
  15. 树莓派设置静态ip地址
  16. 常用web服务器:状态监控status页面
  17. 嵌入式linux实验截图,嵌入式linux实验二.pdf
  18. 他竟然只用25万美元换来苹果1/3的股票?
  19. 2021年企业服务行业BP和融资计划书PPT模板
  20. 2021-06-11警告: 多个不同应用注册了相同服务,请检查

热门文章

  1. 用Echarts 制作一个数据库表的关联关系图(一)
  2. 服务器虚拟化存储设计,完美规划储存与资源,部署高性能虚拟化桌面
  3. GNSS定位精度统计量(百分位、CEP、RMS、σ、ppm等)
  4. 非标准正态分布的累计分布函数
  5. 再谈云原生时代的系统软件,创造一个开放、无锁定、低成本的技术体系
  6. 人民日报痛批沉睡中的大学生,你不失业,天理难容
  7. JSZip解压PDF文件并批量下载
  8. 我一定要赚好多好的钱,孝敬父母
  9. 从高德地图大批量扒取数据,并写入excel
  10. cas操作 java 缺点_CAS的缺点