文档详情

51单片机自学资料行业材料

cn****1
实名认证
店铺
PPT
7MB
约252页
文档ID:592068446
51单片机自学资料行业材料_第1页
1/252

单片机原理及应用课程特点课程特点学习方法学习方法①①知识点既分散又连贯,结构和指令系统是基础;②②与电子线路尤其是数字电子线路关系密切;①①预习、复习;②②多动手(硬件、软件实验);③③多看参考书(包括利用网上资料);④其它(上课、作业、答疑)1 1优质荟萃优质荟萃 第一章 概述第二章 MCS-51单片机的结构和原理第三章 MCS-51单片机的指令系统第四章 MCS-51单片机的程序设计第五章 MCS-51单片机的中断系统第六章 MCS-51单片机的串行接口第七章 MCS-51单片机的系统扩展第八章 MCS-51单片机的测控接口(部分)主要内容主要内容2 2优质荟萃优质荟萃 §1.1 微型计算机与单片机与单片机计算机巨大中小微多片机(PC)单片机第一章 概述3 3优质荟萃优质荟萃 ★单片机SCMC(Single Chip MicroComputer) ----属于微型机的一种 ----具有一般微机的基本组成和功能又称为微控制器MCU(MicroController Unit)一、一、微型机与单片机的基本组成对比微型机CPU存储器输入/输出接口4 4优质荟萃优质荟萃 微处理器CPUROMRAMI/O接口外设地址总线AB数据总线DB控制总线CB微型机组成框图5 5优质荟萃优质荟萃 时钟OSCCPU各种I/O定时器/计数器程序存储器ROM数据存储器RAM中断MCS-51单片机组成框图6 6优质荟萃优质荟萃 (1)优异的性能价格比。

二、单片机的特点二、单片机的特点 单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合于在恶劣环境下工作 此外,程序多采取固化形式也可以提高可靠性 (2)集成度高、体积小、有很高的可靠性 7 7优质荟萃优质荟萃 为了满足工业控制要求,一般单片机的指令系统中均有极丰富的转移指令、I/O口的逻辑操作以及位处理功能单片机的逻辑控制功能及运行速度均高于同一档次的微机3)控制功能强4)单片机的系统扩展、系统配置较典型、规 范,容易构成各种规模的应用系统8 8优质荟萃优质荟萃 三、单片机的应用1 1.单片机应用的特点.单片机应用的特点 软硬件结合、多学科交叉;软硬件结合、多学科交叉; 应用现场环境恶劣(应用现场环境恶劣(电磁干扰、电源波动、电磁干扰、电源波动、 冲击振动、高低温湿度等冲击振动、高低温湿度等);); 应用领域广泛且意义重大(应用领域广泛且意义重大(硬件软化硬件软化----微控微控 制技术制技术)。

9 9优质荟萃优质荟萃 2 2 .单片机的应用领域.单片机的应用领域①①在在工业自动化方面(在在工业自动化方面(过程控制、数据采集和测控过程控制、数据采集和测控 技术、机器人技术、机械电子计算机一体化技术技术、机器人技术、机械电子计算机一体化技术););②②仪器仪表方面(仪器仪表方面(测试仪表和医疗仪器测试仪表和医疗仪器----数字化、智能数字化、智能 化、高精度、小体积、低成本、便于增加显示报警和自诊化、高精度、小体积、低成本、便于增加显示报警和自诊断功能断功能););③③在家用电器方面(在家用电器方面(冰箱、洗衣机、空调机、微波炉、冰箱、洗衣机、空调机、微波炉、电视机、音像设备等电视机、音像设备等););④④信息和通信产品方面(信息和通信产品方面(计算机的键盘、打印机、磁计算机的键盘、打印机、磁 盘驱动器;机、复印机、机、考勤机盘驱动器;机、复印机、机、考勤机););⑤⑤在军事方面(在军事方面(飞机、大炮、坦克、军舰、导弹、火箭、飞机、大炮、坦克、军舰、导弹、火箭、雷达等雷达等)1010优质荟萃优质荟萃 §§1.2 1.2 常用单片机系列介绍常用单片机系列介绍n1、综述 自单片机诞生以来的近30年中,单片机已有70多个系列的近500个机种。

国际上较有名、影响较大的公司及他们的产品如下所述:§ IntelIntel公司的MCS—48、MCS—51、MCS—96系列;★§ MotorolaMotorola公司的6801、6802、6803、6805、68HCll系列产品;§ ZilogZilog公司的Z8、Super8系列产品;§ 仙童(Fairchild)公司和Mostek公司的F8、3870系列产品;1111优质荟萃优质荟萃 § NECNEC公司的公司的μCOMμCOM—8787系列产品;系列产品;§ RockwellRockwell公司的公司的65006500、、65016501系列产品系列产品§ AtmelAtmel、、PHILIPS PHILIPS 、、LGLG等等公司的公司的5151兼容机兼容机★ 根据近年来国外实地考察,Intel公司的单片机在市场上占有量为67%,其中MCS—51系列产品又占54%在我们国内虽然上述各公司的产品均有引进,但由于各种原因,至今在我国所应用的单片机仍然是以MCS—48、MCS—51、MCS—96为主流系列随着这一系列的深入开发,其主流系列的地位会不断巩固下去。

因而我们在此主要介绍Intel公司的单片机系列1212优质荟萃优质荟萃 2、MCS-51系列和AT89系列单片机 MCS-51是指由美国INTEL公司生产的一系列单片机的总称,这一系列单片机包括了好些品种,如80318031,,80518051,,87518751,,89518951,,80328032,,80528052,,87528752,,89528952等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS-51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称1) MCS-51系列1313优质荟萃优质荟萃 MCS-51系列单片机分类 资源资源 配置配置子子 系列系列 片内片内ROMROM形式形式 片片 内内 ROM ROM 容容 量量 片片 内内 RAM RAM 容容 量量定时定时/ /计数器计数器中中中中断断断断源源源源 无无ROMROMEPREPROMOME E2 2PROPROM M5151子系列子系列803180318051805187518751 895189514KB 128B128B 2 2××16165 55252子系列子系列803280328052805287528752 895289528KB 256B256B 3 3××16166 61414优质荟萃优质荟萃 805112345678910111213141516171819204039383736353433323130292827262524232221 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7 RST/VPDRXD/ P3.0TXD/ P3.1INT0/ P3.2INT1/ P3.3 T0/ P3.4 T1/ P3.5 WR/ P3.6 RD/ P3.7 XTAL2 XTAL1 VssVccP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7EA/VppALE/PROGPSENP2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.01515优质荟萃优质荟萃 INTEL公司将MCS-51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89C51就是这几年在我国非常流行的单片机,它是由美国ATMEL公司开发生产的。

2)AT89系列1616优质荟萃优质荟萃 §1.3 单片机的开发过程 这里所说的开发过程并不是一般书中所说的从任务分析开始,我们假设已设计并制作好硬件,下面就是编写软件的工作在编写软件之前,首先要确定一些常数、地址,事实上这些常数、地址在设计阶段已被直接或间接地确定下来了如当某器件的连线设计好后,其地址也就被确定了,当器件的功能被确定下来后,其控制字也就被确定了然后用文本编缉器编写软件,编写好后,用编译器对源程序文件编译、查错,直到没有语法错误,除了极简单的程序外,一般应用仿真机对软件进行调试,直到程序运行正确为止1717优质荟萃优质荟萃 运行正确后,就可以写片(将程序固化在EPROM中)源程序源程序 ORG 0000H LJMP START ORG 040HSTART::MOV SP,,#5FH ;设堆栈设堆栈 LOOP::NOP LJMP LOOP ;;循环循环 END ;;结束结束目标文件目标文件也就是最终写入也就是最终写入EPROMEPROM的文件:的文件:02 00 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FF 75 81 5F 00 02 00 431818优质荟萃优质荟萃 仿真是单片机开发过程中非常重要的一个环节,除了一些极简单的任务,一般产品开发过程中都要进行仿真,仿真的主要目的是进行软件调试,当然借助仿真器,也能进行一些硬件排错。

一块单片机应用电路板包括单片机部份及为达到使用目的而设计的应用电路,仿真就是利用仿真器来代替应用电路板(称目标机)的单片机部份,对应用电路部份进行测试、调试 仿真分软件模拟仿真和利用仿真器仿真两类 §1.4 仿真、仿真器1919优质荟萃优质荟萃 软件模拟仿真 是指用仿真软件来模拟单片机运行情况,一般我们学习指令系统时常用这种方式,它不能进行硬件系统的调试和故障诊断利用仿真器仿真 利用仿真器以及微机可以进行软硬件系统的调试和故障诊断2020优质荟萃优质荟萃 在仿真调试过程中,可以以各种运行方式运行程序(断点、单步、跟踪),还可以观察到单片机内部存储器、寄存器等的状态演示实验一 P1口的LED显示2121优质荟萃优质荟萃 第二章 MCS-51系列单片机的结构和原理 有关MCS-51机的性能特点,在第一章已作了简单介绍,本节将进一步详细介绍它的结构,使大家对它的性能有更深入的了解 MCS-51的典型产品是8051、8031、87518051是ROM型单片机,内部有4KROM;8031无片内ROM,8751片内有4KEPROM;89C51片内有4KFPEROM。

除此以外,它们的内部结构及引脚完全相同2222优质荟萃优质荟萃 本章将以MCS-51系列的8051为典型例子,详细介绍单片机的结构、性能、存储器结构及工作原理等内容通过对这些内容的掌握,可以起到举一反三、触类旁通的作用§2.1 MCS-51单片机的结构 以8051为例给出的单片机功能方块图如下 由图可见,在这一块芯片上,集成了一台微型计算机的各个部分其中主要有CPU、存储器、可编程I/O、定时/计数器、串行口等各部分通过内部总线相连2323优质荟萃优质荟萃 时钟OSCCPU各种I/O定时器/计数器程序存储器ROM数据存储器RAM中断MCS-51单片机组成框图2424优质荟萃优质荟萃 8051的内部结构展开图128128××8 8RAMRAMRAM地址寄存器地址寄存器P3P3口口P1P1口口P2P2口口P0P0口口锁存器锁存器锁存器锁存器锁存器锁存器锁存器锁存器中断控制中断控制定时定时/ /计数器计数器串行串行I/OI/O口口SP寄存器寄存器B B累加器累加器A A暂存器暂存器1 1 暂存器暂存器2 2程序状态程序状态字字PSWPSW指令寄存器指令寄存器IRIR指令译码器指令译码器ID数据指针数据指针DPTRDPTR缓冲器缓冲器程序计数器程序计数器PCPC增增1 1程序地址寄存器程序地址寄存器ARAR定时与控制定时与控制4K×8ROMALUCPU2525优质荟萃优质荟萃 2.1.1 CPU运算器CPU算术/逻辑部件ALU(Arithmetic Logic Unit)累加器ACCACC (Accumulator)程序状态字寄存器PSWPSW(Program Status Word)暂存寄存器寄存器B控制器定时控制与条件转移逻辑电路程序计数器PCPC指令寄存器IR指令译码器ID2626优质荟萃优质荟萃 2.1.2 8051的片内片内存储器  8051单片机与一般微机的存储器配置方式很不相同。

一般微机通常只有一个逻辑空间,可以随意安排ROM或RAM访问存储器时,同一地址对应唯一的存储单元,可以是ROM也可以是 RAM,并用同类访问指令 而MCS-51则不同:2727优质荟萃优质荟萃 8051在物理结构上设计成程序存储器与数据存储器独立分开的哈佛结构: 片内程序存储器4KB(ROM 0000H~0FFFH) 片内数据存储器128B(RAM 00H~7FH)2.1.3 8051的I/O端口8051有四个8位并行双向I/O口P0、P1、P2、P3, 一个串行口2828优质荟萃优质荟萃 2.1.4 8051的特殊功能寄存器SFR 8051内部有21个特殊功能寄存器,分别叫SP、IE、IP、PCON......(与内部RAM统一编址80H~FFH)★§2.2 MCS-51单片机的存储器组织8051在物理结构上有四个存储空间: 片内程序存储器、片外程序存储器、 片内数据存储器、片外数据存储器new2929优质荟萃优质荟萃 64KBROMEA=0EA=10000H0FFFH1000HFFFFH4KBROMFFH80H7FH00H SFRRAM64KBRAM(I/O)0000HFFFFH片内片外片外程序存储器数据存储器3030优质荟萃优质荟萃 8051在逻辑上,即从用户角度上8051有三个存储空间: 片内外统一编址的程序存储器 片内外不统一编址的数据存储器 特殊功能寄存器(片内)★访问这几个不同的逻辑空间时,采用的指令: 片内外程序存储器空间----MOVC 片内数据存储器空间和SFR----MOV 片外数据存储器地址空间----MOVX3131优质荟萃优质荟萃 一、程序存储器及地址空间作用--程序存储器用于存放编好的程序和表格常数。

①①8051片内有4K字节ROM,片外用16位地址线最多可扩展64K字节ROM,两者是统一编址的★如果EA端保持高电平,8051执行片内前4KB ROM地址(0000H~0FFFH) 中的程序当寻址范围超过4KB(1000H~FFFFH)时,则从片外存储器取指令★当EA端保持低电平时,8051的所有取指令操作均在片外程序存储器中进行,这时片外存储器可以从 0000H开始编址3232优质荟萃优质荟萃 ②②在程序存储器中,有6个单元具有特殊功能0003H0003H:外部中断0入口000BH000BH:定时器0溢出中断入口0013H0013H:外部中断1入口001BH001BH:定时器1溢出中断入口0023H0023H:串行口中断入口 使用时,通常在这些入口地址处存放一条绝对跳转指令,使程序跳转到用户安排的中断程序起始地址,或者从0000H起始地址跳转到用户设计的初始程序上0000H0000H: 8051复位后,PC=0000H,即程序从0000H 开始执行指令3333优质荟萃优质荟萃 二、数据存储器及地址空间数据存储器片外RAM64KB,地址范围0000H~FFFFH片内RAM128B,地址范围00H~7FH使用时只能用MOVXMOVX指令访问使用MOVMOV指令访问,可以进行堆栈操作3434优质荟萃优质荟萃 片内数据存储器空间分布图通用RAM区 (80B) 位地址区 (16B)寄存器区4组(32B)7FH7FH寄存器3组寄存器2组寄存器1组寄存器0组寄存器区4组(32B). .. .. .. .. .. .. .. .. .①由PSW中的2位RS1、RS0来决定选 哪一组为当前工作寄存器: RS1、RS0=00 选0组 RS1、RS0=01 选1组 RS1、RS0=10 选2组 RS1、RS0=11 选3组②在位地址区,每一个BIT都有一个 地址,共16×8=128位00H00H30H30H2FH2FH20H20H1FH1FH. .. .. .3535优质荟萃优质荟萃 片内数据存储器空间分布图通用RAM区 (80B) 位地址区 (16B)7FH7FH寄存器3组寄存器2组寄存器1组寄存器0组寄存器0组寄存器区4组(32B). .. .. .. .. .. .. .. .. .RS1RS1、、RS0=RS0=0000R7R6R5R4R3R2R1R000H00H01H01H02H02H03H03H04H04H05H05H06H06H07H07H00H00H30H30H2FH2FH20H20H1FH1FH. .. .. .3636优质荟萃优质荟萃 片内数据存储器空间分布图通用RAM区 (80B) 位地址区 (16B)7FH7FH寄存器3组寄存器2组寄存器1组寄存器0组寄存器1组R7R6R5R4R3R2R1R008H08H09H09H0AH0AH0BH0BH0CH0CH0DH0DH0EH0EH0FH0FH寄存器区4组(32B). .. .. .. .. .. .. .. .. .RS1RS1、、RS0=RS0=010100H00H30H30H2FH2FH20H20H1FH1FH. .. .. .3737优质荟萃优质荟萃 片内数据存储器空间分布图通用RAM区 (80B) 位地址区 (16B)7FH7FH寄存器3组寄存器2组寄存器1组寄存器0组寄存器2组R7R6R5R4R3R2R1R010H10H11H11H12H12H13H13H14H14H15H15H16H16H17H17H寄存器区4组(32B). .. .. .. .. .. .. .. .. .RS1RS1、、RS0=RS0=101000H00H30H30H2FH2FH20H20H1FH1FH. .. .. .3838优质荟萃优质荟萃 片内数据存储器空间分布图通用RAM区 (80B) 位地址区 (16B)7FH7FH寄存器3组寄存器2组寄存器1组寄存器0组寄存器3组R7R6R5R4R3R2R1R018H18H19H19H1AH1AH1BH1BH1CH1CH1DH1DH1EH1EH1FH1FH寄存器区4组(32B). .. .. .. .. .. .. .. .. .RS1RS1、、RS0=RS0=111100H00H30H30H2FH2FH20H20H1FH1FH. .. .. .3939优质荟萃优质荟萃 片内数据存储器空间分布图通用RAM区 (80B) 位地址区 (16B)7FH7FH寄存器3组寄存器2组寄存器1组寄存器0组位地址区20H20H21H21H22H22H23H23H24H24H25H25H26H26H27H27H28H28H29H29H2AH2AH2BH2BH2CH2CH2DH2DH2EH2EH2FH2FH00H00H01H01H02H02H03H03H04H04H05H05H06H06H07H07H08H08H0FH0FH10H10H7FH7FH78H78H70H70H68H68H60H60H58H58H50H50H48H48H40H40H38H38H30H30H28H28H20H20H77H77H6FH6FH67H67H1FH1FH5FH5FH57H57H4FH4FH47H47H3FH3FH37H37H2FH2FH27H27H1FH1FH17H17H................................................D7 D6 D5 D4 D3 D2 D1 D0D7 D6 D5 D4 D3 D2 D1 D0. .. .. .. .. .. .. .. .. .00H00H30H30H2FH2FH20H20H1FH1FH. .. .. .4040优质荟萃优质荟萃 片内数据存储器空间分布图通用RAM区 (80B) 位地址区 (16B)00H00H30H30H2FH2FH20H20H1FH1FH7FH7FH寄存器3组寄存器2组寄存器1组寄存器0组通用RAM区. .. .. .. .. .. .. .. .. .. .. .. .共80个字节,作为一般的数据缓冲区并可设置堆栈区4141优质荟萃优质荟萃 三、特殊功能寄存器(21个字节)SFR (Special Functional Register) 见书P20表2-2①①与与ALUALU相关的(相关的(3 3个)个) A Register (AccA Register (Accumulatorumulator) ):: 累加器,通常用A A或ACCACC表示。

