㈠ 单片机c51有哪几种编译模式
下面仅对C51在变量定义中注意的问题以及与80C51存储资源有关的问题作说明,其余遵循C语言的规定。1.变量声明在变量的声明中,可以包括存储类型和signed或unsigned等属性。如:(1)chardatavar1;定义字符型变量var1,被分配在内部RAM低128B,编译后,通过直接寻址方式访问。(2)charcodetext[]=“ENTERPARAMETER”;定义字符数组text[],将其分配到程肆李序存储区,并赋初始值“ENTERPARAMETER”。编译后,通过MOVCA,@A+DPTR访问。(3)unsignedlongxdataarray[100];定裂锋迟义无符号长整型数组array[100],将其分配到外RAM中,编译后,通过MOVXA,@DPTR访问。(4)floatidatax,y,z;定义浮点类型变量x,y,z,将其分配到内RAM中,编译后,通过间接寻址方式访问基则。(5)unsignedintpdatadimension;定义无符号整型变量dimension,将其分配到外RAM中,编译后,通过MOVXA,@Ri指令采用分页的形式访问。(6)unsignedcharxdatavector[10][4][4];定义无符号字符型数组vector[10][4][4],将其分配到外RAM中,编译后,通过MOVXA,@DPTR访问。(7)charbdataflags;定义字符型变量flags,将其分配到可位寻址的内部数据存储器中,可以以字节方式访问,也可以以位方式访问。
㈡ 51单片机用什么软件编程
51单片机用什么软件编程介绍如下:
与汇编相比,C语言在功能上、结构性、可读性、握腔可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。KeilC51软件提供丰富的函数库个功能强大的集成开发调试工具,全Windows界面。
㈢ 51单片机程序编写(劳驾写得详细一点)
#include <宴谈reg51.h>
void delay(unsigned int n)
{
while(n--);
}
void main()
{
char i;
//可以编好想要怎么流水的灯位的状消银态
unsigned char led[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
while(1)
{
for(i=0;i<8;i++)
{
P1=led[i]; //晌桥碰LED接在P1口
delay(10000);
}
for(i=0;i<8;i++)
{
P1=led[8-i];
delay(10000);
}
}
}
㈣ 51单片机如何使用
使用51单片机需要达到以下基本条件:
1、至少要搭建一个最小系统;
2、你需要编制一个51的控制程序;
3、你需要将程序编译连接成HEX或BIN格式的代码并下载或烧录到51单片机。
这样你就可以使用这款51单片机了。
㈤ 用c++怎样编写51单片机程序
相信很多初学者都有同样的疑问,也有同样的希望。就是用C++语言来写单片机程序的源代码。现在我来解释一下单片机的源代码程序几乎没有人用C++来写的。x0dx0a1. 假设一下你现在用C++写完了一个程序代码。那么你要让单片机认识必须要编译吧,对吧 。请问你有合适的编译软件来编译你的代码吗?x0dx0a2. 就算有编译器能编译,你能保证它的代码效率一定能给单片机用吗?x0dx0a 单片机的ROM是K级的水平,执行指令的速度也远远小于PC。绝对不能和PC机相比的禅誉。这个就决定了单片机编程时很多时候要考虑它的代码效率和代码大小问题。所以一般情况下对于单片机编程我们之用汇编语言或者C语言。就算是用C写程序也要注意代码的效率等问题。x0dx0a 还有就是只有很大型的项目及应用程序开发才有可能有C++来写程序。一般的系统文件,应用程序都是用C来写的。有的系统代码甚至要用汇编语言来写。x0dx0a举个生活中的例子:如果你从家里去公司上班你一般的出行方式是什么?x0dx0a1.坐公车 2.骑车 3.自己开车 4.坐地铁 5.走过去。如果谁说他是做直升飞机去上班的。那要么这个人脑子不正常,要么就是太有钱了炫富。如果你要打苍行袭链蝇用苍蝇拍子就行了。如果要你用巡航导弹来打苍蝇,你认为可能吗?x0dx0a 所以我们单片机写程序的话一般就档孙是汇编语言和C语言。几乎没有人用C++语言的。
㈥ 单片机编程步骤
学单片机如何编程?非常详细的Keil工程建立全过程讲解
从零学电子
03-07
在单片机的开发或使用过程中除了掌握必要的硬件外,同样离不开软件,只有通过软件(程序)的执行,硬件才能发挥出具体的作用。机器如何认识我们用各种符号编写的程序呢?早期我们写的汇编语言源程序要变为CPU可以执行的机器码有两种方法,一种是手工汇编,另一种是机器汇编,目前已极少使用手工汇编的方法了。机器汇编是通过汇编软件将源程序变为机器码,随着单片机开发技术的不断发展,从使用汇编语言逐渐过渡到使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最为流行的开发MCS-51系列单片机软件。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。Keil软件对计算机的硬件资源要求很低,可以说现在市面上的计算机都能满足其硬件需求。
Keil C51
Keil C51是51系列兼容单片机C语言软件开发系统,采用全Windows界面,提供了丰富的库函数和功能强大的集成开发调试工具。生成的目标代码效率非常之高,且生成的汇编代码紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。相信用过汇编语言后再使用C来开发,体会更加深刻,当然如果汇编语言和硬件结构熟练到一定程度,使用汇编语言会更具优势,但对于大部分初学者而言,Keil C51应该是首选。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
Keil uVison4是普通版本,只能适用于单片机,主要是基于8051系列单片机的开发环境;Keil MDK是扩展版本,包含了部分ARM。为基于Cortex-M、Cortex-R4、ARM7、ARM9处理器设备提供了一个完整的开发环境;初学者建议采用Keil uVison4及更低版本,注意:Keil uVison4分Keil MDK-ARM和Keil C51版本,初学者应安装Keil C51版的。
关于Keil软件的安装与常用其它软件安装的方法类似,安装按照说明一步一步操作即可,不再赘述。本文主要详细讲解用Keil uVison4新建一个工程的详细过程,相信通过这个教程的学习,您一定会对使用Keil软件创建一个新的工程有深入的掌握。
第一步:从桌面找到Keil图标,双击图标启动Keil软件,
启动Keil
会看到如图所示界面。
启动后的界面
第二步:点击菜单条中的"Project"并从下拉菜单中选择"New uVision Project…",
新建工程
自动弹出一个项目路径选择对话框,(若打开keil软件时,如果发现此软件默认打开了一个之前已经存在的工程,请先关闭此工程。点击上面"Project"选项,在弹出的下拉菜单中选择"Close Project"即可。)
选择路径新建文件夹
在弹出的对话框中,选择即将创建工程的保存路径和文件夹,若不存在可以用与Window系统一致的方法新建文件夹,如"TEST",并在该文件夹下的对话框文件名处输入自己为工程起的工程名,如下图输入的LCD1602。
输入工程名
第三步:输入文件名点击保存后,弹出如图所示控制器选择对话框,
选择单片机类型
在单片机类型列表中找到并选中"Atmel"下的AT89C52(大家根据自己控制器型号选择),右侧区域给出所选单片机的硬件资源,
单片机的硬件资源说明
点击"OK",弹出询问是否将标准51系列启动代码添加到新建工程中的弹窗,因为keil的库文件里面已经有一个默认的启动代码了,如果你的工程里没有启动代码,keil就会使用库里的默认启动代码,如果有,keil就会编译并使用你的启动代码,库里的启动代码会被忽略。(初学者建议点击"否即可")
选择是否添加启动代码到工程中
第四步:点击"File"菜单下的"New",新建会看到出来一个名字为"Text1"的文件,
新建C文件
再一次点击上面"File"下拉菜单中 "Save"或点击工具栏中的"保存",会弹出一个保存的对话框,输入文件名如"LCD1602MAIN.C"(切记,此处无论你起什么样的文件名,但后面必须输入.C!!!),单击"保存",将文件在第二步新建的文件夹目录下。
保存C文件
命名.C文件名
此时可以在新建文件中进行代码编写了,如包含头文件 #include <Reg52.h>,但要注意,此时文件LCD1602MAIN.C并未与工程建立起联系。
此时的C文件还未和工程建立联系
第五步:将新建的文件添加到工程中,点击左边"Porject"选项框里面的"Target 1"前面的"+"号, 在展开的下拉菜单下看到"Source Group 1"。右键单击"Source Group 1"选项, 在下拉菜单中选择"Add Files to Group 'Source Group 1'..."选项,弹出一个文件选择对话框,单击选中刚才新建的.c源文件,然后单击一次"Add"按钮,此时虽然对话框没有关闭,但是已经把.c源文件添加到工程里了,这时只要再点击一次"Close"按钮即可把此对话框关闭(初学者经常以为.c源文件没有被添加进去,还要按"Add"按钮)。这时发现左边的"Source Group 1"前面多了一个"+"号, 单击此"+"号展开, 发现下面出现了刚才我们新添加进去的.c源文件"LCD1602MAIN.c"。
将C文件添加到工程中
选择要添加的文件
已将C文件成功添加到工程中
第六步:为了降低编程的疲劳,根据需要进行字体字号设置,点击如图"Edit"菜单最下面的"Configeruration"选项,
设置舒适的字体字号
根据自己的需要进行字体设置即可,
如何设置字体字号
一个新的Keil工程建立完毕
至此,一个全新的Keil工程建立完毕,开启自己的编程之旅吧!
了解更多
keil4编程是什么意思
编程必背50个程序
烧录程序的使用步骤
keil4怎么设置成中文
如何使用keil5进行编程
st语言编程入门与精通
㈦ linux下怎么编译单片机c代码,怎么下载到51单片机上呢
1.编译软件用sdcc
2.sdcc不支持keil51c 的一些语法。要做以下修改:
sbitled1=P1^0; 改为 #define led1 P1_0
中断函数interrupt改为__interrupt
单个位 P1^0 改为P1_0
若vim安装插件YCM的话,要在.ycm_extra_conf.py加入以下两个路径
/usr/share/sdcc/include
/usr/share/sdcc/include/mcs51
没创建一个工程都要敏岩拷贝一份.ycm_extra_conf.py到该工程的目录下。
3.编译用命令
` sdcc 目唯拿芦指带标文件
4.烧录软件用stcflash.py,该软件只能支持stc89c52rc,不支持stc89c52。我自己亲自试过。
sudo python ./stcflash.py 目标文件
㈧ 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的值被函数使用了,编程者不必恢复调用前的值。