80C51的C语言程序设计教学课件PPT单片机.ppt_第1页
80C51的C语言程序设计教学课件PPT单片机.ppt_第2页
80C51的C语言程序设计教学课件PPT单片机.ppt_第3页
80C51的C语言程序设计教学课件PPT单片机.ppt_第4页
80C51的C语言程序设计教学课件PPT单片机.ppt_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9.2c51的数据类型与运算,9.1单片机的c语言,9.3c51流程控制语句,9.4c51的指针类型,9.5c51的函数,9.6c51编程实例,第9章80c51的c语言程序设计,本章内容:,9.1.1c51程序开发概述,一、采用c51的优点,编译器自动完成变量的存储分配常用接口芯片编制通用驱动函数常用功能模块和算法编制相应的函数,方便地进行算法和程序的移植。当代码长度超过4kb以上时,c51比汇编语言更具有明显的优势。,9.1单片机的c语言,二、c51程序开发过程,9.1.2c51程序结构,预处理命令全局变量说明;函数1说明;函数n说明;main()局部变量说明;执行语句;函数调用(实参表);,函数1(形式参数说明)局部变量说明;执行语句;函数调用(实际参数表);函数n(形式参数说明)局部变量说明;执行语句;函数调用(实际参数表);,9.2c51的数据类型与运算,9.2.1c51的数据类型,9.2.2c51的数据的存储器类型,变量和常量必须以一定的存储器类型定位于单片机的存储区域中。,经常使用的变量应置于片内ram中,即用bdata、data、idata来定义;不经常使用的变量或规模较大的变量应该置于片外ram中,即用pdata、xdata来定义。例如:,bitbdataflags;/*位变量flags定位在片内ram的位寻址区*/chardatavar;/*字符变量var定位在片内ram区*/floatidatax,y,z;/*实型变量x,y,z定位在片内间址ram区*/sfrp1=0 x90;/*定义p1口地址为90h*/,如果用户不对变量的存储器类型进行定义,c51编译器采用默认的存储器类型。由编译控制命令中的存储模式指令限制。例如:charvar;/*在small模式时,var定位data存储区*/*在compact模式时,var定位pdata存储区*/*在large模式时,var定位xdata存储区*/,9.2.380c51硬件结构的c51定义,一、特殊功能寄存器的定义21个sfr,为能直接访问,c51用扩充的关键字sfr和sfr16进行定义。方法为:sfr特殊功能寄存器名=地址常数;,例如:sfrscon=0 x98;sfrp0=0 x80;sfr16t2=0 xcc;,二、sfr特定位的定义sbit定义可独立寻址访问的位变量,如定义sfr中的一些特定位。方法为:,1、sbit位变量名=sfr名位的位置(07),如:sfrpsw=0 xd0;/*定义psw地址为0 xd0*/sbitov=psw2;/*定义ov位为psw.2*/sbitcy=psw7;/*定义cy位为psw.7*/,2、sbit位变量名=字节地址位的位置(07),如:sbitov=0 xd02;/*定义ov位地址为0 xd2*/sbitcy=0 xd07;/*定义cy位地址为0 xd7*/注:字节地址作基地址,必须在0 x800 xff之间。,3、sbit位变量名=位地址,如:sbitov=0 xd2;/*定义ov位地址为0 xd2*/sbitcy=0 xd7;/*定义cy位地址为0 xd7*/注:位地址必须位于0 x800 xff之间。,三、内部ram中可位寻址对象的定义ram的20h2fh单元可用bdata存储器类型访问,带有bdata类型的变量可以进行字或字节寻址,用sbit指定bdata变量的相应位后就可以进行位寻址。,例如,先定义变量数据类型和存储类型为:intbdataibase;/*定义整形变量ibase*/charbdataarray4;/*定义字符数组array4*/,定义可独立寻址访问的位:sbitmybit0=ibase0;sbitmybit15=ibase15;sbitary07=array07;sbitary37=array37;,访问示例:ibase=-1;/*字寻址*/array2=a;/*字节寻址*/ary07=0;/*位寻址*/用bit定义普通位变量时c51编译器会自行安排该位变量于可位寻址的bdata区。例如,bitmybit。应注意的是,不能定义bit类型指针,也不能定义bit类型数组。,一、算术运算符和算术表达式1、基本算术运算符+加法运算符;-减法(取负)运算符;*乘法运算符;/除法运算符;%取余(模)运算符。,9.2.4c51的运算符和表达式,加、减和乘法符合一般的算术运算规则。除法时,若是两个整数相除,其结果为整数,舍去小数部分;如果是两个浮点数相除,其结果为浮点数。取余运算,则要求运算对象为整形。,求值要依运算符的优先级进行。算术运算符中取负运算优先级最高,其次为乘法、除法和取余。加法和减法优先级最低。可根据需要采用括号来改变运算符的优先级。,2、自增、自减运算符+自增运算符;-自减运算符。,+和-运算符只能用于变量,不能用于常量和表达式。如,+j表示先加1,再取值;j+表示先取值,再加1。自减运算类同。,3、类型转换运算符两侧的数据类型不同时,要转换成同种类型。方式有两种:,一是自动转换,是指编译器在编译时自动进行的类型转换。顺序为:bitcharintlongfloat,signedunsigned。二是强制类型转换,如:(double)a,将a强制转换为double类型。,二、关系运算符和关系表达式,1、关系运算符大于;=大于等于;,=等于;!=不等于。,高优先级,低优先级,关系运算优先级低于算术运算,高于赋值运算。,2、关系表达式关系表达式的值为逻辑值:真和假。c51中用0表示假,用1表示真。,三、逻辑运算符和逻辑表达式,1、逻辑运算符voiddelay(void)inta=5000;while(a-)_nop_();,voidmain()p10=0;ea=1;ex0=1;while(1);,voiddelay(void)inta=5000;while(a-)_nop_();voidint_srv(void)interrupt0delay();if(int0=0)p10=!p10;while(int0=0);,二、定时计数器编程示例例用t0方式1,产生10ms的定时,使p1.0引脚上输出周期为20ms方波,采用中断方式,设系统时钟频率为12mhz。,解:1、计算计数初值:nt/tcy1010-3/110-310000将-(10000/256)送入th0中,-(10000%256)送入tl0。2、t0方式控制字:m1m0=01,gate=0,c/t=0,可取方式控制字为01h;3、程序清单如下:,#include“reg51.h”sbitp10=p10;voidtimer0(void)interrupt1p10=!p10;th0=-(10000/256);tl0=-(10000%256);,voidmain(void)tmod=0 x01;p10=0;th0=-(10000/256);tl0=-(10000%256);ea=1;et0=1;tr0=1;while(1);,9.6.280c51扩展资源的编程,例:微型打印机接口电路如图,一、通用并行口编程示例,实现程序为:#include“reg51.h”#include“absacc.h”#defineucharunsignedchar#definecomd8155xbyte0 x7f00#definepa8155xbyte0 x7f01#definepb8155xbyte0 x7f02#definepc8155xbyte0 x7f03,sbitbusy=p33;ucharcodetab17=0 xc7,0 xe5,0 xbb,0 xaa,0 x20,0 xb3,0 xf6,0 xb0,0 xe6,0 xc9,0 xe7,0 x20,0 x32,0 x30,0 x30,0 x35,0 x0a;/*清华出版社2005*/uchart1=17;voidptr(uchard)/*打印字符函数*/pa8155=d;pc8155=0 x00;/*产生选通脉冲*/pc8155=0 x01;while(busy);,voidmain(void)comd8155=0 x0f;/*送命令字*/prt(0 x1c);/*送中文打印方式命令字高字节*/prt(0 x26);/*送中文打印方式命令字低字节*/ea=1;ex1=1;while(1);voidint1(void)interrupt2using1uchari;ea=0;for(i=0;it1;i+)prt(tabi);ea=1;ex1=0;,二、a/d转换接口编程示例,例adc0809与单片机的接口电路如图,查询方式采集数据的应用程序为:#include“reg51.h”#include“absacc.h”#defineucharunsignedchar#definein0xbyte0 x7ff8sbitad_busy=p33;,voidmain(void)staticucharidataad10;ad0809(ad);,voidad0809(ucharidata*x)uchari;ucharxdata*ad_adr;ad_adr=&in0;for(i=0;i8;i+)*ad_adr=0;/*启动转换*/i=i;/*延时等待*/i=i;while(ad_busy!=0);xi=*ad_adr;/*存转换结果*/ad_adr+;/*下一通道*/,思考题及习题,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论