可字节寻址(E0H), 也可位寻址(E0H~E7H) 它是一个寄存器,而不是一个做加法的部件 在运算器做运算时其中一个数一定是在ACCACC中 B RegisterB Register:暂存寄存器 暂存寄存器在做乘、除法时放乘数或除数及结果 PSW (PPSW (Programrogram S Statustatus W Wordord ):): PSW是8位寄存器,用于作为程序运行状态的标志这是一个很重要的部件,里面存放了CPU工作时的很多状态,借此,我们可以了解CPU的当前状态,并作出相应的处理4242优质荟萃优质荟萃 它的各位功能如下: 当CPU进行各种逻辑操作或算术运算时,为反映操作或运算结果的状态,把相应的标志位置1或清0这些标志的状态,可由专门的指令来测试,也可通过指令来读出它为计算机确定程序的下一步进行方向提供依据PSW寄存器中各位的名称及位置如上所示,下面说明各标志位的作用D7H D6H D5H D4HD3HD2HD1HD0H CY AC F0 RS1 RS0 OV PPSW位地址4343优质荟萃优质荟萃 § CYCY:进位标志。

加减运算时,保存最高位进位、借位状态§ AC:半进位标志 例:78H+97H 0111 1000 +1001 0111 1 0000 1111 D7H D6H D5H D4HD3HD2HD1H D0H CY AC F0 RS1 RS0 OV PPSW位地址有进位CY=1没有半进位AY=04444优质荟萃优质荟萃 § RS1、RS0:工作寄存器组选择位 0 0 选择工作寄存器0组 0 1 选择工作寄存器1组 1 0 选择工作寄存器2组 1 1 选择工作寄存器3组§ P:奇偶校验位,它用来表示累加器A内容中二进制数位 “1”的个数的奇偶性若为奇数,则P=1,否则为0 例:某运算结果是78H(01111000),P=0D7H D6H D5H D4HD3HD2HD1H D0H CY AC F0 RS1 RS0 OV PPSW位地址4545优质荟萃优质荟萃 §F0:用户标志位作为软件标志,由编程人员决定 何时使用§OV:溢出标志位。

有符号数运算时,如果发生溢出,OV置“1”,否 则清“0”D7H D6H D5H D4HD3HD2HD1H D0H CY AC F0 RS1 RS0 OV PPSW位地址4646优质荟萃优质荟萃 ②②与指针相关的(与指针相关的(2 2个)个) SP (SSP (Stack tack P Pointerointer) ):: 堆栈指针,8位寄存器,用来指定堆栈的栈顶位置,初值为07H07H它是加1计数. DPTR (DDPTR (Dataata P Poinoint te er)r)((分成DPHDPH、、DPLDPL两个):): 数据指针可以用它来访问外部数据存储器中的任一单元,也可以作为通用寄存器来用,由我们自已决定如何使用4747优质荟萃优质荟萃 P0P0、、P1P1、、P2P2、、P3P3:: 四个并行输入四个并行输入/ /输出口的寄存器它里面的内容对应着管脚输出口的寄存器它里面的内容对应着管脚的输出SCON (SSCON (Serialerial C Controlontrol R Registeregister) )SBUFSBUF (S(Serial Date erial Date BufBuffer) fer) PCON (PPCON (Powerower C Controlontrol R Registeregister) ) ③③与端口相关的(与端口相关的(7 7个)个)④④与定时与定时/ /计数器相关的(计数器相关的(6 6个)个)TMOD (TTMOD (Timer/Counterimer/Counter Mod Mode Registere Register) ) 定时器工作模式寄存器。

定时器工作模式寄存器TCON (TTCON (Timer/Counter imer/Counter ConControl Registertrol Register) ) 定时器控制寄存器定时器控制寄存器TH0TH0、、TL0 TL0 、、TH1TH1、、TL1TL1::分别是分别是T0T0、、T1T1的记数初值寄存器的记数初值寄存器4848优质荟萃优质荟萃 IP (IIP (Interrupt nterrupt P Priorityriority RegisterRegister) ) IE (IIE (Interruptnterrupt E Enable Registernable Register) ) ③③与中断相关的(与中断相关的(2 2个)个)课堂练习及思考题(P30)题2、7、8、10补充题:1.下列是关于8031单片机存储空间的描述,分析其对错: a.a.特殊功能寄存器容量为21B, 没有位地址 b.b.外部数据存储器容量可达64kB, 字节地址和位地址范围均为0000H~FFFFH c. c.程序存储器容量可达64kB, 字节地址和位地址范围均为0000H~FFFFH4949优质荟萃优质荟萃 d.d. 内部数据存储器容量为128B, 字节地址和位地址范围均为00H~7FHe.特殊功能寄存器容量为21B, 有一部分特殊功能寄存器具有位地址。

f.f.程序存储器容量可达64kB,地址范围为0000H~FFFFH 2.MCS-51单片机的工作寄存器组如何选择?若PSW 的RS1、RS0位的内容是01,那么此时工作寄存器R1的字节地址是多少? 3.MCS-51内部RAM的寄存器区一共有多少个存储单元?分为多少组?每组有多少个存储单元?分别以什么作为寄存器名?5050优质荟萃优质荟萃 4.8051存储空间的结构与8086/8088有什么不同?它的物理结构是怎样的?5.MCS-51单片机的内部数据存储器容量是多少?它有 什么特点?5151优质荟萃优质荟萃 §2.3 MCS-51单片机的并行端口结构与操作 8051单片机有4 4个I/O端口,每个端口都是8位准双向口,共占3232根引脚每个端口都包括一个锁存器(即专用寄存器P0P0~~P3P3)、一个输出驱动器和输入缓冲器通常把4个端口笼统地表示为P0P0~~P3P35252优质荟萃优质荟萃 在无片外扩展存储器的系统中,这4个端口的每一位都可以作为准双向通用I/O端口使用在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。

8051单片机4个I/O端口线路设计的非常巧妙,学习I/O端口逻辑电路,不但有利于正确合理地使用端口,而且会给设计单片机外围逻辑电路有所启发下面简单介绍一下输入/输出端口结构2.3.1 P02.3.1 P0口和口和P2P2的结构的结构5353优质荟萃优质荟萃 下图为P0口的某位P0.n(n=0~7)结构图,它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路及控制电路组成从图中可以看出,P0口既可以作为I/O用,也可以作为地址/数据线用D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/ /数据数据控制控制VCCT1T2P0P0口引口引脚脚一、一、P0P0口的结构口的结构5454优质荟萃优质荟萃 1、P0口作为普通I/O口①①输出时输出时CPU发出控制电平“0 0”封锁“与”门,将输出上拉场效应管T1截止,同时使多路开关MUX把锁存器与输出D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/ /数据数据控制控制VCCT1T2P0P0口引口引脚脚5555优质荟萃优质荟萃 驱动场效应管T2栅极接通。

故内部总线与P0口同相由于输出驱动级是漏极开路电路,若驱动NMOS或其它拉流负载时,需要外接上拉电阻P0的输出级可驱动8个LSTTL负载D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/ /数据数据控制控制VCCT1T2P0P0口引口引脚脚5656优质荟萃优质荟萃 ② ② 输入时输入时--------分分读引脚读引脚或或读锁存器读锁存器读引脚:读引脚:由传送指令由传送指令(MOVMOV)实现;实现; 下下面一个缓冲器用于读端口面一个缓冲器用于读端口引脚引脚数据,当执行一条数据,当执行一条由端口输入的指令时,读脉冲把该三态缓冲器打开,由端口输入的指令时,读脉冲把该三态缓冲器打开,这样端口引脚上的数据经过缓冲器读入到内部总线这样端口引脚上的数据经过缓冲器读入到内部总线D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/ /数据数据控制控制VCCT1T2P0P0口引口引脚脚5757优质荟萃优质荟萃 D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/ /数据数据控制控制VCCT1T2P0P0口引口引脚脚② ② 输入时输入时--------分分读引脚读引脚或或读锁存器读锁存器读锁存器:读锁存器:有些指令有些指令 如:如:ANL P0ANL P0,,A A称为称为“读读- -改改- -写写” 指令,需要读锁存器。

指令,需要读锁存器 上上面面一个缓冲器用于读端口一个缓冲器用于读端口锁存器锁存器数据5858优质荟萃优质荟萃 **原因:如果此时该端口的负载恰是一个晶体管基极,且原端口输出值为1,那么导通了的PN结会把端口引脚高电平拉低;若此时直接读端口引脚信号,将会把原输出的“1”电平误读为“0”电平现采用读输出锁存器代替读引脚,图中,上面的三态缓冲器就为读锁存器Q端信号而设,读输出锁存器可避免上述可能发生的错误D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/ /数据数据控制控制VCCT1T2P0P0口引口引脚脚5959优质荟萃优质荟萃 D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/ /数据数据控制控制VCCT1T2P0P0口引口引脚脚准双向口: 从图中可以看出,在读入端口数据时,由于输出驱动FET并接在引脚上,如果T2导通,就会将输入的高电平拉成低电平,产生误读所以在端口进行输入操作前,应先向端口锁存器写“1”,使T2截止,引脚处于悬浮状态,变为高阻抗输入。

这就是所谓的准双向口 6060优质荟萃优质荟萃 2 2 2 2、、、、P0P0P0P0作为作为作为作为地址地址/ /数据总线数据总线 在系统扩展时,在系统扩展时,P0P0端口作为端口作为地址地址/ /数据总线数据总线使用时,使用时,分为:分为:§ P0P0引脚引脚输出地址输出地址/ /数据数据信息 D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/ /数据数据控制控制VCCT1T2P0P0口引口引脚脚6161优质荟萃优质荟萃 CPU CPU发出控制电平发出控制电平“1 1”,打开,打开“与与”门,又使多路开门,又使多路开关关MUXMUX把把CPUCPU的的地址地址/ /数据总线数据总线与与T2T2栅极反相接通,输出地栅极反相接通,输出地址或数据由图上可以看出,上下两个址或数据由图上可以看出,上下两个FETFET处于反相,构处于反相,构成了推拉式的输出电路,其负载能力大大增强成了推拉式的输出电路,其负载能力大大增强D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/ /数据数据控制控制VCCT1T2P0P0口引口引脚脚2 2 2 2、、、、P0P0P0P0作为作为作为作为地址地址/ /数据总线数据总线6262优质荟萃优质荟萃 § P0 P0引脚引脚输出地址输出地址/ /输入数据输入数据 输入信号是从引脚通过输入缓冲器进入输入信号是从引脚通过输入缓冲器进入内部总线内部总线。

此时,此时,CPUCPU自动使自动使MUXMUX向下,并向向下,并向P0P0口写口写“1 1”,,“读读引脚引脚”控制信号有效,下面的缓冲器打开,外部数据读入控制信号有效,下面的缓冲器打开,外部数据读入内部总线内部总线2 2 2 2、、、、P0P0P0P0作为作为作为作为地址地址/ /数据总线数据总线----真正的双向口D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/ /数据数据控制控制VCCT1T2P0P0口引口引脚脚6363优质荟萃优质荟萃 二、二、P2P2的内部结构的内部结构1.P21.P2口作为口作为普通普通I/OI/O口口D QCLK QMUXP2.n读锁存器读锁存器内部总线内部总线写锁存器写锁存器读引脚读引脚地址地址控制控制VCCRTP2口引脚CPUCPU发出控制电平发出控制电平“0 0” ,使多路开关,使多路开关MUXMUX倒向锁存倒向锁存器器输出输出Q Q端,构成一个准双向口其功能与端,构成一个准双向口其功能与P1P1相同6464优质荟萃优质荟萃 2.P22.P2口作为口作为地址总线地址总线 在系统扩展片外在系统扩展片外程序存储器程序存储器扩展数据存储器且容量超过扩展数据存储器且容量超过256B 256B ( (用用MOVX @DPTRMOVX @DPTR指令指令) )时,时,CPUCPU发出控制电平发出控制电平“1 1”,使多路,使多路开关开关MUXMUX倒倒内部地址线内部地址线。

此时,此时,P2P2输出高输出高8 8位地址D QCLK QMUXP2.n读锁存器读锁存器内部总线内部总线写锁存器写锁存器读引脚读引脚地址地址控制控制VCCRTP2口引脚6565优质荟萃优质荟萃 2.3.2 P12.3.2 P1口、口、P3P3口的内部结构口的内部结构 ①①P1口的一位的结构 它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成----准双向口D QD QCLK QCLK QP1.nP1.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚VCCRT TP1口引脚6666优质荟萃优质荟萃 ②P3的内部结构D QD QCLK QCLK QP3.nP3.n读读锁存器锁存器内部总线内部总线写锁存器写锁存器读读引脚引脚VCCRT TP3口引脚第二第二输入功能输入功能第二第二输出功能输出功能一、作为通用I/O口与P1口类似----准双向口(W=1)W6767优质荟萃优质荟萃 ②P3的内部结构D QD QCLK QCLK QP3.nP3.n读读锁存器锁存器内部总线内部总线写锁存器写锁存器读读引脚引脚VCCRT TP3口引脚第二第二输入功能输入功能第二第二输出功能输出功能二、P3P3P3P3第二功能(Q=1)此时引脚部分输入(Q=1、W=1) ,部分输出(Q=1、W输出) 。

