STC IO配置库

本文作为自学笔记,探讨STC单片机的IO配置库,讲解记号粘贴运算符##的用法,并通过宏定义简化IO口配置。通过宏定义实现对STC IO寄存器的直观配置,避免位运算的复杂性,以提高代码的可读性和易用性。
摘要由CSDN通过智能技术生成

STC IO配置库

就当是自学笔记吧,对 记号粘贴运算符## 加深一下理解。

记号粘贴运算符是一个二元运算符,可以出现在所有宏的替换文本中。该运算符会把左、右操作数结合在一起,作为一个记号,因此,它常常被称为记号粘贴运算符(token-pasting operator)。如果结果文本中还包含有宏名称,则预处理器会继续进行宏替换。出现在 ## 运算符前后的空白符连同 ## 运算符本身一起被删除。

#define DEBUG_A_MSG "DEBUG_MSG_A"
#define DEBUG_B_MSG "DEBUG_MSG_B"
#define MSG(x) DEBUG_MSG_##x##MSG //这句使用了 记号粘贴运算符:##
a = MSG(A); 
b = MSG(B);

这些宏被预处理器替换以后,就换成了下面的代码:

#define DEBUG_A_MSG "DEBUG_MSG_A"
#define DEBUG_B_MSG "DEBUG_MSG_B"
a = DEBUG_A_MSG; 
b = DEBUG_B_MSG;

STC的IO寄存器如下图,在配置IO口寄存器PnM1和PnM0时一般会这样写,比如将配置P0.7为输出方向时:

P0M1 &= ~(1<<7);
P0M0 |= (1<<7);

在这里插入图片描述
如果能像Arduino那样更直观的配置这些IO那就太舒服了,所以如果我们能过宏定义巧妙的将这些有规律的定义统一起来写一段宏定义来替换上面那些原始写法,在以后的使用中将会比较方便。

做一个简单的尝试

#define _PnM1(n) P##n##M1
#define _PnM0(n) P##n##M0
void main(){
   
	_PnM1(0) &= ~(1<<7);
	_PnM0(0) 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STC8G的IO口设置可以通过软件配置来实现。根据引用\[1\],STC8G的IO口有四种工作模式:准双向口/弱上拉、推挽输出/强上拉、高阻输入和开漏输出。可以使用软件对IO口的工作模式进行配置。根据引用\[2\],可以通过设置IO口寄存器PnM1和PnM0来配置IO口的工作模式。例如,要将P0.7配置为输出方向,可以使用以下代码: P0M1 &= ~(1<<7); P0M0 |= (1<<7); 这样就将P0.7配置为输出模式。但是,为了更方便地配置IO口,可以使用引用\[3\]中提供的代码。该代码定义了一些宏和函数,可以通过简单的函数调用来配置IO口。例如,使用setPin函数可以将0口的第7位配置为输出模式: setPin(0, 7, IO_OUTPUT); 这样就可以方便地配置STC8G的IO口。 #### 引用[.reference_title] - *1* [解决STC8G1K08程序不能运行的问题和端口配置](https://blog.csdn.net/u012388993/article/details/119029699)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [STC IO配置](https://blog.csdn.net/cnlenglan/article/details/124900961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值