单片微机原理与应用part-10课件.ppt

上传人(卖家):三亚风情 文档编号:3504480 上传时间:2022-09-08 格式:PPT 页数:36 大小:1.36MB
下载 相关 举报
单片微机原理与应用part-10课件.ppt_第1页
第1页 / 共36页
单片微机原理与应用part-10课件.ppt_第2页
第2页 / 共36页
单片微机原理与应用part-10课件.ppt_第3页
第3页 / 共36页
单片微机原理与应用part-10课件.ppt_第4页
第4页 / 共36页
单片微机原理与应用part-10课件.ppt_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、 2022-7-2612022-7-262【基本知识点与要求【基本知识点与要求】(1)理解单片机)理解单片机C语言程序开发流程及结构。语言程序开发流程及结构。(2)掌握数据类型及其在单片机中的存储类型。)掌握数据类型及其在单片机中的存储类型。(3)了解)了解C51的顺序、分支和循环控制流程。的顺序、分支和循环控制流程。(4)掌握)掌握C51一般函数和中断函数的应用。一般函数和中断函数的应用。(5)理解单片机)理解单片机C语言程序开发流程及结构,掌握语言程序开发流程及结构,掌握Keil C51的使用。的使用。【重点与难点【重点与难点】各种数据类型在各种数据类型在C51中的应用,中的应用,Keil

2、 C51的使用,难点的使用,难点是中断函数的应用。是中断函数的应用。2022-7-263 基于基于5151系列单片机的系列单片机的C C语言或语言或C C语言编译器简称为语言编译器简称为C51C51语言或语言或C51C51。单片机的资源有限,因此。单片机的资源有限,因此C51C51在在C C语言的基础上进行了扩展。语言的基础上进行了扩展。使用使用C51C51不需要记忆汇编语言指令,但需要对不需要记忆汇编语言指令,但需要对5151单片机的组单片机的组成结构有所了解,这样才能更好的设计成结构有所了解,这样才能更好的设计C51C51应用程序。应用程序。printf和和scanf这两个函数在这两个函数

3、在ANSI C中通常用于屏幕输出和中通常用于屏幕输出和接收字符,而在接收字符,而在C5l中,它们则主要用于串行接口通信时数据的中,它们则主要用于串行接口通信时数据的发送和接收。发送和接收。10.1.1 C5110.1.1 C51程序开发流程程序开发流程 源程序编写之后,就要在编译软件的环境源程序编写之后,就要在编译软件的环境Keil C51中进行编中进行编译和连接,生成绝对定位目标码文件,即单片机可以执行的目标译和连接,生成绝对定位目标码文件,即单片机可以执行的目标文件。若源程序有错误则要重新修改才能再进行编译和连接。该文件。若源程序有错误则要重新修改才能再进行编译和连接。该绝对定位目标码文件

4、最终可以被写入编程器或硬件仿真器。与硬绝对定位目标码文件最终可以被写入编程器或硬件仿真器。与硬件一起完成系统功能。件一起完成系统功能。2022-7-264C51程序开发过程程序开发过程 2022-7-26510.1.2 C5110.1.2 C51程序结构程序结构 C51源程序的结构:源程序的结构:(1)C51语言是由函数构成的。语言是由函数构成的。一个一个C51源程序至少包括一源程序至少包括一个函数(个函数(main),也可以包含一个),也可以包含一个main函数和若干其它函数。函数和若干其它函数。因此,函数是因此,函数是C51程序的基本单位。被调用的函数可以是编译程序的基本单位。被调用的函数

5、可以是编译器提供的库函数,也可以是用户自己编制的函数。器提供的库函数,也可以是用户自己编制的函数。(2)一个)一个C51程序总是从程序总是从main函数开始执行的,而不论函数开始执行的,而不论main函数在整个程序中的位置如何。函数在整个程序中的位置如何。(3)任何编程语言都支持注释语句。)任何编程语言都支持注释语句。注释语句只对代码起注释语句只对代码起到功能描述的作用,在实际的编译链接过程中不起作用。到功能描述的作用,在实际的编译链接过程中不起作用。C51语言中可以用语言中可以用“/”符号开头来注释一行,或者用符号开头来注释一行,或者用“/*”符号开头、符号开头、并以并以“*/”符号结束,对

