单片机实用教程全套课件完整版电子教案最新板_第1页
单片机实用教程全套课件完整版电子教案最新板_第2页
单片机实用教程全套课件完整版电子教案最新板_第3页
单片机实用教程全套课件完整版电子教案最新板_第4页
单片机实用教程全套课件完整版电子教案最新板_第5页
已阅读5页,还剩170页未读 继续免费阅读

下载本文档

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

文档简介

1、80C51单片机实用教程基于Keil C和Proteus 双解汇编和C51两种程序每条指令/语句均给出注释编入36例Proteus仿真实验 第1章 80C51单片机片内结构和工作原理 第1章 80C51单片机片内结构和工作原理 电子计算机是二十世纪人类最伟大的发明之一而微型计算机的发展,使人类社会大步跨入电脑时代改变了社会生活的各个方面 1.1 单片机概述 另一类是嵌入式微处理器,通常是我们常说的单片机 全力满足测控对象的测控功能,兼顾数据处理能力微型计算机可以分成两大分支:一类是个人计算机,也称为PC机(Personal Computer) 全力实现海量高速数据处理,兼顾控制功能同时,两大分

2、支之间串行通信,优势互补 形成了网络控制系统 使功能更强大,更完善 实现了近代计算机技术的突飞猛进 1.1.1 单片机发展概况 什麽是单片机? “Single Chip Micro Computer” 忠实地反映了早期单片机的形态和本质现代“单片机”概念: 微控制器MCU(Micro Controller Unit) 单板机是将微处理器芯片、存储器芯片和输入输出接口芯片 安装在同一块印制电路板上,构成具有一定功能的计算机系统单片机是将微处理器、存储器和输入输出接口电路 集成在一块集成电路芯片上,构成具有一定功能的计算机系统 单片机之前,曾出现过单板机 单片机应用 单片机应用领域之广,几乎到了无

3、所不在的地步各领域智能化产品几乎都有“单片机”的影子 单片机应用的意义 不仅在于它的广阔范围及所带来的经济效益更重要的是 从根本上改变了控制系统传统的设计思想和设计方法 单片机发展概况 探索阶段 以Intel公司MCS-48为代表,属低档型8位机大致可分为四个阶段: 完善阶段 以Intel公司MCS-51为代表,属高档型8位机 MCS-51系列后来改进为80C51系列 在世界和我国得到了广泛的应用 Intel公司推出了16位的MCS-96系列单片机 16位机肯定比8位机性能优 但由于价格不菲,其应用面受到一定限制相反,MCS-51系列单片机, 由于其性能价格比高 并吸引了世界许多知名芯片制造厂

4、商加盟, 竞相使用以80C51为内核 扩展部分测控系统中使用的电路技术、接口技术 推出了许多与80C51兼容的8位单片机 得到了比16位机更广泛的应用 8位机与16位机争艳阶段 微控制器全面发展阶段 随着单片机在各个领域全面深入发展和应用世界各大电气、半导体厂商普遍投入出现了高速、大寻址范围、强运算能力的通用型单片机32位、64位微处理器相继问世 例如ARM(Advanced RISC Machines)系列微处理器内存越来越大,主频越来越高并且驻入嵌入式操作系统 甚至可以直接使用Windows和Linux操作系统高端嵌入式微处理器的功能已经开始接近PC机1.1.2 80C51系列单片机 MC

5、S-51单片机是上世纪80年代由Intel公司推出的 最初是HMOS制造工艺,功耗较大 后来推出CHMOS工艺的80C51芯片,大大降低了功耗随后,Intel公司将80C51内核使用权以专利互换或出售形式 转让给世界许多著名IC制造厂商 例如philips、Atmel、Dallas、LG等在保持与80C51兼容的基础上,融入自身的优势 扩展了针对满足不同测控对象要求的外围电路 开发出几百种功能各异的新品种 形成了有众多芯片制造厂商支持的80C51大家族目前我国国内应用最广泛的是 Atmel公司的AT89系列和宏晶公司的STC系列单片机芯片1.2 80C51单片机片内结构和引脚功能 1.2.1

6、片内结构 1.2.2 引脚功能 共40个引脚,大致可分为四类:电源、时钟、控制和I/O引脚 电源 VCC 芯片电源,接+5V VSS 接地端 时钟 XTAL1、XTAL2 外接石英晶体 控制线 ALE/PROG 地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址 PROG功能:在EPROM编程期间,此引脚输入编程脉冲 PSEN 外ROM读选通信号 RST/VPD 复位/备用电源 RST(Reset)功能:正常工作时,输入复位信号 在该引脚上连续保持2个机器周期以上高电平,80C51复位 VPD功能:在VCC掉电情况下,该引脚可接上备用电源 EA/VPP 内外ROM

7、选择/片内EPROM编程电源 功能:正常工作时,用于选择内外ROM EA=0,只访问外ROM EA=1,先访问内ROM,超过4kB时,自动转向外ROM VPP功能:在EPROM编程期间,用于施加编程电源VPP I/O线 有4个8位并行I/O端口: P0、P1、P2和P3口, 每口8位,共32个引脚 4个I/O口,各有各的用途在并行扩展外存储器时 P0口专用于分时传送低8位地址信号和8位数据信号 P2口专用于传送高8位地址信号 P3口根据需要常用于特殊信号输入输出和控制信号1.3 存储空间配置和功能 80C51可分为3个不同的存储空间: 64kB程序存储器(ROM),包括片内ROM和片外ROM

