利用C程序指针及函数参数实现单片机任意IO口线操作的方法技术

技术编号:35687244 阅读:24 留言:0更新日期:2022-11-23 14:33
本发明专利技术涉及C语言程序对单片机编程技术领域,具体地说,涉及利用C程序指针及函数参数实现单片机任意IO口线操作的方法。采用指向IO端口功能寄存器地址指针的指针变量数组作为口线操作语句转换的核心,在操作口线前使用带参数的设置函数,预先确定端口号及口线位,IO口线操作语句写成对指针变量数组中对应的指针变量元素赋值或取值。本发明专利技术使程序设计简洁,易维护、易修改和移植;执行速度快、效率高;在去除重复代码、方便编程、提高运行效率、提高可靠性、降低功耗等方面效果显著;可以方便PCB设计;对于成品PCB也可根据布局或方便性选择不同IO口线来实现外围设备的通信或控制。同IO口线来实现外围设备的通信或控制。同IO口线来实现外围设备的通信或控制。

【技术实现步骤摘要】
利用C程序指针及函数参数实现单片机任意IO口线操作的方法


[0001]本专利技术涉及C语言程序对单片机编程
,具体地说,涉及利用C程序指针及函数参数实现单片机任意IO口线操作的方法。

技术介绍

[0002]由于C语言程序是一种编译执行程序语言,区别与解释执行语言,不能在运行过程中使用宏代换指令来更换关键字。对MCU的口线操作需在编程阶段就定义明确。现有技术中对MCU不同IO(输入输出)口线进行同类操作控制时不方便用函数参数指向不同的IO口,造成代码重复,进而造成程序占用存储空间大、执行效率低、调试代码工作量增大,即若一段程序参数调整,极其类似的另一段或几段程序也要调整。
[0003]常用方法中,一般采用直接操作IO的方式,或者创新性地利用C程序switch case分支选择语句实现用函数操作IO的方法。然而,这两种方法仍然存在较多问题,如:直接操作IO的方式中,根据需操作的IO口数量增加,会增加大量重复代码,占用大量存储空间,且非常不利于同类程序的调试和维护;直接操作IO的方式中,如果在IO口线通信中由于线缆材料或型式的不当选取、通信距离的延长等因素,造成串行数据波形发生畸变,导至通信数据错误,此时如果需调整通信时序(如延时参数等),则需要分别对不同IO口的多个子程序(或函数)进行调整,调试工作量大大增加;利用C程序switch case语句实现用函数操作IO的方法中,虽然实现了使用函数形参方式操作不同IO口线,不需要重复同类型代码,但因为函数调用及分支选择次数增多,程序执行代码量增加,系统运行速度减慢,执行时间增长,导致整个系统的反应不及时等。
[0004]鉴于此,我们提出了利用C程序指针及函数参数实现单片机任意IO口线操作的方法。

技术实现思路