6、符号结束,对C51源程序中的任何部分进行注释。源程序中的任何部分进行注释。2022-7-266下面是一个简单的下面是一个简单的C51程序。程序。#include“reg51.h”sbit P1_0=P10;void main()P1_0=0;这个程序的作用是这个程序的作用是P1.0 引脚输出低电平。引脚输出低电平。“文件包含文件包含”是指一个文件将另外一个文件的内容全部包含是指一个文件将另外一个文件的内容全部包含进来,所以这里的程序虽然只有进来,所以这里的程序虽然只有4行,但行,但C编译器在处理的时候却编译器在处理的时候却要处理几十或几百行。这里程序中包含要处理几十或几百行。这里程序中包含re

7、g51.h文件的目的是为了文件的目的是为了要使用要使用P1这个符号。这个符号。2022-7-267打开打开 reg51.h 可以看到内容:可以看到内容:/*-REG51.HHeader file for generic 80C51 and 80C31 microcontroller。Copyright(c)1988-2001 Keil Elektronik GmbH and Keil Software,Inc。All rights reserved。-*/*BYTE Register*/sfr P0=0 x80;sfr P1=0 x90;sfr P2=0 xA0;sfr P3=0 xB0;sf

8、r PSW=0 xD0;sfr ACC=0 xE0;sfr B=0 xF0;sfr SP=0 x81;sfr DPL=0 x82;sfr DPH=0 x83;sfr PCON=0 x87;sfr TCON=0 x88;sfr TMOD=0 x89;sfr TL0=0 x8A;sfr TL1=0 x8B;sfr TH0=0 x8C;sfr TH1=0 x8D;sfr IE=0 xA8;sfr IP=0 xB8;sfr SCON=0 x98;sfr SBUF=0 x99;2022-7-268/*BIT Register*/*PSW*/sbit CY=0 xD7;sbit AC=0 xD6;sbit

9、 F0=0 xD5;sbit RS1=0 xD4;sbit RS0=0 xD3;sbit OV=0 xD2;sbit P=0 xD0;/*TCON*/sbit TF1=0 x8F;sbit TR1=0 x8E;sbit TF0=0 x8D;sbit TR0=0 x8C;sbit IE1=0 x8B;sbit IT1=0 x8A;sbit IE0=0 x89;sbit IT0=0 x88;/*IE*/sbit EA=0 xAF;sbit ES=0 xAC;sbit ET1=0 xAB;sbit EX1=0 xAA;sbit ET0=0 xA9;sbit EX0=0 xA8;/*IP*/sbit

10、PS=0 xBC;sbit PT1=0 xBB;sbit PX1=0 xBA;sbit PT0=0 xB9;sbit PX0=0 xB8;/*P3*/sbit RD=0 xB7;sbit WR=0 xB6;sbit T1=0 xB5;sbit T0=0 xB4;sbit INT1=0 xB3;sbit INT0=0 xB2;sbit TXD=0 xB1;sbit RXD=0 xB0;/*SCON*/sbit SM0=0 x9F;sbit SM1=0 x9E;sbit SM2=0 x9D;sbit REN=0 x9C;sbit TB8=0 x9B;sbit RB8=0 x9A;sbit TI=0

11、 x99;sbit RI=0 x98;2022-7-269 C51具有具有ANSI C的所有标准数据类型,包括:的所有标准数据类型,包括:char、int、long、float、*。除此之外,。除此之外,C51还增加了一些特殊的数据类还增加了一些特殊的数据类型,型,包括包括bit、sfr、sfr16、sbit。主要阐述主要阐述C51不同于标准不同于标准ANSI C的数据类型的数据类型(位变量类型,特殊功能寄存器类型位变量类型,特殊功能寄存器类型)。bit位变量声明位变量声明声明一个位变量或位类型函数声明一个位变量或位类型函数sbit可寻址位变量声明可寻址位变量声明声明一个可位寻址的位变量声明一