8、64kB外部数据存储器(简称外RAM) 256B(包括特殊功能寄存器)内部数据存储器(简称内RAM) 3个不同的存储空间用不同的指令和控制信号实现读、写功能操作:(1) ROM空间用MOVC指令实现只读功能操作, 用PSEN信号选通读外ROM。(2) 外RAM空间用MOVX指令实现读写功能操作 用RD信号选通读外RAM,用WR信号选通写外RAM。 内RAM(包括特殊功能寄存器) 用MOV指令实现读、写功能操作。1.3.3 内部数据存储器(内RAM) 可分成三个物理空间:工作寄存器区、位寻址区和数据缓冲区 1.3.4 特殊功能寄存器(SFR)特殊功能寄存器(Special Flag Regist

9、er,缩写为SFR)共有21个,离散地分布在高128B片内RAM 80HFFH中 累加器ACC(Accumulator) ACC是80C51单片机中最常用的寄存器 许多指令的操作数取自于ACC 许多运算的结果存放在ACC中 乘除法指令必须通过ACC进行 ACC的指令助记符为A 寄存器B 乘除法指令中要用到寄存器B 此外,B可作为一般寄存器用 程序状态字寄存器PSW(Program Status Word) 存放当前指令执行的状态和各有关标志 Cy 进位标志 加减法运算时,若最高位有进位或借位,Cy置1,否则清0 位操作时,Cy是位操作累加器,指令助记符用C表示 AC 辅助进位标志 加减运算时,

10、若ACC.3向ACC.4有进(借)位,AC置1,否则清0 RS1、RS0 工作寄存器区选择控制位 工作寄存器区有4个,但当前工作的寄存器区只能打开一个 RS1、RS0的编号用于选择当前工作的寄存器区 RS1、RS0 =00 0区(00H07H) RS1、RS0 =01 1区(08H0FH) RS1、RS0 =10 2区(10H17H) RS1、RS0 =11 3区(18H1FH) OV 溢出标志 用于表示ACC在有符号数算术运算中的溢出 溢出和进位是两个不同的概念 进位是指ACC.7向更高位进位,用于无符号数运算 溢出是指有符号数运算时,运算结果数超出+127-128范围 发生溢出时OV置1,

11、否则清0 P 奇偶标志 表示ACC中“1”的个数的奇偶性 F0 用户标志 可作位寄存器用 数据指针DPTR(Data Pointer) 16位的特殊功能寄存器,由两个8位寄存器DPH、DPL组成 主要用于存放一个16位地址,作为访问外部存储器的地址指针 堆栈指针SP(Stack Pointer) 堆栈是CPU用于暂时存放特殊数据的“仓库” 例如子程序断口地址,中断断口地址和其他需要保存的数据 堆栈指针SP专用于指出堆栈顶部数据的地址 堆栈中数据存取按先进后出、后进先出的原则1.5 时钟和时序 1.5.1 时钟电路和机器周期 时钟电路 时钟周期和机器周期 时钟周期 是80C51振荡器产生的时钟脉

12、冲频率的倒数, 是最基本最小的定时信号 机器周期 是80C51单片机工作的基本定时单位 机器周期是时钟周期的12倍 当时钟频率为12MHz时,机器周期为1s 当时钟频率为6MHz时,机器周期为2s1.5.2 时序 时序是执行指令的操作节拍步骤每一条指令的执行都可以包括取指和执行两个阶段可分为:单机周指令、双机周指令和四机周指令 只有乘除法指令执行时间是4机周。 其余指令执行时间为12个机器周期1.6 复位和低功耗工作方式 80C51单片机的工作方式共有四种: 复位方式、程序执行方式、低功耗方式和片内ROM编程方式 程序执行方式是单片机的基本工作方式 CPU按照PC所指出的地址从ROM中取指并执

13、行 每取出一个字节,PC+1PC 当调用子程序、中断或执行转移指令时 PC会相应产生新的地址 片内ROM编程一般由专门的编程器实现,用户不需了解1.6.1 复位 复位条件 必须使RST引脚(编号9)保持2个机器周期以上的高电平 复位电路 复位后CPU状态 80C51单片机实用教程基于Keil C和Proteus 双解汇编和C51两种程序每条指令/语句均给出注释编入36例Proteus仿真实验 第4章 C51语言及程序设计 80C51单片机实用教程基于Keil C和Proteus配套Proteus虚拟仿真36例目录(免费下载)对照书中程序,演示运行理解,增强教学效果 C语言概述第4章 C51语言

14、及程序设计 4.1 C51概述 C语言是一种结构化语言,简洁、紧凑,层次清晰,便于按模块化方式编写程序;有丰富的运算符和数据类型,能适应并实现各种复杂的数据处理;能实现位(bit)操作,生成目标代码效率较高,可移植性好,兼有高级语言和低级语言的优点。 因此,C语言应用范围越来越广泛。目前,各种操作系统和单片机,都可以用C语言编程,C语言是一种通用的程序设计语言,在大型、中型、小型和微型计算机上都得到了广泛应用。 用于80C51系列单片机编程的C语言,通常称为C51C51实际上是一个编译系统能将C语言程序转换成80C51可执行代码 C51编程的主要特点 编程相对方便。 能自动完成对变量存储单元的

