单片机基础与应用(C语言版)(第3版)课件全套 王静霞 1.1 初识单片机 -8.3 单片机与PCF8591接口设计_第1页
单片机基础与应用(C语言版)(第3版)课件全套 王静霞 1.1 初识单片机 -8.3 单片机与PCF8591接口设计_第2页
单片机基础与应用(C语言版)(第3版)课件全套 王静霞 1.1 初识单片机 -8.3 单片机与PCF8591接口设计_第3页
单片机基础与应用(C语言版)(第3版)课件全套 王静霞 1.1 初识单片机 -8.3 单片机与PCF8591接口设计_第4页
单片机基础与应用(C语言版)(第3版)课件全套 王静霞 1.1 初识单片机 -8.3 单片机与PCF8591接口设计_第5页
已阅读5页,还剩448页未读 继续免费阅读

下载本文档

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

文档简介

1.1初识单片机《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学1.1.1什么是单片机什么是单片机?输入设备输出设备CPU存储器输入接口电路输出接口电路CPU:CentralProcessingUnit中央处理单元控制器运算器主机板计算机系统把CPU、存储器、和输入/输出接口电路集成在一个芯片上,这就是单片机。从广义上讲,单片机属于微型计算机的一种,是集成在一个芯片上,专门用于检测控制领域的微型计算机。输入设备输出设备CPU存储器输入接口电路输出接口电路CPU:CentralProcessingUnit中央处理单元控制器运算器主机板单片机单片机是集成在一块(单)芯片上的微型计算机。MCU:Micro-ControllerUnit,微控制器单片机是指将中央处理单元(CPU)、存储器、I/O接口电路、定时器/计数器、中断系统等控制器件集成在一块半导体硅片上的微型计算机微型计算机硬件组成单片机内部组成为什么还要有单片机呢?体积大,功能强,价格高桌面应用体积小、实时性强、价格低嵌入式应用1.1.2单片机分类单片机按照用途,可分为通用型和专用型;

按照基本操作处理的二进制位数,主要分为4位、8位、16位、32位单片机。1980年,8051推出8048问世1971年1976年1978年1982年现在1993年未来探索完善巩固单片机分类单片机系列单片机尽管种类繁多,但使用最广泛的是MCS-51单片机。它是指美国Intel公司生产的一系列单片机的总称本书以8位通用型51单片机典型芯片8051为研究对象,介

绍单片机的硬件结构、工作原理及应用系统的设计。1.1.3单片机特点及应用单片机特点及应用41424344体积小,性价比高,灵活性强,单片机很容易嵌入到系统中,在嵌入式系统设计中有广泛的应用。可嵌入性功能齐全,实时性强,可靠性高,抗干扰能力强,单片机是为满足工业控制而设计的,便于实现各种方式的检测和控制。。实时控制单片机技术发展迅速,形式多样,品种齐全,前景广阔,为单片机大规模应用奠定了坚实的基础。灵活选型单片机结构简单,技术成熟,容易掌握和普及,设计周期短,是各类电子工程师首选的微控制器。容易实现单片机广泛应用于社会生活的各个方面,发挥着十分重要的作用,应用领域包括工业控制与检测、仪器仪表、消费类电子产品、通信、汽车电子设备、武器装备、各种终端及计算机外部设备等。仪器仪表方面通信汽车电子设备武器装备工业方面消费类方面计算机外设其他方面感谢您的观看Thanks

for

your

attention.

1.2单片机应用系统及开发环境《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学1.2.1单片机应用系统单片机应用系统包括硬件系统(电路板)和控制程序2个部分,二者相辅相成,缺一不可。单片机硬件系统和软件程序1.2.2单片机应用系统开发流程1.2.3单片机开发系统一个单片机应用系统从提出任务到正式投入运行的过程,称为单片机的开发。开发过程所用的设备称为单片机开发工具或开发系统。单片机开发系统单片机应用系统开发1.2.4单片机开发软件KeilµVisionKeilµVision软件是目前最流行的开发51单片机的软件,提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(µVision)将这些部分组合在一起。单片机开发软件单片机开发软件感谢您的观看Thanks

for

your

attention.

2.1单片机硬件结构《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学硬件电路是单片机应用系统设计的基础,所以读者应首先掌握单片机内部结构、外部引脚、存储器、时钟电路、复位电路和并行I/O口等硬件的结构、特点。8051单片机内部的基本结构(单片机具有微型计算机的CPU、存储器、输入接口电路、输出接口电路等功能部件)中央处理器(CPU)是单片机的控制核心完成运算和控制功能。内部数据存储器(RandomAccessMemory,RAM)共有128个用户RAM单元,可读、可写,掉电后数据丢失,用于暂存中间数据。特殊功能寄存器(SFR)共有21个特殊功能寄存器,用于CPU对片内外各外围部件进行管理和控制。内部程序存储器(Read-onlyMemory,ROM)共有4KB掩膜ROM,只可读、不可写,掉电后数据不会丢失,用于存放程序或程序运行过程中不会改变的原始数据,通常称为程序存储器。共有4个8位并行I/O接口:P0、P1、P2、P3,可以实现数据的并行输入/输出。有一个全双工异步串行口,可以实现单片机与其他设备之间的串行数据通信。共有2个16位的定时/计数器,可实现定时或计数功能,并以其定时或计数结果对计算机进行控制。共有5个中断源,分为高级和低级2个优先级。8051内部有时钟电路,只需外接石英晶体和微调电容即可。晶振频率通常选择6MHz、12MHz或11.0592MHz。感谢您的观看Thanks