12、个可位寻址的位变量sfr8 8位特殊功能寄存器位特殊功能寄存器声明声明声明一个声明一个8 8位特殊功能寄存器位特殊功能寄存器sfr161616位特殊功能寄存器位特殊功能寄存器声明声明声明一个声明一个1616位特殊功能寄存器位特殊功能寄存器2022-7-2610(1)位类型()位类型(bit)bit类型存放逻辑变量,占用一个位地址,类型存放逻辑变量,占用一个位地址,C51编译器将编译器将把把bit类型的变量安排在单片机片内类型的变量安排在单片机片内RAM的位寻址区(的位寻址区(20H2FH)。在一个作用域中最大可声明)。在一个作用域中最大可声明128个位变量。个位变量。bit变量的声明与其他变量

13、相同,例如:变量的声明与其他变量相同,例如:bit done_flag=0 ;/定义位变量定义位变量done_flag,初值为,初值为0 bit func(bit bvar1););/bit 类型的函数类型的函数 bit bvar2;return(bvar2);/返回值是返回值是bit类型类型 不能定义位变量指针或位数组。不能定义位变量指针或位数组。2022-7-2611 5151系列单片机提供系列单片机提供128B128B的的SFRSFR区域。这个区域可字节寻址,区域。这个区域可字节寻址,有些也可进行字寻址、有些也可进行位寻址。用以访问定时有些也可进行字寻址、有些也可进行位寻址。用以访问定时

14、器、计数器、串行口、器、计数器、串行口、I/OI/O及其他部件,分别及其他部件,分别由由sfr、sfr16、sbit关键字说明关键字说明。(2)sfr C51使用使用sfr对对51系列单片机中的特殊功能寄存器进行定义。系列单片机中的特殊功能寄存器进行定义。这种定义方法与标准这种定义方法与标准C语言不兼容,只适用于对语言不兼容,只适用于对51系列单片机系列单片机进行进行C编程。是一种扩充数据类型,占用一个数据存储单元,编程。是一种扩充数据类型,占用一个数据存储单元,取值范围为:取值范围为:0 x800 xFF。2022-7-2612 定义格式为:定义格式为:sfr 变量名变量名=SFR中的地址中

15、的地址例如:定义例如:定义P0、P1口地址。口地址。sfr P0=0 x80;sfr P1=0 x90;【注意【注意】sfr后面必须跟一个特殊寄存器名,后面必须跟一个特殊寄存器名,“=”后面的地后面的地址必须是常数,不允许带有运算符的表达式。址必须是常数,不允许带有运算符的表达式。(3 3)sfr16 用于定义用于定义5151系列单片机内部系列单片机内部1616位特殊功能寄存器。当位特殊功能寄存器。当SFRSFR的的高位地址直接位于其低位地址之后时,对高位地址直接位于其低位地址之后时,对SFRSFR位值可以进行直接位值可以进行直接访问,使用关键字访问,使用关键字“sfrl6”sfrl6”。与与

16、8位位SFR定义的区别是定义的区别是16位位SFR的低端地址必须作为的低端地址必须作为“sfrl6”的定义地址。的定义地址。例如:例如:sfr16 T2=0 xCC /sfr16 T2=0 xCC /定义定时器定义定时器2 2为为T2T2,即,即TL2TL2为为 0CCH0CCH,TH2TH2为为0CDH0CDH;等价于,对;等价于,对TL2TL2和和TH2TH2分别定义。分别定义。sfrsfr TL2=0 xCC TL2=0 xCC 和和sfrsfr TH2=0 xCD TH2=0 xCD两条语句。两条语句。2022-7-2613(4)sbit 关键字关键字sbitsbit定义可位寻址的特殊