W6868优质荟萃优质荟萃 P3P3P3P3第二功能各引脚功能定义:P3.0:RXD串行口输入P3.1:TXD串行口输出P3.2:INT0外部中断0输入P3.3:INT1外部中断1输入P3.4:T0定时器0外部输入P3.5:T1定时器1外部输入P3.6:WR外部写控制P3.7:RD外部读控制6969优质荟萃优质荟萃 课堂复习补充题:1.MCS-51单片机的哪些端口,有两种功能?分别是什么功能?2.在系统扩展片外程序存储器时,P2口是否可以再作为通用I/O口?7070优质荟萃优质荟萃 3. 3. 某控制程序有如下片段:某控制程序有如下片段: MOV P1,#00H … MOV A,P1执行后结果不正常,请问为什么会出现这种情况,如执行后结果不正常,请问为什么会出现这种情况,如何修改程序,才能保证输入的数据正常?何修改程序,才能保证输入的数据正常?MOV P1,#0FFH7171优质荟萃优质荟萃 §2.4 MCS-51单片机片外总线和复位2.4.1 2.4.1 MCS-51单片机片外总线配置地址总线: P2口(高8位A15~A8)和P0口(低8位A7~A0) 可寻址64KB。

数据总线: P0口(D7~D0)控制总线: ALE、PSEN、WR、RD7272优质荟萃优质荟萃 8051地址锁存器 ALEPSEN WR RD地址总线数据总线控制总线7373优质荟萃优质荟萃 2.4.2 2.4.2 MCS-51单片机复位(RST高电平2个机器周期) 任何单片机在工作之前都要有个复位的过程,复位是什么意思呢?对单片机来说,是程序还没有开始执行,是在做准备工作----初始状态显然,准备工作不需要太长的时间,复位需要不少于24个时钟周期的时间就可以了 如何进行复位呢?只要在单片机的RST引脚上加上高电平,就可以了为了达到这个要求,可以用很多种方法,见图7474优质荟萃优质荟萃 一、复位电路(两种)80519RSTCR+5V上电复位电路复位后,PC指向0000H,使单片机从起始地址0000H开始执行程序7575优质荟萃优质荟萃 一、复位电路(两种)80519RSTCR+5VK上电且开关复位7676优质荟萃优质荟萃 二、复位后单片机的状态复位后各寄存器的状态PC 0000H(程序入口) P0、P1、P2、P3 0FFH (可以直接输入) SP 07H (栈底已经设好)PSW 00H (选择0组寄存器)其余大部分都是07777优质荟萃优质荟萃 2.4.3 2.4.3 MCS-51单片机最小系统最小系统----最少外部电路条件下,可以独立工作 的单片机系统。

80519RSTCR+5VK7878优质荟萃优质荟萃 §2.5 MCS-51单片机片时序CPUCPU时序及有关概念时序及有关概念p14p14~1515 计算机工作要有严格的时序事实上,计算机更象一个大钟,什么时候分针动,什么时候秒针动,什么时候时针动,都有严格的规定,一点也不能乱基本时序单位: 7979优质荟萃优质荟萃 3.机器周期:一个机器周期包括12个时钟周期 4.指令周期:执行一条指令的时间1.振荡周期:晶体振荡器的周期2.状态周期:振荡周期2分频,也称时钟周期 INTEL对每一条指令都给出了它的指令周期数, MCS-51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较慢,得要2个机器周期,还有两条指令要4个机器周期才行 8080优质荟萃优质荟萃 §3.1 概述概述7 7种寻址方式,种寻址方式,111111条指令条指令字节数字节数运算速度运算速度单字节指令:单字节指令:4949条条双字节指令:双字节指令:4545条条三字节指令:三字节指令:1717条条单周期指令:单周期指令:6464条条双周期指令:双周期指令:4545条条四周期指令:四周期指令: 2 2 条条第三章 MCS-51指令系统 Instruction Set8181优质荟萃优质荟萃 功能功能数据传送类:数据传送类:2929条条算术运算类:算术运算类:2424条条逻辑运算类:逻辑运算类:2424条条控制转移类:控制转移类:1717条条位操作类:位操作类: 1717条条8282优质荟萃优质荟萃 常用符号Rn:工作寄存器中的寄存器Rn、R1…R7之一,Ri:工作寄存器中的寄存器R0或R1#data:8位立即数#data16:16位立即数direct:片内RAM或SFR的地址(8位)@间接寻址寄存器Bit:片内RAM或SFR的位地址addr11:11位目的地址addr16:16位目的地址8383优质荟萃优质荟萃 rel: 补码形式的8位地址偏移量。

偏移范围为-128~127/:位操作指令中,该位求反后参与操作,不影响该位X:片内RAM的直接地址或寄存器(X):相应地址单元中的内容→:箭头左边的内容送入箭头右边的单元内8484优质荟萃优质荟萃 §§3.2 3.2 寻址方式寻址方式3.2.1 3.2.1 立即寻址立即寻址Immediate AddressingImmediate Addressing 操作数就包含在指令代码中,在操作码之后,称为操作数就包含在指令代码中,在操作码之后,称为立即数,用立即数,用“##”表示 MCS-51MCS-51 如:如:MOV P1, MOV P1, #80H#80H MOV R7, MOV R7, #0F5H#0F5H MOV DPTR MOV DPTR,,#1245H#1245H8086/80888086/8088MOV ALMOV AL,,80H80HMOV ALMOV AL,,0F5H0F5HMOV BXMOV BX,,1245H1245H操作数存在程序存储器中8585优质荟萃优质荟萃 3.2.2 3.2.2 直接寻址直接寻址 Direct AddressingDirect Addressing直接使用数所在单元的直接使用数所在单元的地址地址找到了操作数,所以称找到了操作数,所以称这种方法为这种方法为直接寻址直接寻址。

