⑴ 编译原理的数据结构
编译原理一直是计算机学习的必修课.
当然,由编译器的阶段使用的算法与支持这些阶段的数据结构之间的交互是非常强大的。编译器的编写者尽可能有效实施这些方法且不引起复杂性。理想的情况是:与程序大小成线性比例的时间内编译器,换言之就是,在0 ( n )时间内,n是程序大小的度量(通常是字符数)。本节将讲述一些主要的数据结构,它们是其操作部分阶段所需要的,并用来在阶段中交流信息。 临时文件(temporary file):计算机过去一直未能在编译器时将整个程序保留在存储器中。这一问题已经通过使用临时文件来保存翻译时中间步骤的结果或通过“匆忙地”编译(也就是只保留源程序早期部分的足够信息用以处理翻译)解决了。存储器的限制现在也只是一个小问题了,现在可以将整个编译单元放在存储器之中,特别是在可以分别编译的语言中时。但是偶尔还是会发现需要在某些运行步骤中生成中间文件。其中典型的是代码生成时需要反填(backpatch)地址。例如,当翻译如下的条件语句时 if x = 0 then ... else ... 在知道else部分代码的位置之前必须由文本跳到else部分:
CMP X,0 JNE NEXT ;;
location of NEXT not yet known < code for then-part > NEXT : < code for else-part >
通常,必须为NEXT的值留出一个空格,一旦知道该值后就会将该空格填上,利用临时文件可以很容易地做到这一点。
如果想利用上面的编译原理开发一套属于自己的编程语言,或者想在一个产品中嵌入编程语言,可以参考zengl开源网开发的zengl编程语言,该编程语言为国人使用C语言开发,里面包含两个部分,一个是编译器,一个是解释执行中间代码的虚拟机。编译器包含了词法扫描,语法分析,中间代码输出等,虚拟机则类似JAVA一样解释执行中间代码。作者将所有的版本都公布出来,好让读者可以由浅入深的做研究,并且为了证明该编程语言的实用性,还结合SDL游戏开发库开发了一款图形界面和命令行界面的21点扑克小游戏 。
zengl编程语言目前适用平台为windows和linux (最开始在Linux下使用gcc开发,后来移植到windows平台)
⑵ 在fc中怎么给变量分配地址
如何分配变量到指定的地址
举例:
unsigned char temp_A@0x00; //定义无符号变量temp_A,强制其地址为0x00
unsigned char temp_B@0x100; //定义无符号变量temp_B,强制其地址为0x100
@tiny unsigned char temp_C; //定义无符号变量temp_C,由编译器自动在地址小于0x100的RAM中为其分配一个地址
@near unsigned char temp_D; //定义无符号变量temp_D,由编译器自动在地址大于0xFF的RAM中为其分配一个地址
另外也可以采用伪指令"pragma"将函数或者变量定义到指定的section中,例如:
#pragma section [name] // 将下面定义的未初始化变量定义到.name section中
Unsigned char data1;
Unsigned int data2;
……(任何需要定义在.name section中的变量)
……
#pragma section [] // 返回到正常的section.
注意:pragma伪指令可以用来定位函数,初始化变量或者未初始化变量。这三者用不同的括号区分。
(name):代码
[name] :未初始化变量
{name}:初始化变量
如何在COSMIC C文件中使用汇编语言
在COSMIC C文件中使用汇编语言常见的方法有如下两种:使用#asm …#endasm组合格式
或_asm("…"); 单行格式。
举例1:
unsigned char temp_A;
Void func1(void)
{
...
#asm
PUSH A
LD A,(X)
LD _temp_A,A
POP A
#endasm
...
}
注:在C嵌汇编环境下使用全局变量,要在该全局变量名称前加下划线"_"。
举例2:
Void func1(void)
{
...
_asm("rim");
_asm("nop");
...
}
如何观察RAM/FLASH/EEPROM的最终分配情况
在Project->settings->linker选项页中,将Category选为Output,再勾选Generate Map File。
点击OK按键后,再次编译链接该项目,如果成功则会在项目输出目录中(本例是在C:\STM8_NewProject1\debug 目录下)生成 .map 文件。该文件详细地列出RAM/FLASH/EEPROM的分配使用情况。
如何生成hex格式的输出文件
在Project->settings->PostBuild选项页中,在commands栏内加入下行命令:
chex –fi -o $(OutputPath)$(TargetSName).hex $(OutputPath)$(TargetSName).sm8
再次编译链接该项目,如果成功则会在项目输出目录中(本例是在C:\STM8_NewProject1\debug 目录下)生成 .hex 文件。
什么是MEMORY MODEL
STM8的C编译器支持多种存储器模式。http://tiyubisai.com/video_news/news_135621.html 用户可以根据应用的需要选择最适合的配置。可以根据需要选择采用2个字节的寻址方式(仅适用于64k以内的程序)或老迟者3字节的寻址方式。也可以规定将变量默认为定义在存储器的哪一区域:zero page内,汪察还是zero page 外。下面对几种供选择的MEMORY MODEL做简单说明。
在Project->settings->C Complier选项页中,将Category选为General,里面有一个Memory Models选项栏如下:
在下拉菜单中共有4种MEMORY MODEL可供选择:
程困含茄序地址空间在64K以内(即程序容量小于32K)
mods0,
modsl0
程序地址哦那个键在64K以上(即程序容量大于32K)
mods
modsl
MODS0 MODSL0 MODS MODSL
名称 Stack Short
短堆栈模式 Stack Long
长堆栈模式 Stack Short
短堆栈模式 Stack Long
长堆栈模式
程序地址空间 程序所用到的地址空间在64K范围内 程序所用到的地址空间超出64K范围
指针默认类型 函数指针和数据指针默认为@near (2 bytes) 函数指针默认为@far(地址为3字节);
数据指针默认为@near
全局变量默认类型 所有全局变量的地址默认为1个字节。对于地址超出1个字节的变量,必须用@near定义 所有全局变量默认为Long型。若要将变量地址定义为1个字节,必须用@tiny定义 所有全局变量的地址默认为1个字节。对于地址超出1个字节的变量,必须用@near定义 所有全局变量默认为Long型。若要将变量地址定义为1个字节,必须用@tiny定义
.lkf 文件的作用
.lkf文件在程序链接时决定如何具体分配RAM/ROM的空间。在Project Settings – Linker – Category(Input)选项页中,当"Auto"选择框被选中时,由系统自动生成.LKF文件,否则由用户指定。
当"Auto"选择框被勾选时,.lkf文件会自动生成在项目主目录下的 debug/ 和 release/ 目录中。下面以上图所示 at45DBXX Project的 lkf 文件为例,来进一步理解.lkf 。
在.lkf中,以"#"开头的行是注释行,为方便用户理解,将原注释删除,代之以中文注释如下:
# 定义(+seg)一个常量段(.const),开始(b)于0x8080,最大分配(m)0x1ff80个字节(即不超过
# 0x27FFF),为该段起名(n)为.const(和常量段的保留字同名),需要初始化的变量的初始值存
# 放于此段(-it)
+seg .const -b 0x8080 -m 0x1ff80 -n .const -it
# 定义(+seg)一个程序段(.text),紧跟(-a)在.const段后面(和.const 共同位于0x8080 –
# 0x27FFF),为该段起名(n)为. text (和程序段的保留字同名)。
+seg .text -a .const -n .text
# 定义(+seg)一个EEPROM段(.eeprom),开始(b)于0x4000,最大分配(m)0x800个字节(即不超
#过0x47FF),为该段起名(n)为. eeprom (和EEPROM段的保留字同名)。
+seg .eeprom -b 0x4000 -m 0x800 -n .eeprom
# .bsct段服务于定义在0页(地址小于0x100)以内需要初始化的全局变量(如@tiny char a = 9;)
+seg .bsct -b 0x0 -m 0x100 -n .bsct
# .ubsct段服务于定义在0页(地址小于0x100)以内不需要初始化的全局变量(如@tiny char b;)
+seg .ubsct -a .bsct -n .ubsct
# .bit表示位域段,定义后即可在程序中使用_Bool变量(如_Bool c = 1;),-id表示该段需要初始化。
+seg .bit -a .ubsct -n .bit -id
# 这是ST7时代(STM8是基于ST7发展而来的)由于物理堆栈小,速度慢,使用内存来模拟堆栈的变通手段。
+seg .share -a .bit -n .share -is
# .data段服务于定义在0页(地址大于0xFF)以外需要初始化的全局变量(如@near char d = 8;)
+seg .data -b 0x100 -m 0x1300 -n .data
# .bss段服务于定义在0页(地址大于0xFF)以内不需要初始化的全局变量(如@ near char e;)
+seg .bss -a .data -n .bss
# 段定义结束,下面放置的库及Obj文件中的变量、常量、程序就按照上面的规定进行分配。
#初始化程序
crtsi0.sm8
#用户程序
Debug\main.o
…
# 一些必要的cosmic库
libis0.sm8
libm0.sm8
# 重定义常量段,开始于0x8000,用于放置中断向量表(STM8硬件决定此位置)
# –k 用于程序冗余代码优化,详情可参考cosmic用户手册。
+seg .const -b 0x8000 –k
# 中断向量
Debug\stm8_interrupt_vector.o
#定义了三个变量,用于系统初始化
+def [email protected] # end of uninitialized zpage
+def [email protected] # end of bss segment
+def __stack=0x17ff # 不同的芯片__stack内容不同,由系统自动生成
如何实现位操作
Cosmic C 编译器支持位变量的操作,可以将其定义成 _Bool类型。_Bool类型的变量只包含两种值true(1)或者false(0)。若将一个表达式赋值给_Bool变量,则编译器会将表达式与0做比较,然后将布尔值赋给_Bool变量。因此,任何整型或者表达式的值都可以赋给_Bool变量。但是,布尔变量不能定义位数组,只能定义成结构体或者联合。而且,_Bool变量会被打包成字节的形式。
编译器会将所有的全局_Bool变量打包成字节形式,存放在.bit section中。局部_Bool变量也会被打包成字节形式。但是_Bool类型的参数会被扩展成一个单字节。
具体的关于位变量的定义和使用可参考如下例子:
定义位变量:
_Bool in_range;
_Bool p_valid;
char *ptr;
使用位变量:
in_range = (value >= 10) && (value <= 20);
p_valid = ptr; /* p_valid is true if ptr not 0 */
if (p_valid && in_
在使用位变量时,若程序编译时提示如下错误:
#error clnk Debug\example.lkf:1 no default placement for segment .bit
The command: "clnk -l"C:\Program Files\COSMIC\CXSTM8_16K_4.2.10\Lib" -o Debug\example.sm8 -mDebug\example.map -sa Debug\example.lkf " has failed, the returned value is: 1
exit code=1.
实际上是由于,在项目中没有定义.bit section。可按照如下步骤,手工添加.bit section:
打开项目链接配置窗口:Project - Settings - Linker,选择 Input 目录项
⑶ “Keil C51”下如何让编译器优先使用片内“RAM”
C51内存结构深度剖析
在编写应用程序时,定义一个变量,一个数组,或是说一个固定表格,到底存储在什么地方;当定义变量大小超过MCU的内存范围时怎么办;如何控制变量定义不超过存储范围;以及如何定义变量才能使得变量访问速度最快,写出的程序运行效率最高。以下将一一解答。
1 六类关键字(六类存储类型)
data idata xdata pdata code bdata
code: code memory (程序存储器也即只读存储器)用来保存常量或是程序。code memory 采用16位地址线编码,可以是在片内,或是片外,大小被限制在64KB
作用:定义常量,如八段数码表或是编程使用的常,在定义时加上code 或明确指明定义的常量保存到code memory(只读)
使用方法:
char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
此关键字的使用方法等同于const
data data memory (数据存储区)只能用于声明变量,不能用来声明函数,该区域位于片内,采用8位地址线编码,具有最快的存储速度,但是数量被限制在128byte或更少。
使用方法:
unsigned char data fast_variable=0;
idata idata memory(数据存储区)只能用于声明变量,不能用来声明函数. 该区域位于片内,采用8位地址线编码,内存大小被限制在256byte或更少。该区域的低地址区与data memory地址一致;高地址区域是52系列在51系列基础上扩展的并与特殊功能寄存器具有相同地址编码的区域。即:data memory是idata memory的一个子集。
xdata xdata memory 只能用于声明变量,不能用来声明函数,该区域位于MCU
外部,采用16位地址线进行编码,存储大小被限制在64KB以内。
使用方法:
unsigned char xdata count=0;
pdata pdata memory 只能用于声明变量,不能用来声明函数,该区域位于MCU外部,采用8位地址线进行编码。存储大小限制在256byte. 是xdata memory的低256byte。为其子集。
使用方法
unsigned char pdata count=0;
bdata bdata memory 只能用于声明变量,不能用来声明函数。该区域位于8051内部位数据地址。定义的量保存在内部位地址空间,可用位指令直接读写。
使用方法:
unsigned char bdata varab=0
注:有些资料讲,定义字符型变量时,在缺省unsigned 时,字符型变量,默认为无符号,与标准C不同,但我在Keil uVision3中测试的时候发现并非如此。在缺省的情况下默认为有符号。或许在以前的编译器是默认为无符号。所以看到有的资料上面这样讲的时候,要注意一下,不同的编译器或许不同。所以我们在写程序的时候,还是乖乖的把unsigned signed 加上,咱也别偷这个懒。
2函数的参数和局部变量的存储模式
C51 编译器允许采用三种存储器模式:SMALL,COMPACT 和LARGE。一个函数的存储器模式确定了函数的参数的局部变量在内存中的地址空间。处于SMALL模式下的函数参数和局部变量位于8051单片机内部RAM中,处于COMPACT和LARGE模式下的函数参数和局部变量则使用单片机外部RAM。在定义一个函数时可以明确指定该函数的存储器模式。方法是在形参表列的后面加上一存储模式。
示例如下:
#pragma large //此预编译必须放在所有头文前面
int func0(char x,y) small;
char func1(int x) large;
int func2(char x);
注:
上面例子在第一行用了一个预编译命令#pragma 它的意思是告诉c51编译器在对程序进行编译时,按该预编译命令后面给出的编译控制指令LARGE进行编译,即本例程序编译时的默认存储模式为LARGE.随后定义了三个函数,第一个定义为SMALL存储模式,第二个函数定义为LARGE第三个函数未指定,在用C51进行编译时,只有最后一个函数按LARGE存储器模式处理,其它则分别按它们各自指定的存储器模式处理。
本例说明,C51编译器允许采用所谓的存储器混合模式,即允许在一个程序中将一些函数使用一种存储模式,而其它一些则按另一种存储器模式,采用存储器混合模式编程,可以充分利用8051系列单片机中有限的存储器空间,同时还可以加快程序的执行速度。
3绝对地址访问 absacc.h(相当重要)
#define CBYTE ((unsigned char volatile code *) 0)
#define DBYTE ((unsigned char volatile data *) 0)
#define PBYTE ((unsigned char volatile pdata *) 0)
#define XBYTE ((unsigned char volatile xdata *) 0)
功能:CBYTE 寻址 CODE区
DBYTE 寻址 DATA区
PBYTE 寻址 XDATA(低256)区
XBYTE 寻址 XDATA区
例: 如下指令在对外部存储器区域访问地址0x1000
xvar=XBYTE[0x1000];
XBYTE[0x1000]=20;
#define CWORD ((unsigned int volatile code *) 0)
#define DWORD ((unsigned int volatile data *) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)
功能:与前面的一个宏相似,只是它们指定的数据类型为unsigned int .。
通过灵活运用不同的数据类型,所有的8051地址空间都是可以进行访问。
如
DWORD[0x0004]=0x12F8;
即内部数据存储器中(0x08)=0x12; (0x09)=0xF8
注:用以上八个函数,可以完成对单片机内部任意ROM和RAM进行访问,非常方便。还有一种方法,那就是用指钟,后面会对C51的指针有详细的介绍。
4寄存器变量(register)
为了提高程序的执行效率,C语言允许将一些频率最高的那些变量,定义为能够直接使用硬件寄存器的所谓的寄存器变量。定义一个变量时,在变量类型名前冠以“register” 即将该变量定义成为了寄存器变量。寄存器变量可以认为是一自动变量的一种。有效作用范围也自动变量相同。由于计算机寄存器中寄存器是有限的。不能将所有变量都定义成为寄存器变量,通常在程序中定义寄存器变量时,只是给编译器一个建议,该变量是否真正成为寄存器变量,要由编译器根据实际情况来确定。另一方面,C51编译器能够识别程序中使用频率最高的变量,在可能的情况下,即使程序中并未将该变量定义为寄存器变量,编译器也会自动将其作为寄存器变量处理。被定义的变量是否真正能成为寄存器变量,最终是由编译器决定的。
5内存访问杂谈
1指钟
指钟本身是一个变量,其中存放的内容是变量的地址,也即特定的数据。8051的地址是16位的,所以指针变量本身占用两个存储单元。指针的说明与变量的说明类似,仅在指针名前加上“*”即可。
如 int *int_point; 声明一个整型指针
char *char_point; 声明一个字符型指针
利用指针可以间接存取变量。实现这一点要用到两个特殊运算符
& 取变量地址
* 取指针指向单元的数据
示例一:
int a,b;
int *int_point; //定义一个指向整型变量的指针
a=15;
int_point=&a; //int_point指向 a
*int_point=5; //给int_point指向的变量a 赋值5 等同于a=5;
示例二:
char i,table[6],*char_point;
char_point=table;
for(i=0;i<6;i++)
{
char_point=i;
char_point++;
}
注:
指针可以进行运算,它可以与整数进行加减运算(移动指针)。但要注意,移动指针后,其地址的增减量是随指针类型而异的,如,浮点指针进行自增后,其内部将在原有的基础上加4,而字符指针当进生自增的时候,其内容将加1。原因是浮点数,占4个内存单元,而字符占一个字节。
宏晶科技最新一代STC12C5A360S2系列,每一个单片机出厂时都有全球唯一身份证号码(ID号),用户可以在单片机上电后读取内部RAM单元F1H~F7H的数值,来获取此单片机的唯一身份证号码。使用MOV @Ri 指令来读取。下面介绍C51 获取方法:
char id[7]={0};
char i;
char idata *point;
for(i=0;i<7;i++)
{
id[i]=*point;
point++;
}
(此处只是对指针做一个小的介绍,达到访问内部任何空间的方式,后述有对指针使用的详细介绍)
2对SFR,RAM ,ROM的直接存取
C51提供了一组可以直接对其操作的扩展函数
若源程序中,用#include包含头文件,io51.h 后,就可以在扩展函数中使用特殊功能寄存器的地址名,以增强程序的可读性:
注 此方法对SFR,RAM,ROM的直接存取不建议使用.因为,淡io51.h这个头文件在KEIL中无法打开,可用指针,或是采用absacc.h头文件,
⑷ C51编译器中不支持的存储模式是
选A
xdata是变量定义的一种形式,而且定义时应当全部小写。老闷稿
Small为小模式,变量侍孝默认放在data区域
Compact为兼容模式,变量默认放在pdata区
Large为大模式,变量默罩唯认放在xdata区。
⑸ c1和c2有什么区别 理解c1和c2的异同点
c1标准定义了C语言的基本语法和语言特性,包括数据颂虚类型、运算符、语句结构等。而c2标准在c1的基础上增加了一谈樱铅些新的语言特性,如布尔类型、long long类型、变长数组、内联函数等。
C语言的库函数是非常重要的部分,它们提供了丰富的功能和操作。c2标准在c1的基础上增加了一些新的库函数,如sinh()、cbrt()、exp2()等。
4. 兼容性
2. 库函数
c1标准的编译器并不支持所有的c2标准的语言特性和库函数,而c2标准的编译器则可以支持c1标准和c2标准的语言特性和库函数。
由于c2标准增加了很多新的语言特性和库函数,因此c2标准的代码可能无法在c1标准的编译器上编译通过。而c1标准含好的代码则可以在c2标准的编译器上编译通过,但可能无法使用c2标准的新特性和库函数。
⑹ TOP851编程器为什么不能编写25系列存储器
现在都网络化了,杭州发到昆山也就一天时间,你看看这里:
单片机学习实验及开发工具的导购
鉴于目前单片机技术火的一塌糊涂!越来越多的朋友加入了学习单片机的行列中!还有更多的朋友正在准备加入到学习单片机行列中。很多初学者在购买了本站的硬件学习板后,在短期内就掌握了自主编写实用控制程序的能力,正所谓只要功夫深,铁杵磨成针。
这里要先说一下单片机的含义,单片机就是一种微型的计算机,它的硬件等级不高,程序存储器比较小,无法和我们个人电脑中的硬盘相比,但是他的整体成本很低,体积也很小,这就给电子工程师提供了一个低成本开发智能控制设备的可能。另外就是它的可塑性是很强的,只要把程序存储器中写入不同的程序,它就会根据不同的程序来完成不同的工作。
比如我们要控制洗衣机的完成一个智能控制洗衣流程(不采用简单的机械定时器),从成本角度讲,虽然个人电脑性能强大,但是不能采用,因为一台个人电脑的体积成本都太过了,此时用“单片机+顺序控制程序+接口电路+执行电路”就是最好的解决方案了,这等于在洗衣现场有一个小小的电脑在控制着整个洗衣过程,单片机是现代全自动洗衣机的核心部分,它的应用大大减低了人的劳动强度。从这个简单的例子中,我们就可以看到单片机的实际意义了!小到温度智能控制,中到通讯控制,大到生产流程控制,都可以见到它的身影。应用范围绝对广泛,只要编写好不同的程序。单片机就可以完成不同的控制工作。这样,我们通过编写不同的控制程序就可以实现器件的万能化!
大致可以通过这些步骤来完成实验及开发工作:
第一步:通过软件编译平台开始写我们的试验程序,这就好比写文章要有笔和纸一样,最常用的是KEIL软件平台,比如点亮一个发光管,点亮多个发光管,点亮流水灯,驱动继电器,驱动数码管......,学用写源程序有2个重点,重点1是学会在KEIL中写源程序,就和用记事本软件编辑文字一样,重点2是学会把写好的源程序通过KEIL软件平台编译成为单片机可以读懂的由0和1构成的机器码,为了简化,通常是生成16进制的*.HEX或者*.BIN文件,不过本质还是0和1。在这里,源程序我们能读懂,但是单片机不能读懂,所以需要把源程序通过编译器编译成最终的*.HEX或者*.BIN文件。在这里,编译平台充当的是一个语言翻译官的角色!
第二步:制作或者购买一个编程器(也有人叫它为烧写器)。
注意,编程器的作用是把我们编译好的机器码文件写入到单片机的程序存储器中,这个设备的作用就好比我们给一个没有记忆的人灌输记忆。通过程序被写入,单片机中就被灌输了我们的设计思想或者是某种控制流程。编程器和单片机可以支持的文件是16进制的,文件属性一般为*.HEX或者*.BIN,它们的本质是二进制,也就是1和0。编程器只是一种写入设备,而源程序还是要由我们来编写和创造的!
第三步:制作或者购买一个实验板,它的作用是完成最终的硬件驱动效果验证。这就好比把一个已经灌输了我们设计思想的单片机连上躯体和四肢,看看这个完整的,已经具备了“头脑+思想+四肢”的设备是不是能真的动起来,动起来的时候看看它的动作是不是和我们设计的程序完全一致?如果不一致就说明我们给他设计的“思想”可能存在问题!此时就需要用编程器中的“擦除”操作给单片机“洗脑”,并且修改程序,然后再次写入和看验证结果。
比如我们用软件写了一个流水灯程序,通过什么来验证它是否可以真正的驱动硬件呢?答案就是实验板。
也许有人会问,为什么没有提到仿真器?因为以前专业化的仿真器太贵了!大家一般都承受不了!
仿真器是做什么的呢?它的作用是调试我们的程序用的,比如我们的程序有100行,假设代表了10个驱动硬件的动作,这时候如果有仿真器的话,我们可以让这10个动作一个个的执行,同时能够观察到在执行这10个动作的过程中,单片机内部的各单元状态是什么样的!也就是可以细致的分析一下整个程序在硬件中的具体工作过程。这样我们就可以了解程序中是不是有问题存在,所以叫做仿真!
仿真分为硬件仿真和软件仿真二种,软件仿真是完全虚拟的,比较抽象,初学者理解起来比较困难。硬件仿真方面,如果硬件仿真器连接了目标设备,就可以看到驱动硬件的效果,还是比较实用的。
看了这么多的文字介绍,大家还是可以来这里看一下上面所说的到底是怎么样的东西,我们应该如何来使用它们,给大家一个感性的认识。
点击进入大量单片机实验视频录像在线观看
总而言之,在你决定学习单片机之前,请做好如下准备工作:
一、硬件准备:计算机一台,编程器,仿真器和实验板。如果你想学单片机,而又不愿做这些投资,很有可能会挫伤你学习的积极性和浪费你的时间,好在这些投资并不算多:)
编程器可以选用“A51编程器”或“多功能编程器”,经常会有朋友这样问我:这两种编程器到底有什么不同,其区别在哪里?
在此,站长也说明一下其不同之处,怎么样的才适合你的使用。“A51编程器”的主要特点就是价格低,性能稳定,支持常用的51芯片,仅烧51的话,用用这个绝对经济实惠,不错了。“多功能编程器”的主要特点是性价比高,支持芯片多,有几百种型号,还能烧写主板BIOS芯片,比目前市场上的同类产品价格都要低。总括来讲,如果你是仅仅用用51系列的,选“A51编程器”肯定OK;如果你想在单片机方面好好发展一下的,那最好还是为以后考虑一下,“多功能编程器”就比较合适了,虽然价格比“A51编程器”高了仅几十元,但长期来看,还是非常值得投资的,以备日后做其它用途使用,而且还有丰富的套餐组合供您选购。至于“TOP系列”的编程器相对来说,价格要稍高于“A51编程器”和“多功能编程器”,但它有漂亮的外壳,看上去比较漂亮,经站长自己使用的经验总结,感觉TOP853、TOP2000BS、TOP2005+(新产品)、TOP2007(新产品)、TOP2048这几款TOP编程器性能比较稳定,使用感觉不错,性价比比较高,其它的TOP系列编程器我们也就不作介绍了。
多功能编程器全套餐A:176元 相应介绍详见这里
A51编程器:98元 相应介绍详见这里
微型51仿真器:128元 相应介绍详见这里
增强型51实验板:148元 相应介绍详见这里
增强型51实验板可选配件:
1602液晶屏:30元 红外线遥控器:25元 步进电机:15元 18B20温度传感器:12元
200米无线遥控发射模块:20元 1000米无线遥控发射模块:35元 无线遥控接收模块:15元
TOP系列编程器—— TOP851 TOP2000BS TOP853 TOP2005+ TOP2007 TOP2048 TOP2049
TOP全系列编程器区别与差异介绍(站长个人使用总结)
推荐单片机学习全套餐C(编程器、仿真器、实验板分体式设计):
A51编程器+微型51仿真器+增强型51实验板+1602液晶屏+红外线遥控器+步进电机+DS18B20温度传感器+200米无线遥控收发模块(包括发射机和接收板)+AT89S51单片机芯片 总价:501+20(邮费)=521元
赠送:
1号光盘:单片机多媒体视频教程+单片机实验视频录像(酷)+实验板原理图+大量实验板配套例程+电子资料手册等 ——此碟为CDROM光盘
2号光盘:单片机权威教程全集,DVD格式,数据量4.3G,内含10CD教程 ——此碟为DVD光盘(相当于价值100元的CD教程光盘)
好消息:从2007年7月5日起,凡购买单片机学习全套餐C的用户,特别赠送价值36元的《C51单片机高效入门》配套教程一本,以便配套学习使用。 关于赠送活动的更详细情况请看这里--->>>
关于单片机学习全套餐C的配套的系列教学资料可以看网站首页的“手把手教你学51单片机”栏目。
您也可以翻阅历年来的《电子制作》杂志,我们刊登了系列连载教程,以便大家进行理论学习以及提高实践动手能力。 历年来有哪些期刊杂志有所介绍呢,原文及详细情况您可以看这里--->>>点击进入
点击进入“单片机学习全套餐C”相关实验视频录像在线观看
现在单片机学习之类的书籍在新华书店一翻就是一大堆,让人看了眼花缭乱,相信大家也有这样的感受,经常会有很多单片机初学者朋友让我来推荐单片机入门的书籍,从这些朋友的要求来看,感觉大家已经厌倦了很多条教式书籍的枯燥与古板,至少站长在大学读书时就有这样的感受,文科的书相对理科的书来说要好些,但对于理科的特点,本来就是比较突出其技术性与特点,要想写出点新鲜感确实有点难;还有一点,相信大家和我也会有一个共识,现在很多书不仅多,而且厚,但到时我们真正所关心的问题是否真的有这么多呢,相信一般我们也不会把整本书全部读完,只是取其一部分对自己有用的内容来阅读,至少有些书对于我来讲有点像字典,需要用的时候去翻一下而已。看完了书,有很多朋友可能还是会说,书我看了一大堆,但到头来还是一团迷茫,而感到无从下手,呵呵,因为我本人也遇到过这样的情况,对于单片机,在此我们必须提到的就是实践动手,否则书就算看10遍甚至20遍还是不能完成具体的应用任务,这等于白学,因为不能做到学以致用。针对以上这些现状,站长萌发了写书的念头,找了很多材料,并将积累的经验,花了无数的日夜写下了这本《C51单片机高效入门》一文,写书的思路是以理论与实践相结合为主导,以我们网站提供的单片机学习全套餐为硬件平台,一一介绍单片机各方面的理论知识与具体实践动手方法,建议初学者朋友先将此书大致翻一遍,对整体有个了解,掌握理论基础知识,然后再对照着书上的实践例子,一个课时一个课时地学习下去,相信看完了此书,你已经跨入了单片机这个领域的大门了。
建议:如果以后想做做单片机开发及产品的,可以将以上套餐中的A51编程器换成TOP853编程器,这样性价比可以高很多,支持的芯片有1500多种,而且是USB接口,使用非常方便,不会出现部分笔记本电脑没有串口而不能使用的尴尬局面,如换成TOP853,补上两种编程器的差价就可以了。
单片机学习全套餐C主要部件实物照片:
单片机学习全套餐C使用的编程器、仿真器、实验板
1602LCD液晶屏
DS18B20温度传感器
6121编码红外线遥控器
微型步进电机
200米无线收发模块
AT89S51单片机芯片——程序烧写使用
赠送的精美配套光盘,含丰富的学习资料与例程
赠送的单片机视频权威教程——DVD光盘
附带的USB线、串口线
赠送的配套学习书本 点击查看书本详细资料-->> 本书是以目前最为流行的8051系列单片机为主体,同时使用C程序设计语言来进行描述的。全书共分为四部分内容:单片机基础知识、C语言程序设计、单片机入门基础实例、单片机高级应用实例。以理论与实践相结合的方式来进行讲解,避免了传统教科书给人枯燥、乏味的感觉。讲解风格通俗易懂、条理清晰、实例丰富、图文并茂,既使是没有任何单片机基础的人,也可以通过本书的学习,踏入单片机世界的大门。 作者为本书的出版开发了相应的学习编程、仿真及实验板,以方便读者朋友进行学习,同时以大量实例照片记录了实验的过程且现象,以激发读者朋友对单片机的兴趣爱好。 本书的配套光盘包含了所有实验的源程序代码、一些常用的电子工具软件、芯片资料、实验过程照片以及试验演示视频录像。因此,通过本书,读者获得的是教程和学习平台的结合,不仅可以用于学习,而且还可以用于工厂、企业的产品研发。 本书可供电子爱好者和大学、中专相关专业学生参考。
单片机学习全套餐C的精美彩色外包装盒,质量、品质的实力体现!
推荐单片机学习全套餐D(编程器、仿真器、实验板一体化设计)豪华配置——多数初学者的选择
51单片机综合学习系统+仿真组件+1602液晶屏+红外线遥控器+步进电机+DS18B20温度传感器+200米无线遥控收发模块(包括发射机和接收板) 总价:563+20(邮费)=583元
2007年我们推出的单片机学习全套餐D,一直受到用户朋友的广泛好评。在这一年中,结合大家在学习中遇到的问题,我们不断总结教学经验,更新产品技术,组织编写与之相配套的书本教材<单片机快速入门>,目前此书已由北京航空航天大学出版社出版发行。
很多用户在于我们的沟通中,都说到自己是初学者,很多人担心自己学不会。我们推出这本书的目的也在于此:让零基础的用户,可以边看书边动手实践。我们希望用我们的力量,为更多的电子爱好者提供适合的学习资源。
我们多年的发展离不开广大用户的支持和信赖,新书推出之际,我们特举行赠书活动。即日起,您在本公司购买单片机学习全套餐D,就可以免费获得价值36元的<单片机快速入门>一书。
赠送:
1号光盘:单片机多媒体视频教程+单片机实验视频录像(酷)+实验板原理图+大量实验板配套例程+电子资料手册等 ——此碟为CDROM光盘
2号光盘:单片机权威教程全集,DVD格式,数据量4.3G,内含10CD教程 ——此碟为DVD光盘(相当于价值100元的CD教程光盘)
3号光盘:本站特别加送清晰版VCD格式“51单片机综合学习系统”实验视频演示光盘一份,使用更直观,学习更高效,对于入门级的学习非常有利。
好消息:从2008年5月8日起,凡购买单片机学习全套餐D的用户,特别赠送价值36元的《单片机快速入门》配套教程一本,以便配套学习使用。 关于赠送活动的更详细情况请看这里--->>>
全套餐组合不仅可以满足初学者的学习用途,还可以供工厂、企业研发人员及电子爱好者做一些技术研究及开发, 有较高的性价比,自投放市场以来,受到了广大用户的好评与支持。
关于单片机学习全套餐C的配套的系列教学资料可以看网站首页的“手把手教你学51单片机”栏目。
您也可以翻阅历年来的《电子制作》杂志,我们刊登了系列连载教程,以便大家进行理论学习以及提高实践动手能力。 历年来有哪些期刊杂志有所介绍呢,原文及详细情况您可以看这里--->>>点击进入
点击进入“单片机学习全套餐D”相关实验视频录像系列--1在线观看
点击进入“单片机学习全套餐D”相关实验视频录像系列--2在线观看
单片机学习全套餐D主要部件实物照片:
单片机全套餐D所有部件图片集
51单片机综合学习系统主机
DS18B20温度传感器
优质超薄型6121编码红外线遥控器
微型步进电机
200米无线收发模块
AT89S51单片机芯片——程序烧写使用
SST89E516仿真模块——程序仿真使用
赠送的单片机视频权威教程——DVD光盘
附带的USB线、串口线、并口线
赠送的配套学习书本 点击查看书本详细资料-->>
精美光盘,含丰富的学习资料 点击查看例程库-->>
单片机学习全套餐D的精美彩色外包装盒,质量、品质的实力体现!
全套餐C与全套餐D的区别在于:
全套餐D为最新设计的学习开发系统,将编程、仿真、实验三者功能进行了整合,同时,可做实验的资源与功能要比全套餐C多很多,如SPI总线、IIC总线、DS1302时钟、AD模数转换等实验资源。全套餐C提供的红外线遥控器为普通黑色的红外线遥控器,全套餐D提供的为时尚超薄型红外线遥控器,此外,对于购买全套餐D的用户,本站特别加送清晰版VCD格式“51单片机综合学习系统”实验视频演示光盘一份,该演示视频光盘只适用于51单片机综合学习系统。用户可以根据自己的需求来选择套餐进行学习,套餐C经济些,便宜些,但其总体功能比套餐C少些,套餐D因为用的是51单片机综合学习系统为硬件平台,免跳线设计,所以操作比较方便、简单些。由于全套餐D的成本要高于全套餐C的成本,所以两种套餐的售价会略有所不同,但从其功能性价比看,我们推荐用户使用全套餐D来进行单片机学习,一般来说,足够学习与开发使用了。
>>> 对于一些本站产品优势以及受欢迎的原因,请点击这里看
单片机学习全套餐C配套的书本教程,点击此处进入了解详细信息。
单片机学习全套餐D配套的书本教程,点击此处进入了解详细信息。
原文:
⑺ C51编译器支持的存储器类型有哪些
c51存储器类型有bit
sbit
data
xdata
bdata
pdata
sfr
code等,可能不全面有遗漏
对应的物理存储器是:
bit,即位数据:数据存储器位寻址区,即20h~2fh的范围,共16个字节,16*8=128个位,位地址00h~7fh,连续的。
sbit:特殊功能寄存器中的位数据:只有能够被8整除的那些特殊功能寄存器中的各个位才能被称为sbit,位地址80h~ffh,不连续的,间断的。
data:数据区,对51为00h~7fh共128个字节,对52为00h~ffh,共256个字节,用mov寻址,前128用直接寻址或寄存器(r0~r7)寻址,后128用r0、r1间接寻址。
xdata:外部数据区,0000h~ffffh连续,用dptr间接寻址(movx指令)
bdata:位寻址去的字节,20h~2fh
sfr:特殊功能寄存器(80h~ffh),直接寻址
pdata:外部数据区,p2口保持数据,用r0r1间接寻址(movx指令)
code:程序存储器,用movc指令只读
⑻ 说明几种C51编译器所能识别的存储器类型可寻址的存储区域 DATA,BDATA,IDATA,PDA
空间名称 地址范围 说明
DATA D:00H~7FH 片内RAM直接寻址区
BDATA D:20H~2FH 片内RAM位寻址区
IDATA I:00H~FFH 片内RAM间接寻址区
XDATA X:0000H~FFFFH 64KB常规片外RAM数据区
CODE C:0000H~FFFFH
⑼ Intel的编译器有哪些
1、Intel 编译支持 IA-32、Intel 64、Itanium 2、Intel Atom 处理器和某些非 Intel 的兼容处理器(例如某些 AMD 处理器)。开发人员应当检查系统需求。适用于 IA-32 和 Intel 64 的 Intel C++ 编译器的主要特点是自动向量化器,它能够生成 SSE、SSE2 和 SSE3 的 SIMD 指令及其适用于 Intel 无线 MMX 和 MMX 2 的嵌入式变种。
2、Intel C++ Compiler 进一步支持 OpenMP 3.0 和适用于对称多处理的自动并行化。借助于 Cluster OpenMP 的附加能力,编译器还可为分布存储多处理根据 OpenMP 指示自动生成消息传递接口调用。
3、Intel C++ Compiler 可通过四种方式获得,它分别是 Intel Parallel Studio、Intel C++ Compiler 专业版、Intel 编译器套装和 Intel Cluster Toolkit 编译器版的一部分。该编译器的最新发布是 Intel C++ Compiler 14.0 版本.