yamaxida
驱动牛犊
驱动牛犊
  • 注册日期2002-10-10
  • 最后登录2005-10-25
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1597回复:5

关于keil c51的语法

楼主#
更多 发布于:2003-08-14 08:21
我使用的是cypress的68013 usb接口芯片,他内嵌了一个8051处理器,我想问的是:用keil c51怎样写一条语句就能实现通过8051的读写信号以及地址线数据线对外部ram的访问?也就是说,想让8051的地址线数据线有效,用c51怎样写?  请各位帮个忙!
20分,以回答就给。
***尘嚣***
maxipeiz
驱动小牛
驱动小牛
  • 注册日期2003-01-28
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-08-14 09:06
知道你的意思了!
你是说怎样实现c语言直接对存储器进行操作。
这实际上是参数传递的问题。
方法如下:(给分哦)
天高任鸟飞
maxipeiz
驱动小牛
驱动小牛
  • 注册日期2003-01-28
  • 最后登录2004-12-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-08-14 09:25
不知道你会不会用汇编编程,要是会的话,那一定也会用汇编队存储器操作吧?要是不会我下面的话就白费了。
c语言中对参数操作实际上是对单片机的R7、R6进行操作。
当参数定义为char型时,参数的值存在r7中,int型存在r6,r7中,long,float型存在r4-r7中。要想将参数的值写到其他存储器中,就要经过r7等进行传递。这就涉及到参数的传递问题。
1。将c中参数的值写到单片机的存储器中:
    假设将c中的char 型x 中的数写到存储器40H中,可这么操作:
char x;
main
{
  x=0xAAH;
 chuanx(x);            //C程序
}
void chuanx(xx)      
{
#pragma asm
MOV     40H,R7       //汇编程序
#pragma endasm
}
对外部数据存储器的访问一样。
2。将存储器中的数据写到c参数中:
   (给分后回答)
呵!!!!!!!!!!!!!!
以后多多讨论!
天高任鸟飞
jinghuiren
驱动巨牛
驱动巨牛
  • 注册日期2002-06-01
  • 最后登录2008-10-27
  • 粉丝0
  • 关注0
  • 积分291分
  • 威望460点
  • 贡献值0点
  • 好评度428点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-08-14 11:57
你的外部ram不是有地址吗,比如0x3322,
你定义一个指针unsigned short *pAddress;
然后pAddress = (unsigned short *)0x3322,
这样你就可以用*pAddress读写数据了
读:i = *pAddress,写:*pAddress = i;
你可以试试。

这只是一种方法,我想应该有更简单的方法才对。
sjshe
驱动牛犊
驱动牛犊
  • 注册日期2003-10-02
  • 最后登录2006-09-18
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-14 22:59
如果在64k内的话 可以用 XBYTE[0x****];来读写外部ram。例如
i=XBYTE[0x0030]; XBYTE[0x2000]=j;
如果大于64k (页扩展)就用 FVAR(char,0x******); char为读取类型 可以是char ,int long 等
wdy9927
驱动老牛
驱动老牛
  • 注册日期2003-08-04
  • 最后登录2017-02-04
  • 粉丝0
  • 关注0
  • 积分89分
  • 威望143点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2003-10-15 08:17
如果在64k内的话 可以用 XBYTE[0x****];来读写外部ram。例如
i=XBYTE[0x0030]; XBYTE[0x2000]=j;
如果大于64k (页扩展)就用 FVAR(char,0x******); char为读取类型 可以是char ,int long 等  


对,这个最常用了~

推荐你个地方
www.c51bbs.com和/www.mcu51.com
这2个c51论坛能解决你大部分的问题。 :D
游客

返回顶部