15、分配和使用 仅在调用时临时分配存储单元,使用完毕即行释放 大大提高了80C51片内有限存储空间的使用效率 使用者不需过多关注涉及的具体存储单元及其操作指令 便于实现各种复杂的运算和程序 具有丰富且功能强大的运算符 可方便地调用各已有程序模块 可读性较好 实时性较差4.2 C51数据与运算 4.2.1 数据与数据类型 数据类型 数据的不同格式称为数据类型字符型、整型和长整型数据还又可分别分为有符号signed和无符号unsigned 数据长度和值域表4-1 C51数据长度和值域 标识符 数据、变量、数组、函数等常用标识符表示实际上标识符就是一个代号、代名字C51标识符命名规定: 只能由字母、数字

16、和下划线三种字符组成 且须以字母或下划线开头。 不能与“关键词”同名 ANSI C和Keil C51的关键词分别如表4-2和表4-3所示 英文字母区分大小写标识符命名宜简单而含义清晰4.2.2 变量及其定义方法C51数据可分为常量和变量程序运行过程中,其值可以改变的量称为变量变量名按标识符规则定义变量值存储在存储器中变量必须先定义,后使用程序运行中,通过变量名引用变量值可分为: 字符型变量 整型变量 实型变量 位变量 指针变量 变量的存储区域常量和变量必须定位在80C51不同的存储区域存储区域按存储器类型分类 不同的存储器类型,其访问方式和速度也就不同在已知变量长度及变量为正整数的情况下 应尽

17、量采用8bit无符号格式:unsigned char 存储器类型表4-5 C51存储器类型与80C51存储空间的对应关系 不同性质的数据应区别对待 位变量只能定位在片内RAM位寻址区 使用bdata存储器类型 常用的数据应定位在片内RAM中 使用data和idata存储器类型 不太常用的数据可定位在片外RAM中 使用pdata和xdata存储器类型 常量可采用code存储器类型 编译模式 若用户不对变量的存储器类型作出定义系统将由编译模式默认存储器类型编译模式由源程序、函数或C51编译器设置表4-6 C51存储器编译模式 局部变量和全局变量变量按使用范围可分为局部变量和全局变量 局部变量 局部

18、变量是某个函数内部定义的变量 使用范围仅限于该函数内部 不同函数中允许使用相同的局部变量名 函数运行结束,即释放局部变量存储单元 可大大提高80C51内存单元的利用率 全局变量 全局变量在整个文件或程序中有效,可供各函数共用 使用全局变量可以增加各函数间数据联系的渠道 使用全局变量的缺点: 始终占用一个固定的存储单元 降低了内部存储单元的利用率 降低了函数的通用性 函数移植到其他文件时需同时将全局变量一起移植 因此,应尽量减少全局变量,能不用就尽量不用 变量的定义方式 定义格式:数据类型 存储器类型 变量名表带中括号 者为非必需项,缺省时由C51编译器默认例如:unsigned int a;

19、char b=100,c; char data var; float idata x,y,z; unsigned int pdata sum; char code text =CHINA; unsigned char xdata *ap; 定义80C51特殊功能寄存器及其可寻址位C51虽可用关键词定义80C51特殊功能寄存器 体现了C51编译功能的多样性和完整性 但编者还是建议读者不要去重新定义直接使用预处理命令:#include 即可在程序中直接引用21个特殊功能寄存器 及其可位寻址并有专用位定义名称的位变量既省事又不易出错 位变量定义方式 定义128位可寻址位的位变量 定义格式:bit 位

20、变量名 例如:bit u,v; /定义位变量u,v 定义ACC、B、P0、P1和P2中的位变量 这些位变量没有专用的位定义名称,只有位编号 但这些位编号不符合ANSI C标识符要求 应重新定义。其格式如下: sbit 位变量名=位地址常数 例如:sbit P10= P10; /定义P10为P1.0 绝对地址变量定义方式绝对地址变量需要指定变量的存储单元地址 属全局变量,定义方法有两种: 应用关键词 _at_ 数据类型 存储器类型 变量名_at_绝对地址 例如:unsigned char xdata PA_at_0 x7fff ; 应用绝对地址访问# include 需引用C51库函数absac

21、c.h表4-15 绝对地址 4.2.3 运算符和表达式 赋值运算符 一般格式:变量表达式 由赋值运算符组成的表达式称为赋值表达式 算术运算符表4-7 C51算术运算符表 自增1和自减1有两种写法: i和i:i先加(减)1,后使用 i和i:i先使用,后加(减)1 除法运算的结果与参与运算数据的类型有关 若两个数据都是整数,则运算结果也为整数 即使有余数,也只取整数,舍去小数 例如:7/3,运算结果为 2 求余运算要求参与运算的数据都是整型 运算结果为两数相除的余数 例如:73,运算结果为 1算术运算符说明 关系运算符表4-8 C51关系运算符表 用于两个数据之间进行比较判断运算的结果只能有两种:

22、 条件满足,运算结果为1(真) 条件不满足,运算结果为0(假)注意,不要混淆“”与“的区别 “用于给变量赋值 “”用于判断是否相等 逻辑运算符表4-9 C51逻辑运算符 一般形式为: 逻辑与:(条件表达式1)&(条件表达式2) 逻辑或:(条件表达式1)|(条件表达式2) 逻辑非:!(条件表达式)用于求条件表达式整体之间逻辑运算的逻辑值 条件表达式的值只有两种:1或0 运算结果也只有两种:1或0 位逻辑运算符表4-10 C51位逻辑运算符表 用于变量数据本身按位进行逻辑运算例如,若a=211,b=185 “a&b”的结果是145 “a&b”的结果却是1 位左移时,低位移进0,移出位作废 位右移时