操作数在操作数在SFRSFR、、内部内部RAMRAM、、位地址位地址空间如:如: MOV AMOV A,,00H00H MOV CMOV C,,60H60H MOV AMOV A,,0F0H0F0H8086/8088CPUMOV AL,,[2000H]8686优质荟萃优质荟萃 3.2.3 寄存器寻址寄存器寻址 Register Addressing对选定的工作寄存器对选定的工作寄存器R0R0~~R7R7、累加器、累加器A A、通用寄存器、通用寄存器B B、、地址寄存器地址寄存器DPTRDPTR中的数进行操作中的数进行操作 例:例:MOV AMOV A,,R0R0;;将将R0R0工作寄存器中的数据送到累加器工作寄存器中的数据送到累加器A A中去提一个问题:提一个问题:我们知道,工作寄存器就是内存单元我们知道,工作寄存器就是内存单元的一部分,如果我们选择工作寄存器组的一部分,如果我们选择工作寄存器组0 0,则,则R0R0就就是是RAMRAM的的00H00H单元,那么这样一来,单元,那么这样一来,MOV AMOV A,,00H00H 和和 MOV AMOV A,,R0R0不就没什么区别了吗?不就没什么区别了吗?MOV AL,,BL ((8086CPU的寄存器寻址方式)的寄存器寻址方式)8787优质荟萃优质荟萃 的确,这两条指令执行的结果是完全相同的,的确,这两条指令执行的结果是完全相同的,都是将都是将00H00H单元中的内容送到单元中的内容送到A A中去,但是执行的过中去,但是执行的过程不同,执行第一条指令需要程不同,执行第一条指令需要2 2个机器周期,而第二个机器周期,而第二条则只需要条则只需要1 1个机器周期,第一条指令变成最终的目个机器周期,第一条指令变成最终的目标码要两个字节(标码要两个字节(E5H 00HE5H 00H),而第二条则只要一个),而第二条则只要一个字节(字节(E8E8H H)就可以了。

就可以了8888优质荟萃优质荟萃 3.2.4 寄存器间接寻址寄存器间接寻址 Register Indirect Addressing把地址放在另外一个寄存器中,根据这个寄存器中的数值把地址放在另外一个寄存器中,根据这个寄存器中的数值决定该到哪个单元中取数据决定该到哪个单元中取数据 §R0R0,,R1-R1----8---8位地址,位地址,片内片内低低128128字节或字节或片外片外§DPTRDPTR----16----16位,片外位,片外64KB64KBv MCS-51MCS-51如:如: MOV AMOV A,,@ @R0R0MOVX AMOVX A,,@ @R0R0MOVX AMOVX A,,@ @DPTRDPTRv 8086/8088CPUMOV AL,,[BX]MOV AX,,[SI]操作数在片内RAM中操作数在片外RAM中操作数在片外RAM中8989优质荟萃优质荟萃 以以DPTRDPTR或或PCPC为基址寄存器,累加器为基址寄存器,累加器A A为变址寄存器把两为变址寄存器把两者内容相加,结果作为操作数的地址者内容相加,结果作为操作数的地址 常用于查表操作。

常用于查表操作v MCS-51MCS-51 MOVCMOVC A A,, @ @A+DPTRA+DPTR ;;(A+DPTR) →A (A+DPTR) →A MOVCMOVC A A,, @ @A+PCA+PC;; PC+1 →PCPC+1 →PC,,(A+PC)→A(A+PC)→A3.2.5 变址寻址变址寻址( (基址基址+ +变址变址) )Base-Register-plus-Index-Register-Indirect Addressingv 8086/8088CPU MOV AL,,[BX+SI] MOV AX,,[BP+DI]操作数在程序存储器中9090优质荟萃优质荟萃 E0A程序存储区2040H 9320E0H 472041H …… …DPH 20DPL 00ALU如:MOVC A,@A+DPTR设DPTR=2000H,A=E0H20E0H47指令代码9191优质荟萃优质荟萃 E0A程序存储区ALU如:MOVC A,@A+PC设A=E0H2121H452040H 832121H 452041H …… …2120H 47当前PC指令代码9292优质荟萃优质荟萃 3.2.6 相对寻址相对寻址 将将PCPC中的当前内容与指令中的当前内容与指令第二字节给出的数第二字节给出的数相加,结相加,结 果作为跳转指令的转移地址(转移目的地址)。

果作为跳转指令的转移地址(转移目的地址) PCPC中的中的当前当前内容称为内容称为基地址基地址(本指令后的字节地址)(本指令后的字节地址) 指令第二字节给出的数据称为指令第二字节给出的数据称为偏移量偏移量,,1 1字节带符号数字节带符号数. . 常用于跳转指令常用于跳转指令 如如: JC 23H: JC 23H 若若C=0C=0,不跳转;,不跳转; C=1C=1,跳转,跳转. .Relative Addressing改变PC9393优质荟萃优质荟萃 程序存储区ALU如:JC 231025H1000H 401025H 451001H 23… …1024H 471002H 3023H1002H指令代码当前PC9494优质荟萃优质荟萃 对片内对片内RAMRAM的的位寻址区位寻址区和某些可和某些可位寻址位寻址的特殊功的特殊功能寄存器进行位操作时的寻址方式能寄存器进行位操作时的寻址方式 如如: SETB 3DH; : SETB 3DH; 将将27H.527H.5位置位置1 1 CLR C CLR C ;;CyCy位清位清0 08086/8088CPU 8086/8088CPU 无此寻址方式无此寻址方式3.2.7 3.2.7 位寻址位寻址 Bit Addressing操作数在片内RAM位地址区或SFR某些位中9595优质荟萃优质荟萃 寻址方式涉及的存储器空间寻址方式涉及的存储器空间寻址方式寻址方式寻址方式寻址方式寻址空间(操作数存放空间)寻址空间(操作数存放空间)寻址空间(操作数存放空间)寻址空间(操作数存放空间)立即寻址立即寻址立即寻址立即寻址程序存储器程序存储器程序存储器程序存储器直接寻址直接寻址直接寻址直接寻址片内片内片内片内RAMRAMRAMRAM低低低低128128128128字节、字节、字节、字节、SFRSFRSFRSFR寄存器寻址寄存器寻址寄存器寻址寄存器寻址工作寄存器工作寄存器工作寄存器工作寄存器R0R0R0R0~~~~R7,A,B,DPTRR7,A,B,DPTRR7,A,B,DPTRR7,A,B,DPTR寄存器间接寻址寄存器间接寻址寄存器间接寻址寄存器间接寻址片内片内片内片内RAM:@R0,@R1,SPRAM:@R0,@R1,SPRAM:@R0,@R1,SPRAM:@R0,@R1,SP片外片外片外片外RAM:@R0 ,@R1,@DPTRRAM:@R0 ,@R1,@DPTRRAM:@R0 ,@R1,@DPTRRAM:@R0 ,@R1,@DPTR变址寻址变址寻址变址寻址变址寻址程序存储器程序存储器程序存储器程序存储器:@A+PC,@A+DPTR:@A+PC,@A+DPTR:@A+PC,@A+DPTR:@A+PC,@A+DPTR相对寻址相对寻址相对寻址相对寻址程序存储器程序存储器程序存储器程序存储器256256256256字节范围内字节范围内字节范围内字节范围内:PC+:PC+:PC+:PC+偏移量偏移量偏移量偏移量位寻址位寻址位寻址位寻址片内片内片内片内RAMRAMRAMRAM的位寻址区的位寻址区的位寻址区的位寻址区(20H(20H(20H(20H~~~~2FH2FH2FH2FH字节地址字节地址字节地址字节地址) ) ) )某些可位寻址的某些可位寻址的某些可位寻址的某些可位寻址的SFRSFRSFRSFR9696优质荟萃优质荟萃 §§3.3 3.3 数据传送类指令数据传送类指令((2929条)条) Data Transfer InstructionData Transfer Instruction MCS-51 MCS-51 助记符:助记符: 8086/8088 8086/8088 助记符:助记符: MOVMOV、、MOVXMOVX、、MOVC MOVC MOVMOV XCH XCH、、XCHDXCHD、、SWAP SWAP XCHGXCHG PUSH PUSH、、POP POP PUSHPUSH、、POPPOPv 源操作数寻址方式(源操作数寻址方式(5 5种)种):: 立即寻址、直接寻址、寄存器寻址、立即寻址、直接寻址、寄存器寻址、 寄存器间接寻址、变址寻址。

寄存器间接寻址、变址寻址v 目的操作数寻址方式(目的操作数寻址方式(3 3种)种):: 直接寻址、寄存器寻址、寄存器间接寻址直接寻址、寄存器寻址、寄存器间接寻址 除了目的操作数为除了目的操作数为ACCACC的指令影响奇偶标志的指令影响奇偶标志P P外,一般不影响外,一般不影响标志位9797优质荟萃优质荟萃 3.3.1 3.3.1 以累加器为目的操作数的指令以累加器为目的操作数的指令((4 4条)条) MOV AMOV A,,RnRn ;;Rn→ARn→AMOV AMOV A,,directdirect;;(direct)→A(direct)→AMOV AMOV A,,@ @RiRi ;;(R(Ri i)→A)→AMOV AMOV A,,# #datadata;;data→Adata→A 将将源操作数指定内容源操作数指定内容送到送到A A中3.3.2 3.3.2 以寄存器以寄存器RnRn为目的操作数的指令为目的操作数的指令 ((3 3条)条) MOV Rn MOV Rn,,A A     MOV RnMOV Rn,,directdirect     MOV RnMOV Rn,,# #datadata 这组指令功能是把这组指令功能是把源操作数指定源操作数指定的内容送入当前工作寄存器,的内容送入当前工作寄存器,源操作数不变。

源操作数不变9898优质荟萃优质荟萃 3.3.3 3.3.3 以直接地址为目的操作数的指令以直接地址为目的操作数的指令((5 5条)条)MOV directMOV direct,,A AMOV directMOV direct,,RnRnMOV direct1MOV direct1,,direct2direct2MOV directMOV direct,,@ @RiRiMOV directMOV direct,,# #datadata 这组指令功能是把这组指令功能是把源操作数指定源操作数指定的内容送入由直接的内容送入由直接地址指出的片内存储单元地址指出的片内存储单元RAMRAM中例:例: MOV 20H,AMOV 20H,R1MOV 20H,30HMOV 20H,@R1MOV 0A0H,#34HMOV P2,#34H9999优质荟萃优质荟萃 3.3.4 以间接地址为目的操作数的指令(3条)MOV MOV @ @RiRi,,A A ;A →(Ri i) MOV MOV @ @RiRi,,directdirect;(direct) →(Ri i)MOV MOV @ @RiRi,,#data#data; data →(Ri i) 功能:把源操作数指定的内容送入以功能:把源操作数指定的内容送入以R0R0或或R1R1为地址为地址 指针的片内存储单元指针的片内存储单元RAMRAM中。

中例:例: MOV @R0MOV @R0,,A AMOV @R1MOV @R1,,20H20HMOV @R0MOV @R0,,#34H#34H100100优质荟萃优质荟萃 3.3.5 3.3.5 十六位数的传递指令十六位数的传递指令(1条)MOV DPTRMOV DPTR,,# #data16data1680518051是一种是一种8 8位机,这是唯一的一条位机,这是唯一的一条1616位位立即数传递指立即数传递指令功能:将一个令功能:将一个1616位的立即数送入位的立即数送入DPTRDPTR中去其中中去其中高高8 8位送入位送入DPHDPH,低,低8 8位送入位送入DPLDPL 例:例:MOV DPTRMOV DPTR,,#1234H#1234H执行完了之后执行完了之后DPHDPH中的值为中的值为12H12H,,DPLDPL中的值为中的值为34H34H如果我们分别向如果我们分别向DPHDPH,,DPLDPL送数,则结果也一样送数,则结果也一样 如下面两条指令:如下面两条指令: MOV DPHMOV DPH,,#35H#35H MOV DPL MOV DPL,,#12H#12H。

则就相当于执行了则就相当于执行了 MOV DPTRMOV DPTR,,#3512H#3512H101101优质荟萃优质荟萃 3.3.6 3.3.6 累加器累加器A A与片外与片外RAMRAM之间的数据传递类指令之间的数据传递类指令(4(4条条) ) MOVX A,@Ri MOVX @Ri,A MOVX A,@DPTR MOVX @DPTR,A说明: 1.在51中,与外部存储器RAM打交道的只可以是A累加器所有需要送入外部RAM的数据必需要通过A送去,而所有要读入的外部RAM中的数据也必需通过A读入 在此我们可以看出内外部RAM的区别了,内部RAM间可以直接进行数据的传递,而外部则不行 比如,要将外部RAM中某一单元(设为0100H单元的数据)送入另一个单元(设为0200H单元),也必须先将0100H单元中的内容读入A,然后再送到0200H单元中去102102优质荟萃优质荟萃 2. 2.要读或写外部的要读或写外部的RAMRAM,当然也必须要知道,当然也必须要知道RAMRAM的地址,的地址,在后两条指令中,地址是被直接放在在后两条指令中,地址是被直接放在DPTRDPTR中的。

而前两条中的而前两条指令,由于指令,由于RiRi(即(即R0R0或或R1R1)只是)只是8 8位的寄存器,所以只提位的寄存器,所以只提供低供低8 8位地址高位地址高8 8位地址由位地址由P2P2口口来提供 3.3.使用时应先将要读或写的地址送入使用时应先将要读或写的地址送入DPTRDPTR或或RiRi中,然后中,然后再用读写命令再用读写命令 例例:将外部:将外部RAMRAM中中100H100H单元中的内容送入外部单元中的内容送入外部RAMRAM中中200H200H单元中MOV DPTRMOV DPTR,,#0100H#0100HMOVX AMOVX A,,@DPTR@DPTRMOV DPTRMOV DPTR,,#0200H#0200HMOVX @DPTRMOVX @DPTR,,A A103103优质荟萃优质荟萃 3.3.7 读程序存储器指令读程序存储器指令((2条)条) MOVC A,@A+DPTR MOVC A,@A+PC 本组指令是将ROM中的数送入A中本组指令也被称为查表指令,常用此指令来查一个已做好在ROM中的表格说明:查找到的结果被放在A中,因此,本条指令执行前后,A 中的值不一定相同。

例:有一个数在R0中,要求用查表的方法确定它的平方值(此 数的取值范围是0-5)MOV DPTR,#100H MOV A,R0 MOVC A,@A+DPTR . …ORG 0100H(用伪指令ORG指示随后的指令从这一地址开始 存放)DB 0,1,4,9,16,25如果如果R0中的值为中的值为2,,则最终地址为则最终地址为100H+2为为102H,,到到102H单元中找到单元中找到的是的是4104104优质荟萃优质荟萃 3.3.8 堆栈操作堆栈操作((2 2条)条)PUSH directPUSH direct ;;SPSP+1,(SP)(direct)POP directPOP direct ; ; (direct)  (SP), SPSP-1第一条为压入指令,就是将direct中的内容送入堆栈中,第二条为弹出指令,就是将堆栈中的内容送回到direct中例例:: MOV SPMOV SP,,#5FH#5FH MOV A MOV A,,#100#100 MOV B MOV B,,#20#20 PUSH ACCPUSH ACC PUSH B PUSH B 则执行第一条PUSH ACC指令是这样的:将SP中的值加1,即变为60H,然后将A中的值送到60H单元中,因此执行完本条指令后,内存60H单元的值就是100,同样,执行PUSH B时,是将SP+1,即变为61H,然后将B中的值送入到61H单元中,即执行完本条指令后,61H单元中的值变为20。

105105优质荟萃优质荟萃 3.3.9 3.3.9 交换指令交换指令((5 5条)条)XCH AXCH A,,RnRn ;;A←→RnXCH AXCH A,, directdirect ;;A←→(direct)XCH AXCH A,, @ @RiRi ;;A←→(Ri)XCHD AXCHD A,, @ @RiRi ;;A.3~A.0←→(Ri).3~(Ri).0SWAP ASWAP A ;;A.3~A.0←→A.7~A.4例:例: 已知已知A A中的内容为中的内容为34H34HMOV R6MOV R6,, #29H#29HXCH AXCH A,, R6R6SWAP ASWAP AXCH AXCH A,, R6R6 XCHD AXCHD A,, @R0@R0;;R6=29H;A=29H,R6=34H;A=92H;A=34H,R6=92H;A=36H,(R0)=54H (设原来R0;指向的单元的内容为56H)106106优质荟萃优质荟萃 (40H)= H 50H = H A= H (41H)= H 51H= H R0= H 课堂练习1.设:内部RAM中,(40H)=50H,(41H)=60H,(50H)=30H, (51H)=70H,执行下列片段后:a.MOV R0,40H MOV A,@R0 INC R0 MOV @R0,Ab. MOV R0,#40H MOV A,@R0 INC @R0 MOV A,@R0;R0=50H;R0=50H;A=30H;A=30H;R0=51H;R0=51H;(51H)=30H;(51H)=30H;R0=40H;R0=40H;A=50H;A=50H;(40)=51H;(40)=51H;A=51H;A=51H107107优质荟萃优质荟萃 2 2. .给出每条指令执行后的结果给出每条指令执行后的结果 MOV 23H,#30HMOV 12H,#34HMOV R0,#23HMOV R7,12HMOV R1,#12HMOV A,@R0MOV 34H,@R1MOV 45H,34HMOV DPTR,#6712HMOV 12H,DPHMOV R0,DPLMOV A,@R0;(23H)=30H;(12H)=34H;R0=23HXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXDPHDPHDPLDPL45H45H34H34H23H23H12H12HR7R7R1R1R0R0XXXXXXXXXXXXXXXX30303434XXXXXXXX2323XXXXXXXXXXXXXXXX30303434343412122323676712123434343430303434343412122323676712123434343430306767343412121212;R7=34H;R1=12H;A=30H;(34H)=34H;(45H)=34H;DPTR=6712H;(12H)=6767H;R0=1212H;A=6767H内部RAM108108优质荟萃优质荟萃 3.利用传送类指令并用多种方法将内部RAM中50H单元的内容与40H单元的内容互换。

109109优质荟萃优质荟萃 §§3.4 3.4 算术运算类指令算术运算类指令( (2424条条) ) Arithmetic OperationsArithmetic Operations 主要对主要对8 8位无符号数;也可用于带符号数运算位无符号数;也可用于带符号数运算 包括:加、减、乘、除、加包括:加、减、乘、除、加1 1、减、减1 1运算指令运算指令 影响影响PSWPSW有关位 110110优质荟萃优质荟萃 3.4.1 加法指令ADD AADD A,,# #datadata ;; A+data→AADD AADD A,,direct direct ;; A+(direct )→AADD AADD A,,RnRn ;; A+Rn→AADD AADD A,,@ @Ri Ri ;; A+(Ri)→A用途:用途:将将A A中的值与源操作数所指内容相加,最终结果中的值与源操作数所指内容相加,最终结果 存在存在A A中1.不带进位位的加法指令((4 4条)条)111111优质荟萃优质荟萃 例例1 1::ADD AADD A,,#47H#47HADD AADD A,,34H34HADD AADD A,,R7R7ADD AADD A,,@R0@R0例例2 2:: MOV AMOV A,,#0AEH#0AEH ADD A ADD A,,#81H#81H则执行完本条指令后,则执行完本条指令后,A A中的值为中的值为2FH;2FH;C=1C=1, ,AC=0AC=0, ,OV=1OV=1, ,P=1P=1。

对无符号数:结果为对无符号数:结果为1 12FH;2FH;112112优质荟萃优质荟萃 2.带进位位的加法指令((4 4条)条)ADDC AADDC A,,RnRn;; A A++RnRn++CYCY→A→AADDC AADDC A,,directdirect ;; A A++(direct )(direct )++CY→ACY→AADDC AADDC A,,@ @RiRi;; A A++(Ri)(Ri)++CY→ACY→AADDC AADDC A,,# #datadata;; A A++datadata++CY→ACY→A用途:用途:将将A A中的值和其后面的值以及进位位中的值和其后面的值以及进位位C C中的值相加,中的值相加, 最终结果存在最终结果存在A A,常用于多字节数运算中常用于多字节数运算中说明:说明:由于由于5151单片机是一种单片机是一种8 8位机,所以只能做位机,所以只能做8 8位的数学位的数学运算,但运算,但8 8位运算的范围只有位运算的范围只有0 0~255255,这在实际工作中是不,这在实际工作中是不够的,因此就要进行扩展,一般是将够的,因此就要进行扩展,一般是将2 2个个8 8位位( (两字节两字节) )的数的数学运算合起来,成为一个学运算合起来,成为一个1616位的运算,这样,可以表达的位的运算,这样,可以表达的数的范围就可以达到数的范围就可以达到0 0~6553565535。

113113优质荟萃优质荟萃 例: 先做先做67H+A0H=107H67H+A0H=107H,而,而1 107H07H显然超过了显然超过了0FF0FFH H,因此最终保存在,因此最终保存在A A中的是中的是07H07H,而,而1 1则到了则到了PSWPSW中中的的CYCY位了换言之,位了换言之,CYCY就相当于是就相当于是100H100H 然后再做然后再做10H + 30H + 10H + 30H + CYCY,结果是,结果是41H41H,所以,所以最终的结果是最终的结果是4107H4107H1067H+30A0H1067H+30A0H0001 0000 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H1067H30A0H30A0H4107H4107H114114优质荟萃优质荟萃 设:1067H存在R1R0中, 30A0H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中MOV A,R0ADD A,R2 ;R0+R2→→A和CYMOV R4,AMOV A,R1ADDC A,R3 ;R1+R3+CY→→A和CYMOV R5,A115115优质荟萃优质荟萃 又例: 先做先做67H+20H=87H67H+20H=87H,没有超过,没有超过0FF0FFH H,因此最终,因此最终保存在保存在A A中的是中的是87H87H,而,而PSWPSW中的中的CY=0CY=0。

然后再做然后再做10H + 30H + 10H + 30H + CYCY,结果是,结果是40H40H,所以,所以最终的结果是最终的结果是4087H4087H1067H+3020H1067H+3020H0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H1067H3020H3020H4087H4087H设:1067H存在R1R0中, 3020H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中116116优质荟萃优质荟萃 3. 加1指令((5 5条)条)INC AINC A;;A+1A+1→A→A,影响,影响P P标志标志INC RnINC Rn;;Rn+1→RnRn+1→RnINC directINC direct;;(direct)+1→(direct)(direct)+1→(direct)INC INC @ @RiRi;;(Rn)+1→(Rn)(Rn)+1→(Rn)INC DPTRINC DPTR;;DPTR+1→DPTRDPTR+1→DPTR功能很简单,就是将后面目标中的值加功能很简单,就是将后面目标中的值加1 1。

例:例:A=12HA=12H,,R0=33HR0=33H,,(21H)=32H(21H)=32H,, (34H)=22H(34H)=22H,,DPTR=1234HDPTR=1234H连续执行下面的指令:连续执行下面的指令: INC AINC A INC R0 INC R0 INC 21H INC 21H INC @R0 INC @R0 INC DPTR INC DPTR; A=13H; R0=34H;(21H)=33H;(34H)=23H; DPTR=1235H117117优质荟萃优质荟萃 DA ADA A在进行在进行BCDBCD码加法运算时,跟在码加法运算时,跟在ADDADD和和ADDCADDC指令指令之后,用来对之后,用来对BCDBCD码加法运算结果进行码加法运算结果进行自动修正自动修正例:例:A=0001 0101BCDA=0001 0101BCD(代表十进制数(代表十进制数1515)) ADD AADD A,,#8#84. 十进制调整指令((1 1条)条); A=1DH; A=1DH,按二进制规律加,按二进制规律加; A=23H; A=23H,按十进制规律加,按十进制规律加DA ADA A118118优质荟萃优质荟萃 3.4. 减法指令((8 8条)条)SUBB ASUBB A,,RnRn ;; A A--RnRn--CYCY→A→ASUBB ASUBB A,,direct direct ;; A A--(direct )(direct )--CY→ACY→ASUBB ASUBB A,,@ @RiRi ;; A A--(Ri)(Ri)--CYCY→A→ASUBB ASUBB A,,# #datadata;; A A--datadata--CY→ACY→A将将A A中的值减去源操作数所指内容以及进位位中的值减去源操作数所指内容以及进位位C C中的中的值,最终结果存在值,最终结果存在A A中。

中如:如: SUBB ASUBB A,,R2R2设:设: A=C9HA=C9H,,R2=55HR2=55H,,CY=1CY=1,,执行指令之后,执行指令之后,A A中的值为中的值为73H73H1. 带借位的减法指令((4 4条)条)119119优质荟萃优质荟萃 说明说明::没有不带借位的减法指令没有不带借位的减法指令,如果需要做,如果需要做不不带位的减法指令(在做第一次相减时),只要将带位的减法指令(在做第一次相减时),只要将CYCY清零清零即可对带符号数,要注意对带符号数,要注意OVOV标志OV=1OV=1,,出错出错2. 减1指令((4 4条)条)DEC ADEC A ;;A-1A-1→A,→A,影响影响P P标志标志DEC RnDEC Rn;;Rn-1→RnRn-1→RnDEC directDEC direct ;;(direct)-1→(direct)(direct)-1→(direct)DEC DEC @ @RiRi;;(Rn)-1→(Rn)(Rn)-1→(Rn) 与加与加1 1指令类似。

指令类似120120优质荟萃优质荟萃 3.4.3 乘法指令((1 1条)条)MUL ABMUL AB ;;A A××B B→BA→BA此指令的功能是将此指令的功能是将A A和和B B中的两个中的两个8 8位位无符号无符号数相乘,数相乘,两数相乘结果一般比较大,因此最终两数相乘结果一般比较大,因此最终结果用结果用1 1个个1616位位数数来表达,其中来表达,其中高高8 8位位放在放在B B中,中,低低8 8位位放在放在A A中在乘积大于在乘积大于FFHFFH时,时,0V0V置置1 1,否则,否则OVOV为为0 0;而;而CYCY总是总是0 0例:例: A=4EHA=4EH,,B=5DHB=5DH,执行指令,执行指令MUL ABMUL AB后,后,乘积是乘积是1C561C56H H,所以在,所以在B B中放的是中放的是1CH1CH,而,而A A中放的中放的则是则是56H56HOV= OV= P= P= 1 1 0 0121121优质荟萃优质荟萃 3.4.4 除法指令((1 1条)条)DIV ABDIV AB;;A A÷÷B B的商的商→→A A,余数,余数→→B B此指令的功能是将此指令的功能是将A A中的中的8 8位无符号数除位无符号数除B B中的中的8 8位位无符号数(无符号数(A/BA/B)。

除了以后,商放在)除了以后,商放在A A中,余数放中,余数放在在B B中CYCY和和OVOV都是都是0 0如果在做除法前如果在做除法前B B中的值是中的值是00H00H,也,也就是除数为就是除数为0 0,那么,那么0V=10V=1如如::A=11HA=11H,,B=04HB=04H,执行指令,执行指令DIV ABDIV AB后,后,结果结果::A=04HA=04H,,B=1B=1CY=OV= P=001122122优质荟萃优质荟萃 练习练习试编写试编写1234H-0FA3H1234H-0FA3H的程序段,将结果高的程序段,将结果高8 8位存入位存入51H51H,, 低低8 8位存入位存入50H50H单元MOV AMOV A,,#34H#34HSUBB ASUBB A,,#0A3H#0A3HMOV 50HMOV 50H,,A AMOV AMOV A,,#12H#12HSUBB ASUBB A,,#0FH#0FHMOV 51HMOV 51H,,A ACLR C123123优质荟萃优质荟萃 §3.5 逻辑运算类指令(2424条)条)主要用于对主要用于对2 2个操作数按个操作数按位进行逻辑位进行逻辑操作,结果送到操作,结果送到A A或直接寻址单元。

或直接寻址单元v 主要操作主要操作 与、或、异或、移位、取反、清零等与、或、异或、移位、取反、清零等v 对标志位的影响对标志位的影响 除了目的操作数为除了目的操作数为ACCACC的指令影响奇偶标志的指令影响奇偶标志P P外,外,一般不影响标志位一般不影响标志位Logic Operations124124优质荟萃优质荟萃 3.5.1 3.5.1 逻辑或指令逻辑或指令((6 6条)条)ORL A,,Rn ;;A∨ ∨Rn→AORL A,,direct ;;A∨ ∨(direct)→AORL A,,@Ri ;;A∨ ∨(Ri)→AORL A,,#data;;A∨ ∨data→AORL direct,,A;;(direct)∨ ∨A→(direct)ORL direct,,#data ;;(direct)∨ ∨data→(direct)影响影响P P标志标志例:例:71H和和56H相或:相或:01110001 ((71H)) ∨∨)) 01010110 ((56H)) 01110111 即即77H后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则为端口,则为“读-改读-改写写”操作。

操作 OR Logic Instruction125125优质荟萃优质荟萃 例:MOV AMOV A,,#45H#45HMOV R1MOV R1,,#25H#25HMOV 25HMOV 25H,,#39H#39HORL AORL A,,@R1@R1ORL 25HORL 25H,,#13H#13HORL 25HORL 25H,,A A;;A=45HA=45H;;R1=25HR1=25H;;(25H)=39H(25H)=39H;;45H∨39H = 7DH→A45H∨39H = 7DH→A;;39H∨13H = 3BH →(25H)39H∨13H = 3BH →(25H);; 3BH∨7DH =7FH →(25H)3BH∨7DH =7FH →(25H)实验验证一下本例126126优质荟萃优质荟萃 3.5.2 逻辑与指令 ((6 6条)条)ANL A,,Rn ;;A∧ ∧Rn→AANL A,,direct ;;A∧ ∧(direct)→AANL A,,@Ri ;;A∧ ∧(Ri)→AANL A,,#data ;;A∧ ∧data→AANL direct,,A ;;(direct)∧ ∧A→(direct)ANL direct,,#data ;;(direct)∧ ∧data→(direct)影响影响P P标志标志例:例:71H71H和和56H56H相与:相与:01110001 01110001 ((71H71H)) ∧ ∧))01010110 01010110 ((56H56H)) 01010000 01010000 即即50H50H后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则为端口,则为“读-改读-改写写”操作。

操作 ANd Logic Instruction127127优质荟萃优质荟萃 例:例:MOV AMOV A,,#45H#45HMOV R1MOV R1,,#25H#25HMOV 25HMOV 25H,,#79H#79HANL AANL A,,@R1@R1ANL 25HANL 25H,,#15H#15HANL 25HANL 25H,,A A;;A=45HA=45H;;R1=25HR1=25H;;(25H)=79H(25H)=79H;;45H∧79H = 41H→A45H∧79H = 41H→A;; 79H∧15H = 11H →(25H)79H∧15H = 11H →(25H);; 11H∧41H = 01H →(25H)11H∧41H = 01H →(25H)实验验证一下本例128128优质荟萃优质荟萃 例:例:71H71H和和56H56H相异或:相异或: 01110001 01110001 ((71H71H)) ⊕⊕) 01010110 ) 01010110 ((56H56H)) 3.5.3 逻辑异或指令((6 6条)条)XRL A,,Rn ;;A ⊕Rn→AXRL A,,direct ;;A ⊕⊕(direct)→AXRL A,,@Ri ;;A ⊕⊕(Ri)→AXRL A,,#data ;;A ⊕⊕ data→AXRL direct,,A ;;(direct) ⊕⊕A→(direct)XRL direct,,#data ;;(direct) ⊕⊕data→(direct)影响影响P标志标志00100111 00100111 即即27H27H后两条指令,若直接地址为后两条指令,若直接地址为I/OI/O端口,则为端口,则为“读-改读-改写写”操作。

操作 eXclusive-oR Logic Instruction129129优质荟萃优质荟萃 例:MOV AMOV A,,#45H#45HMOV R1MOV R1,,#25H#25HMOV 25HMOV 25H,,#39H#39HXRL AXRL A,,@R1@R1XRL 25HXRL 25H,,#13H#13HXRL 25HXRL 25H,,A A;;A=45HA=45H;;R1=25HR1=25H;;(25H)=39H(25H)=39H;; 45H⊕39H = 7CH→A45H⊕39H = 7CH→A;; 39H⊕13H = 2AH →(25H)39H⊕13H = 2AH →(25H);;2AH⊕7CH =56H →(25H)2AH⊕7CH =56H →(25H)实验验证一下本例130130优质荟萃优质荟萃 3.5.4 清清0 0与与取反指令((2 2条)条)取反:取反:CPL A CPL A ;;/A→A/A→A例:例:若若A=5CHA=5CH,执行,执行CPL ACPL A 结果:结果:A=A3HA=A3H清清0 0::CLR ACLR A ;;0→A0→AC ComomP Plement lement L Logic Operationogic Operation131131优质荟萃优质荟萃 3.5.5 循环移位指令((4 4条)条)RL ARR ARLC ARRC AA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.0后两条指令,影响后两条指令,影响P P标志和标志和CYCY。

Rotate Logic instruction132132优质荟萃优质荟萃 例:若若A=5CHA=5CH((01011100B01011100B),),CY=1CY=1,执行,执行RLC ARLC A后,后,v 对对RLCRLC、、RRCRRC指令,在指令,在CY=0CY=0时时ØRLCRLC相当于相当于乘乘以以2 2ØRRCRRC相当于相当于除除以以2 2结果:结果:A=B9HA=B9H,,CY=0CY=0,,P=1P=10101 11000101 11001 11011 10011011 10010 0133133优质荟萃优质荟萃 综合举例:综合举例:ANL AANL A,,#0FH#0FH ;屏蔽;屏蔽A A的高的高4 4位位SWAP ASWAP AANL P1ANL P1,,#0FH#0FH ;清;清P1P1口高口高4 4位位ORL P1ORL P1,,A A ;;P1P1口高口高4 4位输出位输出A A的低的低4 4位;位; 把累加器把累加器A A中的低中的低4 4位状态,通过位状态,通过P1P1口的高口的高4 4位输位输出,出, P1P1口的低口的低4 4位状态不变。

位状态不变134134优质荟萃优质荟萃 §§3.63.6 控制转移类指令控制转移类指令(( 17条)) Branching Instruction控制程序转移类指令控制程序转移类指令( (不包括位操作类的转移指令不包括位操作类的转移指令),),此类指令一般不影响此类指令一般不影响PSWPSW包括以下类型:包括以下类型:§无条件转移和条件转移无条件转移和条件转移§相对转移和绝对转移相对转移和绝对转移§长转移和短转移长转移和短转移§调用与返回指令调用与返回指令135135优质荟萃优质荟萃 3.6.1 无条件转移类指令((4 4条)条)§ 短转移类指令:短转移类指令:AJMP AJMP addr11addr11§ 长转移类指令:长转移类指令:LJMP LJMP addr16addr16§ 相对转移指令:相对转移指令:SJMP SJMP relrel§ 间接转移指令:间接转移指令:JMP JMP @ @A+DPTRA+DPTR((1 1))上面的前三条指令,统统理解成:上面的前三条指令,统统理解成:PCPC值改变,即值改变,即跳转到一个标号处跳转到一个标号处。

那么他们的区别何在呢?那么他们的区别何在呢?136136优质荟萃优质荟萃 v跳转的范围不同跳转的范围不同§ 短转移类指令:短转移类指令:AJMP AJMP addr11addr11§ 长转移类指令:长转移类指令:LJMP LJMP addr16addr16§ 相对转移指令:相对转移指令:SJMP SJMP relrel转移范围转移范围:2KB2KB64KB64KB-128-128~+127+127v指令构成不同指令构成不同 AJMPAJMP、、LJMPLJMP后跟的是后跟的是绝对地址绝对地址,, 而而SJMPSJMP后跟的是后跟的是相对地址相对地址 v 原则上,所有用原则上,所有用SJMPSJMP或或AJMPAJMP的地方都可以用的地方都可以用 LJMPLJMP来替代137137优质荟萃优质荟萃 §间接转移指令:间接转移指令:JMP JMP @ @A+DPTRA+DPTR 这条指令的用途也是跳转,转到什么地方去呢这条指令的用途也是跳转,转到什么地方去呢?这可不能由标号简单地决定了这可不能由标号简单地决定了。

转移地址由转移地址由A+DPTRA+DPTR形成,并直接送入形成,并直接送入PCPC指令对指令对A A、、DPTRDPTR和标志位均无影响和标志位均无影响 本指令可代替众多的判别跳转指令,又称为本指令可代替众多的判别跳转指令,又称为散散转指令转指令,多用于多分支程序结构中多用于多分支程序结构中2 2))第四条指令与前三条指令相比有所不同第四条指令与前三条指令相比有所不同138138优质荟萃优质荟萃 例例:: MOV DPTRMOV DPTR,,#TAB #TAB ;将;将TABTAB代表的地址送入代表的地址送入DPTRDPTR JMP @A+DPTR JMP @A+DPTR ;跳转;跳转TAB: AJMP ROUT0 TAB: AJMP ROUT0 ;跳转;跳转ROUT0ROUT0开始的程序段开始的程序段TAB+2: AJMP ROUT1 AJMP ROUT1 ;跳转;跳转ROUT1ROUT1开始的程序段开始的程序段TAB+4: AJMP ROUT2 AJMP ROUT2 ;跳转;跳转ROUT2ROUT2开始的程序段开始的程序段TAB+6: AJMP ROUT3 AJMP ROUT3 ;跳转;跳转ROUT3ROUT3开始的程序段开始的程序段 ......ROUT0ROUT0:: ......ROUT1ROUT1:: ......ROUT2ROUT2:: ......ROUT3ROUT3::执行该段程序后,程序将根执行该段程序后,程序将根据据A A中的内容转移到不同的中的内容转移到不同的程序段去执行程序段去执行--------散转。