17、功能寄存器的某位。定义可位寻址的特殊功能寄存器的某位。定义方法有如下三种:定义方法有如下三种:sbit 位变量名位变量名=位地址位地址 此时,位地址必须位于此时,位地址必须位于0 x800 x800 xFF0 xFF之间。之间。sbitsbit CY=0 xD7 CY=0 xD7;/用绝对位地址表示用绝对位地址表示PSWPSW中的第中的第8 8位位 sbit 位变量名位变量名=特殊功能寄存器名特殊功能寄存器名位位置位位置 此时,位位置是一个此时,位位置是一个0 07 7之间的常数。之间的常数。sbitsbit CY=PSW CY=PSW7 7;/必须事先已经定义了必须事先已经定义了PSWPSW

18、。sbit 位变量名位变量名=字节地址字节地址位位置位位置 此时,字节地址作为基地址,在此时,字节地址作为基地址,在0 x80H0 x80H0 xFF0 xFF之间。位位置之间。位位置是一个是一个0 07 7之间的常数。之间的常数。sbitsbit CY=0 xD0 CY=0 xD07 7;/PSW/PSW的字节地址为的字节地址为0 xD00 xD0 上面三种方法定义上面三种方法定义PSWPSW中的第中的第8 8位位CYCY,结果相同。,结果相同。2022-7-2614 sbit和和bit的区别的区别在于在于sbitsbit定义特殊功能寄存器中的可寻址定义特殊功能寄存器中的可寻址位;而位;而b

19、itbit则定义了一个普通的位变量,一个函数中可包含则定义了一个普通的位变量,一个函数中可包含bitbit类型的参数,函数返回值也可为类型的参数,函数返回值也可为bitbit类型。类型。sbit、sfr、sfr16三种数据类型用于对三种数据类型用于对51系列单片机的特系列单片机的特殊功能寄存器(殊功能寄存器(SFR)操作,在实际应用中,)操作,在实际应用中,Keil C51中的中的reg51.h文件中做了定义,所以,文件中做了定义,所以,在在C51程序中会看到开始部分程序中会看到开始部分有有#include 语句。语句。在编程时,为了书写方便,经常使用简化的缩写形式来定在编程时,为了书写方便,

20、经常使用简化的缩写形式来定义变量的数据类型。在源程序开头使用义变量的数据类型。在源程序开头使用#define语句。例如:语句。例如:#define uchar unsigned char#define uint unsigned int 这样定义后,在后面的程序编写中就可以分别用这样定义后,在后面的程序编写中就可以分别用uchar、uint来代替来代替unsigned char、unsigned int来定义变量。来定义变量。2022-7-2615data存储器类型声明存储器类型声明直接寻址直接寻址5151系列单片机的内部系列单片机的内部数据存储器数据存储器 地址:地址:00H-7FH00H-

21、7FHidata存储器类型声明存储器类型声明间接寻址间接寻址5151系列单片机的内部系列单片机的内部数据存储器数据存储器高高128B128Bbdata存储器类型声明存储器类型声明可字节、位寻址的可字节、位寻址的5151系列单片系列单片机内部数据存储器机内部数据存储器16B16Bxdata存储器类型声明存储器类型声明5151系列单片机外部数据空间系列单片机外部数据空间64KB 64KB 用用 MOVX DPTRMOVX DPTR访问访问pdata存储器类型声明存储器类型声明5151系列单片机外部数据空间系列单片机外部数据空间256B 256B 用用 MOVX RiMOVX Ri访问访问code存

22、储器类型声明存储器类型声明5151系列单片机的系列单片机的程序存储空间程序存储空间 C51的数据类型必须以一定的存储类型定位在的数据类型必须以一定的存储类型定位在51系列单片系列单片机的某一存储器位置上。机的某一存储器位置上。2022-7-2616 存储类型与存储空间对应关系存储类型与存储空间对应关系 2022-7-2617 说明:说明:对变量的声明还包括对变量的声明还包括对变量存储类型的指定。若省略,则默对变量存储类型的指定。若省略,则默认为认为auto,由编译模式确定。,由编译模式确定。内部数据存储器的访问比外部要快,频繁使用的变量放在内部数据存储器的访问比外部要快,频繁使用的变量放在内部