for

your

attention.

2.28051引脚功能《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学DIP40封装51单片机的外形DIP40封装8051单片机的引脚图

电源引脚

控制

电源引脚接入单片机的工作电源①VCC:接+5V电源。②VSS:接地。

时钟引脚①XTAL1:当使用片内振荡器时,这个引脚外部接石英晶体和微调电容;当采用外部时钟源时,这个引脚接外部时钟振荡器的信号。②XTAL2:当使用片内振荡器时,这个引脚外部接石英晶体和微调电容;当采用外部时钟源时,这个引脚悬空。并行I/O口引脚①P0口:P0.0~P0.7引脚,作为通用I/O口使用。②P1口:P1.0~P1.7引脚,8位准双向口线,可驱动4个LS型TTL负载。③P2口:P2.0~P2.7引脚,8位准双向口线,可驱动4个LS型TTL负载。④P3口:P3.0~P3.7引脚,8位准双向口线,可驱动4个LS型TTL负载。P3口各引脚与第二功能表引脚第二功能第二功能信号名称P3.0RXD串行数据接收P3.1TXD串行数据发送P3.2INT0(低电平)外部中断0申请P3.3INT1(低电平)外部中断1申请P3.4T0定时/计数器0的外部输入P3.5T1定时/计数器1的外部输入P3.6WR(低电平)外部RAM或外部I/O写选通P3.7RD(低电平)外部RAM或外部I/O读选通感谢您的观看Thanks

for

your

attention.

2.351单片机的存储器结构《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学2.3.1数据存储空间片内数据存储器(1)工作寄存器区4组通用工作寄存器区占据00H~1FH共32个单元地址,每组包含8个8位的工作寄存器,以R0~R7作寄存单元编号。地址为20H~2FH的16个单元,既可以进行字节操作,也可以进行位操作,称为位寻址区。(2)位寻址区(3)用户RAM区地址为30H~7FH的单元为用户RAM区,只能进行字节寻址,用作存放操作数以及作为堆栈区使用。片内RAM位寻址区的位地址单元地址位地址D7D6D5D4D3D2D1D02FH2EH2DH2CH2BH2AH29H28H27H26H25H24H23H22H21H20H7FH77H6FH67H5FH57H4FH47H3FH37H2FH27H1FH17H0FH07H7EH76H6EH66H5EH56H4EH46H3EH36H2EH26H1EH16H0EH06H7DH75H6DH65H5DH55H4DH45H3DH35H2DH25H1DH15H0DH05H7CH74H6CH64H5CH54H4CH44H3CH34H2CH24H1CH14H0CH04H7BH73H6BH63H5BH53H4BH43H3BH33H2BH23H1BH13H0BH03H7AH72H6AH62H5AH52H4AH42H3AH32H2AH22H1AH12H0AH02H79H71H69H61H59H51H49H41H39H31H29H21H19H11H09H01H78H70H68H60H58H50H48H40H38H30H28H20H18H10H08H00H片外数据存储器当片内128B的数据存储器不够用时,需要外扩RAM。51单片机最多可外扩64KB(0000H~FFFFH)的RAM。2.3.2特殊功能寄存器特殊功能寄存器地址分布序号SFRSFR名称字节地址位地址说明1B寄存器BF0HF7H~F0H算术和逻辑运算2ACC累加器E0HE7H~E0H3PSW程序状态字D0HD7H~D0H4IP中断优先级控制寄存器B8HBFH~B8H中断系统5P3并行I/O端口P3B0HBFH~B0H位名称:P3.7~P3.06IE中断允许控制寄存器A8HAFH~A8H中断系统7P2并行I/O端口P2A0HA7H~A0H位名称:P2.7~P2.08SBUF串行口数据缓冲器99H不能位寻址串口9SCON串行口控制寄存器98H9FH~98H10P1并行I/O端口P190H97H~90H位名称:P1.7~P1.011TH1定时器/计数器1高8位8DH不能位寻址定时器/计数器12TH0定时器/计数器0高8位8CH13TL1定时器/计数器1低8位8BH14TL0定时器/计数器0低8位8AH15TMOD定时器/计数器方式寄存器89H16TCON定时器/计数器控制寄存器88H8FH~88H17PCON电源控制寄存器87H不能位寻址串口波特率设置18DPH数据指针高8位83H间接寻址数据指针19DPL数据指针低8位82H20SP堆栈指针81H堆栈操作21P0并行I/O端口P080H87H~80H位名称:P0.7~P0.02.3.3程序存储器51单片机的程序存储器用来存放编好的程序和程序执行过程中不会改变的原始数据。5个中断源的中断入口地址ORG0000H感谢您的观看Thanks