23、,无符号数和正数高位移进0 负数补码移进1,移出位作废 有符号数无论位左移右移,符号位均不参与移位 复合赋值运算符表4-11 C51复合赋值运算符表 复合赋值运算符由运算符和赋值运算符叠加组合复合赋值运算符是先进行运算符所要求的运算 再把运算结果赋值给复合赋值运算符左侧的变量例如,x+=y等同于x=x+y x/=y+10等同于x=x/(y+10)4.3 C51基本语句 4.3.1 语句基本概念 语句是用来向计算机系统发出的操作指令一条C51语句编译后会产生若干条机器操作码有表达式语句、复合语句、选择语句和循环语句 表达式语句 在表达式后面加上“;”就构成表达式语句 例如:a=b+c; 复合语句

24、 由若干条单语句组合而成的语句称为复合语句 局部变量定义; 语句1; 语句2; ; 语句n; 单一语句,可不用花括号括起 复合语句,必须用花括号括起 且每个单语句后须有“;” 复合语句允许嵌套 即在复合语句中引入另一条复合语句4.3.2 选择语句 选择语句是根据给定的条件是否成立 判断并选择相应的操作 if语句 C51中的if语句可分为3种形式: 图4-5 if语句流程图 条件成立就选择,否则就不选择 if (条件表达式) 内嵌语句; 例如:if (xy) m=x; /若xy,最大值m= x max=m; /最大值max= m 不论条件成立与否,总要选择一个 if (条件表达式) 内嵌语句1;

25、 else 内嵌语句2; 例如: if (xy) max=x; /若xy,最大值max= x else max=y; /否则,最大值max= y 也可以用条件运算符“?:”实现 表达式1?表达式2:表达式3; 例如: max = (xy) ? x : y; /若xy,max= x;否则,max= y 串行多分支结构 如图4-5c所示 if (条件表达式1 ) 内嵌语句1;else if (条件表达式2 ) 内嵌语句2; else if (条件表达式n ) 内嵌语句n;else 内嵌语句(n+1);【例4-6】 要求实现双键控4灯 K0、K1均未按下,VD0亮,其余灯灭; K0单独按下,VD1亮

26、,其余灯灭; K1单独按下,VD2亮,其余灯灭; K0、K1均按下,VD3亮,其余灯灭。图4-6 信号灯电路 演示Keil C51调试和Proteus仿真(见实验5) 双键控4灯程序 if语句嵌套 【例4-7】 试用if语句嵌套实现双键控4灯演示Keil C51调试和Proteus仿真(见实验5) switch语句 switch语句是一种并行多分支选择语句,也称为散转 图4-7 switch语句流程图 【例4-8】 试用switch语句实现双键控4灯 演示本例Keil C51调试和Proteus仿真(见实验5) 4.3.3 循环语句 while循环语句 根据判断语句在流程中执行的先后 可分为w

27、hile循环和do-while循环图4-8 循环语句流程图 while循环while (条件表达式) 循环体语句;【例4-9】 试求:sum=n=1+2+100 演示本例本例Keil C51调试 最后显示:n=101,sum=5050表示n=101时停止累加之前累加值sum=5050 do-while循环do 循环体语句;while(条件表达式);【例4-10】 用do-while循环语句实现n最后显示:n=101,sum=5050表示n=101时停止累加之前累加值sum=5050演示本例本例Keil C51调试while循环与do-while循环的区别: 先判断后执行 还是 先执行后判断当第

28、一次判断为真时 两者的执行结果是完全相同但若第一次判断为假时 两者的执行结果就不同 while循环一次也没执行 do-while循环至少执行了一次 for循环语句 for (表达式1;表达式2;表达式3) 循环体语句; 首先对循环变量(表达式1)赋初值 判断表达式2 是否满足给定的循环条件 若满足循环条件(值为非0) 则执行循环体语句 若不满足循环条件(值为0) 则结束循环 在满足循环条件(值为非0)的前提下 执行循环体语句; 计算表达式3,更新循环变量; 返回判断表达式2,重复及以下操作 直至跳出for循环语句。 图4-9 for循环流程图 【例4-11】 用for循环语句实现n最后显示:n

29、=101,sum=5050表示n=101时停止累加之前累加值sum=5050演示本例本例Keil C51调试 循环嵌套 在一个循环体内包含另一个循环,称为循环嵌套 循环嵌套常用于延时程序【例4-12】 要求8个发光二极管循环点亮 每次点亮时间约为0.5秒。演示本例Keil C51调试和Proteus仿真(见实验6) 4.4 C51构造类型数据 4.4.1 数组数组是一组具有相同类型数据的有序集合数组可分为一维和多维,常用的是一维数组 一维数组 定义格式 数据类型 存储器类型 数组名元素个数 例如:unsigned int code a10; 引用格式 数组名下标 注意:数组下标是从0开始编号的

30、 数组赋值 一般在数组初始化时(即数组定义时)赋值在单片机应用中,数组的主要功能是查表【例4-15】 循环灯电路,要求实现流水循环演示本例Keil C51调试和Proteus仿真(实验6)花样循环灯电路,要求按下列顺序循环: 全亮,全暗,并重复一次; 从上至下,每次亮2个; 从下至上,每次亮2个; 从上至下,每次亮4个,并重复一次; 从上至下,每次间隔亮2个; 每次间隔亮4个,并重复一次; 返回,不断循环。演示本例Keil C51调试和Proteus仿真(实验6)实际上是按花样循环码数组依次运行4.4.2 指针 指针和指针变量 指针就是地址 变量的指针就是变量的地址 存放指针的变量称为指针变量