散转A=0,A=0,转转ROUT0ROUT0A=2,A=2,转转ROUT1ROUT1A=4,A=4,转转ROUT2ROUT2A=6,A=6,转转ROUT3ROUT3139139优质荟萃优质荟萃 3.6.2 条件转移指令((8条)条)条件转移指令是指在满足一定条件转移指令是指在满足一定条件条件时进行时进行相对转相对转移移,否则程序继续执行,否则程序继续执行本指令的本指令的下一条指令下一条指令一、判一、判A内容是否为内容是否为0转移指令转移指令((2条)条) JZ JZ rel rel ;如果;如果A=0A=0,则转移,否则顺序执行则转移,否则顺序执行 JNZJNZ rel rel ;如果;如果A≠0A≠0,就转移转移到相对于当前转移到相对于当前PCPC值的值的8 8位移量的地址去即: 新的新的PCPC值值= =当前当前PC+PC+偏移量偏移量relrel我们在编写汇编语言源程序时,可以直接写成:我们在编写汇编语言源程序时,可以直接写成: JZJZ 标号标号 ;即转移到标号处即转移到标号处。

140140优质荟萃优质荟萃 例:例: MOV A MOV A,,R0R0 JZ L1JZ L1 MOV R1 MOV R1,,#00H#00H AJMP L2 AJMP L2 L1 L1: MOV R1: MOV R1,,#0FFH#0FFH L2L2: SJMP L2: SJMP L2 END END 在执行上面这段程序前:如果在执行上面这段程序前:如果R0=0R0=0,结果,结果R1=0FFHR1=0FFH而如果而如果R0R0 0 0,则结果是,则结果是R1=00HR1=00H 把上面的那个例子中的把上面的那个例子中的JZJZ改成改成JNZJNZ,看看程序执行的,看看程序执行的结果是什么结果是什么? ? 如果如果R0=0R0=0,结果,结果R1=00HR1=00H如果R0 R0  0 0,结果是,结果是R1R1中的中的值为值为0FFH0FFH。

141141优质荟萃优质荟萃 二、比较不等转移指令((4 4条)条)CJNE ACJNE A,,# #datadata,,relrel CJNE ACJNE A,,directdirect,,relrelCJNE RnCJNE Rn,,# #datadata,,relrelCJNE CJNE @ @RiRi,,# #datadata,,relrel此类指令的功能是将两个操作数比较,如果两者此类指令的功能是将两个操作数比较,如果两者相等相等,就,就顺序执行顺序执行,如果,如果不相等不相等,就,就转移转移同样地,使用时,我们可以将同样地,使用时,我们可以将relrel理解成标号,即:理解成标号,即:CJNE ACJNE A,,#data#data,标号,标号CJNE ACJNE A,,directdirect,标号,标号CJNE RnCJNE Rn,,#data#data,标号,标号CJNE @RiCJNE @Ri,,#data#data,标号,标号142142优质荟萃优质荟萃 利用这些指令,可以判断两数是否利用这些指令,可以判断两数是否相等相等但有时还想得知两数比较之后但有时还想得知两数比较之后哪个大哪个大,,哪个小哪个小,,本条指令也具有这样的功能:本条指令也具有这样的功能:如果两数不相等,则如果两数不相等,则CPUCPU还会用还会用CYCY(进位位)(进位位)来反映哪个数大,哪个数小。