for

your

attention.

2.4时钟电路与复位电路《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学2.4.1单片机时钟电路

单片机是一个复杂的同步时序电路,电路应在唯一的时钟信号控制下严格地按时序进行工作。时钟电路用于产生单片机工作所需要的时钟信号。内部时钟方式在51系列单片机内部有一个高增益反相放大器,其输入端引脚为XTAL1,其输出端引脚为XTAL2

。只要在XTAL1和XTAL2之间跨接晶体振荡器和微调电容,就可以构成一个稳定的自激振荡器。外部时钟方式把外部已有的时钟信号引入单片机,如图2-7所示。这种方式用于多片单片机同时工作,并要求同步运行的场合。时序图2.4.2单片机复位电路复位条件单片机复位是使CPU和系统中的其他功能部件都恢复到一个确定的初始状态单片机的复位条件:必须使RST(第9引脚)加上持续2个机器周期以上的高电平。复位电路复位后,内部各特殊功能寄存器状态感谢您的观看Thanks

for

your

attention.

2.5单片机并行I/O端口《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学51单片机典型芯片8051共有4个8位并行I/O端口,分别用P0、P1、P2、P3表示。每个I/O端口既可以按位操作使用单个引脚,也可以按字节操作使用8个引脚。2.5.1P0端口电路结构P0口位电路结构P0口既可以作为通用I/O口使用,也可以在扩展外部存储器或外部I/O时,