31、 指针变量定义方式数据类型 数据存储器类型 *指针存储器类型 指针变量名 取地址运算符和指针运算符 &:取地址运算符 例如:y=&a; *:指针运算符 例如:z=*ap;用指针实现例4-15花样循环电路演示本例Keil C51调试和Proteus仿真(实验6)说明:本程序书中没有4.5 C51函数函数是C程序的基本单位即C51程序主要是由函数构成的 4.5.1 函数概述 可分为主函数main( )和普通函数一个C51源程序必须有也只能有一个main函数而且是整个程序执行的起始点普通函数是被主函数调用的子函数普通函数又可分为标准库函数和自定义函数标准库函数是由C51编译系统的函数库提供的用户自定

32、义函数就是用户根据自己的需要编写的函数 函数的分类 函数的定义方式返回值类型是指本函数返回值的数据类型, 若无返回值,则成为无类型,用void表示; 若该项要素缺省,则C51编译系统默认为int类型。函数名除了main函数有固定名称外, 其他函数由用户按标识符的规则自行命名。形式参数用变量名(标识符)表示,没有具体数值; 可以是一个,或多个(中间用逗号“,”分隔),或没有形式参数。编译属性是指定该函数采用的存储器编译模式, 有Small、Compact和Large 3种选择,缺省时,默认Small模式。 中断属性是指明该函数是否中断函数; 寄存器组属性是指明该函数被调用时准备采用哪组工作寄存器

33、。 局部变量是仅应用于本函数内的变量, 在执行本函数时临时开辟存储单元使用,本函数运行结束即予释放; 局部变量说明是说明该变量的数据类型、存储器类型等。 不能颠倒局部变量说明与函数体语句的次序,否则C51编译器将视作出错。一对花括号是必须的。 4.5.2 函数的参数和返回值 函数的参数函数的参数有形式参数和实际参数 形式参数是定义函数名后面括号中的变量 实际参数是主调用函数调用被调用函数时 赋给形式参数的实际数值 形参与实参之间的传递是单方向的 只能是主调用函数向被调用函数传递 其好处是: 提高了函数的通用性与灵活性 提高80C51内存空间的使用率 函数的返回值 功能是把程序运行的结果返回给主

34、调用函数return 表达式;【例4-22】 根据n值计算 n例4-9已给出计算n程序,本例n不定,由外部输入 演示本例Keil C51调试 若输入n=100,程序运行结果:sum=5050。 数组作为函数的形式参数 用数组作函数的参数时 并不是把数组值传递给形参 而是将实参数组起始地址传递给形参数组 使两个数组占用同一段存储单元一旦形参数组某元素值发生变化 将会导致实参数组相应元素值随之变化数组参数传递属于地址传递 能得到多于一个的函数返回值指针变量作为函数的形式参数时 也可起到地址传递的作用【例4-24】 对n个数组元素(随机输入)从大到小排序设数组:a16=11,99,66,22,111

35、,55,0,222,44,155,77,255,133,100,88,33演示本例Keil C51调试 Serial#1窗口立刻显示数组原始数据和排序后的数据 4.5.4 常用库函数 库函数是C51在库文件中已经定义好的函数 若需调用,应在源程序的开头采用预处理指令 将有关的库函数包含进来格式如下: #include 常用库函数主要有: 访问80C51特殊功能寄存器库函数reg51.h 绝对地址访问库函数absacc.h 内联函数intrins.h 输入输出函数stdio.h 数学函数math.h 等。书中部分习题编成的目录(仿真文件免费下载)80C51单片机实用教程基于Keil C和Prot

36、eus 双解汇编和C51两种程序每条指令/语句均给出注释编入36例Proteus仿真实验 第5章 中断系统和定时/计数器 80C51单片机实用教程基于Keil C和Proteus配套Proteus虚拟仿真36例目录(免费下载)对照书中程序,演示运行理解,增强教学效果第5章 中断系统和定时/计数器 5.1 80C51中断系统5.1.1 中断概述 什么叫中断? CPU暂时中止其正在执行的程序 转去执行请求中断的那个外设或事件的服务程序 等处理完毕后再返回执行原来中止的程序 为什么要设置中断? 提高CPU工作效率 具有实时处理功能 具有故障处理功能 实现分时操作 中断源 80C51单片机的中断源共有

37、5个中断源 其中2个为外部中断源,3个为内部中断源: :外部中断0,中断请求信号由P3.2输入 :外部中断1,中断请求信号由P3.3输入 T0:定时/计数器0溢出中断,对外部脉冲计数由P3.4输入 T1:定时/计数器1溢出中断,对外部脉冲计数由P3.5输入 串行中断(包括串行接收中断RI和串行发送中断TI)5.1.2 中断源和中断控制寄存器 中断请求控制寄存器 80C51涉及中断请求的控制寄存器有2个 定时和外中断用TCON,串行中断用SCON 用于判别5个中断源是否请求中断 相应标志位为“1”,表示请求中断 中断允许控制寄存器IE 用于控制中断源的开放或关闭 可用软件对各位分别设置 相应标志

38、位置“1”,开中;清0,关中 其中EA是总控制位。EA=0,5个中断源全部关闭 中断优先级控制寄存器IP 可将5个中断源划分为两个中断优先级: 高优先级和低优先级 相应标志位置“1”,设置为高优先级 相应标志位清“0”,设置为低优先级 高优先级中断可以中断正在响应的低优先级中断 同优先级中断不能互相中断5.1.3 中断处理过程 中断处理过程大致可分为四步: 中断请求、中断响应、中断服务和中断返回 中断请求 某中断请求标志位置“1”,发出中断请求信号 中断响应 CPU查询(检测)到某中断标志为“1”在满足中断响应条件下,响应中断 中断响应操作 保护断点地址; 撤除该中断源的中断请求标志; 关闭同

