版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
(优选)单片机语言基础现在是1页\一共有44页\编辑于星期日C语言作为一种非常方便的语言而得到广泛的支持,很多硬件开发都用C语言编程,如:各种单片机、DSP、ARM等.C语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。C提供了很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护性。
C-51的特点现在是2页\一共有44页\编辑于星期日C-51与ASM-51相比,有如下优点:1.
对单片机的指令系统不要求了解,仅要求对8051的存贮器结构有初步了解;2.
寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;3.
程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;4.
提供的库包含许多标准子程序,具有较强的数据处理能力;5.
由于具有方便的模块化编程技术,使已编好程序可容易地移植;现在是3页\一共有44页\编辑于星期日例子认识C程序#include<REG51.h>
sbitA5=P1^0x04;intmain(void){//用户代码voiddelay_1s();return0;}voiddelay_1s(){//代码}一、主程序(程序入口)intmain(void){//用户代码return0;}注:1、C程序模块都是以“{”开头“}”结尾,程序为函数[主函数、子函数]2、每一行必须有结束号“;”3、养成注释程序的习惯
“//”注释该行
“/*---段落---*/”注解一段二、头文件(编程预处理)#include<REG51.h>注:定义一些通用引脚及函数
三、自定义函数(子函数)常用、重复引用的功能集成可用任何文本编辑软件编写,最后保存扩展名为.C的程序源文件现在是4页\一共有44页\编辑于星期日其值可以改变的量称为变量。
一个变量应该有一个名字,在内存中占据一定的存储单元。变量应该先定义后使用。要区分变量名和变量值是两个不同的概念。a=3变量3存储值存储单元地址[a]
注:变量名a代表地址,编译系统自动分配,用户不可见0x40现在是5页\一共有44页\编辑于星期日一、C-51的变量类型1、基本数据类型类型符号关键字数的表示范围所占位数整型字符型实型有无(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsignedlongintunsignedshortint160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127无unsignedchar80~255现在是6页\一共有44页\编辑于星期日2、变量类型的定义格式:变量类型+变量名例如:
inta,b;//定义a,b为整型变更longsheng1,sheng2;//长整型Floatc,d;//浮点(有小数)Doublee,f;//双精度chara;//有符号字符型Unsignedcharb;无符号字符型
注:变量类型为规定的类型;变量的名称自由起,但通常要通俗,并要遵守如下规则c语言变量命名:数字、字母、下划线,都可以为变量命名。做为变量名的开头不能为数字,如3a_是错的,而a_3或_a3是正确变量名不能为关键字,像if'else'printf等等都不能现在是7页\一共有44页\编辑于星期日标准C表1现在是8页\一共有44页\编辑于星期日标准C表2现在是9页\一共有44页\编辑于星期日C51扩展现在是10页\一共有44页\编辑于星期日3、C-51的数据类型扩充定义sfr:特殊功能寄存器声明sfr16:sfr的16位数据声明sbit:特殊功能位声明bit:位变量声明现在是11页\一共有44页\编辑于星期日1.sfr特殊功能寄存器。这也是C51编译器的一种扩充数据类型,利用它可以访问8051单片机的所有内部特殊功能寄存器。sfr型数据占用一个内存单元,其取值范围0~255。2.sfr1616位特殊功能寄存器。它占用两个内存单元,取值范围是0~65535。3.sbit可寻址位。这也是C51编译器的一种扩充数据类型,利用它可以访8051单片机内部RAM中的可寻址位或特殊功能寄存器中的可寻址位。4.bit位标量。这是C51编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义位指针,也不能定义位数组。
现在是12页\一共有44页\编辑于星期日例:sfrSCON=0X98;sfr16T2=0xCC;sbitOV=PSW^2现在是13页\一共有44页\编辑于星期日4、数据类型修饰词1)、data:固定指前面0x00-0x7f的128个RAM,可以用acc直接读写的,速度最快,生成的代码也最小2)、code定义的数据要放在ROM(程序存储区)里面,写入后就不能再更改,对应的还有data是存入RAM的意思。例如:chardataa;//a变量存在上述RAM中intdatadisp;//disp变量存在上述RAM中例如:ucharcodeyima[]=//把数码管位数据(因为不变)写入ROM{0xeb,0x88,0xb3,0xba,0xd8,0x7a,0x7b,0xa8,0xfb,0xfa};现在是14页\一共有44页\编辑于星期日4、数据类型修饰词3)、现在是15页\一共有44页\编辑于星期日4、数据类型修饰词4)、现在是16页\一共有44页\编辑于星期日5、变量的赋值inta,b;//定义a,b为整型变量
longsheng1,sheng2;//长整型
floatc,d;//浮点(有小数)
doublee,f;//双精度
charg;//有符号字符型
Unsignedcharh;无符号字符型定义赋值a=12;a=0xff;a=0x00;b=0;b=08;b=03;C=0.214;c=-0.36;d=12e3;e=12e-12;g=10;G=‘A’;h=200;注:‘A’为字符常量,为该字符的ASCII代码现在是17页\一共有44页\编辑于星期日附现在是18页\一共有44页\编辑于星期日C-51的包含的头文件通常有:reg51.hreg52.hmath.hctype.hstdio.hstdlib.habsacc.h常用有:reg51.hreg52.h
(定义特殊功能寄存器和位寄存器);
math.h
(定义常用数学运算);
现在是19页\一共有44页\编辑于星期日二、C-51的运算符1、算术运算符+-*/%(加减乘除求余)说明:现在是20页\一共有44页\编辑于星期日++:自加运算符--自减运算符现在是21页\一共有44页\编辑于星期日2.逻辑运算将两个布尔量进行运算,结果为只有0或1的布尔量现在是22页\一共有44页\编辑于星期日3.关系运算运算结果只有0或1的布尔量现在是23页\一共有44页\编辑于星期日4.位运算位操作,结果还是一个数,注意与逻辑运算的区别1)现在是24页\一共有44页\编辑于星期日2).3).4)、现在是25页\一共有44页\编辑于星期日5)、现在是26页\一共有44页\编辑于星期日现在是27页\一共有44页\编辑于星期日
二、C-51流程控制
与标准C语言基本相同:
if选择语言switch/case多分支选择语言
while循环语言
for循环语言
do-while循环语言现在是28页\一共有44页\编辑于星期日1、if条件选择语句1)、单分支语句inta,b,max;max=a;if(max<b)max=b;现在是29页\一共有44页\编辑于星期日2)、双分支语句main(){inta,b,max;if(a>b)max=a;elsemax=b;}现在是30页\一共有44页\编辑于星期日3)、多分支语句依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n+1。然后继续执行后续程序。现在是31页\一共有44页\编辑于星期日inta=10;If(a>0&&a<2)printf(“a是一0到2之间的数”);elseif(a>=2&&a<5)printf(“a是一2到5之间的数”);elseif(a>-5&&a<8)printf(“a是一5到8之间的数”);elseif(a>=8&&a<10)printf(“a是一8到10之间的数”);elseprintf(“a是一个没知道的数”);
现在是32页\一共有44页\编辑于星期日2、switch语句
switch(表达式){case常量表达式1:语句1;case常量表达式2:语句2;…case常量表达式n:语句n;default:语句n+1;}格式计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。在使用switch语句时还应注意以下几点:在case后的各常量表达式的值不能相同,否则会出现错误。在case后,允许有多个语句,可以不用{}括起来。各case和default子句的先后顺序可以变动,而不会影响程序执行结果。default子句可以省略不用。现在是33页\一共有44页\编辑于星期日main(){floata,b;charc;printf("inputexpression:a+(-,*,/)b\n");scanf("%f%c%f",&a,&c,&b);switch(c){case'+':printf("%f\n",a+b);break;case'-':printf("%f\n",a-b);break;case'*':printf("%f\n",a*b);break;case'/':printf("%f\n",a/b);break;default:printf("inputerror\n");}}例子在使用switch语句时还应注意以下几点:(1)在case后的各常量表达式的值不能相同,否则会出现错误。(2)在case后,允许有多个语句,可以不用{}括起来。(3)各case和default子句的先后顺序可以变动,而不会影响程序执行结果。(4)default子句可以省略不用。现在是34页\一共有44页\编辑于星期日3、while语句
格式while(表达式)
{
语句
}while语句的语义是:计算表达式的值,当值为真(非0)时,执行循环体语句作用:循环执行一段代码现在是35页\一共有44页\编辑于星期日例子:
While(1){
P0=0xff;delay1s();P0=0x00;delay1s();}While(1){delay1s();P0=~P0;}inti=100;While(i>0){delay1s();P0=~P0;i--;}main(){inti,sum=0;i=1;while(i<=100){sum=sum+i;i++;}printf("%d\n",sum);}现在是36页\一共有44页\编辑于星期日4、for语句格式for(表达式1;表达式2;表达式3)
{
语句
}作用:循环执行一段代码它的执行过程如下:1)先求解表达式1。2)求解表达式2,若其值为真(非0),则执行for语句中指定的内嵌语句,然后执行下面第3)步;若其值为假(0),则结束循环,转到第5)步。3)求解表达式3。4)转回上面第2)步继续执行。5)循环结束,执行for语句下面的一个语句现在是37页\一共有44页\编辑于星期日Sum=0;for(i=1;i<=100;i++)
sum=sum+i;例子:inti;for(i=100;i>0;i--){//空语句,想想这段代码有什么用}现在是38页\一共有44页\编辑于星期日附:for循环的嵌套main(){inti,j,k;for(i=0;i<2;i++)for(j=0;j<2;j++)for(k=0;k<2;k++)printf(“%d%d%d\n",i,j,k);}现在是39页\一共有44页\编辑于星期日5、do-while语句形式为:
do{语句}while(表达式)作用:循环执行一段代码这个循环与while循环的不同在于:它先执行循环中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 防盗反盗奖惩制度汇编
- 敬老院内员工奖惩制度
- 看守所在押人员奖惩制度
- 孩子成绩奖惩制度
- 江苏安全生产奖惩制度
- 教育机构销售奖惩制度
- 德育干部考核奖惩制度
- 精准扶贫工作奖惩制度
- 开发煤炭客户奖惩制度
- 公司大门没锁奖惩制度
- 施工围挡施工工艺
- 武汉大学MBA开题报告(范例)
- 部编七年级-语文下册现代文阅读理解专项训练及答案
- 2026届黑龙江省优才计划 中学生标准学术能力测试高三数学联考试题(含解析)
- PICC维护标准化流程与质量控制
- 年产10000吨的乙酸乙酯生产工艺设计
- 财务大数据分析(聂瑞芳)全套课件
- 2025国考中国民用航空华东地区管理局面试试题及答案
- 会展接待课件
- 眼科缝合知识培训课件
- GJB3206B-2022技术状态管理
评论
0/150
提交评论