分时复用作为数据/地址线使用。P0口作为输出口使用P0口作为输出口使用(红线表示数据输出方向输出为漏极开路,必须在片外接上拉电阻才能有高电平输出)P0口作为输入口使用P0口作为输入口使用(红线表示数据输入方向,读引脚时需先向锁存器写入“1”。)P0口作为地址/数据线使用P0口输出低电平地址/数据信号P0口输出高电平地址/数据信号P0口输入数据信号P0口输入数据信号(当单片机进行存储器或I/O扩展时,P0口分时复用为低8位地址线和数据线,这时不能作为通用I/O使用)2.5.2P1端口电路结构P1口位电路结构P1口逻辑电路(电路包括锁存器、2个数据缓冲器和1个场效应晶体管T和内部上拉电阻2.5.3P2端口电路结构P2口位电路结构P2口既可以作为通用I/O口使用,也可以在扩展外部存储器或外部I/O时,作为高8位地址线使用2.5.4P3端口电路结构P3口位电路结构P3口逻辑电路(电路包括锁存器、1个与门、3个数据缓冲器、1个场

效应晶体管T和1个内部上拉电阻。)感谢您的观看Thanks

for

your

attention.

3.1C51概述《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学C51语言是面向51系列单片机开发平台而设计的,符合ANSIC标准的编程语言,既具有高级语言的优点,又可以直接控制单片机硬件。3.1.1C51与ANSIC语言C51概述C语言美国国家标准局(ANSI——AmericanNationalStandardsInstituteI)为C语言制订了一套完整的国际标准语法,称为ANSIC,作为C语言的标准。C51C51编译器根据51系列单片机的硬件结构做了特殊扩展,将C语言源程序编译生成Intel格式的可再定位目标代码。3.1.2C51程序基本结构(1)预处理命令,例如:包含语句“#include<REGX51.H>”(2)定义全局变量或常量。(3)函数原型声明及函数定义。C51程序基本结构感谢您的观看Thanks

for

your

attention.

3.2C51数据类型《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学单片机处理的对象就是数据。数据是具有一定格式的数字或数值,包含常量和变量。数据的不同格式叫做数据类型,它用来描述数据的值域范围和占用存储单元的数量。3.2.1数据类型概述KeilC51编译器所支持的数据类型3.2.2基本数据类型C51语言沿袭了ANSIC的基本数据类型:字符型、整型、长整型、浮点型和指针型,这些数据类型的数据长度和值域范围与ANSIC相同。3.2.3扩展数据类型扩展数据类型位类型bit与高级语言的boolean类型数据True和False类似,它的值是一个二进制位,只有0或1位类型bit在新一代的51单片机中,经常将专用寄存器组合成16位来使用。采用sfr16可以定义这种16位的特殊功能寄存器。16位特殊功能寄存器sfr1651单片机内部定义了21个专用寄存器,它们不连续地分布在片内RAM的高128字节中,地址为80H~FFH。特殊功能寄存器sfr使用sbit类型可以访问单片机内部RAM中的可寻址位或特殊功能寄存器的可寻址位。可寻址位定义sbit12343.2.4常量常量是指在程序执行期间其值固定、不能被改变的量。常量的数据类型有整型、浮点型、字符型、字符串型和位类型。姓名性别出生日期工作单位职务住址身高体重血型可变不变不变不变不变可变可变可变可变性别出生日期血型不变姓名工作单位职务住址身高体重可变常量变量020103050604整型常量常量可以是数值型常量也可以是符号常量位类型的值是一个

二进制数如1或0。浮点型常量字符型常量字符串型常量常量类型表示为十进制数、十六进制数或八进制数等。数值常量:14、26.5、o34、0x23、'A'、"Good!"用双引号括起来的一串字符,如"test"、"OK"等。单引号括起来的单一字符,如'a'、'9'等有十进制表示形式和指数表示形式2种符号常量:用编译预处理命令“#define”先定义常量是指程序执行期间其值固定,不能改变的量。数据格式示例十进制88、-192十六进制0x58、-0xc0长整型88L、0x58L、o130L整型常量举例流水灯程序数据格式示例十进制88、-192十六进制0x58、-0xc0长整型88L、0x58L、o130L整型常量举例浮点常量举例举例数据格式示例小数0.888、345.3指数8.88e-1、3.453e2数据格式示例英文单引号:’’‘A’、’9’ASCII码65、57字符常量举例ASCII:AmericanStandardCodeforInformationInterchange字符串常量举例数据格式示例说明双引号括起来”china”’c’、’h’、’i’、’n’、’a’、’\0’”A”

’A’、’\0’””空字符串,’\0’每个字符串的尾部都有一个’\0’作为结束符值域数据类型0或1位类型bit位类型常量信号灯闪烁控制C语言程序3.2.5变量变量是一种在程序执行过程中其存储的数值能不断变化的量。变量的定义格式如下。[存储种类]数据类型[存储器类型]变量名表;30.8℃变量相当于一个存放数据的容器玻璃杯保温杯酒盅变量存储种类自动变量的作用域仅限于定义这个变量的个体内,即在函数中定义的自动变量,只在这个函数内有效auto变量静态变量属于静态存储方式,但是属于静态存储方式的变量不一定就是静态变量。static变量使用存储种类说明符extern定义的变量称为外部变量。extern变量在ANSIC中,用register标识符说明变量是存放在寄存器中。register变量1234C51编译器支持的存储器类型C51编译器支持的存储器模式感谢您的观看Thanks

for

your

attention.

3.3C51运算符《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学常用运算符:算术运算符关系运算符逻辑运算符位运算符运算符名运

符算术运算符+

*/%++

关系运算符><==>=<=!=逻辑运算符!&&||位运算符<<>>~&|^赋值运算符=条件运算符?:逗号运算符,指针运算符*&求字节数运算符sizeof强制类型转换运算符(类型)下标运算符[]函数调用运算符()运算符名称功

能+加法求两个数的和,例如8+9=17

减法求两个数的差,例如20

9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1

自减1变量自动减1算术运算符22.0/4=5.522/4=5运算符名称功

能+加法求两个数的和,例如8+9=17

减法求两个数的差,例如20

9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1

自减1变量自动减1算术运算符运算符名称功

能+加法求两个数的和,例如8+9=17

减法求两个数的差,例如20

9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1

自减1变量自动减1算术运算符取余运算的两个操作数必须是整数。取余运算有什么用处呢?我们来看一个应用,如果我们需要把一个整数在数码管或者液晶上显示出来的话,那就需要把一个整数的每位拆分开来,一位一位进行显示,例如,要显示25这个数,我们就需要把25这个数的十位和个位拆分开来,分别是2和5,那用什么运算能实现这个结果呢?2525运算符名称功

能+加法求两个数的和,例如8+9=17

减法求两个数的差,例如20

9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1

自减1变量自动减1算术运算符252525/10=225%10=5运算符名称功

能+加法求两个数的和,例如8+9=17

减法求两个数的差,例如20

9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1

自减1变量自动减1算术运算符378137813781/1000=33781/100%10=73781%100/10=83781%10=1运算符名称功

能+加法求两个数的和,例如8+9=17

减法求两个数的差,例如20

9=11*乘法求两个数的积,例如20*5=100/除法求两个数的商,例如20/5=4%取余求两个数的余数,例如20%9=2++自增1变量自动加1

自减1变量自动减1算术运算符30000ii--?i指定效果流水灯程序30000ii--29999i指定效果流水灯程序0ii++?i指定效果流水灯程序0ii++1ii++2ii++3i指定效果流水灯程序i=3;j=i++;k=++i;i=3;j=i++;//后置运算,先使用i的值,再做++运算,j=3,i=4//j=i;i++;k=++i;i=3;j=i++;//后置运算,先使用i的值,再做++运算,j=3,i=4//j=i;i++;k=++i;//前置运算,先进行++运算,再使用i的值,i=5,k=5

//i++;k=i;建议尽量避免++、--和其它运算用在一起,以防出错;单独使用的++i和i++,结果都是把i的值增1。圆的面积公式:S=πr²S=PI*r*r;用算术运算符连接起来的式子,就叫算术表达式。关系运算符关系表达式:用关系运算符连接起来的式子假定a=5;b=3;a>b的结果是什么呢?真假关系表达式:用关系运算符连接起来的式子假定a=5;b=3;a>b的结果是什么呢?真1假0真1a==b假0a!=b真1sbitS1=P1^0;S1==0真1表示开关拨到了位置3假0表示开关拨到了位置1S1!=1S1==1真1表示开关拨到了位置3假0表示开关拨到了位置1S1!=0a==b>ca==(b>c)>,<,>=,<=优先于==,!=逻辑运算符真真真逻辑与:&&表达式1&&表达式2&&=真&&=假假真&&=假假&&=假假假逻辑或:||表达式1||表达式2真真真||=真||=假真=假=假假假||||真真逻辑非:!!表达式真!=假!=假真真真真逻辑与:&&逻辑或:||逻辑非:!逻辑运算符表达式1&&表达式2&&=真&&=假假真&&=假假&&=假假假表达式1||表达式2真真真||=真||=假真=假=假假假||||真真!表达式真!=假!=假真逻辑与:&&逻辑或:||逻辑非:!逻辑运算符表达式1&&表达式2表达式1||表达式2!表达式6≤age<18age>=6age<18&&!优先级别最高,其次是&&,最低是||!>算术运算符>关系运算符>&&>||逻辑表达式:用逻辑运算符连接起来的式子位运算符&按位逻辑与对2个运算量的二进制数按相应位进行逻辑与运算。例如:a&b,运算结果为0|按位逻辑或对2个运算量的二进制数按相应位进行逻辑或运算。例如:a||b,运算结果为13^按位逻辑异或对2个运算量的二进制数按相应位进行逻辑异或运算。异或运算时,数值相同为0,数值相异为1。例如:a^b,运算结果为13~按位取反对运算量的二进制数按位进行取反运算。例如:~a,运算结果为7<<

按位左移把“<<”左边的运算量的各二进制位全部左移若干位,移动的位数由“<<”右边的常数指定,高位丢弃,低位补0。例如:“a<<2”是指把a的各二进制位向左移动2位,即a=00001000B(十进制数8),左移2位后为00100000B(十进制数32)。>>

按位右移把“>>”左边的运算量的各二进制位全部右移若干位,移动的位数由“>>”右边的常数指定。对无符号数或正数右移,低位丢弃,高位补0;对负数右移,低位丢弃,高位补1。例如:“a>>3”是指把a的各二进制位向右移动3位,即a=00001000B(十进制数8),右移3位后为00000001B(十进制数1)。按位与运算:&运算法则:有0出0,全1出1aba&b000010100111x&0=0//x代表0或者1x&1=x//x代表0或者1按位或运算:|运算法则:有1出1,全0出0aba|b000011101111x|0=x//x代表0或者1x|1=1//x代表0或者1按位异或运算:^运算法则:相同为0,不同为1aba^b000011101110x^0=x//x代表0或者1x^1=取反

//x代表0或者1按位取反运算:~运算法则:把1变0,把0变1a~a0110x^0=x//x代表0或者1x^1=取反

//x代表0或者1按位与&:按位或|:按位异或^:按位取反~:按位与&:将一个二进制数的指定位清0按位或|:将一个二进制数的指定位置1按位异或^:将一个二进制数的指定位取反按位取反~:将一个二进制数的所有位都取反按位与运算符:&逻辑与运算符:&&按位或运算符:|逻辑或运算符:||左移运算:<<a<<ba=182;转换成二进制形式011011001D7D6D5D4D3D2D1D0111110000a<<b=01101100左移运算:<<a<<ba=182;转换成二进制形式,b=1解散回家丢掉左移运算:<<a<<ba=182;转换成二进制形式,b=401100000a<<b=01100000D7D6D5D4D3D2D1D01111100000001011丢掉左移运算:<<运算法则操作数左移若干位后,高位丢弃,低位补0。左移运算:<<运算法则:操作数左移若干位后,高位丢弃,低位补0。右移运算:>>运算法则:操作数右移若干位后,低位丢弃,高位补0。a=0xa2;a>>4=0x0a

b=0x5f;b<<4=0xf0c=0xfa;0x0a|0xf0=0xfac=(a>>4)|(b<<4)把a中的高4位和b中的低4位取出来,得到一个新的数c=

0xfa,怎么做呢?P1<<=1;//把P1口的内容左移一位再赋值给P1a>>=4;//把a的内容右移4位再赋值给a变量i=i+1a=a-5x=x*(y+7)r=r%7i+=1a-=5x*=y-7r%=7加法+=减法-=乘法*=除法/=取余%=逻辑与&=逻辑或|=逻辑异或^=逻辑非~=左移<<=右移>>=算术运算复合赋值符位运算复合赋值符赋值运算符:=变量(寄存器名或位名称)=表达式复合赋值符感谢您的观看Thanks

for

your

attention.

3.4C51程序结构《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学C51提供丰富的程序控制语句,按照顺序结构、选择结构和循环结构的结构化程序设计方式编程。3.4.1顺序程序与表达式表达式语句:表达式加上分号信号灯闪烁控制C语言程序顺序程序结构:表从main()函数开始Delay延迟函数:while(i--);选择结构程序条件判断事件1事件2假(N)真(Y)选择结构程序对给定的条件进行判断,并根据判断结果选择执行的程序,称为选择结构程序。单分支选择双分支选择多分支选择选择结构程序条件判断事件1事件2真(Y)假(N)双分支结构选择结构程序条件判断事件1单分支结构真(Y)假(N)选择结构程序多分支结构if语句if语句是C语言的选择程序结构控制语句。

if语句可以完成单分支选择、双分支选择和多分支选择结构控制。if语句的功能模型

如果(满足某个条件)

就{

执行某个动作

}

如果(今天是周一)

就{

早晨1、2节上课

}if语句的语法if(表达式){

语句组;}if语句例程if(m==0){delay(1200);

if(k){ w=0x01;}}“表达式”可以是任意表达式,只要表达式的值

非0

“真” 0“假”if语句例程if(m==0){delay(1200);

if(k){ w=0x01;}}“表达式”必须用()括起来;“语句组”必须用{}括起来。if语句例程if(m==0){delay(1200);

if(k){ w=0x01;}}花括号“{}”里面的语句组如果只有一条语句,可以省略花括号。If-else语句的语法if(表达式){

语句组1;}else{

语句组2;}if-else语句的执行过程if(K==0){w=0x01;P1=~w; }elseP1=0x00;真否则——假ifelseif语句ll

if(表达式1){语句组1;}elseif(表达式2){语句组2;}

……elseif(表达式n){语句组n;}else{语句组n+1;}ifelseif语句ll

实例已知:a=9,b=4,求P1的数值if(a<3){P1=0x01;b=10;

}elseif(a>b){P1=0x02;}elseP1=0x03;假不执行真执行选择结构程序多分支结构If-else-if语句switch语句switch(表达式){

case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法switch(i)

{case1:P1=0x00;break;

case2:P1=0x55;break;

case3:P1=0x0f;break;

case4:P1=0xf0;break;

default:break;}switch(表达式){

case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法switch(表达式){

case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法注意,这里是冒号“:”,并不是分号“;”switch(表达式){

case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法每一个case后的常量表达式必须是不同的值以保证分支的唯一性。switch(表达式){

case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法每一个case语句后都要跟一个break用来退出switch语句。switch(表达式){

case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法default总是放在最后,这时default后不需要break语句。default不是必须,如果没有default,当switch后面圆括号中表达式的值与所有case后面的常量表达式的值都不相等时,则不执行任何一个分支直接退出switch语句。switch(表达式){

case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法在switch-case语句中,多个case可以共用一条执行语句,如:case'A':case'B':case'c':printf(">60\n");break;switch(表达式){

case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}switch语句的语法如果在case后面包含多条执行语句时,不需要像if语句那样加大括号,进入某个case后,会自动顺序执行本case后面的所有执行语句。.练习已知:a=9,b=4,求P1的数值if(a<3){i=2;b=10;

}elseif(a>b)i=1;elsei=3;switch(i){case1:P1=0x00;break; case2:P1=0x55;break; case3:P1=0x0f;break; case4:P1=0xf0;break; default:break;}假不执行3.2.3循环语句1+2+3+4+5+6+……+100=?和和和……和……重复了99次加法运算循环结构程序循环结构程序实现一种有规律的重复的程序,称为循环结构程序。i>100?Y开始i=1;s=0;s=s+i;i=i+1;结束N1+2+3+4+5+6+……+100=?循环初值设置重复执行的程序段——循环体循环结束条件循环结构程序实现一种有规律的重复的程序,称为循环结构程序。whiledowhileforwhile(表达式){语句组;}while语句的语法“当型”循环while语句的语法i=0;s=0;

while(i<=100){s=s+i;i++;}while(表达式){语句组;}1+2+3+4+5+6+……+100=?while语句的语法i=0;s=0;

while(i<=100){s=s+i;i++;}while(表达式){语句组;}1+2+3+4+5+6+……+100=?while语句的语法i=0;s=0;

while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?循环初值设置必须放在循环之外。while语句的语法i=0;s=0;

while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?表达式可以是任意表达式,“非0”为真,“0”为假。while语句的语法i=0;s=0;

while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?当表达式为常数时,形成无限循环,例如:while(1){……}因为单片机开始运行后是不能停下来的,所以嵌入式程序中都采用无限循环结构。while语句的语法i=0;s=0;

while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?while(1);称为停机语句,执行原地踏步操作。一般用于程序调试。while语句的语法i=0;s=0;

while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?While()语句中,如果表达式的结果一开始就为“假”,则循环体一次也不执行。while语句的语法i=0;s=0;

while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?循环体一般是一个复合语句,需用{}括起来。while语句的语法i=0;s=0;

while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?循环体中应有使循环结束的语句。否则会出现不希望的无限循环–––“死”循环。while语句的语法i=0;s=0;

while(i<=100){s=s+i;i++;}1+2+3+4+5+6+……+100=?循环体中应有使循环结束的语句。否则会出现不希望的无限循环–––“死”循环。循环结构程序实现一种有规律的重复的程序,称为循环结构程序。whiledowhilefordo{语句组;}while(表达式);do-while语句的语法“直到型”循环i>100?Y开始i=1;s=0;s=s+i;i=i+1;结束N1+2+3+4+5+6+……+100=?i=0;s=0;

do{s=s+i;i++;}while(i<=100);i=0;s=0;

do{s=s+i;i++;}while(i<=100);do{语句组;}while(表达式);1+2+3+4+5+6+……+100=?do-while语句的语法i=0;s=0;

do{s=s+i;i++;}while(i<=100);do{语句组;}while(表达式);1+2+3+4+5+6+……+100=?do-while语句的语法i=0;s=0;

do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?循环初值设置必须放在循环之外。do-while语句的语法i=0;s=0;

do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?表达式可以是任意表达式,“非0”为真,“0”为假。do-while语句的语法while语句的语法i=0;s=0;

do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?如果表达式的结果一开始就为“假”,则循环体也要执行一次。i=0;s=0;

do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?表达式后面一定要有分号“;”。do-while语句的语法i=0;s=0;

do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?循环体一般是一个复合语句,需用{}括起来。do-while语句的语法i=0;s=0;

do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?循环体中应有使循环结束的语句。否则会出现不希望的无限循环–––“死”循环。do-while语句的语法do-while语句的语法i=0;s=0;

do{s=s+i;i++;}while(i<=100);1+2+3+4+5+6+……+100=?循环体中应有使循环结束的语句。否则会出现不希望的无限循环–––“死”循环。while与do-while语句比较while语句dowhile语句先判断,后执行先执行,后判断循环体可能一次也不执行循环体至少执行一次循环结构程序实现一种有规律的重复的程序,称为循环结构程序。whiledowhileforfor语句while语句1+2+3+4+5+6+……+100=?循环初值设置重复执行的程序段——循环体修改循环变量循环结束条件判断i=1;s=0;

while(i<=100){s=s+i;i++;}i<=100?Y开始i=1;s=0;s=s+i;i=i+1;结束N1+2+3+4+5+6+……+100=?i=1;s=0;

while(i<=100){s=s+i;i++;}s=0;for(i=1;i<=100;i++){s=s+i;}1+2+3+4+5+6+……+100=?i=1;s=0;

while(i<=100){s=s+i;i++;}s=0;for(i=1;i<=100;i++){s=s+i;}for(表达式1;表达式2;表达式3){语句组;}for语句的语法表达式1:循环变量赋初值i=1;表达式2:循环条件判断i<=100;表达式3:修改循环变量i++;s=0;for(i=1;i<=100;i++){s=s+i;}for(表达式1;表达式2;表达式3){语句组;}for语句的语法表达式2Y表达式1;语句组表达式3N1+2+3+4+5+6+……+100=?s=0;for(i=1;i<=100;i++){s=s+i;}for语句的语法s=0;i=1;for(;i<=100;i++){s=s+i;}s=0;i=1;for(;i<=100;){s=s+i;i++;}s=0;for(i=1;;i++){s=s+i;if(i<=100)break;}for语句中的三个表达式都是可选项,可以省略,但必须保留“;”1+2+3+4+5+6+……+100=?s=0;for(i=1;i<=100;i++){s=s+i;}for语句的语法for(;;){

语句组;}for语句中的三个表达式都省略,但必须保留“;”,无限循环while(1){

语句组;}1+2+3+4+5+6+……+100=?s=0;for(i=1;i<=100;i++){s=s+i;}for语句的语法for(s=0,i=1;i<=100;i++){s=s+i;}for语句表达式1也可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式循环的嵌套一个循环(称为“外循环”)的循环体内包含另一个循环(称为“内循环”)——循环的嵌套循环的嵌套三种循环语句while、do-while、for可以互相嵌套。循环的嵌套while(){

循环体;}while(){循环体

}do{

循环体;}while();do{循环体}while();for(;;){

循环体;}for(;;){循环体}循环的嵌套while(){

循环体;}for(;;){循环体

}do{

循环体;}while();while(){循环体}for(;;){

循环体;}while(){循环体}C语言的基本语句表达式语句If语句Switch语句while语句Dowhile语句For语句break语句continue语句switch(表达式){

case常量表达式1:语句1;break;case常量表达式2:语句2;break;……case常量表达式n:语句n;break;default:语句n+1;break;}break语句的用法1s=0;for(i=1;;i++){s=s+i;if(i<=100)break;}break语句的用法2s=0;for(i=1;;i++){s=s+i;if(i<=100)break;}break语句的用法2在循环嵌套中,一个break语句只能向外跳一层。voidmain(){inti=0,sum;sum=0;for(i=1;i<=20;i++){ if(i%5==0)continue;//若i能整除5,即执行continue语句 sum=sum+i;}}continue语句的用法break语句和continue语句结束整个循环。结束本次循环。break语句continue语句感谢您的观看Thanks

for

your

attention.

3.5C51函数《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学C51语言遵循ANSIC的风格,也采用函数作为子程序模块,将程序设计中普通用到的一些计算或操作编成通用的函数,随时可以调用。3.5.1C51库函数C51的库函数寄存器库函数REGXXX.H一般输入/输出函数STDIO.H内部函数INTRINS.H字符函数CTYPE.H字符串函数STRING.H数学函数MATH.H标准函数STDLIB.H绝对地址访问函数ABSACC.H定义了51单片机的所有SFR和相应的位C51的库函数寄存器库函数REGXXX.H一般输入/输出函数STDIO.H内部函数INTRINS.H字符函数CTYPE.H字符串函数STRING.H数学函数MATH.H标准函数STDLIB.H绝对地址访问函数ABSACC.H操作51单片机的串口C51的库函数寄存器库函数REGXXX.H一般输入/输出函数STDIO.H内部函数INTRINS.H字符函数CTYPE.H字符串函数STRING.H数学函数MATH.H标准函数STDLIB.H绝对地址访问函数ABSACC.H51单片机的空操作、变量的左移/右移函数功能atoi将字符串sl转换成整型数值并返回这个值atol将字符串sl转换成长整型数值并返回这个值atof将字符串sl转换成浮点数值并返回这个值strtod将字符串s转换成浮点型数据并返回这个值strtol将字符串s转换成long型数值并返回这个值strtoul将字符串s转换成unsignedlong型数值并返回这个值rand返回一个0到32767之间的伪随机数srand初始化随机数发生器的随机种子calloc为n个元素的数组分配内存空间free释放前面已分配的内存空间init_mempool对前面申请的内存进行初始化malloc在内存中分配指定大小的存储空间realloc调整先前分配的存储器区域大小常用标准函数内部函数库函数功能_crol_将字符型数据按照二进制循环左移n位_irol_将整型数据按照二进制循环左移n位_lrol_将长整型数据按照二进制循环左移n位_cror_将字符型数据按照二进制循环右移n位_iror_将整型数据按照二进制循环右移n位_lror_将长整型数据按照二进制循环右移n位_nop_使单片机程序产生延时_testbit_对字节中的一位进行测试库函数的调用

#include<reg51.h>//包含寄存器库函数头文件,调用51单片机SFR

#include<intrins.h>//包含内部函数库头文件,调用左移、右移函数voiddelay(unsignedinti)//定义延时函数

{unsignedintk;

for(k=0;k<i;k++);}

voidmain()//主函数

{

P1=0x7F;//调用P1端口寄存器变量

while(1)//无限循环

{

P1=_cror_(P1,1);//调用左移函数,将P1的二进制数值循环左移一位

delay(5000);//延时

}}使用函数时必须先声明再使用使用库函数时,必须在源程序的开始处使用预处理命令#include将相应的头文件包含进来3.5.2用户自定义函数函数类型函数名(形式参数列表){局部变量声明;

函数体语句;return语句;}函数返回值的类型返回函数的返回值用户自定义函数//求三个整数的最大值intmax(inta,intb,intc){intz;if(a>b)z=a;elsez=b;if(c>z)z=c;returnz;}

函数类型函数名形式参数列表

return(z);函数体

void函数名(形式参数列表){局部变量声明;

函数体语句;return语句;}函数类型是空类型,没有返回值。函数类型函数名(void){局部变量声明;

函数体语句;return语句;}没有形式参数。

void函数名(void){局部变量声明;

函数体语句;}函数类型是空类型,没有返回值。没有形式参数。信号灯闪烁控制C语言程序感谢您的观看Thanks

for

your

attention.

3.6C51数组《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学在程序设计中,为了处理方便,需要把具有相同类型的若干数据项按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组,组成数组的各个数据分项称为数组元素。3.6.1数组的定义数组定义格式数组必须先定义、后使用。一维数组的定义格式如下。类型说明符数组名[数组长度];数组初始化赋值2种方式数组元素逐个赋值如下for(i=0;i<10;i++)num[i]=i;数组初始化赋值如下intnum[10]={0,1,2,3,4,5,6,7,8,9};3.6.2二维数组二维数组将所有的数组元素以行、列方式排列,m行、n列的二维数组共有m×n个数组元素。定义二维数组的一般形式是。类型说明符数组名[行数][列数];二维数组初始化赋值2种方式(1)按行分段赋值可写为:(2)按行连续赋值可写为:inta[3][4]={{80,75,92,61},{65,71,59,63},{70,85,87,90}};inta[3][4]={80,75,92,61,65,71,59,63,70,85,87,90};3.6.3字符数组字符数组中的每一个数组元素都是字符数据类型。定义字符数组的一般形式如下。unsignedcharch[数组长度];字符串是以字符“\0”结束的字符数组字符串数组赋值:unsignedcharch[]="chinese";感谢您的观看Thanks

for

your

attention.

4.1定时/计数器《单片机基础与应用(C语言版)》高等教育出版社深圳职业技术大学4.1定时器/计数器工作原理8051单片机内部有2个16位可编程定时器/计数器,称为定时器0(

温馨提示

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

评论

0/150

提交评论