39、级中断; 将相应中断的入口地址送入PC; 中断响应条件: 该中断已经“开中”; CPU此时没有响应同级或更高级的中断; 当前正处于所执行指令的最后一个机器周期; 正在执行的指令不是RETI或者是访向IE、IP的指令 否则必须再另外执行一条指令后才能响应。图5-2 中断处理过程流程图 执行中断服务程序 一般来说,中断服务程序应包含以下几部分: 保护现场 执行中断服务程序主体,完成相应操作 恢复现场80C51五个中断源的中断入口地址如下: INT0:0003H T0:000BH INT1:0013H T1:001BH 串行口:0023H 中断返回 在中断服务程序最后,必须安排一条中断返回指令RET

40、I 当CPU执行RETI指令后,自动完成下列操作: 恢复断点地址。 开放同级中断,以便允许同级中断源请求中断。中断系统的应用主要是编制应用程序编制应用程序包括两大部分内容:第一部分是中断初始化;第二部分是中断服务程序5.1.4 中断系统的应用 设置堆栈指针SP 定义中断优先级 定义外中断触发方式 一般应定义边沿触发方式为宜 若外中断信号无法适用边沿触发方式 必须采用电平触发方式时 应在硬件电路上和中断服务程序中 采取撤除中断请求信号的措施 开放中断 除上述中断初始化操作外,还应安排好 等待中断或中断发生前主程序应完成的操作内容 中断初始化 在中断服务入口地址设置一条跳转指令 转移到中断服务程序

41、的实际入口处 根据需要保护现场 C51程序,由编译器自动完成保护现场和恢复现场 中断源请求中断服务要求的操作 这是中断服务程序的主体 若是外中断电平触发方式,应有中断信号撤除操作 若是串行收发中断,应有对RI、TI清0指令 恢复现场 中断返回,最后一条指令必须是RETI 中断服务子程序中断服务程序以C51子函数的形式出现,其格式如下: void 函数名( ) interrupt n using m 中断函数体语句; 中断函数无返回值,也不带参数 interrupt是C51关键字,表示该函数是一个中断服务子函数 n=04(常正整数),对应中断源编号 中断C51编程 using是C51关键字,用于

42、中断函数内选择工作寄存器组 m=03(常正整数),对应工作寄存器区编号 using m缺省时,不进行工作寄存器组切换 但所有在中断函数内用到的工作寄存器将被压栈保护。 中断函数不能被非中断调用 允许在中断函数中调用其他子函数 但被调用子函数使用的工作寄存器组 必须与中断函数使用的工作寄存器组相同、 中断系统应用举例【例5-1】 出租车计价器计程方法是 车轮每运转一圈产生一个负脉冲, 从外中断INT0(P3.2)引脚输入。 行驶里程为: 轮胎周长运转圈数设轮胎周长为2m, 试实时计算出租车行驶里程(单位米)。演示Proteus仿真(见练习12)5.2 80C51定时/计数器 5.2.1 定时/计

43、数器概述80C51单片机内部有两个定时/计数器T0和T1 其核心是计数器,基本功能是加1 对外部事件脉冲(下降沿)计数,是计数器 对片内机周脉冲计数,是定时器 片内机周脉冲频率是固定的,是fOSC的1/12 若fOSC = 12MHZ,1机周为1s 若fOSC = 6MHZ,1机周为2s。计数器由二个8位计数器组成,合起来是16位计数器 TH0/TH1是高8位,TL0/TL1是低8位 作计数器时,外部事件脉冲必须从规定的引脚输入 T0的外部事件脉冲应从P3.4引脚输入 T1的外部事件脉冲应从P3.5引脚输入 且外部脉冲的最高频率不能超过时钟频率的1/245.2.2 定时/计数器的控制寄存器80

44、C51定时/计数器是可编程的通过TCON和TMOD的状态设置来实现 定时/计数器控制寄存器TCONTCON已在5.1.2节中介绍,其中 低4位用于外中断控制,高4位用于定时/计数器控制 TF1/TF0为定时/计数器T1/T0中断请求标志 TR1/TR0为定时/计数器T1/T0运行控制位 TR1/TR0=1,T1/T0运行;TR1/TR0=0,T1/T0停运行表5-6 TCON的结构和各位名称、位地址 定时/计数器工作方式控制寄存器TMOD 用于设定定时/计数器的工作方式 低4位用于控制T0,高4位用于控制T1表5-7 TMOD的结构和各位名称、功能 表5-8 M1M0的4种工作方式 M1M0:

45、工作方式选择位,可选择4种工作方式 方式0:13位计数器,最大计数值213 =8192方式1:16位计数器,最大计数值216 =65536方式2:8位计数器,最大计数值28 =256,定时初值可自动恢复方式3:2个8位计数器,仅适用于T0,T1无方式3 常用作串行口波特率发生器 C/T:计数/定时方式选择位C/T= 1,为计数工作方式对P3.4/ P3.5引脚输入的外部事件脉冲计数,负跳变脉冲有效C/T= 0,为定时工作方式,对片内机周脉冲计数 GATE 门控位GATE=0,定时/计数器的运行只受TR0/TR1的控制GATE=1,定时/计数器的运行同时受TR0/TR1和 外中断输入信号(INT

46、0/INT1)的双重控制 只有当INT0/INT1=1 ,且TR0/TR1=1时 T0/T1才能开始运行 运行后,若出现INT0/INT1=0,T0/T1立即停止运行5.2.4 定时/计数器的应用 合理选择定时/计数器工作方式 计算定时/计数器定时初值 T初值 = 2N -定时时间/机周时间 方式0,N = 13; 方式1,N = 16; 方式2、3,N = 8 机周时间与主振频率有关,机器周期是时钟周期的12倍 编制应用程序 定时/计数器的初始化,包括定义TMOD, 写入定时初值,设置中断系统,启动定时/计数器运行等 正确编制定时/计数器中断服务程序 应用步骤 应用举例【例5-3】 已知fO

