第10章80C51单片机的C语言程序设计.ppt_第1页
第10章80C51单片机的C语言程序设计.ppt_第2页
第10章80C51单片机的C语言程序设计.ppt_第3页
第10章80C51单片机的C语言程序设计.ppt_第4页
第10章80C51单片机的C语言程序设计.ppt_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

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

2、/8/12,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/8/12,5,10.2.1 C51的数据类型,10.2 C51的数据类型与运算,数

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

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

5、sbit 位变量名 = 位地址 例如: sbit OV = 0 xD2; sbit CY = 0 xD7;,2020/8/12,11,内部RAM中可位寻址对象的定义,先定义变量的数据类型和存储类型 例如: int bdata ibase; char bdata array4;,再利用sbit进行声明 例如: sbit mybit0 = ibase0; sbit mybit15 = ibase15; sbit ary07 = array07; sbit ary37 = array37;,访问示例: ibase = -1; array2 = a; array2 = 0,2020/8/12,12,算

6、术运算符和算术表达式,10.2.4 C51的运算符和表达式,基本算术运算符 例如: + 加法运算符; - 减法(取负)运算符; * 乘法运算符; / 除法运算符; % 取余数运算符。,示例: 25.0/20.0 = 1.25 25/20 = 1 25%20 = 5,取负运算优先级最高。,2020/8/12,13,自增、自减运算符(仅能用于变量) 例如: + 自增运算符; - 自减运算符;,类型转换运算符 自动转换,顺序:bitcharintlongfloat 强制类型转换,如:(double)a,2020/8/12,14,关系运算符和关系表达式,关系运算符 大于; = 大于等于; = = 等于

7、; != 不等于。,关系表达式 关系表达式的值为逻辑值:真(1)和假(0),2020/8/12,15,逻辑运算符和逻辑表达式,逻辑运算符 条件表达式;更新表达式)语句,if语句与goto语句结合,当型循环 形式为: loop:if(表达式) 语句 goto loop; ,2020/8/12,23,直到型循环 形式为: loop:语句 if(表达式) goto loop; ,continue是一种循环中断语句,它并不跳出循环体; break语句只能跳出它所处的那一层循环; goto语句可以用于跳出多重循环(从内层到外层)。,注意:,2020/8/12,24,10.4 C51的指针类型,有一个变量

8、a,利用 void delay(void) int a = 5000; while(a - - )_nop_( ); ,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/8/12,33,定时计数器编程示例,【例10-2】 利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12 MHz。,1、计算

9、计数初值X: Nt/ Tcy 1010-3/110-610000 计数器初值应为-10000。即应将 -(10000/256)送入TH0中,-(10000%256)送入TL0中。,2、求T0的方式控制字TMOD: M1M0 = 01,GATE = 0,C/T = 0,可取方式控制字为01H。,3、程序清单(见下页),2020/8/12,34,#include “reg51.h” sbit P10 = P10; void timer0(void)interrupt 1 P10 = ! P10; TH0 = -(10000/256); TL0 = -(10000%256); ,void main(

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

11、D8155 XBYTE0 x7f00 #define PA8155 XBYTE0 x7f01 #define PB8155 XBYTE0 x7f02 #define PC8155 XBYTE0 x7f03 sbit BUSY = P33;,2020/8/12,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(ucha

12、r d) /*打印字符函数*/ PA8155 = d; PC8155 = 0 x00; /*产生选通脉冲*/ PC8155 = 0 x01; while(BUSY); ,2020/8/12,38,void main(void) COMD8155 = 0 x0f;/*送命令字*/ prt(0 x1c); /*送中文打印方式命令字高字节*/ prt(0 x26); /*送中文打印方式命令字低字节*/ EA = 1; EX1 = 1; while(1); ,2020/8/12,39,void int1(void)interrupt 2 using 1 uchar i; EA = 0; for(i =

13、 0;i t1;i +)prt(tabi); EA = 1; ,2020/8/12,40,A/D转换接口编程示例,【例10-4】 ADC0809与单片机的接口电路如图。,2020/8/12,41,# include “reg51.h” # include “absacc.h” # define uchar unsigned char # define IN0 XBYTE0 x7ff8 sbit ad_busy = P33;,2020/8/12,42,void ad0809(uchar idata *x) uchar i; uchar xdata * ad_adr; ad_adr = & IN0; for(i =

温馨提示

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

评论

0/150

提交评论