23、数据存储器,较少使用的变量放在外部数据存储器中。内部数据存储器,较少使用的变量放在外部数据存储器中。C51编译器不允许在编译器不允许在bdata区域声明实型数据区域声明实型数据float(4字节字节)和双精度型和双精度型double(8字节字节)。small存储器模式存储器模式所有默认变量参数均放入内部所有默认变量参数均放入内部RAMcompact存储器模式存储器模式所有默认变量参数均放入外部所有默认变量参数均放入外部RAM第第1页页large存储器模式存储器模式所有默认变量参数均放入外部所有默认变量参数均放入外部RAM2022-7-2618 interrupt中断函数声明中断函数声明定义一个

24、中断服务函数定义一个中断服务函数 Using寄存器组定义寄存器组定义定义定义51系列单片机系列单片机的工的工作寄存器组作寄存器组中断号和中断源的对应关系中断号和中断源的对应关系中断号中断号中断源中断源中断向量中断向量0外部中断外部中断00003H1定时器定时器/计数器计数器0000BH2外部中断外部中断10013H3定时器定时器/计数器计数器1001BH4串行接口串行接口0023H2022-7-2619 C51函数定义的一般格式为:函数定义的一般格式为:return_type funcname(args)small|compact|largereentrant interrupt nusing

25、 n 其中带其中带 的项目可以缺省。下面对函数定义加以说明:的项目可以缺省。下面对函数定义加以说明:return_type 函数返回值类型,如果不指定,缺省为函数返回值类型,如果不指定,缺省为int;funcname 函数名;函数名;args 函数的形式参数列表,是用逗号分隔的变量表,缺函数的形式参数列表,是用逗号分隔的变量表,缺省为无参数函数;省为无参数函数;small、compact、large 函数的三种存储模式,缺省时为函数的三种存储模式,缺省时为small模式;模式;reentrant 表示函数是递归的或重入的;表示函数是递归的或重入的;interrupt n 表示是一个中断函数,表

26、示是一个中断函数,n为中断号为中断号 n=04;using n 指定函数所用的工作寄存器组,指定函数所用的工作寄存器组,n取值为取值为 n=03。2022-7-2620 若程序中用到若程序中用到Keil C5l头文件中的内容,则必须用头文件中的内容,则必须用#include实现包含。实现包含。Keil C5l常用的部分头文件有:常用的部分头文件有:reg51.h定义定义51系列单片机的特殊功能寄存器。系列单片机的特殊功能寄存器。reg52.h定义定义52增强型单片机特殊功能寄存器。增强型单片机特殊功能寄存器。setjmp.h定义定义jmp_buf类型和类型和setjmp和和longjmp程程序

27、的原型。序的原型。stdio.h一般输入一般输入/输出函数。输出函数。string.h字符串操作程序、缓冲区操作程序。字符串操作程序、缓冲区操作程序。2022-7-2621(1)分支结构(选择结构)分支结构(选择结构)if (表达式)表达式)语句;语句;if (表达式)表达式)语句语句1;else 语句语句2;if (表达式表达式)语句语句1;else if 语句语句2;else if 语句语句3;else 语句语句n;2022-7-2622Switch (表达式表达式)case 常量表达式常量表达式1:语句语句1;break;case 常量表达式常量表达式2:语句语句2;break;case

28、 常量表达式常量表达式3:语句语句3;break;case 常量表达式常量表达式n:语句语句n;break;default:语句语句n+1;2022-7-2623(2)循环结构)循环结构While (条件表达式)(条件表达式)语句;语句;/循环体循环体 Do 语句;语句;/循环体循环体While (条件表达式)(条件表达式)for (初值设定表达式;循环条件表达式;条件更新表达式)初值设定表达式;循环条件表达式;条件更新表达式)语句;语句;/循环体循环体2022-7-2624C51C51程序实现程序实现I/OI/O端口的操作端口的操作 例例1:使使P1口先输出口先输出0 xDB,调用延时程序,