47、SC=12MHz,要求在P1.0引脚输出周期为400s的 脉冲方波,试分别用T1工作方式1、方式2编制程序。解: 工作方式1设置TMOD 计算定时初值 T1初值=216200s/1s =65536200=65336=FF38H 工作方式2 设置TMOD:M1M0=10,因此,TMOD=20H 定时初值:T1初值=28 -200s/1s=38H,因此,TH1=TL1=38H 主程序只需修改TMOD、TH1、TL1赋值数据 中断服务子程序只需删除T1重置初值指令(语句) 其余全部相同 方式2与方式1相比,优点是定时初值不需重装Keil C调试和Proteus 虚拟仿真见实验8。书中部分习题编成的目

48、录(仿真文件免费下载)80C51单片机实用教程基于Keil C和Proteus 双解汇编和C51两种程序每条指令/语句均给出注释编入36例Proteus仿真实验 第6章 80C51并行扩展 80C51单片机实用教程基于Keil C和Proteus配套Proteus虚拟仿真36例目录(免费下载)对照书中程序,演示运行理解,增强教学效果第6章 80C51并行扩展80C51系列单片机有很强的外部扩展能力外部扩展可分为并行扩展和串行扩展两大形式 早期的单片机应用系统以采用并行扩展为多 近期的单片机应用系统以采用串行扩展为多外部扩展器件可有ROM、RAM、I/O口和其他一些功能器件 扩展器件大多是一些常

49、规芯片,有典型的扩展应用电路用户很容易根据规范化电路来构成能满足要求的应用系统 6.1 并行扩展慨述数据传送:由数据线DB(D0D7)完成;交互握手:由控制线CB(PSEN、WR、RD、ALE、EA)完成。单元寻址:由地址线AB(A0A15)完成;6.1.1 并行扩展连结方式 并行扩展总线组成 地址总线(AB):A0A15,共16位 低8位地址线由P0口提供,锁存器锁存后输出 高8位地址线由P2口提供 数据总线(DB):由P0口提供,宽度8位 控制总线(CB) ALE:用于锁存P0口输出的低8位地址信号 与地址锁存器门控端G连接。 PSEN:用于外ROM读选通控制 与外ROM输出允许端OE连接

50、。 EA:用于选择读内/外ROM EA=1,读内ROM;当EA=0,读外ROM。 RD:用于读外RAM选通,与外RAM读允许端OE连接。 WR:用于写外RAM选通,与外RAM写允许端WE连接。 P2.x:用于片选控制,一般由P2口高位地址线担任 与扩展器件片选端CE连接。低位地址线A0A10实现片内寻址。高位地址线A11A13实现片选(A11A13中只允许有一根为低电平,另二根必须为高电平,否则出错)。无关位A14、A15可任取,一般取“1”。 线选法缺点:芯片地址空间不连续; 存在地址重叠现象。线选法优点:连接简单;适用于扩展存储容量较小的场合。存储器内存储单元的子地址,由与存储器地址线直接

51、连接的低位地址线确定;存储器的芯片地址由高位地址线产生的片选信号确定。6.1.2 并行扩展寻址方式 表6-1 线选法三片存储器芯片地址分配表 通过译码器将高位地址线译码转换为片选信号 2条地址线能译成4种片选信号,对应的译码芯片为74139(双2-4译码器) 3条地址线能译成8种片选信号,对应的译码芯片为74138(3-8译码器) 4条地址线能译成16种片选信号,所对应的译码芯片为74154(4-16译码器)74138 简介:C、B、A为地址线输入端,C是高位 Y0、Y1、Y2、Y7为译码状态信号输出端 8种状态中只会有一种有效,取决于CBA编码 G1、G2A、G2B为控制端,同时有效时,74

52、138被选通工作 译码法图6-3 74138引脚图 表6-2 74138真值表 图6-4 用全译码方式实现片选 6.2 并行扩展外ROM 地址线: 低8位地址:由80C51 P0.0P0.7与74373 D0D7连接,ALE有效时, 74373锁存该低8位地址,并从Q0Q7输出,与EPROM芯片低8位地址A0A7相接。 高位地址: 视EPROM芯片容量大小。2764需5位,P2.0P2.4与2764 A8A12相连; 27128需6位,P2.0P2.5与27128 A8A13相连。 数据线:由80C51地址/数据复用总线P0.0P0.7直接与EPROM数据线D0D7相连。 输出允许:EPROM

53、的输出允许端 直接与80C51 相连,80C51的 信号 正好用于控制EPROM 端。 :有内ROM并且使用时, 接VCC;无内ROM或仅使用外ROM时, 接地。 控制线: ALE:80C51 ALE端与74373门控端G相连,专用于锁存低8位地址。 片选端:由于只扩展一片EPROM,因此一般不用片选,EPROM片选端 直接接地。图6-5 2764与80C51典型连接电路图6-6 27128与80C51典型连接电路 地址线、数据线仍按80C51一般扩展ROM时方式连接, 高位地址线视RAM芯片容量,6116需3根,6264需5根。 片选线一般由80C51高位地址线控制,并决定RAM的口地址。