来反映哪个数大,哪个数小如果前面的数大,则如果前面的数大,则CY=0CY=0,否则,否则CY=1CY=1因此在程序转移后再次利用因此在程序转移后再次利用CYCY就可判断出哪个就可判断出哪个数大,哪个数小了数大,哪个数小了143143优质荟萃优质荟萃 举例:举例: MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 ;如R0=10H,则不转移R1=00H; AJMP L3L1:JC L2 ;如CY=1即 R0<10H,则转移 MOV R1,#0AAH ;否则CY=0即 R0>10H,则不转移 AJMP L3L2:MOV R1,#0FFHL3:SJMP L3因此最终结果是:本程序执行前,如果R0=10H,则R1=00H;如果R0>10H,则R1=0AAH;如果R0<10H,则R1=0FFH144144优质荟萃优质荟萃 三、减三、减1 1不为不为0 0转移指令转移指令((2 2条)条)DJNZ RnDJNZ Rn,,relrelDJNZ directDJNZ direct,,relrelDJNZDJNZ指令的执行过程是这样的指令的执行过程是这样的: :它将第一个参数中的值它将第一个参数中的值减减1 1,然后看这个值是否等于,然后看这个值是否等于0 0,如果,如果等于等于0 0,就往下执行,如果,就往下执行,如果不等于不等于0 0,就转移,就转移到第二个参数所指定的地方去。

到第二个参数所指定的地方去例:例: DJNZ 10HDJNZ 10H,,LOOPLOOP ... ...LOOP: ...LOOP: ...145145优质荟萃优质荟萃 例例:: MOV 23H,#0AHMOV 23H,#0AH CLR A CLR ALOOP: ADD A,23HLOOP: ADD A,23H DJNZ 23H,LOOP DJNZ 23H,LOOP SJMP $ SJMP $上述程序段的执行过程是:上述程序段的执行过程是:将将23H23H单元中的数连续相加,存至单元中的数连续相加,存至A A中,每加一次,中,每加一次, 23H23H单元中的数值单元中的数值减减1 1,直至减到,直至减到0 0,共加(,共加(23H23H)次146146优质荟萃优质荟萃 3.6.3 调用与返回指令((4 4条)条)一、一、调用指令调用指令(2条) LCALL LCALL addr16addr16 ;长调用指令;长调用指令( (3 3字节字节) ) ACALL ACALL addr11addr11 ;短调用指令;短调用指令( (2 2字节字节) )上面两条指令都是在主程序中调用子程序,两者的区别上面两条指令都是在主程序中调用子程序,两者的区别: :对短调用指令,被调用子程序入口地址必须与调用指令的对短调用指令,被调用子程序入口地址必须与调用指令的下一条指令的第一字节在相同的下一条指令的第一字节在相同的2KB2KB存储区之内。

存储区之内使用时可以用:使用时可以用: LCALLLCALL 标号标号 ;标号表示子程序首地址;标号表示子程序首地址 ACALLACALL 标号标号 来调用子程序来调用子程序147147优质荟萃优质荟萃 指令的执行过程是:当前PC压栈,子程序首地址送 PC,实现转移二、返回指令 (2条)子程序执行完后必须回到主程序,如何返子程序执行完后必须回到主程序,如何返回呢?只要执行一条返回指令就可以了回呢?只要执行一条返回指令就可以了RETRET;子程序返回指令;子程序返回指令RETIRETI;中断子程序返回指令;中断子程序返回指令两者不能互换使用两者不能互换使用148148优质荟萃优质荟萃 3.6.4 3.6.4 空操作指令空操作指令(1条) NOP空操作,就是什么事也不干,停一个周期,一般用空操作,就是什么事也不干,停一个周期,一般用作短时间的延时作短时间的延时RET指令的执行过程是:堆栈栈顶内容(2字节,调用时保存的当前PC值)弹出给PC,实现返回RETI指令除了具有RET指令的功能实现程序返回外,还有对中断优先级状态触发器的清零。

149149优质荟萃优质荟萃 §§3.7 3.7 位操作指令位操作指令(( 1717条条))Boolean OperationsMCS-51MCS-51单片机的硬件结构中,有一个位处理器单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,(又称布尔处理器),它有一套位变量处理的指令集,包括包括位位变量变量传送传送、、逻辑逻辑运算、控制程序运算、控制程序转移转移等在在MCS-51 MCS-51 中,有一部份中,有一部份RAMRAM和一部份和一部份SFRSFR是具有位是具有位寻址功能的寻址功能的v位操作区位操作区:内部:内部RAMRAM的的20H-2FH20H-2FH这这1616个字节单个字节单元,即元,即128128个位单元个位单元( (位地址空间位位地址空间位0000~~7FH)7FH);;v可以位寻址的特殊功能寄存器可以位寻址的特殊功能寄存器::80318031中有一中有一150150优质荟萃优质荟萃 些些SFRSFR是是可以进行位寻址可以进行位寻址的,这些的,这些SFRSFR的特点是的特点是其其字节地址均可被字节地址均可被8 8整除整除,, 如如A A累加器,累加器,B B寄存寄存器、器、PSWPSW、、IPIP(中断优先级控制寄存器)、(中断优先级控制寄存器)、 IEIE(中断允许控制寄存器)、(中断允许控制寄存器)、SCONSCON(串行口控(串行口控制寄存器)、制寄存器)、TCONTCON(定时器(定时器/ /计数器控制寄存计数器控制寄存器)、器)、P0-P3P0-P3((I/OI/O端口锁存器)。

端口锁存器) 在进行位处理时,在进行位处理时, CYCY用作用作“位位累加器累加器” 151151优质荟萃优质荟萃 以以PSW中位中位4(( RS1 ))为例为例§直接直接(位位)地址方式:地址方式:如如 D4H;;§点操作符号方式点操作符号方式:如:如 PSW.4,,D0H.4;;§位名称方式位名称方式:如:如 RS1;;§用户定义名方式用户定义名方式:如用伪指令:如用伪指令 bitSUB.REG bit RS1定义后,可用定义后,可用SUB.REG代替代替RS1位地址表达方式位地址表达方式152152优质荟萃优质荟萃 4.7.1 4.7.1 位传送指令位传送指令(2条) MOV CMOV C,,bitbit;;bitbit →→C CMOV MOV bitbit,,C C;;C C →→bitbit这组指令的功能是实现位累加器(这组指令的功能是实现位累加器(CYCY)和其它)和其它位地址之间的数据传递位地址之间的数据传递例例::MOV CMOV C,,P1.0P1.0;将;将P1.0P1.0的状态送给的状态送给C C MOV P1.0MOV P1.0,,C C ;将;将C C中的状态送到中的状态送到P1.0 P1.0 ;引脚上去。

引脚上去153153优质荟萃优质荟萃 3.7.2 位清0和置位((4 4条)条)§ 位清位清0 0指令指令 CLR CCLR C ;使;使CY=0CY=0 CLR bit CLR bit ;使指令的位地址等于;使指令的位地址等于0 0 例例::CLR P1.0 CLR P1.0 ;即使;即使P1.0P1.0变为变为0 0§ 位置位置1 1指令指令 SETB CSETB C ;使;使CY=1CY=1 SETB bit SETB bit ;使指定的位地址等于;使指定的位地址等于1 1 例例::SETB P1.0 SETB P1.0 ;使;使P.0P.0变为变为1 1154154优质荟萃优质荟萃 4.7.3 位逻辑运算指令位逻辑运算指令 (6条) 位与指令位与指令 ANL ANL C C,,bitbit ;;Cy与指定位的值相与,结果送CyANL ANL C C,,/bit/bit ;;先将指定的位地址中的值取出后取反,再和Cy相与,结果送回Cy。

但但注意注意: :指定的指定的位地址中的值本身并不发生变化位地址中的值本身并不发生变化例例::ANL C,/P1.0155155优质荟萃优质荟萃 位取反指令位取反指令 CPL CCPL C ;使;使CyCy值取反CPL bitCPL bit ;使指定的位的值取反使指定的位的值取反例例::CPL P1.0CPL P1.0位或指令位或指令 ORL ORL C C,,bitbitORL ORL C C,,/bit/bit156156优质荟萃优质荟萃 4.7.4 4.7.4 位条件转移指令位条件转移指令(5条) 判判CyCy转移指令转移指令 JC relJNC rel 第一条指令的功能是如果Cy=1就转移,否则就顺序执行 第二条指令则和第一条指令相反,即如果Cy=0就转移,否则就顺序执行 同样理解: JNC 标号157157优质荟萃优质荟萃 判位变量转移指令判位变量转移指令 JB bit,relJNB bit,rel JBC bit,rel第一条指令:如果指定的(bit)=1,则转移,否则顺序执行,第二条指令功能相反 同样理解:JB bit,标号第三条指令是如果指定的(bit)=1,则转移,并把该位清0,否则顺序执行。

158158优质荟萃优质荟萃 P3.2P3.2和和P3.3P3.3上各接有一只按键,上各接有一只按键,要求它们分别按下时要求它们分别按下时 (P3.2=0(P3.2=0或或P3.3=0),P3.3=0),分别使分别使P1P1口为口为0 0或或FFHFFH STARTSTART::MOV P1MOV P1,,#0FFH#0FFH MOV P3 MOV P3,,#0FFH#0FFH L1: JNB P3.2 L1: JNB P3.2,,L2 ; L2 ; JNB P3.3 JNB P3.3,,L3 ; P3.2=1L3 ; P3.2=1,, P3.3=1P3.3=1,等待,等待 LJMP L1LJMP L1 L2: MOV P1 L2: MOV P1,,#00H #00H ;; P3.2=0P3.2=0,使,使P1P1口全为口全为“0 0” LJMP L1 LJMP L1 L3: MOV P1 L3: MOV P1,,#0FFH #0FFH ;; P3.3=0P3.3=0,使,使P1P1口全为口全为“1 1” LJMP L1 LJMP L1举例:+5VP3.2P3.380518051159159优质荟萃优质荟萃 习题课P50 题2,3,4,5,6,8,9,11,12,13,14,15,16,17,18,19,20*160160优质荟萃优质荟萃 本章小节7 7种寻址方式,种寻址方式,111111条指令条指令字节数字节数单字节指令:单字节指令:4949条条双字节指令:双字节指令:4545条条三字节指令:三字节指令:1717条条7 7种寻址方式种寻址方式:立即、直接、寄存器、寄存器:立即、直接、寄存器、寄存器 间接、变址、相对、位寻址间接、变址、相对、位寻址161161优质荟萃优质荟萃 111111条指令:条指令:数据传送类(数据传送类(2929条)条)算术运算类(算术运算类(2424条)条)逻辑运算与循环类(逻辑运算与循环类(2424条)条)控制转移类(控制转移类( 1717条)条)位操作类(位操作类(1717条)条)162162优质荟萃优质荟萃 第四章第四章 汇编语言程序设汇编语言程序设计计 通过前面的学习,我们已经了解了单片机内部的通过前面的学习,我们已经了解了单片机内部的结构,结构,MCS-51MCS-51指令系统的寻址方式、各类指令的格式指令系统的寻址方式、各类指令的格式及功能。

及功能 下面我们就是要如何利用下面我们就是要如何利用MCS-51MCS-51的指令系统,来的指令系统,来编写高效、充分利用其特点的程序编写高效、充分利用其特点的程序163163优质荟萃优质荟萃 §§4.1 4.1 概概述述4.1.1 4.1.1 程序设计语言程序设计语言1. 1. 机器语言机器语言2. 2. 汇编语言汇编语言3. 3. 高级语言高级语言164164优质荟萃优质荟萃 4.1.2 4.1.2 编制程序的步骤编制程序的步骤1.1.任务分析(硬件、软件系统分析)任务分析(硬件、软件系统分析)2.2.确定算法和工作步骤;确定算法和工作步骤;3.3.程序总体设计和流程图绘制程序总体设计和流程图绘制关于流程图符号:关于流程图符号:开始、结束开始、结束----圆角矩形圆角矩形工作任务工作任务----矩形矩形判断分支判断分支----菱形菱形程序流向程序流向----程序连接程序连接----开始结束165165优质荟萃优质荟萃 4. 4. 分配内存,确定程序与数据区存放地址分配内存,确定程序与数据区存放地址;;5. 5. 编写源程序;编写源程序;6. 6. 调试、修改,最终确定程序。

调试、修改,最终确定程序166166优质荟萃优质荟萃 4.1.3 4.1.3 方法技巧方法技巧1.1.模块化设计(按功能分:显示、打印、模块化设计(按功能分:显示、打印、 输入、发送等)输入、发送等)2. 2. 尽量采用循环及子程序结构(节省内存)尽量采用循环及子程序结构(节省内存)167167优质荟萃优质荟萃 4.1.4 4.1.4 汇编语言的规范汇编语言的规范1.1.汇编语言源程序由以下两种指令构成汇编语言源程序由以下两种指令构成§汇编语句(指令语句)汇编语句(指令语句)§伪指令(指示性语句)伪指令(指示性语句)2.2.汇编语句的格式:汇编语句的格式: 标号标号::操作码操作码操作数操作数;注释;注释数据表示形式:数据表示形式: 二进制(二进制(B B)、十六进制)、十六进制(H)(H)、十进制、十进制(D(D或省略或省略) )、、ASCIIASCII码(以单引号标识)码(以单引号标识) 168168优质荟萃优质荟萃 3.3.伪指令:控制汇编用的特殊指令,这些指令不属伪指令:控制汇编用的特殊指令,这些指令不属 于指令系统,不产生机器代码。

于指令系统,不产生机器代码169169优质荟萃优质荟萃 常用的伪指令v ORG ORG (Origin)(Origin) 定位目的程序的起始地址定位目的程序的起始地址 格式:格式:ORG ORG 表达式表达式 如:如:ORG 0000HORG 0000H• 注:表达式必须为注:表达式必须为1616位地址值位地址值v END END 汇编语言程序结束伪指令汇编语言程序结束伪指令 注:注:一定放在程序末尾!一定放在程序末尾!170170优质荟萃优质荟萃 常用的伪指令v EQU EQU ( (EQUEQUate)ate) 赋值伪指令赋值伪指令 格式:格式: 字符名称字符名称 EQU EQU 数值或汇编符号数值或汇编符号 例:例: AAAAEQUEQU30H30H K1 K1EQUEQU40H40HMOV AMOV A,,AAAA;; (30H(30H))→→A AMOV AMOV A,,K1K1;(;(40H40H))→→A A171171优质荟萃优质荟萃 常用的伪指令vDBDB((D Define efine B Byteyte)) 从指定单元开始定义(存储)若干个字节的数从指定单元开始定义(存储)若干个字节的数据或据或ASCIIASCII码字符,常用于定义数据常数表。

码字符,常用于定义数据常数表格式:格式:DB DB 字节常数或字节常数或ASCIIASCII字符字符例例: :ORGORG 1000H1000HDBDB34H34H,,0DEH0DEH,,’A A’,,’B B’DBDB0AH0AH,,0BH0BH,,2020172172优质荟萃优质荟萃 常用的伪指令vDWDW((D Define efine W Wordord)) 从指定单元开始定义(存储)若干个字的数据从指定单元开始定义(存储)若干个字的数据 或或ASCIIASCII码字符 格式:格式:DWDW字常数字常数或或ASCIIASCII字符字符 例:例: ORG 2000HORG 2000HDWDW1234H1234H,,’B B’DWDW0AH0AH,,2020173173优质荟萃优质荟萃 常用的伪指令v BITBIT 位地址符号指令位地址符号指令 把位地址赋于规定的字符名称把位地址赋于规定的字符名称 格式格式::字符名称字符名称BITBIT位地址位地址例:例: ABCABCBITBITP1.1P1.1BITBITP3.2P3.2174174优质荟萃优质荟萃 §§4.2 4.2 汇编语言程序编辑和汇汇编语言程序编辑和汇编编1. 1. 编辑(源程序,以编辑(源程序,以.ASM.ASM扩展名存盘);扩展名存盘);2. 2. 汇编(手工或汇编(手工或机器汇编机器汇编););如:如:MOV A,#88H;MOV A,#88H;机器码机器码74,88H 74,88H 又如:又如: 地址地址 目标码目标码 源程序源程序 ORG 1000HORG 1000H 1000H 747F MOV A,#7FH 1000H 747F MOV A,#7FH 1002H 7944 MOV R1,#44H 1002H 7944 MOV R1,#44H END END175175优质荟萃优质荟萃 §§4.3 4.3 程序设计基础与举例程序设计基础与举例4.3.1 顺序结构程序org 1000hstart:mov dptr,#table mov a,20h movc a,@a+dptr mov 21h,a sjmp $org 2000htable:db 0,1,4,9,16,25 end例1:变量存在内部RAM的20H单元中,其取值范围:0~5,编成,查表法求其平方值176176优质荟萃优质荟萃 开始表格首地址送DPTR变量送A(20H) A查平方表(A+DPTR) A结束结果送21H单元:A 21H177177优质荟萃优质荟萃 例例2 2:将:将20H20H单元的压缩单元的压缩((Packed Packed ))BCDBCD码拆成两个码拆成两个ACSIIACSII码存入码存入21H21H、、22H22H单元。

