4872|5

4008

帖子

0

TA的资源

版主

楼主
 

51单片机C语言嵌入汇编使用高128字节存储区 [复制链接]

本帖最后由 huo_hu 于 2014-4-16 12:56 编辑

我们知道C52单片机带有256字节ram,其中的高128字节的只能用R0R1做寄存器间接寻址访问,这部分内存很少有程序用到,很多书上访问这部分存储单元都是汇编语言。C语言虽然可以使用扩展关键字idata做访问,但是指定RAM地址时程序编译会出问题。
本贴讲述如何使用C嵌入汇编语句访问高128RAM。
首先在keilC项目中加入一个源文件,右键选择文件选项


钩选上这两个

src文件是混合编译的中间过程文件,由编译器自动生成。
编写两个读写函数
#include "REG52.h"
//写入高端,addr:写入地址,val:写入值
void Write(unsigned char addr,unsigned char val) {
ACC=addr;
B=val;
#pragma ASM
  MOV  R0,A
  MOV  @R0,B
#pragma ENDASM
}
//读取,addr:读取地址,返回值:地址内容
unsigned char Read(unsigned char addr) {
ACC=addr;
#pragma ASM
  MOV  R0,A
  MOV  A,@R0
#pragma ENDASM
return ACC;
}

编译预处理
#pragma ASM
#pragma ENDASM
之间是汇编代码。
编译后工程目录里会生成一个src文件,打开它看看。

主函数里测试
#include "REG52.h"
typedef unsigned char uint8;
typedef unsigned int  uint16;
extern void Write(uint8 addr,uint8 val);
extern uint8 Read(uint8 addr);

int main(void) {
uint8 i,readval;
//地址128~255写入0~127
for (i=128;i!=0;i++)
  Write(i,i-128);
//读出
for (i=128;i!=0;i++)
  readval=Read(i);
while(1) {
}//end while(1)
}

调试是有嵌入汇编的原来的c程序是不能设定断点的,要在src文件里设置断点。





数据已经写入



此帖出自51单片机论坛

最新回复

学习中……  详情 回复 发表于 2015-11-2 10:28
点赞 关注
 

回复
举报

4008

帖子

0

TA的资源

版主

沙发
 
自己做沙发
此帖出自51单片机论坛
 
 
 

回复

173

帖子

0

TA的资源

纯净的硅(初级)

板凳
 
还是汇编更直截了当。
此帖出自51单片机论坛

点评

你不可能永远停留在51上,哪天平台一换汇编就全报废了.  详情 回复 发表于 2014-4-18 16:10
 
 
 

回复

4008

帖子

0

TA的资源

版主

4
 
ahshmj 发表于 2014-4-18 12:54
还是汇编更直截了当。

你不可能永远停留在51上,哪天平台一换汇编就全报废了.
此帖出自51单片机论坛

点评

汇编、c不相互排斥。可以同时掌握。 不使用c语言的不一定不是高手,但是不会汇编的一定成不了高手!  详情 回复 发表于 2014-6-2 09:35
 
 
 

回复

173

帖子

0

TA的资源

纯净的硅(初级)

5
 
huo_hu 发表于 2014-4-18 16:10
你不可能永远停留在51上,哪天平台一换汇编就全报废了.

汇编、c不相互排斥。可以同时掌握。
不使用c语言的不一定不是高手,但是不会汇编的一定成不了高手!
此帖出自51单片机论坛
 
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

6
 
学习中……
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表