29、调用延时程序delay()后,再使后,再使P1口输出口输出0 xB6,然后再调用延时程序,然后再调用延时程序delay(),如此循,如此循环往复。环往复。#include reg51.Hvoid delay(void);void main(void)do P1=0 xDB;delay();P1=0 xB6;delay();while(1);void delay(void)int x=20000;do x=x-1;/延时延时 while(x1);2022-7-2625#include#include void main()SCON=0 x50;/串口方式串口方式1 TMOD=0 x20;/T1方

30、式方式2 TCON=0 x40;/启动启动T1 TH1=0 xE8;/11.0592MHz 1200bps TL1=0 xE8;TI=1;while(1)printf(“Hello Worldn”);/显示显示 /end main C51C51中默认的输出设备是单片机的串行口中默认的输出设备是单片机的串行口 例例2:使用使用printf函数使单片机的串行口输出字符串函数使单片机的串行口输出字符串。2022-7-2626C51C51实现内部定时器操作实现内部定时器操作例例3:fosc=12MHz,P1.0输出周期为输出周期为2ms的方波,采用定的方波,采用定时器查询方式。时器查询方式。#incl

31、ude reg51.hsbit P1_0=P10;void main(void)TMOD=0 x01;/T0方式方式1 TR0=1;/启动启动T0 for (;)TH0=-1000/256;/装计数器初值装计数器初值TL0=-1000%256;do while(!TF0);/查查TF0 P1_0=!P1_0;TF0=0;/软件清软件清TF0 /end for 2022-7-2627例例4-1:fosc=12MHz,P1.0输出周期为输出周期为2ms的方波,采用的方波,采用定时器中断方式。定时器中断方式。#include reg51.h#include stdio.hunsigned char

32、intcycle;sbit P1_0=P10;timer0()interrupt 1 using 1 if(+intcycle=4)intcycle=0;P1_0=!P1_0;tinit()/初始化定时器初始化定时器T0 TMOD=TMOD|0 x02;/方式方式2 TH0=-250;TL0=-250;ET0=1;EA=1;TR0=1;intcycle=0;void main(void)tinit();while(1)2022-7-2628例例4-2:fosc=12MHz,P1.0输出周期为输出周期为2ms的方波,采用的方波,采用定时器中断方式。定时器中断方式。#include reg51.h

33、#include stdio.hsbit P1_0=P10;timer0()interrupt 1 using 1 P1_0=!P1_0;TH0=(65536-1000)/256;TL0=(65536-1000)%/256;tinit()/初始化定时器初始化定时器T0 TMOD=TMOD|0 x01;/方式方式1 TH0=(65536-1000)/256;TL0=(65536-1000)%/256;ET0=1;EA=1;TR0=1;P1_0=0;void main(void)tinit();while(1)2022-7-2629(1)projectNew project 下建立第一个下建立第一

34、个C程序工程项目程序工程项目名称,后缀为名称,后缀为.uv2。后续可以单击此文件打开做好的项目。后续可以单击此文件打开做好的项目。2022-7-2630(2)选择所需要的单片机器件。选择所需要的单片机器件。2022-7-2631(3)FileNew 出现编辑窗口,开始输入出现编辑窗口,开始输入C51源程序,起源程序,起名保持。名保持。2022-7-2632(4)鼠标右键在鼠标右键在source group1 右上角,选择右上角,选择Add File to Group Source Group1命令;选择刚保存的文件,单击命令;选择刚保存的文件,单击ADD按钮后,按钮后,C51程序被加入到工程文件中。程序被加入到工程文件中。2022-7-2633(5)编译。有语法错误时重新修改、编译,直到无错误为止编译。有语法错误时重新修改、编译,直到无错误为止。编译窗编译窗口口2022-7-2634运行运行复位复位停止停止串口串口开启开启/关闭关闭调试模式调试模式串行窗口串行窗口调试界面调试界面2022-7-2635(6)运行,检查结果是否正确。运行,检查结果是否正确。串行窗口串行窗口2022-7-2636

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

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(单片微机原理与应用part-10课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|