资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,刘玉宏,主讲,单片微机原理及应用,教学课件,C-51,程序设计,本讲重点:,C-51,的数据类型和存储类型;,指针和中断的使用;,通过实例消化理解,C-51,的编程方法;,单片微机原理及应用,教学课件,C,语言作为一种非常方便的语言而得到广泛的支持,国内最通用的是,Keil,C51.,C,语言程序本身不依赖于机器硬件系统,基本上不作修改就可将程序从不同的单片机中移植过来。,C,提供了很多数学函数并支持浮点运算,开发效率高,故可缩短开发时间,增加程序可读性和可维护性。,C-51,简介,单片微机原理及应用,教学课件,C-51,与,ASM-51,相比,有如下优点:,1.,对单片机的指令系统不要求了解,仅要求对,8051,的存贮器结构有初步了解;,2.,寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;,3.,程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;,4.,具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;,5.,提供的库包含许多标准子程序,具有较强的数据处理能力;,6.,由于具有方便的模块化编程技术,使已编好程序可容易地移植;,单片微机原理及应用,教学课件,C,51,的程序结构,与一般,C,语言的结构相同,以,main(),函数为程序人口,程序体中包含若干语句还可以包含若干函数。,C,51,函数的一般格式,类型 函数名(参数表),数据说明部分,语句执行部分,单片微机原理及应用,教学课件,C51,的数据类型,基本数据类型,类型,符号,关键字,数的表示范围,所占位数,整型,字符型,实型,有,无,(,signed),int,16,-,3276832767,(signed)short,16,-,3276832767,(signed)long,32,-21474836482147483647,16,unsigned,int,065535,32,04294967295,unsigned long,int,unsigned short,int,16,065535,有,float,32,3.4e-383.4e38,有,double,64,1.7e-3081.7e308,有,char,8,-128127,无,unsigned char,8,0255,C,语言中的基本数据类型,类型,符号,关键字,数的表示范围,所占位数,整型,字符型,实型,有,无,(,signed),int,16,-,3276832767,(signed)short,16,-,3276832767,(signed)long,32,-21474836482147483647,16,unsigned,int,065535,32,04294967295,unsigned long,int,unsigned short,int,16,065535,有,float,32,3.4e-383.4e38,有,double,64,1.7e-3081.7e308,有,char,8,-128127,无,unsigned char,8,0255,(,续,),C,51,的数据类型,扩充定义,sfr,:,特殊功能寄存器,声明,sfr16:,sfr,的,16位数据声明,sbit,:,特殊功能位声明,bit,:,位变量声明,例:,sfr,SCON=0X98;,sfr16 T2=0 xCC;,sbit,OV=PSW2;,C-51,数据的存储类型,名 存储空间位置 长度 数据范围,data,直接寻址片内,RAM 8,位,0,255,bdata,可位寻址片内,RAM 1,位,0/1,idata,间接寻址片内,RAM 8,位,0,255,pdata,片外页,RAM 8,位,0,255,xdata,片外,RAM 16,位,0,65535,code,程序,ROM 16,位,0,65535,单片微机原理及应用,教学课件,C-51,数据的存储类型,(,续,),例:,数据类型,存储类型,变量,char,data,var1;,bit,bata,flags;,unsigned char,xdata,vextor10;,C-51,数据的存储类型,C-51,的,包含的头文件,通常有,:,reg51.h math.h,ctype.h,stdio.h,stdlib.h,absacc.h,常用有,:,reg51.h,(,定义特殊功能寄存器和位寄存器);,math.h,(,定义常用数学运算);,C-51,的运算符,与,C,语言基本相同:,+-*/,(加 减 乘 除),=,(位右移 位左移),&|,(,按位与 按位或,),(,按位异或 按位取反,),单片微机原理及应用,教学课件,C-51,的基本语句,与,标准,C,语言基本相同:,if,选择语言,switch/case,多分支选择语言,while,循环语言,do-while,循环语言,for,循环语言,单片微机原理及应用,教学课件,中断服务程序,函数名(),interrupt n,I/O,口定义,#include,#define,prot,xbyte0 x1000,或,用指针定义,例:,清零程序,(,将,2000H20FFH,的内容清零,),汇编语言程序,ORG 0000H,SE01:MOV R0,#00H,MOV DPTR,#2000H,;(0000H),送,DPTR,LOO1:CLR A,MOVX,DPTR,A,;0,送,(DPTR),INC DPTR,;DPTR+1,INC R0,;,字节数加,1,CJNE R0,#00H,LOO1,;,不到,FF,个字节再清,LOOP:SJMP LOOP,单片微机原理及应用,教学课件,清零程序,(,将,2000H20FFH,的内容清零,),C,51,程序,#include,main(),int,i;,unsigned char,xdata,*p=0 x2000;,/*,指针指向,2000H,单元*,/,for(i,=0;i256;i+),*p=0;p+;,/*,清零,2000H-20FFH,单元*,/,汇编语言程序,ORG 0000H,L00:MOV R0,#10H,;,查找,16,个字节,MOV R1,#00H,MOV DPTR,#2000H,L11:MOVX A,DPTR,CJNE A,#00H,L16,;,取出内容与,00H,相等吗,?,INC R1,;,取出个数加,1,L16:INC DPTR,DJNZ R0,L11,;,未完继续,MOV DPTR,#2100H,MOV A,R1,MOVX DPTR,A,;,相同数个数送,2100H,L1E:SJMP L1E,例:查找零的个数,(在,2000H-200FH,中查出有几个字 节是零,把个数放在,2100H,单元中),单片微机原理及应用,教学课件,查找零的个数,C,51,程序,#include,main(),unsigned char,xdata,*p=0 x2000,;/*,指针,p,指向,2000H,单元*,/,int,n=0,i;,for(i=0;i16;i+),if(*p=0)n+;,/*,若该单元内容为零,则,n+1*/,p+;,/*,指针指向下一单元 *,/,p=0 x2100;,/*,指针,p,指向,2100H,单元*,/,*p=n;,/*,把个数放在,2100H,单元中*,/,单片微机原理及应用,教学课件,例:电脑时钟,(,用定时器产生,0.1,秒定时中断,在,P1,口输出),C,51,程序,#include,Sbit,P1_0=P10;,/*,中断服务子程序(,0.1,秒中断一次)*,/,void time()interrupt 1,P1_0=!P1_0;,TH0=0 x3c;TL0=0 xb7;/*,给,T0,赋计数初值 *,/,单片微机原理及应用,教学课件,例:电脑时钟,(续),main(),TMOD=0X01;/*T/C0,工作在定时器方式,1*/,TH0=0 x3c;,TL0=0 xb7;/*,给,T0,赋计数初值 *,/,EA=1;/*CPU,开中断*,/,TR0=1;/*,启动,T/C0,开始定时*,/,ET0=1;/*T/C0,开中断*,/,whlie(1);,单片微机原理及应用,教学课件,演示,SIMLAB C,程序实例,OVER!,单片微机原理及应用,教学课件,
展开阅读全文