1:C51编译器如何区分位地址和字节地址
是靠预定义实现的,比如:sfr P0 = 0x80; sbit P0_0 = 0x80;前者声明了P0端口地址位于0x80,后者说明了P0端口的bit0,即P0.0位于位地址空间0x80处。这2个0x80具有完全不同的含义,靠关键字sfr和sbit来区别。这样当程序被编译时,编译器会依此编译成相应的汇编语言。例如:
C51语句: P0 = 1;
P0声明为sfr,因此编译成:mov 80h,01h,将把0x01数据送入0x80单元,由于0x80单元物理上对应P0端口,因此,P0.0脚将输出高电平(其实是呈现高阻态,P0口独有的),其他.1-.7脚输出低电平。
C51语句: P0_0 = 1;
P0_0声明为sbit,因此编译成:setb 80h,这将把位地址空间的0x80地址的bit的值置1。这个位正是P0口的bit0,执行后,P0.0将输出高阻态。而P0.1-.7不会变化。
2:C51为什么要嵌套汇编
51单片机一个显着优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合ISO7816协议的cpu卡的读写,对时序要求比较严格。其实就是用io脚做出来的同步半双工串口。支持cpu卡的程序一般比较庞大,需要用c51来组织,但是由于c编译的不确定性,必须把底层程序封装成汇编语言模块嵌入到工程中。这就带来几个问题:如何声明函数、参数如何传递等。限于篇幅,不能说得很细。下面举例:
汇编程序单独保存一个文件,加入到工程中,函数如下:
_proc_a:
mov a, r7
inc a
mov r7, a
ret
用c语言在.h文件中声明: extern unsigned char proc_a(unsigned char val);
调用时形如: retvalue = proc_a(0x11);
说明:
a:汇编程序如果带参数,则需要在汇编程序前多加一个下划线。而声明它的地方不用加(伟福编译器这么要求的)。
b:函数的形参中第一参数用R7传递,函数返回值用R7返回,这是C51的通用规范。其他参数都有相应规定。函数可以返回一个位,用psw的c位返回。c:上面的语句,执行顺序是把0x11给R7,然后跳转子程序,子程序将它加1后送回。
d:函数跳转到汇编程序时,本区的R0-R7,A,B,PSW,DPTR等寄存器可以供子程序使用,不必考虑调用后是否要恢复这些常规资源。上例中,A的值被函数使用了,编程者不必恢复调用前的值。
2. WAVE6000未安装编译器或者指定路径错误 怎么解决 提示说请使用伟福安装盘,运行LAB2000安装 求高人解决
你先双击进入伟福软件编辑器,然后点击菜单栏中的编辑器,选择仿真器设置,在选择语言栏,看到让你输入的编辑器路径了吗,选择正确的编译器路径,然后再编辑试试!如果你用的是51可以选择这个编译器comp51 这是路径C:\comp51\COMP51V6\;如果没有编译器可以到csdn下载个!
3. 如何在伟福中使用c
你可以下栽免费的keil c51,将他的编译器拷到wave的根目录,然后改变wave界面中的编译器的连接地址。
4. 程序设计好后 怎么实现不安装编译器就能运行的
用不需要编译的语言来写程序,就不需要安装编译器就能运行。例如脚本语言。
需要编译的语言写的程序,如果在别的机器上编译,或通过网络(例如通过WinVNC) 用别的机器上的编译器来编译,那么本机就不需要安装编译器。
5. 为什么我用伟福的编译C文件时候出现"未安装编译器或编译器路径指定错误"
用别的编译器好了
介绍你下这个下载Turbo C/C++ 3.0
http://www.pay500.com/s6/67269.htm