[0005]本专利技术的目的在于提供利用C程序指针及函数参数实现单片机任意IO口线操作的方法,用以解决上述
技术介绍
中提出的问题。
[0006]为实现上述技术问题的解决,本专利技术的目的之一在于,提供了利用C程序指针及函数参数实现单片机任意IO口线操作的方法,基于C程序语言指针的指针和带参数函数访问、控制、选通所需的IO口线,按IO口所需操作功能数量增加相应数量的指向IO端口功能寄存器地址指针的指针变量数组,对于只有P1到Px口的单片机,指针数组的0元素值为0,1号元素值对应P1口的功能地址,且元素值需做地址的强制指针类型转换,x号元素对应x端口功能地址的强制指针类型转换值;在使用IO口线操作前,先设定端口号、口线位,在后续的IO口操作中,IO口线操作语句转换为对选定的功能选择指针变量数组中端口号对应的指针变量元素赋值或取值;
[0007]具体包括如下步骤:
[0008]步骤1、创建指向IO端口功能寄存器地址指针的指针变量数组;
[0009]步骤2、设置端口号及口线位对应排列的二维常量数组;
[0010]步骤3、在对单片机IO口线操作前使用一个带参数的IO口设置函数,取出将要操作的端口号值及口线位值分别写入两个8位的全局变量保存;
[0011]步骤4、IO口线操作语句写成对步骤1指针变量数组中对应的指针变量元素赋值或取值。
[0012]作为本技术方案的进一步改进,所述步骤1中,创建指向IO口地址指针的指针变量数组的具体方法为:
[0013]使用所选单片机C程序头文件中定义的IO口功能地址定义字强制类型转化为指针后,创建一维指针变量数组,指针数组中保存IO口功能指针元素的顺序分别对应端口号,即数组元素下标等于单片机端口号,以实现对不同端口的操作转换为对指针变量数组元素的赋值。
[0014]作为本技术方案的进一步改进,所述步骤2中,设置端口号及口线位对应排列的二维常量数组的方法为:
[0015]使用一个0到m的无符号字符型变量,分别代表0到m号口线;常量数组下标[0][0]、[0][1]元素分别存储0号口线的端口号、口线位,[m][0]、[m][1]元素分别存储m号口线的端口号、口线位;
[0016]其中,P0到P7等端口号分别用0到7表示,口线位n写成口线所处位为“1”其它为“0”的单字节数,或写成“1左移n位”;
[0017]作为本技术方案的进一步改进,所述步骤2中,设置端口号及口线位对应排列的二维常量数组,此步骤并非必须,如果省略此步骤及常量数组,将不方便对IO口线设置和程序移置、不可遍历IO口线;并且需在步骤3中通过选择或判断语句逐一指定需操作的端口号及口线位。
[0018]作为本技术方案的进一步改进,所述步骤3中,在对单片机IO口线操作前使用一个带参数的IO口设置函数,函数从步骤2中设置的二维常量数组,取出端口号值及口线位值分别写入两个8位的全局变量保存,从而指定后续的口线操作均对应某一口线;IO口线设置函数参数选取步骤2中的0到m。
[0019]作为本技术方案的进一步改进,所述步骤4中,IO口线操作语句写成对功能选择指针变量数组中对应的指针变量元素赋值或取值,具体方法为:
[0020]对端口对应的指针元素赋值时,赋1值仅对口线位“或1”、赋0值仅对口线位“与0”;
[0021]读取口线值时,端口对应的指针元素做口线位“与1”变换并增加“()”。
[0022]作为本技术方案的进一步改进,所述步骤1中,创建指向IO口地址指针的指针变量数组的具体方法还包括:
[0023]如果此单片机MCU没有P6口,则删除P6的定义;
[0024]如果有P7口则可增加P7的定义;
[0025]如果MCU有P0口,可将数组中第0个元素的0值改为“(char*)P0”等类似语句;
[0026]不同类型的MCU,可查询MCU的头文件来获得对IO口功能寄存器地址(指针)定义的名称;
[0027]如果还有PxSEL等需要,相应增加指针变量数组“*PxSEL”的定义即可。
[0028]作为本技术方案的进一步改进,所述步骤3中,取出将要操作的端口号值及口线位值分别写入两个8位的全局变量保存,这两个8位的全局变量可省略,但所述步骤3中对单片机IO口线操作前使用的带参数的IO口设置函数,需变成对步骤2中常量数组指针的跳转。
[0029]本专利技术的目的之二在于,提供了一种方法运行平台装置,包括处理器、存储器以及存储在存储器中并在处理器上运行的计算机程序,处理器用于执行计算机程序时实现上述的利用C程序指针及函数参数实现单片机任意IO口线操作的方法的步骤。
[0030]本专利技术的目的之三在于,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述的利用C程序指针及函数参数实现单片机任意IO口线操作的方法的步骤。
[0031]与现有技术相比,本专利技术的有益效果:
[0032]1.该利用C程序指针及函数参数实现单片机任意IO口线操作的方法,可以解决直接操作IO的方式中,根据需操作的IO口数量增加,会增加大量重复代码,占用大量存储空间的问题;同类型外围设备的操作(含本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.利用C程序指针及函数参数实现单片机任意IO口线操作的方法,基于C程序语言指针的指针和带参数函数访问、控制、选通所需的IO口线,其特征在于:按IO口所需操作功能数量增加相应数量的指向IO端口功能寄存器地址指针的指针变量数组,对于只有P1到Px口的单片机,指针数组的0元素值为0,1号元素值对应P1口的功能寄存器地址,且元素值做强制指针类型转换,x号元素对应x端口功能地址的指针类型转换值;在使用IO口线操作前,先设定端口号、口线位,在后续的IO口操作中,IO口线操作语句转换为对指针变量数组中端口号对应的指针变量元素赋值或取值;具体包括如下步骤:步骤1、创建指向IO端口功能寄存器地址指针的指针变量数组;步骤2、设置端口号及口线位对应排列的二维常量数组;步骤3、在对单片机IO口线操作前,使用一个带参数的IO口设置函数,取出将要操作的端口号值及口线位值分别写入两个8位的全局变量保存;步骤4、IO口线操作语句写成对步骤1指针变量数组中对应的指针变量元素赋值或取值。2.根据权利要求1所述的利用C程序指针及函数参数实现单片机任意IO口线操作的方法,其特征在于,所述步骤1中,创建指向IO口地址指针的指针变量数组的具体方法为:使用所选单片机C程序头文件中定义的IO口功能地址定义字强制类型转化为指针后,创建一维指针变量数组,指针数组中保存IO口功能指针元素的顺序分别对应端口号,即数组元素下标等于单片机端口号,以实现对不同端口的操作转换为对指针变量数组元素的赋值。3.根据权利要求1所述的利用C程序指针及函数参数实现单片机任意IO口线操作的方法,其特征在于,所述步骤2中,设置端口号及口线位对应排列的二维常量数组的方法为:使用一个0到m的无符号字符型变量,分别代表0到m号口线;常量数组下标[0][0]、[0][1]元素分别存储0号口线的端口号、口线位,[m][0]、[m][1]元素分别存储m号口线的端口号、口线位;其中,P0到P7等端口号分别用0到7表示,口线位n写成口线所处位为“1”其它为“0”的单字节数,或写成“1左移n位”。4.根据权利要求3所述的利用C程序指针及函数参数实现单片机...

【专利技术属性】
技术研发人员:冯乔春匡华陈武樊金泽杨子力
申请(专利权)人:云南电网有限责任公司曲靖供电局
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1