第10章80C51的C语言程序设计

上传人:我*** 文档编号:137836908 上传时间:2020-07-12 格式:PPT 页数:44 大小:747.50KB
返回 下载 相关 举报
第10章80C51的C语言程序设计_第1页
第1页 / 共44页
第10章80C51的C语言程序设计_第2页
第2页 / 共44页
第10章80C51的C语言程序设计_第3页
第3页 / 共44页
第10章80C51的C语言程序设计_第4页
第4页 / 共44页
第10章80C51的C语言程序设计_第5页
第5页 / 共44页
点击查看更多>>
资源描述

《第10章80C51的C语言程序设计》由会员分享,可在线阅读,更多相关《第10章80C51的C语言程序设计(44页珍藏版)》请在金锄头文库上搜索。

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

2、0/7/10,4,10.1.2 C51程序结构,#include #include void delayms(unsigned); void main(void) unsigned char i; P1=0 x01; do for (i=0;i=7;i+) delayms(5000); P1=P11; if(P1=0 x0)P1=0 x01; while(1); ,void delayms(unsigned x) unsigned char j; while(x-) for(j=0;j123;j+); ,2020/7/10,5,10.2.1 C51的数据类型,10.2 C51的数据类型与运算,

3、数据类型决定其取值范围、占用存储器的大小及可参与哪种运算。,2020/7/10,6,尽可能采用无符号格式 bit用于定义位变量的名字,编译器会对其分配地址(RAM的20H2FH 区域) sbit用于定义位变量的名字和地址,地址是确定的且不用编译器分配(SFR及RAM的20H2FH 区域) C51编译器在编译时会自动进行类型转换,几点说明:,2020/7/10,7,10.2.2 C51数据的存储类型,C51的存储器类型,2020/7/10,8,经常使用的变量应该置于片内RAM中,要用bdata、data、idata来定义 不经常使用的变量或规模较大的变量应该置于片外RAM中,要用pdata、xd

4、ata来定义 默认存储器类型由编译控制命令的存储模式指令限制,2020/7/10,9,10.2.3 80C51硬件结构的C51定义,特殊功能寄存器的声明,sfr 特殊功能寄存器名 = 地址常数;,格式:,例如: sfr SCON = 0 x90; sfr P0 = 0 x80;,2020/7/10,10,特殊功能寄存器中特定位的声明,sbit 位变量名=特殊功能寄存器名位的位置(07) 例如: sfr PSW=0 xD0; sbit OV=PSW2;,sbit 位变量名 = 字节地址位的位置(07) 例如: sbit OV=0 xD02; sbit CY=0 xD07;,sbit 位变量名 =

5、 位地址 例如: sbit OV=0 xD2; sbit CY=0 xD7;,2020/7/10,11,内部RAM中可位寻址对象的定义,先定义变量的数据类型和存储类型 例如: int bdata ibase; char bdata array4;,再利用sbit进行声明 例如: sbit mybit0 = ibase0; sbit mybit15 = ibase15; sbit ary07 = array07;,访问示例: ibase = -1; array2 = a;,2020/7/10,12,算术运算符和算术表达式,10.2.4 C51的运算符和表达式,基本算术运算符 例如: + 加法运算

6、符; - 减法(取负)运算符; * 乘法运算符; / 除法运算符; % 取余数运算符。,示例: 25.0/20.0=1.25 25/20=1 25%20=5,取负运算优先级最高。,2020/7/10,13,自增、自减运算符(仅能用于变量) 例如: + 自增运算符; - 自减运算符;,类型转换运算符 自动转换,顺序:bitcharintlongfloat 强制类型转换,如:(double)a,2020/7/10,14,关系运算符和关系表达式,关系运算符 大于; = 大于等于; = = 等于; != 不等于。,关系表达式 关系表达式的值为逻辑值:真(1)和假(0),2020/7/10,15,逻辑运

7、算符和逻辑表达式,逻辑运算符 条件表达式;更新表达式)语句,if语句与goto语句结合,当型循环 形式为: loop:if(表达式) 语句 goto loop; ,2020/7/10,23,直到型循环 形式为: loop:语句 if(表达式) goto loop; ,continue是一种循环中断语句,它并不跳出循环体; break语句只能跳出它所处的那一层循环; goto语句可以用于跳出多重循环(从内层到外层)。,注意:,2020/7/10,24,10.4 C51的指针类型,有一个变量a,利用 void delay(void) int a = 5000; while(a - - )_nop_

8、( ); ,void int_srv(void)interrupt 0 delay( ); if(INT0 = =0)P10 = ! P10;while(INT0 = =0); ,void main() P10 = 0; EA = 1; EX0 = 1; while(1); ,2020/7/10,33,定时计数器编程示例,【例10-2】 利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12 MHz。,1、计算计数初值X: Nt/ Tcy 1010-3/110-610000 计数器初值应为-10000。即应将 -(100

9、00/256)送入TH0中,-(10000%256)送入TL0中。,2、求T0的方式控制字TMOD: M1M0=01,GATE=0,C/T=0,可取方式控制字为01H,3、程序清单(见下页),2020/7/10,34,#include “reg51.h” sbit P10 = P10; void timer0(void)interrupt 1 P10 = ! P10; TH0 = -(10000/256); TL0 = -(10000%256); ,void main(void) TMOD = 0 x01; P10 = 0; TH0 = -(10000/256); TL0 = -(10000%

10、256); EA = 1; ET0 = 1; TR0 = 1; while(1); ,2020/7/10,35,10.6.2 80C51扩展资源的编程,通用并行口编程示例,【例10-3】用81C55作为微型打印机与单片机间的接口电路。,2020/7/10,36,#include “reg51.h” #include “absacc.h” /*含有对XBYTE等绝对地址访问宏的定义*/ #define uchar unsigned char #define COMD8155 XBYTE0 x7f00 #define PA8155 XBYTE0 x7f01 #define PB8155 XBYTE

11、0 x7f02 #define PC8155 XBYTE0 x7f03 sbit BUSY = P33;,2020/7/10,37,uchar code tab17 = 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,0 x30,0 x30,0 x38,0 x0a;/*高教 出版社 2008*/ uchar t1 = 17;,void ptr(uchar d) /*打印字符函数*/ PA8155 = d; PC8155 = 0 x00; /*产生选通脉冲*/ PC8155 = 0 x

12、01; while(BUSY); ,2020/7/10,38,void main(void) COMD8155 = 0 x0f;/*送命令字*/ prt(0 x1c); /*送中文打印方式命令字高字节*/ prt(0 x26); /*送中文打印方式命令字低字节*/ EA = 1; EX1 = 1; while(1); ,2020/7/10,39,void int1(void)interrupt 2 using 1 uchar i; EA = 0; for(i = 0;i t1;i +)prt(tabi); EA = 1; ,2020/7/10,40,A/D转换接口编程示例,【例10-4】 AD

13、C0809与单片机的接口电路如图。,2020/7/10,41,# include “reg51.h” # include “absacc.h” # define uchar unsigned char # define IN0 XBYTE0 x7ff8 sbit ad_busy = P33;,2020/7/10,42,void ad0809(uchar idata *x) uchar i; uchar xdata * ad_adr; ad_adr = & IN0; for(i = 0;i 8;i +) * ad_adr = 0; /*启动转换*/ i = i; /*延时等待*/ i = i; while(ad_busy ! =0); xi = * ad_adr; /*存转换结果*/ ad_adr +; /*下一通道*/ ,2020/7/10,43,void main(void) static uchar idata ad10 ; ad0809(ad); ,Thank You !,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号