第章C单片机的C语言程序设计.ppt

上传人:wj 文档编号:18628111 上传时间:2023-08-21 格式:PPT 页数:44 大小:1.17MB
下载 相关 举报
第章C单片机的C语言程序设计.ppt_第1页
第1页 / 共44页
第章C单片机的C语言程序设计.ppt_第2页
第2页 / 共44页
第章C单片机的C语言程序设计.ppt_第3页
第3页 / 共44页
第章C单片机的C语言程序设计.ppt_第4页
第4页 / 共44页
第章C单片机的C语言程序设计.ppt_第5页
第5页 / 共44页
第章C单片机的C语言程序设计.ppt_第6页
第6页 / 共44页
第章C单片机的C语言程序设计.ppt_第7页
第7页 / 共44页
第章C单片机的C语言程序设计.ppt_第8页
第8页 / 共44页
第章C单片机的C语言程序设计.ppt_第9页
第9页 / 共44页
第章C单片机的C语言程序设计.ppt_第10页
第10页 / 共44页
第章C单片机的C语言程序设计.ppt_第11页
第11页 / 共44页
第章C单片机的C语言程序设计.ppt_第12页
第12页 / 共44页
第章C单片机的C语言程序设计.ppt_第13页
第13页 / 共44页
第章C单片机的C语言程序设计.ppt_第14页
第14页 / 共44页
第章C单片机的C语言程序设计.ppt_第15页
第15页 / 共44页
第章C单片机的C语言程序设计.ppt_第16页
第16页 / 共44页
第章C单片机的C语言程序设计.ppt_第17页
第17页 / 共44页
第章C单片机的C语言程序设计.ppt_第18页
第18页 / 共44页
第章C单片机的C语言程序设计.ppt_第19页
第19页 / 共44页
第章C单片机的C语言程序设计.ppt_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第章C单片机的C语言程序设计.ppt

《第章C单片机的C语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第章C单片机的C语言程序设计.ppt(44页珍藏版)》请在冰点文库上搜索。

第章C单片机的C语言程序设计.ppt

2023/8/21,1,第10章80C51的C语言程序设计,单片机C语言概述,10.1,C51的数据类型与运算,10.2,C51流程控制语句,10.3,C51的指针类型,10.4,C51的函数,10.5,C51编程实例,10.6,2023/8/21,2,10.1单片机C语言概述,10.1.1C51程序开发过程,编译器能自动完成变量的存储单元的分配对常用功能模块和算法编制相应的函数,方便移植,采用C51的优点,C语言具有良好的可读性、可移植性和基本的硬件操作能力。

C51程序开发过程,编写源程序建立工程,加入源程序编译生产目标程序仿真调试、写存储器,2023/8/21,3,2023/8/21,4,10.1.2C51程序结构,#include#includevoiddelayms(unsigned);voidmain(void)unsignedchari;P1=0x01;dofor(i=0;i=7;i+)delayms(5000);P1=P11;if(P1=0x0)P1=0x01;while

(1);,voiddelayms(unsignedx)unsignedcharj;while(x-)for(j=0;j123;j+);,2023/8/21,5,10.2.1C51的数据类型,10.2C51的数据类型与运算,数据类型决定其取值范围、占用存储器的大小及可参与哪种运算。

2023/8/21,6,尽可能采用无符号格式bit用于定义位变量的名字,编译器会对其分配地址(RAM的20H2FH区域)sbit用于定义位变量的名字和地址,地址是确定的且不用编译器分配(SFR及RAM的20H2FH区域)C51编译器在编译时会自动进行类型转换,几点说明:

2023/8/21,7,10.2.2C51数据的存储类型,C51的存储器类型,2023/8/21,8,经常使用的变量应该置于片内RAM中,要用bdata、data、idata来定义。

不经常使用的变量或规模较大的变量应该置于片外RAM中,要用pdata、xdata来定义。

默认存储器类型由编译控制命令的存储模式指令限制。

2023/8/21,9,10.2.380C51硬件结构的C51定义,特殊功能寄存器的声明,sfr特殊功能寄存器名=地址常数;,格式:

例如:

sfrSCON=0x90;sfrP0=0x80;,2023/8/21,10,特殊功能寄存器中特定位的声明,sbit位变量名=特殊功能寄存器名位的位置(07)例如:

sfrPSW=0xD0;sbitOV=PSW2;,sbit位变量名=字节地址位的位置(07)例如:

sbitOV=0xD02;sbitCY=0xD07;,sbit位变量名=位地址例如:

sbitOV=0xD2;sbitCY=0xD7;,2023/8/21,11,内部RAM中可位寻址对象的定义,先定义变量的数据类型和存储类型例如:

intbdataibase;charbdataarray4;,再利用sbit进行声明例如:

sbitmybit0=ibase0;sbitmybit15=ibase15;sbitary07=array07;,访问示例:

ibase=-1;array2=a;,2023/8/21,12,算术运算符和算术表达式,10.2.4C51的运算符和表达式,基本算术运算符例如:

+加法运算符;-减法(取负)运算符;*乘法运算符;/除法运算符;%取余数运算符。

示例:

25.0/20.0=1.2525/20=125%20=5,取负运算优先级最高。

2023/8/21,13,自增、自减运算符(仅能用于变量)例如:

+自增运算符;-自减运算符;,类型转换运算符自动转换,顺序:

bitcharintlongfloat强制类型转换,如:

(double)a,2023/8/21,14,关系运算符和关系表达式,关系运算符大于;=大于等于;=等于;!

=不等于。

关系表达式关系表达式的值为逻辑值:

(1)和假(0),2023/8/21,15,逻辑运算符和逻辑表达式,逻辑运算符&逻辑与|逻辑或!

逻辑非,逻辑表达式逻辑表达式的值为逻辑值:

(1)和假(0),例:

5|0结果为1,2&0结果为0,2023/8/21,16,位运算符,&按位与|按位或按位异或按位取反右移,例:

P1=P11表示对P1口的所有位左移1位,2023/8/21,17,赋值和复合赋值运算符,复合赋值运算符+=加法赋值;-=减法赋值;*=乘法赋值;/=除法赋值;%=取模赋值;,符号“=”称为赋值运算符,=右移位赋值;&=逻辑与赋值;|=逻辑或赋值;=逻辑异或赋值;=逻辑非赋值,例:

a*=5相当于a=a*5;b&=0x80相当于b=b&0x80。

2023/8/21,18,10.3C51流程控制语句,10.3.1C51选择语句,条件语句,if(条件表达式)语句例如:

if(p1!

=0)c=20;,if(条件表达式)语句1else语句2例如:

if(p1!

=0)c=20;elsec=0;,2023/8/21,19,if(条件表达式1)语句1elseif(条件表达式2)语句2elseif(条件表达式3)语句3elseif(条件表达式n)语句nelse语句n+1,2023/8/21,20,开关语句,switch(表达式)case常量表达式1:

语句1;break;case常量表达式2:

语句2;break;case常量表达式n:

语句n;break;default:

语句n+1;,2023/8/21,21,10.3.2C51循环语句,while语句,一般形式为:

while(条件表达式)语句;,如果条件表达式的结果一开始就为假,则后面的语句一次也不能执行。

Do-while语句,一般形式为:

do语句while(条件表达式);,任何条件下,循环体语句至少会被执行一次。

2023/8/21,22,for语句,一般形式为:

for(初值表达式;条件表达式;更新表达式)语句,if语句与goto语句结合,当型循环形式为:

loop:

if(表达式)语句gotoloop;,2023/8/21,23,直到型循环形式为:

loop:

语句if(表达式)gotoloop;,continue是一种循环中断语句,它并不跳出循环体;break语句只能跳出它所处的那一层循环;goto语句可以用于跳出多重循环(从内层到外层)。

注意:

2023/8/21,24,10.4C51的指针类型,有一个变量a,利用&a表示变量a的地址。

则语句p=&a;把a的地址赋给了指针变量p,则“p指向了变量a”。

*P表示变量a的内容,指针变量的定义chardata*p/*定义指针变量*/p=30H/*为指针变量赋值,30H为片内RAM地址*/x=*p/*30H单元的内容送给变量x*/,2023/8/21,25,定义时未指定它所指向的对象的存储器类型,10.4.1一般指针,一般指针占3个字节第一字节存放该指针的默认存储器类型编码(见表)第二字节存放该指针的高位地址偏移量第三字节存放该指针的低位地址偏移量,存储器类型编码,2023/8/21,26,一般指针定义示例:

char*xdatastrptr;/*指针本身存于xdata空间,它指向char型数据*/int*datanumber;/*指针本身存于data空间,它指向int型数据*/,由于指向对象的存储空间在编译时无法确定(运行时确定),因此必须生成一般代码以保证对任意空间的对象进行存取。

所以一般指针所产生的代码速度较慢。

2023/8/21,27,10.4.2基于存储器的指针,定义时就指定它所指向的对象的存储器类型,指针占1个字节(idata*,data*,pdata*)或2个字节(code*,xdata*),基于存储器指针定义示例:

