您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 第3章 MCS-51单片机接口技术与C语言编程
第三章MCS-51单片机的接口技术与C语言编程华强2009-2010(2)单片机与应用8051单片机支持的编程语言:汇编语言PL/M语言BASIC语言C语言C++语言一、MCS-51单片机的C语言编程对单片机的指令系统不要求了解,仅要求对8051的存储器结构有一定了解;寄存器分配、不同存储器的寻址及数据类型等细节可由编译器管理;程序有规范的结构,可分成不同的函数,这种方式可使程序结构化;具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;提供的库包含许多标准子程序,具有较强的数据处理能力;由于具有方便的模块化编程技术,使已编好程序可容易地移植;1-1、C语言与汇编语言相比,有如下优点:1-2、编译器、开发套件和IDE(1)编译器:由源代码文件生成目标文件(2)开发套件:包含了编译器、链接器等开发工具的组合包(3)IDE(IntegratedDevelopmentEnvironment集成开发环境)将项目管理、源代码编辑和程序编译、链接、调试等各种工具组合在一个功能强大的环境中,具有良好人机界面。8051单片机所使用的C语言编译器简称为Cx51例如包含Cx51、Ax51、BL51、LIB51、OH51、RTX51等KEILC51KeilμVision3IDEKeilμVision3IDECx51.exeKeilC51开发套件v7.50C51的程序结构#includereg51.hvoiddelay(){……;}voidmain(){delay();P0=0x33;}例:文件led.c内的代码如下:头文件(一个或若干个)主函数程序的入口函数名固定,且与书写的位置无关有且仅有一个函数声明或定义库函数或用户自定义的函数可以有若干个C51程序大体上是若干函数的集合C语言编程的三大要素数据数据类型、数据结构、存储类型运算算术运算、关系运算、逻辑运算、位操作控制顺序结构、选择结构、循环结构、函数数据类型长度值域bit1bit0,1unsignedchar8bit0~255(signed)char8bit-128~127unsignedint16bit0~65535(signed)int16bit-32768~32767unsignedlong32bit0~4294967295(signed)long32bit-2147483648~2147483647float32bit±1.7e-38~±3.40e+38(6位)double64bit±1.7e-38~±3.40e+38(10位)*(一般指针)1~3字节存储空间地址C51的数据类型位变量的使用不能定义成一个指针,如不能定义:bit*pointer;不存在位数组如不能定义:bitb_array[]位变量定义时,存储类型只允许为data、bdata或者idata,如果将位变量的存储类型定义成其它类型都将导致编译出错。char数据类型单片机应用中ASCII字符和字符串的使用比较少(因为很少需要大量的文本信息),因此在单片机应用中定义为unsignedchar和char的变量常用来表示数值。数据类型的使用单片机系统总存储空间往往比较有限,因此在实际使用中应注意节约存储空间;对于8位单片机,8位的数据类型是运算最快的;而对于16位单片机,8位的数据和16位的数据可能运算速度是一样的。常量–又称为标量,常量的值在程序执行过程中不能改变。符号常量(不是严格意义上的常量,只是一个宏)使用#define语句定义定义在ROM里的常量使用“code”关键字定义的数据定义在RAM里的常量使用“const”关键字定义的数据在C51中常量的定义有3种方式:常量和变量常量和变量在C51中常量的使用:9:P0=constA;C:0x008F758014MOVP0(0x80),#0x1410:P1=constB;C:0x00929000A2MOVDPTR,#constB(0x00A2)C:0x0095E4CLRAC:0x009693MOVCA,@A+DPTRC:0x0097F590MOVP1(0x90),A11:P2=constC;C:0x00998508A0MOVP2(0xA0),constC(0x08)#includereg51.h①#defineconstA20②unsignedcharcodeconstB=20;③unsignedcharconstconstC=20;常量和变量在C51中常量的使用:1、符号常量(常用)是一个宏,在编译时常被当作指令的立即数。2、定义在ROM中的常量(常用)存放在ROM中,掉电不丢失,访问需要MOVC指令,和16位地址,访问速度较慢。3、定义在RAM中的常量存放在RAM中,访问较快,但占用RAM资源,掉电丢失,需要在单片机上电时进行初始化。#includereg51.h①#defineconstA20②unsignedcharcodeconstB=20;③unsignedcharconstconstC=20;变量–在程序执行过程中,其值可以改变的量称为变量。变量只能存放在RAM中。数据类型[存储器类型]变量名[=初值]例:unsignedcharxdataFlag=0x0F;C51的变量的定义:常量和变量存储类型说明data直接寻址的片内数据存储器(128B),访问速度最快bdata可位寻址的片内数据存储器(16B),允许位和字节混合访问idata间接访问的片内数据存储器(256B),全部片内RAM空间pdata分页访问的片外数据存储器(256B)xdata片外数据存储器(64KB),访问速度相对比较慢code程序存储器(64KB),只读C51数据的存储类型在讨论C51的数据类型的时候,必须理解数据的存储类型和它与8051单片机存储器结构的关系.定义变量时如果省略“存储器类型”选项,则按编译时使用的存储器模式SMALL、COMPACT、或LARGE来使用默认的存储器类型。SMALL:默认存储类型为data,访问速度最快,容量小COMPACT:默认存储类型为pdataLARGE:默认存储类型为xdata,访问效率最低,代码长,容量大一般使用SMALL模式,对部分容量大的变量,手动指定存储器类型(如定义为xdata类型)。C51数据的存储模式C51的运算符1、算术运算2、关系运算3、逻辑运算4、位操作运算循环移位指令?#includeintrins.hexternunsignedchar_cror_(unsignedchar,unsignedchar);externunsignedchar_crol_(unsignedchar,unsignedchar);externunsignedint_iror_(unsignedint,unsignedchar);externunsignedint_irol_(unsignedint,unsignedchar);externunsignedlong_lror_(unsignedlong,unsignedchar);externunsignedlong_lrol_(unsignedlong,unsignedchar);C51的流程控制(略)二、MCS-51单片机接口技术例:用单片机设计一台数控方波发生器单片机键盘矩阵电源波形输出二、MCS-51单片机接口技术2-0并行IO的基本应用2-1键盘控制接口2-2显示器控制接口2-3定时/计数器的使用2-4串行通信接口2-5外部总线接口2-6外部总线接口的应用单片机的IO功能分为两大类:数字量IO模拟量IO由并行IO实现由AD和DA模块实现2-0并行IO的基本应用基本应用:开关量输出控制(继电器、模拟开关、灯泡、发光二极管等)开关量输入(开关、按键、开关型传感器(限位开关)等)波形输出(矩形波、PWM等)复杂控制:并行数据IO控制(数码管、液晶、键盘等)串行数据IO控制(IIC总线模拟、SPI总线模拟等)第二功能的使用(通用数据总线、外部中断输入等)1、并行IO的应用概述注意事项:并行IO主要用于数字量(开关量)的输入输出,逻辑电平为CMOS电平,即‘1’接近于电源电压,‘0’接近于0V。使用并行IO时应当注意IO口的驱动能力!1、IO口的允许电压最大为电源电压,一般为5V;2、每个IO口的输出驱动电流,一般不能超过15mA;3、当被控制的设备(如灯泡,继电器等)需要更大的电压或电流时,需要外接驱动电路或者驱动芯片;当输入数字量信号的高电平超过或低于5V时(如工业常用12V、24V传感器),需使用适当的电平转换电路。1、并行IO的应用概述1、并行IO的应用概述驱动电路电平转换电路外部数字量输入外部执行机构单片机IO常用简单驱动和转换电路:负载,例如:灯泡、继电器、电磁阀、电动机①增大驱动电流(几十mA~几A)光耦的功能:电平转换输入输出端的逻辑电平大小可以任意转换;电气隔离输入端和输出端可以使用不同的电源,从而使输入端和输出端隔离,提高抗干扰能力,并为单片机提供一定的保护功能。常用简单驱动电路:②使用光耦进行连接2、LED的控制sbit的使用分析电路:1、由图,D3由IO引脚P2.2控制;2、由硬件电路可知,当IO口输出逻辑电平‘0’时对应的LED点亮,当IO口输出逻辑电平‘1’时LED熄灭。例:如上图所示电路图,要求编程控制发光二极管D3点亮。普通发光二极管只需要几个mA的电流就可以点亮④③#includereg51.hsbitD3=P2^2;voidmain(){D3=0;//点亮LEDwhile(1)//循环,挂起{;}}按要求编程:________________①______________②⑤__________⑥①引用含有SFR符号定义的头文件②定义符号D3为P2口的第2位D3可以换为其他自定义符号,作用相同,如:sbitP2_2=P2^2;③点亮发光二极管的功能语句④while(1)无限循环,用于程序的反复执行或者程序挂起,很重要!⑤使用tab或者空格,使程序结构清晰,便于阅读⑥适当加入注释,使编程思路清晰,便于阅读和后期的修改sbit的使用while(1)循环#includereg51.hsbitD3=P2^2;voidmain(){D3=0;//点亮LEDwhile(1)//循环,挂起{;}}while(1){D3=0;}可以实现相同的功能while(1)循环如果主函数中没有while(1)循环会出现怎么样的情况?0000H……0200H0201H……02FFH0300H0301H……0FFFH#includereg51.h……;voidmain(){……;……;}……;用户代码区域空闲区域,可能存在随机代码没有while(1)有while(1)while(1)循环读取按键代码根据按键代码执行相应操作例:使用单片机作为控制器,设计一个数学计算器。空代码?无键按下,不执行任何操作数字键?运算键?数字输入…………例:使用单片机作为控制器,设计一个数学计算器。读取按键代码根据按键代码执行相应操作空代码?无键按下,不执行任何操作数字键?运算键?数字输入…………读取按键代码根据按键代码执行相应操作根据按键代码执行相应操作空代码?无键按下,不执行任何操作数字键?运算键?数字输入…………空代码?空代码?无键按下,不执行任何操作数字键?数字键?运算键?运算键?数字输入…………voidmain(){……;while(1){}……;}while(1)循环读取按键代码根据按键代码执行相应操作获取传感器信号根据传感器状态执行相应操作计算器、或其它基于按键操作的设备自动测量仪器、工业自动化控制等设备while(1)循环while(1){……;}do{……;}While(1)while(1)循环例:如题设所示电路图,要求编程控制发光二极管D1实现闪烁变化。分析电路:1、由图,D1由IO引脚P2.0控制;2、由硬件电路可
本文标题:第3章 MCS-51单片机接口技术与C语言编程
链接地址:https://www.777doc.com/doc-3611721 .html