单片机C51基础知识汇总
- 格式:docx
- 大小:35.23 KB
- 文档页数:33
技术支持:/bbs主 讲:wang1jinWang1jin 带您从零学51单片机配套开发板:WJ-V4.0 AVR+51开发板第二章:C51基础知识技术支持:/bbs主 讲:wang1jin第二章 C51基础知识Ø单片机的汇编(ASM)和C 语言优缺点 ØC51程序结构 Ø数据与数据类型 Ø常量与变量ØC51接口与位变量定义ØC51运算符、表达未及其规则 ØC51流程控制结构及相关语句 ØC51构造数据类型 ØC51函数ØC51模块化写法技术支持:/bbs主 讲:wang1jin一、汇编(ASM)和C 语言优缺点C 语言是一种非常方便的语言,现在很多的硬件都支持C 语言编程。
C 语言可读性比较好,C 语言提供了很多数学函数并支持浮点运算,开发的效率很高。
C 语言可移植性很好,程序本身不依赖机器硬件,基本上不作修改就可以将程序从不同的单片机中移植过来。
ü对单片机的指令系统不要求做了解,只需要对单片机的存储器结构有初步了解。
ü寄存器分配、不同存储器的寻址及数据类型等可由编译器管理。
ü程序的模块化,程序由不同的函数组成模块,可读性好修改方便。
üC 语言提供了很多标准数字函数,处理数据能力比汇编要强很多。
üC 语言可移植性好,程序可以移植到不同的单片机,汇编就相当吃力了。
技术支持:/bbs主 讲:wang1jin1ORG 0000H;//程序从0000H 开始汇编程序点亮一个P0口LED 。
8END //程序结束76AJMP$;//程序等侍;5CLR P0.0;//点亮LED 4ORG 0100H//程序从0100H 开始执行32AJMP 0100H;//跳过中断源技术支持:/bbs主 讲:wang1jinC 语言点亮一个LED 的程序1#include<AT89X52.H>//C 语言头文件2sbit LED = P0^0; //定义LED 接在P00口3void main(void)//主函数4{5LED = 0;//点亮LED06while(1);//程序等侍7}C 和汇编程序代码描述技术支持:/bbs主 讲:wang1jin二、C51程序结构1.C51程序结构和一般的C 语言程序没有什么差别。
C51单片机基础学习教程C51单片机是一种常用的8位单片机,广泛应用于工业控制、家用电器和电子产品等领域。
若想学习C51单片机,首先需要掌握C语言的基础知识。
以下是一个C51单片机基础学习教程,介绍了C语言的相关内容,并给出了一个简单的例子。
一、C语言基础1.数据类型:C语言中主要有整型、字符型、浮点型等数据类型。
可以使用关键字来定义变量并赋值。
示例:int num = 10;char ch = 'A';float f = 3.14;2.运算符:C语言中有算术运算符、逻辑运算符、关系运算符等。
可以用于对变量进行运算和比较。
示例:int a = 10, b = 5;int sum = a + b;int result = (a > b) ? a : b;3.控制语句:C语言中有顺序结构、分支结构和循环结构。
可以用于控制程序的执行流程。
示例:if (num > 0)printf("The number is positive.");} else if (num < 0)printf("The number is negative.");} elseprintf("The number is zero.");4.函数:C语言中可以使用函数将代码模块化,并且可以通过参数和返回值传递数据。
示例:int add(int a, int b)return a + b;二、C51单片机入门2. 创建新项目:在Keil软件中创建一个新的项目,并选择C51单片机作为目标芯片。
3. 编写程序:在新建的项目中打开main.c文件,编写C语言程序。
可以使用C语言的代码编写方式。
示例:#include <reg51.h>//定义LED端口sbit LED = P1^0;void mai//设置LED口为输出LED=0;while (1)//LED闪烁LED=~LED;//延时for (int j = 0; j < 100; j++)}}}5. 调试程序:在Keil软件中打开调试窗口,可以对程序进行单步调试,查看程序的执行流程和变量的值。
51单片机基本知识汇总51单片机是一种常见的微控制器,广泛应用于各种电子设备中。
本文将对51单片机的基本知识进行汇总,包括其特点、应用领域、工作原理以及相关开发工具等内容。
一、51单片机的特点51单片机是一种8位微控制器,具有体积小、功耗低、价格便宜等特点。
它采用哈佛结构,具有较好的实时性能和嵌入式系统特性。
此外,51单片机还具备较强的扩展性,可通过外部器件和接口扩展其功能。
二、51单片机的应用领域由于其成本低、易学易用的特点,51单片机在各种电子设备中被广泛应用。
比如家用电器、汽车电子、工控设备、通信设备等领域。
在家用电器中,51单片机可以用于控制空调、洗衣机、电视等设备的运行;在汽车电子方面,它可以用于控制车载音响、车灯等;在工控设备中,51单片机可用于控制机械手臂、传感器等;在通信设备方面,它可以用于控制无线路由器、手机等。
三、51单片机的工作原理51单片机的工作原理可以简单概括为:通过外部输入设备(如按键、传感器)获取输入信号,经过A/D转换后输入到单片机内部;单片机根据预先设定的程序进行运算、判断和控制,然后通过输出端口控制外部输出设备(如LED灯、电机)工作。
整个过程是通过时钟信号进行同步控制的。
四、51单片机的开发工具为了方便开发人员进行程序设计和调试,51单片机有一系列的开发工具可供选择。
常用的开发工具有Keil C51、Proteus、IAR等。
Keil C51是一种集成开发环境,提供了编译、调试、仿真等功能,可以方便地编写和调试51单片机的程序。
Proteus是一种虚拟电子电路设计与仿真软件,可用于模拟51单片机的工作过程。
IAR是一种集成开发环境,也是一种常用的编译器,适用于多种单片机开发。
总结:本文对51单片机的基本知识进行了汇总,包括其特点、应用领域、工作原理以及相关开发工具等内容。
51单片机作为一种常见的微控制器,具有广泛的应用前景。
掌握了51单片机的基本知识,可以更好地应用于各种电子设备的开发与控制。
c51单片机词汇一、“单片机”(dān piàn jī),名词。
- 解释:一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D 转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统。
二、“寄存器”(jì cún qì),名词。
- 解释:是中央处理器内的组成部分。
寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和地址。
在C51单片机中,有各种不同功能的寄存器,例如工作寄存器组、特殊功能寄存器(SFR)等。
三、“中断”(zhōng duàn),名词。
- 解释:指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。
C51单片机有多个中断源,如外部中断、定时器中断等。
四、“定时器/计数器”(dìng shí qì / jì shù qì),名词。
- 解释:C51单片机内部集成的功能模块。
定时器可用于产生精确的定时,例如可以设置一定的时间间隔,在每个间隔到达时执行特定的操作;计数器则可以对外部事件(如脉冲信号)进行计数。
五、“引脚”(yǐn jiǎo),名词。
- 解释:从集成电路(芯片)内部电路引出与外围电路的接线,所有的引脚就构成了这块芯片的接口。
C51单片机有多个引脚,每个引脚都有特定的功能,如电源引脚、输入输出引脚、时钟引脚等。
六、“编程”(biān chéng),动词。
- 解释:为使计算机能够按照人的意图工作,需要编写程序,这个编写程序的过程就叫做编程。
在C51单片机开发中,使用C语言(C51语言,是标准C语言的一个扩展)对单片机进行编程,以实现各种功能,如控制外部设备、进行数据处理等。
1.4 C51基础知识介绍1.4.1 C51中的基本数据类型首先知道什么是常量和变量,例如A=1、B=D、C=A+B,A的值固定是1所以是常量,B的值随D的变化而变化所以是变量,同样道理C也是变量。
接下来C51有哪些数据类型,见表0-1。
表0-1 C51中常用的数据类型数据类型关键字所占位表示范围无符号字符型unsigned char80~255有符号字符型Char8-128~127无符号整型unsigned int160~65535有符号整型Int16-32768~32767无符号长整型unsigned long320~2^32-1有符号长整型Long32-2^31~2^31单精度实型Float323.4e-38~3.4e38双精度实型Double641.7e-308~1.7e308位类型Bit10~1数据类型前面没有unsigned的认为是signed型。
关于占位的解释:编程的时候无论采用什么进制在单片机中都以二进制方式存在,二进制只有0和1,这两个数每一个所占的空间就是一位(b),位也是单片机存储器中最小的单位。
比位大的是单位字节(B),一个字节等于8位(即1B=8b)。
为方便理解,数据类型所占位如图0-1所示。
图0-1 数据类型所占位其中float和double型是用来表示浮点数的,即带有小数点的数,通常float 能提供7位有效数字,double能提供15~16位有效数字,但是这个精度还和编译器有关,并不是所有编译器都遵守这个原则。
当把一个double型赋给float型的时候,系统会截取相应的有效位。
例如float a;a=1.2345678,那么a=1.234567,但改成double则能全部显示出来。
1.4.2 C51中的运算符C51算数运算符如表0-2所示。
表0-2 算数运算符算数运算符含义+加法-减法*乘法/除以++自加--自减%求余运算C51逻辑运算符如表0-3所示。
表0-3 逻辑运算符逻辑运算符含义>大于>=大于等于<小于<=小于等于==测试相等!=测试不等&&与||或!非C51位运算符如表0-4所示。
单片机C51基础知识汇总目录1、标识符2、数据类型3、变量4、常量5、二进制、八进制、十进制、十六进制6、运算符7、语句8、注释9、if语句10、switch--case语句11、for循环12、while循环13、do—while循环14、循环控制15、一维数组16、二维数组17、字符数组与字符串数组18、函数19、函数重入与递归20、预处理21、宏22、条件编译指令23、指针(*)24、结构(struct)25、联合(union)26、枚举(enum)主要内容1 .标识符标识符就是编程时使用的表示某个事情名称的符号,如函数名、变量名、引脚名、特殊功能寄存器名等。
标识符有系统标识符和用户自定义标识符之分。
标识符的命名规则:(1) 标识符第一个字符必须是字母或下划线。
(2) 标识符只能由字母、数字和下划线三类字符组成。
(3) 标识符是区分大小写的。
如A 和a 是两个不同的标识符。
(4) 标识符有效长度不超过32 个字符。
(5) 标识符不能是C51 的关键字。
2 .数据类型char有符号字符型,一字节,值域-128~127。
int 有符号整型,两字节,值域-32768~32767。
long有符号长整型,四字节,值域-2147483648~2147483647 unsigned char无符号字符型,一字节,值域0~255unsigned int无符号整型,两字节,值域0~65535unsigned long无符号长整型,四字节,值域0~4294967295float浮点型(都是有符号的),四字节,±1.175494E-38~±3.402823E+38bit位变量,一个二进制位,值域0~1。
sbit51 单片机特殊功能寄存器位,值域0~1。
Sfr 51 单片机特殊功能寄存器,值域0~255。
sfr1651 单片机特殊功能寄存器,如DPTR,值域0~65535。
bit,sbit,sfr,sfr16不是标准C 的内容,是51 单片机及C51 编译器特有的,不能用指针对它们进行操作。
单片机C51基础知识汇总李小鹏2019.12.24目录1、标识符2、数据类型3、变量4、常量5、二进制、八进制、十进制、十六进制6、运算符7、语句8、注释9、if语句10、switch--case语句11、for循环12、while循环13、do—while循环14、循环控制15、一维数组16、二维数组17、字符数组与字符串数组18、函数19、函数重入与递归20、预处理21、宏22、条件编译指令23、指针(*)24、结构(struct)25、联合(union)26、枚举(enum)主要内容1 .标识符标识符就是编程时使用的表示某个事情名称的符号,如函数名、变量名、引脚名、特殊功能寄存器名等。
标识符有系统标识符和用户自定义标识符之分。
标识符的命名规则:(1) 标识符第一个字符必须是字母或下划线。
(2) 标识符只能由字母、数字和下划线三类字符组成。
(3) 标识符是区分大小写的。
如A 和a 是两个不同的标识符。
(4) 标识符有效长度不超过32 个字符。
(5) 标识符不能是C51 的关键字。
2 .数据类型char有符号字符型,一字节,值域-128~127。
int 有符号整型,两字节,值域-32768~32767。
long有符号长整型,四字节,值域-2147483648~2147483647 unsigned char无符号字符型,一字节,值域0~255unsigned int无符号整型,两字节,值域0~65535unsigned long无符号长整型,四字节,值域0~4294967295float浮点型(都是有符号的),四字节,±1.175494E-38~±3.402823E+38bit位变量,一个二进制位,值域0~1。
sbit51 单片机特殊功能寄存器位,值域0~1。
Sfr 51 单片机特殊功能寄存器,值域0~255。
sfr1651 单片机特殊功能寄存器,如DPTR,值域0~65535。
bit,sbit,sfr,sfr16不是标准C 的内容,是51 单片机及C51 编译器特有的,不能用指针对它们进行操作。
3 .变量C51 规定所有变量在使用前都必须加以说明。
变量说明语句由数据类型、可选的存储类型和其后的一个或多个变量名组成,形式如下:数据类型[存放类型] 变量表;变量的作用范围:在花括号内说明(也称声明或定义)的变量,其作用范围仅限该花括号内,称为局部变量;在所有函数外面定义的变量,其作用范是整个程序,称为全局变量。
静态变量:在类型前加关键词static 说明的变量,称静态变量。
在函数内部定义的静态变量也是局部变量,但它在函数下次调用时,能保存上次调用的值。
在函数外面定义的静态变量,是全局变量,但它只在当前C 文件中有效。
这可以防止多个C 文件中同名冲突。
(函数加了关键词static,可以定义成静态函数,静态函数只能被同一个C 文件的程序调用。
)4 .常量常量的意思就是不可改变的量,是一个常数。
同变量一样,常量也可以有各种数据类型。
常量可以用以下几种方式定义:(1)宏定义#define OFF 1 /*定义常量标识符OFF,其值为1*/ (2)使用CODE 空间char code array[]={1,2,3,4};/*定义一个常数表,存放在程序存储器中*/ (3)常量定义关键词constConst int MAX = 60;(4) enum 枚举常量enum switchENUM {ON,OFF}; /*ON 值为0,OFF 值为1*/ 5 .二进制,十进制,八进制,十六进制(1)C 语言中没有二进制的直接表示方法。
(2)以数字“0”开头的数为八进制,如067。
(3)以“0x”或“0X”开头的数为十六进制,如0x3F。
(4)八进制及十六进制与二进制都可以直接转换,八进制每 1 位数对应3 位二进制数。
十六进制的每1 位对应4 位二进制数。
(5)用四位二进制数来表示的十进制数称BCD 码。
6 .运算符(1 )赋值运算符(=)‘=’赋值语句的作用是把某个常量或变量或表达式的值赋值给另一个变量。
注意:这里并不是等于的意思,只是赋值,等于用‘==’表示。
例如:count=5;total1=total2=0; //同时赋值给两个变量(2)算术运算符(+,-,*,/,%,++,--)+ 加,单目正;- 减,单目负;* 乘法;/ 除法;% 取模;++ 自加1(++a,先自加,再赋值;a++,先赋值,再自加)- - 自减1(- -a,先自减,再赋值;a- -,先赋值,再自减)(3)逻辑运算符(&&,||,!)逻辑运算符是根据表达式的值来返回“真”或“假”。
非0 为真值,0 为假值。
&& 逻辑与;|| 逻辑或;! 逻辑非(4)关系运算符(>,<,>=,<=,==,!=)关系运算符是对两个表达式进行比较,返回一个真、假值。
> 大于,如(4>5)的值为0,(4>2)的值为1。
< 小于>= 大于等于<= 小于等于== 等于!= 不等于这些运算符很简单,但要注意等于“==”和赋值“=”的区别,看下面的代码:条件判断:if(a = 3) {……}应该是:if(a==3) {……}(5)位运算(&,|,^,~,>>,<<)& 按位逻辑与,如0x0f & 0x33 结果是0x03。
| 按位逻辑或,如0x0f | 0x33 结果是0x3f。
^ 按位逻辑异或,如0x0f ^ 0x33 结果是0x3c。
~ 按位取反,如~0x33 结果是0xcc。
>> 右移,移出丢去,移入补0。
如0x33>>1 结果是0x19。
<< 右移,移出丢去,移入补0。
如0x33<<2 结果是0xcc。
(6)复合赋值运算符(+=,-=,*=,/=,%=,<<=,>>=,&=,|=,^=)a+=b 相当于a=a+ba-=b 相当于a=a-ba*=b 相当于a=a*ba/=b 相当于a=a/ba%=b 相当于a=a%ba<<=b 相当于a=a<<ba>>=b 相当于a=a>>ba&=b 相当于a=a&ba|=b 相当于a=a|ba^=b 相当于a=a^b(7)问号表达式(?:)<表达式1>?<表达式2>:<表达式3>在运算中,首先对第一个表达式进行检验,如果为真,则返回表达式2 的值;如果为假,则返回表达式3 的值。
这是一种“二选一”的表达式。
例如:a = (b>0)? (2*3):7; //当b>0 时,a=6;当b 不大于0 时,a=7。
(8)逗号运算符(,)多个表达式可以用逗号分开,其中用逗号分开的表达式的值分别结算,但整个表达式的值是最后一个表达式的值。
b=1;c=2;d=3;a1=(++b,c--,d+3); //选括号,再赋值,a1 取d+3,即a1=6a2=++b,c--,d+3; //赋值优先级高,所以a2 取++b,即a2=2 (9)运算符的优先级7 .语句(1)赋值语句如:A=1+2;T=Counter/3+5;Area=Height*Width;赋值不是“代数方程”,特别注意:Num=Num+1;//这显然不是一个等式,这是把Num+1 的值赋给变量Num (2)用逗号分隔开的声明语句Char Area, Height, Width;也可以把标识符写在不同的行上,如:Vfloat Area,Height,Width;这样便于给每个标识符后边加上注释。
在声明变量的时候,也可以直接给变量赋值,这叫做变量的初始化。
如:int a=3;也可以只初始化部分变量,如:int a=3, b, c=5;int a=3,b=a,c=5;(3)关于标准输入输出语句51 单片机的C 语言程序中可以使用控制台格式化输入、输出函数scanf()和printf(),但因为单片机程序使用这两个函数不是很方便,所以不做介绍。
8 .注释(1)单行注释一行中,在“//”后面的内容,被解释为注释。
(2 )多行注释以“/*”开头,用“*/”结尾,即/*……*/中间的内容被解释为注释。
9 .if 语句(1 )形式1if(表达式) 语句1;(2 )形式2if(表达式){语句1;语句2;……语句N;}(3)if—else 形式if(表达式) 语句1;else 语句2;(4)if--else if—else 形式if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;……else语句n;10 .switch--caseswitch(变量){case 常量1:语句1 或空;case 常量2:语句2 或空;……case 常量n:语句n 或空;default:语句n+1 或空;}执行switch 开关语句时,首选测试变量的值,并直接跳到与变量值相等的case 常量处开始往下执行。
若不与任何一个常量相等,则执行default 后面的语句。
注意:A.switch 中变量可以是数值,也可以是字符,但必须是整数。
B.case 的个数可以根据需要增减,也可以不使用default。
C.每个case 或default 后的语句可以有很多,但不需要使用“{”和“}”括起来。
D.执行完一个case 语句后面的程序后它并不主动跳出switch 的花括号,而是继续往下,顺序执行。
除非利用break 来跳出。
11 .for 循环for(<初始化>; <条件表达式>; <增量>){语句组;}For 的执行流程是:初始化→条件表达式为“真”→语句组→增量→条件表达式为“真”→……语句组→增量→条件表达式为“真”→语句组→增量→条件表达式为“假”→结束。
初始化是进入循环时执行的语句,通常是一个赋值语句,它用来给循环控制变量赋初值;条件表达式是一个关系表达式,它决定什么时候退出循环;“增量”可以控制循环次数,定义循环控制变量每循环一次后按什么方式变化。
注意,这三个部分之间用“;”分开,而不是“,”号。
例如:for(i=1;i<=10;i++)j=i*3;上例中先给i 赋初值1,判断i 是否小于等于10,若是则执行语句j=i*3,之后i 值增加1。
再重新判断,直到条件为假,即i>10 时,结束循环。
注意:A.语句组如果是一条语句,“{”和“}”可以省略。
B.for 循环中的初始化、条件表达式和增量都是选择项,即可以缺省,但“;”不能缺省。
省略了初始化,表示不对循环控制变量赋初值。