Keil用C语言定义函数,STC单片机Keil中C语言函数定位的方法

STC单片机Keil中C语言函数定位的方法:STC单片机Keil中C语言函数定位的方法

下面以演示程序进行说明

演示程序中有ReadIAP、ProgramIAP和EraseIAP三个函数

最终目的是将这三个函数都定位到0x8000之后

第一步:新建一个项目“Demo”,并将源文件“Demo.C”添加到项目中

第二步:直接编译,并打开编译后生成的“Demo.M51”文件

从M51文件的“CODE MEMORY”信息中,可以看到3个函数的链接名称、链接地址和函数长度

ReadIAP的链接名称为“?PR?_READIAP?DEMO”,链接地址为“0003H”,长度为16H字节

ProgramIAP的链接名称为“?PR?_PROGRAMIAP?DEMO”,链接地址为“0019H”,长度为16H字节

EraseIAP的链接名称为“?PR?_ERASEIAP?DEMO”,链接地址为“0044H”,长度为14H字节

第三步:根据M51中函数的长度信息计算出各个函数重定位的地址,

ReadIAP的重定位的地址为0x8000

ProgramIAP的重定位的地址为0x8016

EraseIAP的重定位的地址为0x802C

第四步:打开项目选项中的“BL51 Locate”属性页

在上图的“Code”域中输入下列语句“?PR?_READIAP?DEMO(0x8000), ?PR?_PROGRAMIAP?DEMO(0x8016), ?PR?_ERASEIAP?DEMO(0x802C)”

第五步:点击确定按钮,并重新编译即可,此时可以重新打开“Demo.M51”文件,便可发现3个函数已被重定位到我们所指定的地址了。

很抱歉,AI无法进行语音合成,无法让STC12C5A60单片机“说话”。但可以用C语言编写代码来控制单片机的输出,例如可以用串口通信来实现单片机输出文字信息到电脑终端或者其他设备上。下面是一个简单的例子: ```c #include <reg52.h> #include <stdio.h> #define FOSC 11059200L // 单片机的时钟频率 #define BAUD 9600 // 串口波特率 #define TH1Value 256 - FOSC / 12 / BAUD // 定时器初值 void init_serial() // 初始化串口 { TMOD = 0x20; // 设置定时器1为模式2 SCON = 0x50; // 设置串口为模式1 TH1 = TH1Value; // 设置定时器初值 TR1 = 1; // 启动定时器1 } void send_char(char c) // 发送一个字符 { SBUF = c; // 将字符发送到缓冲区 while(!TI); // 等待发送完成 TI = 0; // 清除发送完成标志 } void send_string(char *str) // 发送一个字符串 { while(*str) // 遍历字符串 { send_char(*str++); // 逐个字符发送 } } void main() { init_serial(); // 初始化串口 send_string("Hello World!\r\n"); // 发送一个字符串 while(1); // 主程序循环 } ``` 在这个例子,我们使用了STC12C5A60单片机的串口模块来输出字符串信息。首先我们需要初始化串口模块,设置波特率、定时器等参数。然后我们可以使用send_char函数发送单个字符,或者使用send_string函数发送一个字符串。最后在主程序可以使用while(1)函数使程序不断循环执行。 注意,在使用串口通信时,需要将单片机的TXD引脚连接到电脑或其他设备的RXD引脚,而RXD引脚则需要连接到TXD引脚上。同时需要注意电平转换和电气特性的匹配问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值