《C51单片机的C语言程序设计.ppt》由会员分享,可在线阅读,更多相关《C51单片机的C语言程序设计.ppt(44页珍藏版)》请在装配图网上搜索。
1、2020/6/15,1,第10章80C51的C语言程序设计,单片机C语言概述,10.1,C51的数据类型与运算,10.2,C51流程控制语句,10.3,C51的指针类型,10.4,C51的函数,10.5,C51编程实例,10.6,2020/6/15,2,10.1单片机C语言概述,10.1.1C51程序开发过程,编译器能自动完成变量的存储单元的分配对常用功能模块和算法编制相应的函数,方便移植,采用C51的优点,C语言具有良好的可读性、可移植性和基本的硬件操作能力。,C51程序开发过程,编写源程序建立工程,加入源程序编译生产目标程序仿真调试、写存储器,2020/6/15,3,2020/6/15,4。
2、,10.1.2C51程序结构,#include#includevoiddelayms(unsigned);voidmain(void)unsignedchari;P1=0 x01;dofor(i=0;i=7;i+)delayms(5000);P1=P11;if(P1=0 x0)P1=0 x01;while(1);,voiddelayms(unsignedx)unsignedcharj;while(x-)for(j=0;j=大于等于;=等于;!=不等于。,关系表达式关系表达式的值为逻辑值:真(1)和假(0),2020/6/15,15,逻辑运算符和逻辑表达式,逻辑运算符条件表达式;更新表达式)语句。
3、,if语句与goto语句结合,当型循环形式为:loop:if(表达式)语句gotoloop;,2020/6/15,23,直到型循环形式为:loop:语句if(表达式)gotoloop;,continue是一种循环中断语句,它并不跳出循环体;break语句只能跳出它所处的那一层循环;goto语句可以用于跳出多重循环(从内层到外层)。,注意:,2020/6/15,24,10.4C51的指针类型,有一个变量a,利用voiddelay(void)inta=5000;while(a-)_nop_();,voidint_srv(void)interrupt0delay();if(INT0=0)P10=!P。
4、10;while(INT0=0);,voidmain()P10=0;EA=1;EX0=1;while(1);,2020/6/15,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、程序清单(。
5、见下页),2020/6/15,34,#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);,2020/6/15,35,10.6.280C51扩展资源的编程,通用并行口编程示例,【例10-3】用81C55作为微型打印机与单片机间的接口电路。,2020/6/15,36,#inc。
6、lude“reg51.h”#include“absacc.h”/*含有对XBYTE等绝对地址访问宏的定义*/#defineucharunsignedchar#defineCOMD8155XBYTE0 x7f00#definePA8155XBYTE0 x7f01#definePB8155XBYTE0 x7f02#definePC8155XBYTE0 x7f03sbitBUSY=P33;,2020/6/15,37,ucharcodetab17=0 xb8,0 xdf,0 xbd,0 xcc,0 x20,0 xb3,0 xf6,0 xb0,0 xe6,0 xc9,0 xe7,0 x20,0 x32,。
7、0 x30,0 x30,0 x38,0 x0a;/*高教出版社2008*/uchart1=17;,voidptr(uchard)/*打印字符函数*/PA8155=d;PC8155=0 x00;/*产生选通脉冲*/PC8155=0 x01;while(BUSY);,2020/6/15,38,voidmain(void)COMD8155=0 x0f;/*送命令字*/prt(0 x1c);/*送中文打印方式命令字高字节*/prt(0 x26);/*送中文打印方式命令字低字节*/EA=1;EX1=1;while(1);,2020/6/15,39,voidint1(void)interrupt2usin。
8、g1uchari;EA=0;for(i=0;it1;i+)prt(tabi);EA=1;,2020/6/15,40,A/D转换接口编程示例,【例10-4】ADC0809与单片机的接口电路如图。,2020/6/15,41,#include“reg51.h”#include“absacc.h”#defineucharunsignedchar#defineIN0XBYTE0 x7ff8sbitad_busy=P33;,2020/6/15,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+;/*下一通道*/,2020/6/15,43,voidmain(void)staticucharidataad10;ad0809(ad);,ThankYou。