阅读:1597回复:5
关于keil c51的语法
我使用的是cypress的68013 usb接口芯片,他内嵌了一个8051处理器,我想问的是:用keil c51怎样写一条语句就能实现通过8051的读写信号以及地址线数据线对外部ram的访问?也就是说,想让8051的地址线数据线有效,用c51怎样写? 请各位帮个忙!
20分,以回答就给。 |
|
|
沙发#
发布于:2003-08-14 09:06
知道你的意思了!
你是说怎样实现c语言直接对存储器进行操作。 这实际上是参数传递的问题。 方法如下:(给分哦) |
|
|
板凳#
发布于: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参数中: (给分后回答) 呵!!!!!!!!!!!!!! 以后多多讨论! |
|
|
地板#
发布于:2003-08-14 11:57
你的外部ram不是有地址吗,比如0x3322,
你定义一个指针unsigned short *pAddress; 然后pAddress = (unsigned short *)0x3322, 这样你就可以用*pAddress读写数据了 读:i = *pAddress,写:*pAddress = i; 你可以试试。 这只是一种方法,我想应该有更简单的方法才对。 |
|
地下室#
发布于:2003-10-14 22:59
如果在64k内的话 可以用 XBYTE[0x****];来读写外部ram。例如
i=XBYTE[0x0030]; XBYTE[0x2000]=j; 如果大于64k (页扩展)就用 FVAR(char,0x******); char为读取类型 可以是char ,int long 等 |
|
5楼#
发布于:2003-10-15 08:17
如果在64k内的话 可以用 XBYTE[0x****];来读写外部ram。例如 对,这个最常用了~ 推荐你个地方 www.c51bbs.com和/www.mcu51.com 这2个c51论坛能解决你大部分的问题。 :D |
|