单元内部RAM22H21H20H6 93 63 9BCD 0 1 2... 9ASCII 30H 31H 32H ... 39H178178优质荟萃优质荟萃 方法1(20H)A10HBA/B,A中为高中为高4位位BCD码,码,B中为低中为低4位位BCD码码B+30HBB(21H)A+30HAA(22H)开始结束179179优质荟萃优质荟萃 周期数周期数 源程序源程序 ORG 2000H ORG 2000HMOV AMOV A,,20H20HMOV BMOV B,,#10H#10HDIV ABDIV ABORL BORL B,,#30H#30HMOV 21HMOV 21H,,B BORL AORL A,,#30H#30HMOV 22HMOV 22H,,A AENDEND124221113;除以;除以10H10H;低;低4 4位位BCDBCD码转换位码转换位ASCIIASCII码码;高;高4 4位位BCDBCD码转换位码转换位ASCIIASCII码码180180优质荟萃优质荟萃 0 (21H) (20H)AA与(21H)的低4位交换(21H)+30H(21H)A的高低半字节交换A+30HAA(22H)开始结束方法2:181181优质荟萃优质荟萃 ORG 2000H MOV R0,,#21H MOV @R0,,#0 MOV A,,20H XCHD A,,@R0 ORL 21H,,#30H SWAP A ORL A,,#30H MOV 22H,,A END;清21H单元;低4位BCD码送21H单元,;低4位BCD码转换位ASCII码;高4位BCD码转换位ASCII码111121119周期数源程序182182优质荟萃优质荟萃 4.3.24.3.2 分支程序分支程序可根据要求分支程序可根据要求无条件无条件或或条件地条件地改变程序执行流向。

改变程序执行流向编写分支程序主要在于正确使用编写分支程序主要在于正确使用转移指令转移指令分支程序有:分支程序有:单分支结构、双分支结构、多分支结构(散转)单分支结构、双分支结构、多分支结构(散转)条件成立?下条指令程序段A单分支结构YN条件成立?程序段AYN程序段A双分支结构183183优质荟萃优质荟萃 4.3.24.3.2 分支程序分支程序可根据要求无条件或条件地改变程序执行流向分支程序可根据要求无条件或条件地改变程序执行流向编写分支程序主要在于正确使用转移指令分支程序有:编写分支程序主要在于正确使用转移指令分支程序有:单分支结构、双分支结构、多分支结构(散转)单分支结构、双分支结构、多分支结构(散转)K=?程序段nn0程序段1多分支结构程序段01184184优质荟萃优质荟萃 例例1 1:设变量:设变量x x以补码形式存放在片内以补码形式存放在片内RAM 30HRAM 30H单单元中,变量元中,变量y y与与x x的关系是:的关系是:编程根据编程根据x x的值求的值求y y值并放回原单元值并放回原单元185185优质荟萃优质荟萃 A=?y=x+5<0>0y=20Hy=x0取x 即(30h) A开始存y 即y 30h结束186186优质荟萃优质荟萃 ORG 1000HSTART:MOV A,30H JZ NEXT ;x=0,转移 ANL A,#80H ;保留符号位 JZ ED ;x>0,转移 MOV A,#05H ;x<0,不转移 ADD A,30H MOV 30H,A SJMP ED NEXT:MOV 30H,#20H ED:SJMP $187187优质荟萃优质荟萃 STARTSTART::MOV DPTRMOV DPTR,,#TAB#TAB MOV AMOV A,,R7R7 ADD A,R7 ADD A,R7 ;;R7R7××2 2A A MOV R3,A ; MOV R3,A ;暂存暂存R3R3 MOVC A,@A+DPTR MOVC A,@A+DPTR ;取高位地址;取高位地址 XCH A XCH A ,,R3R3 INC A INC A MOVC A MOVC A,,@A+DPTR @A+DPTR ;;取低位地址取低位地址 MOV DPLMOV DPL,,A A MOV DPH MOV DPH,,R3 R3 ;转移地址送入;转移地址送入DPTRDPTR CLR A CLR A JMP @A+DPTR JMP @A+DPTR TAB: TAB: DWDW P0 P0 DWDW P1 P1 … DW DW PN PN例例2 2 ::根据根据R7R7的内容,转至对应的分支程的内容,转至对应的分支程序。

设序设R7R7的内容为的内容为0 0~N N,对应的处理程序,对应的处理程序地址分别为地址分别为P0P0~P7P7P0高位P0低位TABP1高位P1低位TAB+2188188优质荟萃优质荟萃 4.3.3 4.3.3 循环程序循环程序循环程序一般由: 初始化部分 循环体部分--处理部分、修改部分、控制部分 结束部分其结构一般有两种: 先进入处理部分,再控制循环• 至少执行一次循环体 先控制循环,再进入处理部分• 循环体是否执行,取决于判断结果189189优质荟萃优质荟萃 开始设置循环初值循环处理循环修改结束处理结束循环结束?开始设置循环初值循环处理循环修改结束处理结束循环结束?NYYN190190优质荟萃优质荟萃 循环控制的一般方法:循环控制的一般方法:v 循环次数已知循环次数已知§ 利用循环次数控制利用循环次数控制v 循环次数未知循环次数未知§ 利用关键字控制利用关键字控制v 利用利用“逻辑尺逻辑尺” § 根据根据“逻辑尺逻辑尺”的内容,进行控制的内容,进行控制191191优质荟萃优质荟萃 例4-3-6 : 50ms延时子程序设晶振频率为12MHz,则机器周期为1us。

DEL: MOV R7,#200 ;1MCDEL1:MOV R6,#123 ;1MC NOP ;1MC DJNZ R6,$ ;2MC DJNZ R7,DEL1 ;2MC RET ;2MC延时时间:t=1+200[(1+1+2*123)+2]+2 ≈50000us=50ms192192优质荟萃优质荟萃 例4-3-8 将内部RAM中起始地址为data的数据串送到外部RAM中起始地址为buffer的存储区域中,直到发现‘$’字符,传送停止----循环次数事先不知道,先判断,后执行 MOV R0,#data MOV DPTR,#bufferLOOP1:MOV A,@R0 CJNE A,#24H,LOOP2 ;判断是否为$字符 SJMP LOOP3 ;是,转结束LOOP2:MOVX @DPTR,A ;不是,传送数据 INC R0 INC DPTR SJMP LOOP1 ;传送下一数据LOOP3:END193193优质荟萃优质荟萃 4.3.4 4.3.4 子程序问题子程序问题子程序设计时注意事项:子程序设计时注意事项:1. 1. 给子程序赋一个名字。

实际为入口地址代号给子程序赋一个名字实际为入口地址代号2. 2. 要能正确传递参数:要能正确传递参数: 入口条件:子程序中要处理的数据如何给予入口条件:子程序中要处理的数据如何给予 出口条件:子程序处理结果如何存放出口条件:子程序处理结果如何存放 (寄存器、存储器、堆栈方式)(寄存器、存储器、堆栈方式)3. 3. 保护与恢复现场:保护与恢复现场: 保护现场:保护现场:压栈指令压栈指令PUSHPUSH 恢复现场:恢复现场:弹出指令弹出指令POPPOP4. 4. 子程序可以嵌套子程序可以嵌套194194优质荟萃优质荟萃 例4-3-9 (上机调试) :利用查表法求平方和 ,设a、b、c分别存于内部RAM的DA、DB、DC三个单元中 MOV A,DA ;取a ACALL SQR ;调用查表子程序 MOV R1,A ;a的平方暂存R1中 MOV A,DB ;取b ACALL SQR ;调用查表子程序 ADD A,R1 ;求出平方和暂存阿A中 MOV DC,A ;结果存于DC 中 SJMP $SQR:MOV DPTR,#TAB ;子程序 MOVC A,@A+DPTR RETTAB: DB 0,1,4,9,16,25,36,49,64,81 END 利用累加器或寄存器传递参数195195优质荟萃优质荟萃 4.3.5 4.3.5 码型转换程序的设计码型转换程序的设计一、十六进制数与ASCCII码之间的转换 (对比BCD与ASCCI之间的转换—4.3.1中例2)表4-1 十六进制数与ASCII码之间的关系十十 六六进制数进制数十十 六六进制数进制数十十 六六进制数进制数十十 六六进制数进制数 0 0 30H 30H 4 4 34H 34H 8 8 38H 38H C C 43H 43H 1 1 31H 31H 5 5 35H 35H 9 9 39H 39H D D 44H 44H 2 2 32H 32H 6 6 36H 36H A A 41H 41H E E 45H 45H 3 3 33H 33H 7 7 37H 37H B B 42H 42H F F 46H 46H196196优质荟萃优质荟萃 例4-3-15 将一位十六进制数转换成ASCII码,设十六进制数存放在R0中,转换后的ASCII码放在R2中。

HTASC: MOV A, R0 ;取十六进制数 PUSH ACC ;保护 CLR C ; SUBB A,#0AH ;判断是否大于十 POP ACC ; JC LOOP ;小于十,直接加30H ADD A,#37H ;大于十,加37H LOOP:ADD A,#30H MOV R2,A RET197197优质荟萃优质荟萃 例4-3-16 将多位十六进制数转换成ASCII码,设R0指向十六进制数低位, R2存放字节数,转换后R1指向ASCII码高位HTASC: MOV A,@R0 ;取十六进制数 ANL A,#0FH ;取低四位 ADD A,#15 ;偏移修正 MOVC A,@A+PC ;查表得ASCII码 MOV @R1,A ;保存 INC R1 MOV A,@R0 ;取十六进制数高四位 SWAP A ; ANL A,#0F0H ADD A,#06H ;偏移修正 MOVC A,@A+PC ;查表 MOV @R1,A ;保存 INC R0 ;指向下一单元 INC R1 DJNZ R2,HTASC RETASCTAB:DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H198198优质荟萃优质荟萃 二、BCD码与二进制数之间的转换 (对比BCD与ASCCI之间的转换—4.3.1中例2)例4-3-17:双字节数R2R3转换成压缩BCD码存在 R4R5R6中。

由十进制数与二进制数之间的关系可知:十进制数D与n位二进制数的关系克表示为D=bn-1×2n-1+bn-2×2n-2+...+b1×2+b0 ={...{[(bn-1×2+bn-2)×2]+bn-3}...+b1}×2+b0部分和存在R4R5R6中,其中bi每次移入Cy中199199优质荟萃优质荟萃 DCDTH: CLR A ; MOV R4,A ;R4清零 MOV R5,A ;R4清零 MOV R6,A ;R6清零 MOV R7,#16 ;循环初值LOOP: CLR C MOV A, R3 ; R2R3左移一位,并送回 RLC A ; (即将bi每次移入Cy中) MOV R3,A ; MOV A,R2 ; RLC A ; MOV R2,A ; MOV A,R6 ; R4R5R6×2+ bi并调整送回 ADDC A,R6 DA A ; MOV A,R5 ; ADDC A,R5 ; DA A ; 200200优质荟萃优质荟萃 MOV A,R4 ; ADDC A,R4 DA A ; MOV R4,A ; DJNZ R7,LOOP ; END 201201优质荟萃优质荟萃 第第5 5章章 MCS-51 MCS-51 单片机的中断系统单片机的中断系统 及定时器及定时器 本章主要介绍51系列单片机中断系统和定时器问题,本章将介绍以下具体内容:定时/计数器----定时/计数器的定时和计数功能、定时器/计数器的控制寄存器、定时器/计数器的工作方式、定时/计数器用作外部中断扩展、定时中断联合举例。

中断系统----中断源、中断方式 、中断控制寄存器、中断响应、中断请求的撤除202202优质荟萃优质荟萃 CPU与外设之间传送数据的方式可以有以下几种:1.无条件传送方式2.查询方式3.中断传送方式4.DMA方式§§5.1 5.1 输入输入/ /输出的控制方式输出的控制方式预备内容203203优质荟萃优质荟萃 §§5.25.2 MCS-51单片机的中断系统5.2.1. MCS-51单片机的中断系统结构一、中断的概念 执行主程序主程序继续执行主程序断点中断请求中断响应执行中断处理程序中断返回204204优质荟萃优质荟萃 IE0IE0TF0TF0IE1IE1TF1TF1TITIRIRI中断请求标志EX0EX0ET0ET0EX1EX1ET1ET1ESES≥1PX0PX0PT0PT0PX1PX1PT1PT1PSPS高级低级二、二、MCS-51MCS-51单片机的中断系统(图5-2) 内部查询内部查询入口地址入口地址INT0INT1T0T1TIRI中断允许控制中断优先级EA中断源205205优质荟萃优质荟萃 一、中断源 共有五个中断源,分别是外部中断两个、定时中断两个和串行中断一个,它们是:外部中断0--INT0,由P3.2提供,外部中断1—INT1,由P3.3提供,外部中断有两种信号方式,即电平方式和脉冲方式。

T0溢出中断; 由片内定时/计数器0提供T1溢出中断; 由片内定时/计数器1提供串行口中断RI/TI; 由片内串行口提供5.2.2. MCS-51 中断源206206优质荟萃优质荟萃 二、中断方式 单片机的中断为固定入口式中断,即一响应中断就转入固定入口地址执行中断服务程序具体入口如下:中断源 入口地址INT0 0003HT0 000BHINT1 0013HT1 001BHRI/TI 0023H在这些单元中往往是一些跳转指令,跳到真正的中断服务程序,这是因为给每个中断源安排的空间只有8个单元 207207优质荟萃优质荟萃 三、中断控制的寄存器 与中断控制有关的控制寄存器有四个:TCON----定时控制寄存器, IE----中断允许控制寄存器,IP----中断优先级控制寄存器,SCON----及串行口控制寄存器。

1.定时控制寄存器TCON D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0TF1TF1TF0TF0IE1IE1 IT1IT1 IE0IE0 IT0IT0中断请求标志触发方式选择0 低电平1 下降沿208208优质荟萃优质荟萃 2.串行口控制寄存器SCON D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0TITIRIRI串行中断请求标志3.中断允许控制寄存器IE D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0EAEAESESET1ET1EX1EX1ET0ET0EX0EX04.中断优先级控制寄存器(IP) D7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0PSPSPT1PT1PX1PX1PT0PT0PX0PX00 禁止,1允许0 低级别,1高级别209209优质荟萃优质荟萃 四、中断响应 响应条件----CPU要响应中断需满足下列条件:① 无同级或高级中断正在服务;② 当前指令周期结束,如果查询中断请求的机器 周期不是当前指令的最后一个周期,则不行;③ 若现行指令是RETI、RET或访问IE、IP指令,则需要执行到当前指令及下一条指令方可响应。

