在Keil中,主程序和子程序的放置和调用通常遵循以下步骤:
定义子程序
在主程序文件之外,定义子程序函数的实现。这可以在同一个源文件中,也可以在不同的源文件中。
如果需要在程序中多次调用同一个子程序函数,可以将其定义为独立的函数模块,并在需要的地方进行调用。同时,还可以通过使用指针来调用不同的子程序函数,实现更加灵活的程序设计。
包含子程序的头文件
在主程序中包含子程序的头文件。头文件通常包含子程序函数的声明。
调用子程序函数
在主程序中的适当位置,使用函数调用语句来调用子程序函数。函数调用语句的形式为函数名(参数列表),其中参数列表根据子程序函数的定义进行提供。
编译和链接
将主程序文件和子程序文件一起编译,并确保它们都被正确链接。这可以通过Keil的编译器和链接器完成。
示例
假设我们有一个排序子程序,使用冒泡法将内部RAM 50H~5BH中的单字节无符号的正整数按从小到大的次序进行排列。我们可以按照以下步骤进行操作:
定义子程序
```c
include "reg52.h"
define uint unsigned int
define uchar unsigned char
uchar data I_RAM _at_ 0x50; // 在50H~5BH位置设置单字节变量
void sort_ram() {
uchar i, num, temp;
for (num = 11; num > 0; num--) {
for (i = 0; i < num; i++) {
if (I_RAM[i] > I_RAM[i + 1]) {
temp = I_RAM[i];
I_RAM[i] = I_RAM[i + 1];
I_RAM[i + 1] = temp;
}
}
}
}
```
在主程序中调用子程序
```c
void main() {
uchar i;
// 初始化RAM
I_RAM = 0xD3;
// 调用排序子程序
sort_ram();
// 其他主程序逻辑
while(1); // 排序结束,可以在keil软件中,观察变量的内容.
}
```
编译和链接
将主程序和子程序保存在同一个源文件中,或者分别保存在不同的源文件中。
使用Keil的编译器和链接器将它们一起编译和链接。
通过以上步骤,我们可以在Keil中成功地将子程序放置和调用到主程序中。这样做可以提高程序的可读性、可维护性和可重用性。