chardata*str;/*指针指向的char型数据存于data空间*/intxdata*num;/*指针指向的int型数据存于xdata空间*/,基于存储器的指针长度比一般指针短,可以节省存储器空间,运行速度快,但它所指对象具有确定的存储器空间,兼容性不好。

2023/8/21,28,10.5C51的函数,10.5.1C51函数的定义,一般形式:

返回值类型函数名(形式参数列表)编译模式reentrantinterruptnusingn函数体,编译模式为SMALL、COPACT或LARGEreentrant用于定义可重入函数interruptn用于定义中断函数,n为中断号,可以为031usingn确定工作寄存器组,取值为03,2023/8/21,29,10.5.2C51函数的调用与参数传递,主调函数要向被调函数传递所需的参数传递给被调函数的数据称为实际参数,即实参实参向形参的传递是单向的参数传递可以采用寄存器、固定存储器位置方式,参数传递,寄存器参数传递,2023/8/21,30,SMALL模式下,在内部RAM中完成COMPACT模式下,在外部RAM中完成LARGER模式下,在外部RAM中完成,固定存储器位置参数传递,80C51单片机不采用堆栈传递参数。

但C51提供一种模拟堆栈,从而支持可重入函数的递归调用。

10.5.3C51的库函数,常用的C51库函数参见附录B.2,2023/8/21,31,10.6C51编程实例,10.6.180C51内部资源的编程,中断服务函数示例,中断函数的定义形式void函数名(void)interruptnusingm函数体,2023/8/21,32,【例10-1】单片机应用系统中,外中断0引脚接一个开关,并行口线P1.0接一个发光二级管。

要求:

开关闭合一次,发光二极管的状态改变一次。

试编写程序,#include“reg51.h”#include“intrins.h”sbitP10=P10;voiddelay(void)inta=5000;while(a-)_nop_();,voidint_srv(void)interrupt0delay();if(INT0=0)P10=!

P10;while(INT0=0);,voidmain()P10=0;EA=1;EX0=1;while

(1);,2023/8/21,33,定时计数器编程示例,【例10-2】利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12MHz。

1、计算计数初值X:

Nt/Tcy1010-3/110-610000计数器初值应为-10000。

即应将-(10000/256)送入TH0中,-(10000%256)送入TL0中。

2、求T0的方式控制字TMOD:

M1M0=01,GATE=0,C/T=0,可取方式控制字为01H,3、程序清单(见下页),2023/8/21,34,#include“reg51.h”sbitP10=P10;voidtimer0(void)interrupt1P10=!

P10;TH0=-(10000/256);TL0=-(10000%256);,voidmain(void)TMOD=0x01;P10=0;TH0=-(10000/256);TL0=-(10000%256);EA=1;ET0=1;TR0=1;while

(1);,2023/8/21,35,10.6.280C51扩展资源的编程,通用并行口编程示例,【例10-3】用81C55作为微型打印机与单片机间的接口电路。

2023/8/21,36,#include“reg51.h”#include“absacc.h”/*含有对XBYTE等绝对地址访问宏的定义*/#defineucharunsignedchar#defineCOMD8155XBYTE0x7f00#definePA8155XBYTE0x7f01#definePB8155XBYTE0x7f02#definePC8155XBYTE0x7f03sbitBUSY=P33;,2023/8/21,37,ucharcodetab17=0xb8,0xdf,0xbd,0xcc,0x20,0xb3,0xf6,0xb0,0xe6,0xc9,0xe7,0x20,0x32,0x30,0x30,0x38,0x0a;/*高教出版社2008*/uchart1=17;,voidptr(uchard)/*打印字符函数*/PA8155=d;PC8155=0x00;/*产生选通脉冲*/PC8155=0x01;while(BUSY);,2023/8/21,38,voidmain(void)COMD8155=0x0f;/*送命令字*/prt(0x1c);/*送中文打印方式命令字高字节*/prt(0x26);/*送中文打印方式命令字低字节*/EA=1;EX1=1;while

(1);,2023/8/21,39,voidint1(void)interrupt2using1uchari;EA=0;for(i=0;it1;i+)prt(tabi);EA=1;,2023/8/21,40,A/D转换接口编程示例,【例10-4】ADC0809与单片机的接口电路如图。

2023/8/21,41,#include“reg51.h”#include“absacc.h”#defineucharunsignedchar#defineIN0XBYTE0x7ff8sbitad_busy=P33;,2023/8/21,42,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+;/*下一通道*/,2023/8/21,43,voidmain(void)staticucharidataad10;ad0809(ad);,ThankYou!

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2