导航:首页 > 操作系统 > 51单片机编译

51单片机编译

发布时间:2025-02-15 19:45:32

❶ 51单片机编程问题

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的值被函数使用了,编程者不必恢复调用前的值。

❷ 51单片机出编译出错,错在哪里

用 ^ 定义位是不能用define的需要改成sbit

直接用define就相当于P3^(5=0);常量不能给常量赋值,所以就会报错


#define LCM_RS P3^5
#define LCM_E P3^4

改成

sbit LCM_RS= P3^5;
sbit LCM_E = P3^4;

sbit LCM_RW = P3^1;

即可

❸ 51单片机能否用ICC AVR编译软件编程

ICC AVR只能用来编译AVR单片机,51单片机通常是用KEIL来编译。两种单片机结构、指令都不一样,所以编译软件也不能混用。

❹ 主流C51单片机编译器比对

int short 的大小是因机器而异嘛(准确点应该是编译器)。你都说了人家规定的是“最小”为16位,又不是只能是16位,也没有说两者应该相等(事实上是short不超过int就OK啦)。所以当然可以short类型为半个机器字长,而int类型则为一个机器字长的啦。

“C++标准规定了每个算术类型的最小存储空间,但他并不自知编译器使用更大的存储空间 ”

说简单点就是C++规定了个最小的值,但是将你的代码编译成机器码的编译器则确定了你这个长度值为多少。因为C++是一种语言,一个规范,或者说只是一种规定,然后要将你按这种规范写的代码编译成能在机器上运行的代码的是编译器。而在不同的机器上运行的程序的实际结构是不一样的,比如单片机与PC相差就很大。要将按相同规范写的程序在各种各样乱七八糟的机器上运行,就需要相应的编译器了。所以实际的大小是由你编译代码的编译器确定的。

PS:当然当前一般的PC上int都是32位,short16位的。因为现在32位的机子是主流嘛。如果你不写什么单片机的程序可以不用太在意这个问题。但是写单片机程序时就要注意了,因为一般一个单片机的编译器可以编译很多种型号芯片的代码,而这些型号有可能从8位到32位都有……

❺ 51单片机能编译多少行

取决于51单片机上的Flash存储器大小。
一般不用多少行来描述,而是能编译多少Kb程序。通常51单片机只有2~8Kb,因此程序容量不大。有些可以达到64Kb,可以做很大的程序和处理较大的数据量。
2Kb大约不超过200行,8Kb能到500行,64Kb基本无限制了。此后看软件是否有限制,通常没有注册的只能编译大约8Kb~32Kb的。

❻ 51单片机c语言是指哪些

单片机C语言编程是基于C语言进行单片机开发的一种方法。其中,C51编译器是开发单片机C语言程序的主要工具,它能够帮助开发者编写高效、简洁的程序代码。

使用C51编译器编写的C语言程序具有多个优点。首先,由C51编译器生成的目标代码长度较短,运行速度较快,这对于资源有限的单片机系统尤为重要。其次,C51编译器支持C语言的ANSI标准,使得开发者能够利用熟悉的C语言特性进行编程。此外,C51编译器生成的代码遵循Intel目标文件格式,这使得C51程序能够与A51汇编语言或PL/M51语言编写的程序兼容,从而方便了代码的混合使用。

总的来说,C51编译器为单片机开发提供了一种强大的编程工具。它不仅能够生成高效、紧凑的代码,还支持标准C语言特性,同时具备良好的兼容性,使得开发者能够更加灵活地进行单片机应用开发。

❼ 51单片机如何编译成程序

1、首先在电脑上用proteus软件打开目标文件。然后用鼠标左键双击51单片机图标,如图所示。然后在出现的窗口中,点击下图中的文件夹图标。然后在电脑文件夹中找到编译好的HEX文件导入。

2、keil里编译时,设置输出文件为.HEX文件格式。然后在proteus中打开CPU属性,在程序设定栏填入HEX文件路径及名称(也可以通过后面的浏览按钮找到该文件,选中即可)。然后运行即可。

3、proteus里,双击单片机,跳出一对话框,点击programFile边上的文件夹按钮,找到你的那个HEX文件,就可以加载。

4、先在keil中把程序编好,在PROTEUS中双击单片机,之后出现这个页面在对话框中找到你keil编写的程序的文件即可。

5、,用keil生成.hex文件,在isis中右击at89c51,再左击,出现相应元件的属性对话框“ProgramFile”一项中选择要加入的.hex文件。

6、工具/原料windowsXPPROTEUS生成的HEX文件方法/步骤PROTEUS安装好后,默认不会在桌面上产生快捷方式。

阅读全文

与51单片机编译相关的资料

热点内容
程序员放弃后会怎样 浏览:182
河北模具编程 浏览:187
adb查找命令 浏览:321
安卓手机视频文件夹怎么打开 浏览:309
平板加密手机后怎么关闭 浏览:567
流媒体服务器应该注意什么 浏览:536
d8命令编译 浏览:964
压缩包解压需要多少空间 浏览:145
如何查找app属性 浏览:388
android人脸识别技术 浏览:322
pc104编程 浏览:335
二维码反编译破解推广 浏览:682
修改服务器的mac地址 浏览:528
好玩的编程软件 浏览:899
编程语言创始人有钱吗 浏览:804
短视频app怎么获客 浏览:15
查看云服务器的应用 浏览:436
javadump工具 浏览:565
程序员16g 浏览:445
程序员没有办法成为top怎么办 浏览:218