54、6264有2个片选端只须用其一个,一般用 ,CE2直接接VCC。 按图7-5,6116的地址范围是7800H7FFFH; 按图7-6,6264的地址范围是6000H7FFFH(无关位为1)。 读写控制线由80C51的 、 分别与RAM芯片的 、 相接。 6.3 并行扩展外RAM 图6-7 6116与80C51典型连接电路图6-8 6264与80C51典型连接电路并行扩展I/O口可分为可编程和不可编程两大类。不可编程是指不能用软件对其I/O功能进行设置、编辑,功能固定;可编程是指通过编程对其I/O功能进行设置、编辑和硬件功能的应用发挥。 扩展I/O口不可编程芯片主要有74LS、74HC系列芯片和

55、CMOS 4000系列芯片。74LS系列输出驱动能力强、速度快;CMOS 4000系列输入阻抗高、微功耗。74HC系列是一种高速HCMOS芯片,其引脚和输入输出电平与74LS兼容,输出驱动能力和速度与74LS系列相当,是目前较为常用的I/O口扩展芯片。 扩展I/O口可分为扩展输入口和输出口。由于通常通过P0口扩展,而P0口要分时传送低8位地址和输入输出数据,因此构成输出口时,接口芯片应具有片选和锁存功能;构成输入口时,接口芯片应具有三态缓冲和锁存功能。6.4 并行扩展I/O口扩展输入口的74系列芯片有很多,以74373最为方便和常用。 表6-4 74373功能表 图6-10 74373引脚图图

56、6-11 74373扩展输入口 6.4.1 用74系列芯片并行扩展输入口【例6-2】 按图6-11电路,试编制程序,从373外部每隔0.5秒读入一个数据,共16个数据,存入以30H为首址的内RAM。扩展输出口的典型常用芯片以74377最为方便。 图6-12 74377引脚图 表6-5 74377功能表 图6-13 74377扩展输出口6.4.2 用74系列芯片并行扩展输出口【例6-3】 按图6-13电路,试编制程序,每隔0.5秒,从74377依次输出一个数据,共16个,输出数据存在以TAB为首址的ROM中。书中部分习题编成的目录(仿真文件免费下载)80C51单片机实用教程基于Keil C和Pr

57、oteus 双解汇编和C51两种程序每条指令/语句均给出注释编入36例Proteus仿真实验 第7章 80C51串行口及串行扩展 80C51单片机实用教程基于Keil C和Proteus配套Proteus虚拟仿真36例目录(免费下载)对照书中程序,演示运行理解,增强教学效果第7章 80C51串行口及串行扩展7.1 80C51串行口80C51系列单片机有一个全双工的串行口 既可实现串行异步通信,又可作为同步移位寄存器使用7.1.1 串行通信概述 串行通信只需要一到两根数据线,长距离传送时,比较經济,但由于每次只能传送一位数据,传送速度较慢,随着通信信号频率的提高,传送速度较慢的矛盾已逐渐缓解。

58、7.1.2 串行口特殊功能寄存器发送时,只需将发送数据输入SBUF CPU将自动启动和完成串行数据的发送 接收时,CPU将自动把接收到的数据存入SBUF 用户只需从SBUF中读出接收数据 串行数据缓冲器SBUF SM0 SM1:串行口工作方式选择位 SM2:多机通信控制位 REN:允许接收控制位:REN=0,禁止接收;REN=1,允许接收 TB8:方式2和方式3中要发送的第9位数据 在多机通信中,TB8=0表示数据,TB8=1表示地址 TB8还可用于奇偶校验位 RB8:方式2和方式3中要接收的第9位数据 TI:发送中断标志。TI=1,表示帧发送结束,TI位必须由软件清0 RI:接收中断标志。R

59、I=1,表示帧接收结束,RI位也必须由软件清0 串行控制寄存器SCON表7-1 SCON的结构和各位名称、位地址 表7-2 串行口工作方式 7.1.3 串行工作方式1串行工作方式0使用方式0可通过外接移位寄存器将串行输入输出数据转换成并行输入输出数据。 图7-6 74HC164引脚图电路表7-4 74HC164功能表 80C51串行发送是低位在前高位在后,而移位寄存器的移位秩序是从Q0Q7。最终的结果是80C51 SBUF中的D0D7置于移位寄存器的Q7Q0,位秩序相反。 数据发送 与具有“串入并出”功能的移位寄存器配合 例如74HC164、74HC595或CC4094等 就可以将串行口变为并

60、行输出口使用 【例7-1】 已知74HC164串入并出电路如图7-10所示, fOSC=12MHz,要求每隔0.5秒,按下列顺序亮灯,不断循环。 全亮,全暗,并重复一次; 从右至左,每次亮2个; 从左至右,每次亮2个; 从右至左,每次亮4个,并重复一次; 从右至左,每次间隔亮2个; 每次间隔亮4个,并重复一次; 返回,不断循环。图7-10 74LS164串入并出电路 本例Keil C51调试和Proteus仿真见实验13 数据接收与具有“并入串出”功能的移位寄存器配合例如74HC165或CC4014、 CC4021等就可以将串行口变为并行输入口使用 图7-8 74HC165引脚图表7-6 74

温馨提示

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

评论

0/150

提交评论