响应过程--单片机响应中断后,自动执行下列操作:① 置位中断优先级有效触发器,即关闭同级和低级 中断:② 调用入口地址,断点入栈,相当于LCALL指令;③ 进入中断服务程序 210210优质荟萃优质荟萃 响应时间响应时间----从查询中断请求标志位到转向中断服务入口地址所需的机器周期数1)最快响应时间以外部中断的电平触发为最快从查询中断请求信号到中断服务程序需要三个机器周期: 1个周期(查询)+2个周期(长调用LCALL)(2)最长时间若当前指令是RET、RETI和IP、IE指令,紧接着下一条是乘除指令发生,则最长为8个周期:2个周期执行当前指令(其中含有1个周期查询)+4个周期乘除指令+2个周期长调用=8个周期211211优质荟萃优质荟萃 中断返回中断返回—中断处理程序的最后一条指令是RETI,它使CPU结束中断处理程序的执行,返回到断点处,继续执行主程序5.2.3. 中断程序举例p83图5-4 图5-4为单片机数据传输示意图外设数据经P1口输入单片机,每准备好一个数据,外设发出选通信号,经触发器和非门至INT0P1口P3.0QDCLKCLR选通信号+5V1INT0数据8031212212优质荟萃优质荟萃 数据传送过程:外设每准备好一个数据后,发出选通信号,使触发器输出1再经非门得0至INT0,向CPU发出中断请求, CPU 响应这个中断请求后,在中断处理程序中先撤除中断请求信号,(通过P3.0=0,使INT0=1)再由P1口输入数据到单片机内部。

P1口P3.0QDCLKCLR选通信号+5V1INT0数据8031213213优质荟萃优质荟萃 程序清单:ORG 0000HSTART:LJMP MAIN ORG 0003H LJMP IINT0 ORG 0030H ;主程序MAIN: CLR IT0 ;低电平触发 SETB EA SETB EX0 ;开中断 MOV DPTR,#1000H ... ORG 0100HIINT0:PUSH PSW ;中断处理程序 PUSH ACC CLR P3.0 214214优质荟萃优质荟萃 NOPNOPSETB P3.0 ;撤除INT0MOV A,P1 ;输入数据MOVX @DPTR,A ;保存数据INC DPTR...POP ACC ;恢复现场POP PSWRETI ;返回主程序215215优质荟萃优质荟萃 定时/实现方式:1.软件定时;2.不可编程硬件定时;3.可编程定时 §§5.25.2 MCS-51单片机的定时/计数器216216优质荟萃优质荟萃 一、定时/计数器的定时和计数功能 在TMOD中,各有一个控制位(C/T),分别用于控制定时/计数器T0和T1是工作在定时器方式还是计数器方式。

1. 1. 定时功能定时功能--------计数输入信号是内部时钟脉冲,每个机器周期使寄存器的值加1所以,计数频率是振荡频率的1/122. 2. 计数功能计数功能--------计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5定时/计数器的核心部件是二进制加1计数器(TH0、TL0或TH1、TL1) 217217优质荟萃优质荟萃 二、定时器/计数器的控制寄存器 与定时器/计数器有关的控制寄存器有:1 1..定时器控制寄存器TCOND7D7D6D6D5D5D4D4D3D3D2D2D1D1D0D0TF1TF1 TR1TR1 TF0TF0 TR0TR0 IE1IE1 IT1IT1 IE0IE0 IT0IT0中断请求标志触发方式选择启动定时/计数器0 低电平1 下降沿0 停止1 启动218218优质荟萃优质荟萃 2.工作方式控制寄存器TMOD T1控制T0控制M0M0M1M1C/TC/TGATEGATEM0M0M1M1C/TC/TGATEGATED0D0D1D1D2D2D3D3D4D4D5D5D6D6D7D7GATE—门控位C/T—计数/定时选择M1 M0—工作方式选择219219优质荟萃优质荟萃 计数脉冲输入三、定时器/计数器的工作方式 定时器/计数器共有四种工作方式 1. 方式0—13位方式 TF0T0TR0GATEINT01≥1&C/T=1振荡器1/12C/T=0TL0 TH08位低5位13位计数器定时器计数器220220优质荟萃优质荟萃 2. 方式1—16位方式 振荡器1/12TL0 TH0TF01≥1&T0TR0GATEINT0C/T=0C/T=18位8位16位计数器221221优质荟萃优质荟萃 3. 方式2—8位自动装入时间常数方式 TF0振荡器1/121≥1&T0TR0GATEINT0C/T=0C/T=1TL0 TH0222222优质荟萃优质荟萃 4. 方式3—2个8位方式 仅T0可以工作在方式3—此时T0分成2个独立的计数器—TL0和TH0 ,前者用原来T0的控制信号(TR0、TF0),后者用原来T1的控制信号(TR1、TF1)。

四、应用举例②计算计数器的计数初值: 编程时将计数初值送THi、 TLi; 可编程器件在使用前需要进行初始化:①确定TMOD控制字:编程时将控制字送TMOD; 223223优质荟萃优质荟萃 例题1:设晶振频率fOSC=6MHz,使用定时器1以方式1产生周期为500μs的方波脉冲,并由P1.0 输出试以中断方式实现③ 开中断(如果使用中断方式): 编程实置位EA、ETi④ TRi位置位控制定时器的启动和停止8051P1.0P1.0500μs224224优质荟萃优质荟萃 ① TMOD确定T1控制T0控制X XX XX XX X1 10 00 00 0M0M0M1M1C/TC/TGATEGATEM0M0M1M1C/TC/TGATEGATE控制字10H 要产生500μs 的方波脉冲,只需在P1.0端以250μs为间隔,交替输出高低电平即可实现为此,定时间应为250μs 使用6MHz晶振,则一个机器周期为2μs,设待求计数初值为X,则:② 计算计数器的计数初值;225225优质荟萃优质荟萃 (216–X)×2×10 -6 =250×10 -6 即216–X=125 X=216-125=10000H-7DH =0FF83H所以,初值为: TH1=0FFH,TL1=83H③ 采用中断方式:编程时打开全局和局部中断。

④ 由定时器控制寄存器TCON中的TR1位控制定时器的启动和停止 TR1=1,启动; TR1=0,停止 226226优质荟萃优质荟萃 程序设计 ORG 0000H LJMP MAIN ;主程序入口 ORG 001BH LJMP INTT1 ;T1中断入口227227优质荟萃优质荟萃 INTT1: MOV TH1,#0FFH ;重新设置初值 MOV TL1,#83H CPL P1.0 ;输出取反 RETI ORG 1000HMAIN:MOV TMOD, #10H ;T1为方式1 MOV TH1, #0FFH MOV TL1,#83H ;初值 SETB EA ;允许中断 SETB ET1 SETB TR1 ;启动定时 SJMP $ ;等待中断主程序:中断处理程序:228228优质荟萃优质荟萃 例题2:设晶振频率fOSC=6MHz,分别讨论各种工作方式下最长定时时间。

解:1.由fOSC=6MHz可知,MC=2us;2.由于是加1计数,所以最长定时应是计数初值最小时(即为0时)的定时时间所以此时有:方式0: (213–0)×2us= 214us=16384us=16.384ms229229优质荟萃优质荟萃 方式1: (216–0)×2us= 217us=131.072ms方式2、3 (28–0)×2us= 29us=0.512ms注意:以上是当fOSC=6MHz,即MC=2us时各种方式下的定时时间,若fOSC=12MHz,则最长定时时间将缩短一半230230优质荟萃优质荟萃 五、定时/计数器用作外部中断扩展、定时/计数器用作外部中断扩展 在计数方式下,如果把计数器预置为全1,则只要在计数输入端(T0或T1输入端)加一脉冲就可以使计数器溢出,产生溢出中断这就是定时/计数器实现外部中断扩展的思想具体方法是:① 置定时/计数器为工作方式2,即自动加载式8位计数,以便在一次中断响应后,自动为下一次中断作准备;② TH和TL均置为FFH;③ 扩展的外部中断请求信号接计数脉冲输入端(T0或T1);④ 把扩展的外中断服务程序存放在所占用的定时/计数器中断入口地址处(000BH或001BH)。

231231优质荟萃优质荟萃 例:以T0 实现一个外部中断扩展 则初始化程序为: MOV TMOD,#06H ;00000110 MOV TH0,#0FFH MOV TL0,#0FFH SETB EA ;开全局中断 SETB ET0 ;开T0中断 SETB TR0 ;准备计数将中断子程序放在T0中断入口处(000BH) T0计数器方式T0方式2232232优质荟萃优质荟萃 课堂练习P95 题6、11、13233233优质荟萃优质荟萃 题6—略题11思路:1.1000Hz方波,即周期是1ms, 定时时间为500us, P1.1交替输出0、1 电平,即可得到该方波2.由定时时间知,用哪种方式都可实现500us 定时可用方式2(自动装入时间常数), 比较简单234234优质荟萃优质荟萃 第五章上机实验(1)1.分别用2种定时方式使P1口输出信号,轮流点亮8个LED,每个LED点亮时间为50ms方式1:利用调用延时子程序方式;方式2:利用定时器定时50ms,设晶振频率为12MHz;参考习题13。

2.每个LED点亮时间为2s参考P95~96 接口实训(一)一.定时器/计数器应用实训235235优质荟萃优质荟萃 T1控制T0控制0 01 10 00 0X XX XX XX XM0M0M1M1C/TC/TGATEGATEM0M0M1M1C/TC/TGATEGATE控制字02H3.题目中没有指明用T0还是T1,可任意,我 们用T0①确定TMOD控制字② 计算计数器的计数初值;236236优质荟萃优质荟萃 (28–X)×2×10 -6 =500×10 -6 即28–X=250 X=28-250=100H-FAH =06H所以,初值为: TH0=06H,TL0=06H③ 采用中断方式: 编程时打开全局中断:置位EA 局部中断:置位ET0④ 置位TR0位控制定时器的启动 237237优质荟萃优质荟萃 程序设计 ORG 0000H LJMP MAIN ;主程序入口 ORG 000BH LJMP INTT0 ;T0中断入口238238优质荟萃优质荟萃 INTT0: CPL P1.1 ;输出取反 RETI ORG 1000HMAIN:MOV TMOD, #02H ;T0为方式2 MOV TH0, #06H MOV TL0,#06H ;初值 SETB EA ;允许中断 SETB ET0 SETB TR0 ;启动定时 SJMP $ ;等待中断主程序:中断处理程序:239239优质荟萃优质荟萃 8051P1.0P1.7RLED7.....RLED0.....题13 思路:1.通过P1.0P~1.7分别送“1”给8个灯;2.每次持续时间20分之一秒,即50ms,由定时器T0来定时,又知fOSC=6MHz,由例题2可知可用方式1。

240240优质荟萃优质荟萃 T1控制T0控制1 10 00 00 0X XX XX XX XM0M0M1M1C/TC/TGATEGATEM0M0M1M1C/TC/TGATEGATE控制字01H①确定TMOD控制字② 计算计数器的计数初值;(216–X)×2×10 -6 =50×10 -3 即216–X=25000 X=216-25000=10000H-61A8H =9E58H所以,初值为: TH1=9EH,TL1=58H241241优质荟萃优质荟萃 ③ 采用中断方式: 编程时打开全局中断:置位EA 局部中断:置位ET0④ 置位TR0位控制定时器的启动 程序设计 ORG 0000H LJMP MAIN ;主程序入口 ORG 000BH LJMP INTT0 ;T0中断入口242242优质荟萃优质荟萃 ORG 1000HMAIN:MOV TMOD, #01H ;T0为方式1 MOV TH0, #9EH MOV TL0,#58H ;初值 SETB EA ;允许中断 SETB ET0 SETB TR0 ;启动定时 MOV A,#01H ; LED0先亮 MOV P1,A ; SJMP $ ;等待中断主程序:中断处理程序:INTT0: MOV TH0,#9EH ;重新设置初值 MOV TL0,#58H RL A ;依次点亮 RETI243243优质荟萃优质荟萃 P1.0P1.7RLED3RLED0RLED1RLED2RLED4RLED5RLED6RLED7P1.6P1.5P1.4P1.3P1.2P1.18051244244优质荟萃优质荟萃 上机实验1:方法1.调用50ms延时子程序。

设晶振频率为12MHz,则机器周期为1us下面为延时子程序清单:DEL: MOV R7,#200 ;1MCDEL1:MOV R6,#123 ;1MC NOP ;1MC DJNZ R6,$ ;2MC DJNZ R7,DEL1 ;2MC RET ;2MC延时时间:t=1+200(1+1+2*123+2)+2 ≈50000us=50ms245245优质荟萃优质荟萃 程序清单: ORG 1000H MOV A,#01HLOOP:MOV P1,A LCALL DEL RL A SJMP LOOP ORG 1100HDEL: MOV R7,#200DEL1:MOV R6,#123 NOP DJNZ R6,$ DJNZ R7,DEL1 RET主程序子程序246246优质荟萃优质荟萃 上机实验2:P95~96 接口实训1.定时器/计数器应用实训实训内容:利用T0定时,产生2s定时,使得P1口输出信号,控制8个发光二极管循环点亮,设fOSC=12MHz, 。

难点:P1口输出信号,控制8个发光二极管循环点亮的解题思路见习题5-13,但此处由于定时时间长达2s,所以单靠一个定时器不能解决问题可以采取硬件定时和软件计数(或硬件计数)结合方式方法2:见习题13,但时间常数为3CB0H247247优质荟萃优质荟萃 硬件定时与软件计数结合方式解题思路:让T0作定时器用,如T0可以定时50ms,每当定时时间到,在T0中断处理程序中一个寄存器内容加1,同时判断是否加到2000/50=40,如果不到40,则直接返回,如果计到40,说明2s时间到,使P1口循环点亮8个发光二极管后再返回T0工作在方式1,控制字01H,计数初值:(216–X)×1×10 -6 =50×10 -3 即216–X=50000 X=216-50000=10000H-C350H =3CB0H所以,初值为: TH1=3CH,TL1=B0H248248优质荟萃优质荟萃 程序设计 ORG 0000H LJMP MAIN ;主程序入口 ORG 000BH LJMP INTT0 ;T0中断入口249249优质荟萃优质荟萃 ORG 1000H ORG 1000HMAINMAIN::MOV TMODMOV TMOD,, #01H #01H ;;T0T0为方式为方式1 1 MOV TH0 MOV TH0,, #3CH#3CH MOV TL0 MOV TL0,,#B0H #B0H ;初值;初值 SETB EA SETB EA ;允许中断;允许中断 SETB ET0SETB ET0 SETB TR0 SETB TR0 ;启动定时;启动定时 MOV A,#01H ; LED0MOV A,#01H ; LED0先亮先亮 MOV P1,A ;MOV P1,A ; MOV R0,#0 MOV R0,#0 SJMP $ SJMP $ ;等待中断;等待中断主程序:250250优质荟萃优质荟萃 中断处理程序:INTT0INTT0:: MOV TH0MOV TH0,,#3CH #3CH ;重新设置初值;重新设置初值 MOV TL0MOV TL0,,#B0H#B0H INC R0 INC R0 CJNE R0,#40,NEXT CJNE R0,#40,NEXT ;不等直接返回;不等直接返回 MOV R0,#0 ;2sMOV R0,#0 ;2s到到 RL A RL A ;依次点亮;依次点亮 NEXT: RETINEXT: RETI251251优质荟萃优质荟萃 **硬件定时与硬件计数结合方式解题思路:将引脚P3.0与引脚P3.5即T1脚连接起来。

让T0作定时器用,T1座计数器用,如T0可以定时50ms,每当定时时间到,在T0中断处理程序中通过P3.0给T1脚输入负脉冲,使T1计数,当计数到2000/50=40时,说明2s时间到,在T1的中断处理程序中使P1口循环点亮8个发光二极管252252优质荟萃优质荟萃 。

下载提示
相似文档
正为您匹配相似的精品文档