C51函数是如何调用

C51函数是如何调用,第1张

在你原来的函数基础上,加上三个参数,分别是:

1 要 *** 作的PORT口

2 要进行的 *** 作

3 要 *** 作的引脚

当然,如果你的目标很明确,可以把以上三个参数裁剪掉一些,利于系统的效率提高.

下面是我写的示例程序,你可能参考一下:

#include<reg52.h>

#define Pin0 0x01

#define Pin1 0x02

#define Pin2 0x04

#define Pin3 0x08

#define Pin4 0x10

#define Pin5 0x20

#define Pin6 0x40

#define Pin7 0x80

#define OPT_CPL 0x00 //----取反某位 *** 作

#define OPT_CLR 0x01 //----清零某位 *** 作

#define OPT_SET 0x02 //----置一某位 *** 作

void Operate(

/*这里写你原来的参数,*/

unsigned char Port_Num,

unsigned char Opr_Style,

unsigned char Pins

)

{

//----如果在单片机PORT口范围之内,刚读取当前PORT口的状

//----如果不在范围之内喊拆灶,死循郑扮环

//----注意,为了效率起见,这个部分可以根据实际应用进行裁剪

if(Port_Num == 0)

{

Port_Num = P0

}

else if(Port_Num == 1)

{

Port_Num = P1

}

else if(Port_Num == 2)

{

Port_Num = P2

}

else if(Port_Num == 3)

{

Port_Num = P3

}

else

{

while(1)

}

//----如果是取反相应位,进行异或 *** 作

//----如果清零相应位,则位与 *** 作

//----如果置位相应位,则位或 *** 作

//----如果都不在范围之内,则死循环

//----这段代码也根据实际情况裁剪

if(Opr_Style == OPT_CPL)

{

Port_Num ^= Pins

}

else if(Opr_Style == OPT_CLR)

{

Port_Num &= ~Pins

}

else if(Opr_Style == OPT_SET)

{

Port_Num |= Pins

}

else

{

while(1)

}

//----如果在单片机PORT口范围之内,刚读取当前PORT口的状

//----如果不在范围之内,死循环

//御烂----注意,为了效率起见,这个部分可以根据实际应用进行裁剪

if(Port_Num == 0)

{

P0 = Port_Num

}

else if(Port_Num == 1)

{

P1 = Port_Num

}

else if(Port_Num == 2)

{

P2 = Port_Num

}

else if(Port_Num == 3)

{

P3 = Port_Num

}

else

{

while(1)

}

//----以上的内容,可根据实际情况进行裁剪,以实现程序最优化

//----添加你的功能的其他代码---------------

}

void main(void)

{

//----使用示例:函数功能的同时,置位P2口的P2.0,P2.5,P2.7

Operate(/*这里写你原来的参数*/2,OPT_SET,(Pin0|Pin5|Pin7))

//----使用示例:函数功能的同时,清零P1口的P1.2,P1.5,P2.6

Operate(/*这里写你原来的参数*/1,OPT_CLR,(Pin2|Pin5|Pin6))

}

这样给你说吧。当单片机运行起来的时候是高速运转你while(1)里面的程序。但是这样是不够的,比如你想把某个信号传递给单片机让它处理,比如说:你按了某个键来控制某个灯的亮灭,这时候就需要单片机来响应你的动作,响应的方式就是中断。也就是说你在主程序中滑并磨完成了某个中断的触发条件时,当达到这个条件时程信斗序就会跳转到中断服务函数中去,执行完中断服务函数中的蔽埋程序后再返回主程序中继续循环执行。你说的调用其实不太正确,中断服务函数只能触发,它是由单片机内特定的某些寄存器的标志位控制的,当这些满足触发条件的时候,标志位被硬件置1,然后自动执行你编写的中断服务函数。

说的不是很清楚,请见谅,中断是单片机内最重要的功能之一,与之对应的还有定时器(这是单片机的心脏),这些内容在51里面都是很简单的,但是到了32位单片机里面会变得特别复杂。

希望这些内容能给你一些帮助。

你可以写一个头文件,比如说腔备<delay.h>之类的,开始写51程序的时候,#include <delay.h>就可以放进去了,这条语句相当于展开这个文件。你可以把它放在任意的路径,最好是和<reg51.h>一个文件夹,方便直接用,就不用每伍裂毁次使用都要查找它的路径了。希望能够帮源茄到你


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12289281.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存