单片机应用技术()_第1页
单片机应用技术()_第2页
单片机应用技术()_第3页
单片机应用技术()_第4页
单片机应用技术()_第5页
已阅读5页,还剩186页未读 继续免费阅读

下载本文档

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

文档简介

单片机应用技术目前一页\总数一百九十一页\编于二十点第一章单片机概述§1-1单片机的历史及发展概述§1-2单片机的应用§1-3单片机的开发和开发工具目前二页\总数一百九十一页\编于二十点§1-1单片机的发展概况★单片机的概念单片机:将微处理器(CPU)、存储器、I/O接口电路和相应实时控制件集成在一块芯片上,称其为单片微型计算机,简称单片机。目前三页\总数一百九十一页\编于二十点★单片机的发展历史和发展趋势4位单片机(1971-1974)低档8位单片机

(1974-1978)高档8位单片机

(1978-1982)

16位单片机

(1982-1990)新一代单片机(90年代以来)发展趋势:单片机在集成度、功能、速度、可靠性、应用领域等全方位向更高水平发展。目前四页\总数一百九十一页\编于二十点§1-2单片机的应用应用特点体积小:基本功能部件满足要求可靠性高:BUS大多在内部;易采取电磁屏蔽功能强:实时响应速度;I/O直接操作使用方便:硬件设计简单;提供开发工具资料性能价格比高:电路板小;接插件少易产品化:研制周期短目前五页\总数一百九十一页\编于二十点机电一体化:电脑缝纫机智能仪表:测量仪实时控制:汽车家电:电冰箱、洗衣机、(MOTOROLA)网络通信:通信协议集成其中计算机外设:键盘、打印机保健产品:按摩器多机应用应用:量大面广目前六页\总数一百九十一页\编于二十点§1-3单片机的开发和开发工具一、单片机应用系统开发条件单片机芯片开发工具资料手册目前七页\总数一百九十一页\编于二十点二、单片机应用系统的开发过程系统需求调查;可行性分析;系统方案设计;系统建造;系统调试;系统方案局部修改、再调试;生成正式产品。目前八页\总数一百九十一页\编于二十点三、单片机应用系统设计的基本原则与方法二、一般设计方法①确定系统功能与性能②确定系统基本结构③硬件设计④软件设计1)任务确定2)软件结构设计一、设计原则:

①可靠性高②性能价格比高③操作简便④设计周期短目前九页\总数一百九十一页\编于二十点四、单片机应用系统的调试目前十页\总数一百九十一页\编于二十点五、单片机开发系统一、通用型单片机开发系统二、软件模拟开发系统目前十一页\总数一百九十一页\编于二十点第二章MCS-51单片机的结构内部结构存储器的配置I/O口的应用功能时序及电路目前十二页\总数一百九十一页\编于二十点§2-1MCS-51单片机的内部结构(80C51)

存储器I/O接口CPU总线控制器目前十三页\总数一百九十一页\编于二十点说明:中央处理机CPU(8位)存储器:片内数据存储器RAM(128个字节)

片内程序存储器EPROM(4KB)I/O接口:4个8位并行口(P0、P1、P2、P3口

1个串行I/O接口。

2个16位定时器/计数器。

5个中断源二级优先权的中断系统目前十四页\总数一百九十一页\编于二十点MCS—51系列部分单片机配置一览表

目前十五页\总数一百九十一页\编于二十点§2-2中央处理器CPU

中央处理器是单片机内部的核心部件,它决定了单片机的主要功能特性。它由运算部件和控制部件两大部分组成。目前十六页\总数一百九十一页\编于二十点一、运算器运算部件是以算术逻辑单元ALU为核心,加上累加器A、寄存器B、暂存器TMP1和TMP2、程序状态寄存器PSW及专门用于位操作的布尔处理机组成的,它能实现数据的算术逻辑运算,位变量处理和数据传送操作。目前十七页\总数一百九十一页\编于二十点用户关心1.算术逻辑单元ALU2.累加器ACC:8位,专门存放操作数或运算结果。

3.寄存器B:8位,专门为乘除法而设置的寄存器。4.程序状态字PSW(ProgrameStateWord)P…OVRS0RS1F0ACCyD7D6D5D4D3D2D1D0PSW目前十八页\总数一百九十一页\编于二十点程序状态字PSWCACF0RS1RS0OV---PPSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0进位标志位辅助进位标志位用户自定义标志位溢出标志位奇偶标志位寄存器区选择3区112区011区100区00目前十九页\总数一百九十一页\编于二十点二、控制器控制部件是单片机的神经中枢,它包括定时和控制电路、指令寄存器、译码器以及信息传送控制等部件。

CPU执行指令时,由程序存储器中读取的指令代码送入指令存储器,经译码器译码后由定时与控制电路发出相应的控制信号,完成指令所指定的操作。目前二十页\总数一百九十一页\编于二十点

MCS-51单片机的存储器结构为哈佛结构,既:程序存储器和数据存储器分开寻址。从物理结构上可分为:片内、片外程序存储器

片内、片外数据存储器4个部分§2-3存储器和特殊功能寄存器一、MCS—51单片机存储器分类及配置目前二十一页\总数一百九十一页\编于二十点从寻址空间分布可分为:程序存储器内部数据存储器外部数据存储器3大部分从功能上可分为:程序存储器

内部数据存储器特殊功能寄存器位地址空间外部数据存储器5大部分。目前二十二页\总数一百九十一页\编于二十点重点重点目前二十三页\总数一百九十一页\编于二十点二、程序存储器

计算机的工作是按照事先编制好的程序命令一条条循序执行的,程序存储器就是用来存放这些已编好的程序和表格常数,它由只读存储器ROM或EPROM组成。程序运行的入口地址MCS—51单片机程序存储器中有复位和中断源共7个固定的入口地址,用户不能更改。目前二十四页\总数一百九十一页\编于二十点MCS—51单片机复位、中断入口地址0000H单元开始取指令来执行程序。目前二十五页\总数一百九十一页\编于二十点三、内部数据存储器

MCS—51系列单片机的内部数据存储器由读写存储器RAM组成,用于存储数据。内部数据存储器RAM块共分为工作寄存器区、位寻址区和数据缓冲区3个部分。

目前二十六页\总数一百九十一页\编于二十点1、工作寄存器和RAM地址对照表

目前二十七页\总数一百九十一页\编于二十点2、位寻址区目前二十八页\总数一百九十一页\编于二十点3、数据缓冲区

30H-7FH是数据缓冲区,也即用户RAM区,共80个单元。用户RAM区又可分为数据区和堆栈区

MCS—51单片机堆栈区不是固定的,且堆栈属向上生长型,为了避开工作寄存器区和位寻址区,一般设在30H以后的范围内。堆栈区数据区30H7FH目前二十九页\总数一百九十一页\编于二十点四、特殊功能寄存器SFR

SFR又称为专用寄存器。它专用于控制、管理单片机内算术逻辑部件、并行I/O口锁存器、串行口数据缓冲器、定时器/计数器、中断系统等功能模块的工作。

97H电源控制0B8H中断优先级控制99H串行数据缓冲器0B0H口398H串行控制0A0H口28BH定时器/计数器1(低字节)90H口180H定时器/计数器1(高字节)80H口08AH定时器/计数器0(低字节)83H和82H数据指针8CH定时器/计数器0(高字节)81H堆栈指针88H定时器/计数器控制0D0H程序状态字89H定时器/计数器方式控制0F0HB寄存器0A8H允许中断控制0E0H累加器地址名称地址名称IPP3P2P1P0DPTRSPPSWBACC标识符PCONSBUFSCONTL1TH1TL0TH0TCONTMODIE标识符目前三十页\总数一百九十一页\编于二十点说明:PC:程序地址寄存器(16位),始终指向下一条指令的内存地址。访问范围:00000FFFFHACC:累加器(8位),专门存放操作数或运算结果。B:8位,专门为乘除法而设置的寄存器。SP:堆栈指针(8位),始终指向堆栈的栈顶位置。遵循“先进后出”的原则。DPTR:数据地址指针(16位),存放程序存储器或外部数据存储器的地址。可分DPH和DPL两个独立8位寄存器。目前三十一页\总数一百九十一页\编于二十点程序状态字PSWCACF0RS1RS0OV---PPSW.7PSW.6PSW.5PSW.4PSW.3PSW.2PSW.1PSW.0进位标志位辅助进位标志位用户自定义标志位溢出标志位奇偶标志位寄存器区选择3区112区011区100区00目前三十二页\总数一百九十一页\编于二十点思考:访问内部数据存储器与外部数据存储器的区别?1、地址不同。访问内部数据存储器MOV指令访问外部数据存储器MOVX指令内部数据存储器的地址为8位(00H-7FH)外部数据存储器的地址为16位(0000H-FFFFH)2、访问内/外部存储器使用的指令不同。目前三十三页\总数一百九十一页\编于二十点思考:什么叫哈佛结构?程序存储器用来存放什么?程序运行的入口地址是什么?内部数据存储器分为哪几个部分?位寻址区有多少个位?堆栈指针SP是几位寄存器?堆栈是向(大、小)地址生长?目前三十四页\总数一百九十一页\编于二十点§2-4输入/输出口(I/O口)四个(P0、P1、P2、P3)双向8位I/O口,共32根I/O口线。每个I/O线均由锁存器,输出电路和输入缓冲器组成。所以每个I/O既可作输入又可作输出;每一条口线可独立用作输入又可用作输出。目前三十五页\总数一百九十一页\编于二十点一、I/O口的应用功能P0:系统扩展

一般I/O口(输出时,需接上拉电阻)P1:专供用户使用的I/O口P2:

系统扩展

通用I/O口P3:功能口,每位独立定义

通用I/O口目前三十六页\总数一百九十一页\编于二十点二、I/O的特点1.P0口:

P0口是一个三态双向口,可作为地址/数据分时复用口,也可作为通用I/O接口。目前三十七页\总数一百九十一页\编于二十点(1)地址/数据分时复用功能当P0口作为地址/数据分时复用总线时,可分为两种情况:一种是从P0口输出地址或数据,另一种是从P0口输出数据。‘1’目前三十八页\总数一百九十一页\编于二十点(2)通用I/O接口功能在输出数据时,由于T1截止,输出级是漏极开路电路,要使"1"信号正常输出,必须外接上拉电阻。R“1”“0”截止

P0口作为通用I/O口使用时,是准双向口。其特点是在输入数据时,应先把口置1(写1),此时锁存器的Q端为0,使输出级的两个场效应管T1、T2均截止,引脚处于悬浮状态,才可作高阻输入。目前三十九页\总数一百九十一页\编于二十点2.P1口P1口只有一种通用输入输出I/O接口功能。

不需要外接电阻;但P1口是准双向口,其特点是在输入数据时,应先把口置1(写1)使输出级的场效应管V1截止,引脚处于悬浮状态,才可作高阻输入。目前四十页\总数一百九十一页\编于二十点3、P2口

P2口也是一准双向口。它具有通用I/O接口或高8位地址总线输出两种功能。当作为准双向通用I/O接口使用时,其工作原理与P1相同。目前四十一页\总数一百九十一页\编于二十点4、P3口当P3口作为通用I/O接口时,第2功能输出线为高电平,使与非门3的输出取决于口锁存器的状态。在这种情况下,P3口仍是1个准双向口,它的工作方式、负载能力均与P1、P2口相同。当P3口作为第2功能使用时,其锁存器Q端必须为高电平,否则V1管导通,引脚被箝位在低电平,无法输入或输出第2功能信号。当Q端为高电平时,P3口的口线状态就取决于第2功能输出线的状态。

目前四十二页\总数一百九十一页\编于二十点

P3口第二功能表目前四十三页\总数一百九十一页\编于二十点§2-5外部引脚说明1.主电源引脚

VCC:接+5VVSS:接地2.外接晶体引脚

XTAL1、XTAL23.输入/输出引脚

P0-P3口4.控制线(1)ALE/PROG:地址锁存有效信号输出(2)PSEN:片外程序存储器读选通信号(3)RST/VPD:RST即为RESET,VPD为备用电源(4)EA/VPP(31脚):片外程序存储器选用端目前四十四页\总数一百九十一页\编于二十点§2-6单片机工作的基本时序1.机器周期和指令周期(1)振荡周期:也称时钟周期,是指为单片机提供时钟脉冲信号的振荡源的周期。(2)状态周期:每个状态周期为时钟周期的2倍,也称S状态,是振荡周期经二分频后得到的。(3)机器周期:一个机器周期包含6个状态周期S1~S6,也就是12个时钟周期。在一个机器周期内,CPU可以完成一个独立的操作。(4)指令周期:它是指CPU完成一条操作所需的全部时间。每条指令执行时间都是有一个或几个机器周期组成。MCS-51系统中,有单周期指令、双周期指令和四周期指令。×2×6×1、2、4目前四十五页\总数一百九十一页\编于二十点思考:外接晶振为12MHz时,MCS—51单片机的4个时间周期的具体值为多少?答:振荡周期=1/12μs;状态周期=1/6μs;

机器周期=1μs;

指令周期=1-4μs。目前四十六页\总数一百九十一页\编于二十点2.MCS-51的典型时序(1)单周期指令时序目前四十七页\总数一百九十一页\编于二十点(2)双周期指令时序目前四十八页\总数一百九十一页\编于二十点访问外部RAM的双指令周期外部数据存储器的寻址和数据选通目前四十九页\总数一百九十一页\编于二十点3.复位电路

(b)开关复位电路

(a)上电复位电路目前五十页\总数一百九十一页\编于二十点复位后内部寄存器状态

在RST/VPD端持续给出2个机器周期的高电平就可以完成复位操作。堆栈指针SP=07HP0-P3=FFH其余寄存器均为0目前五十一页\总数一百九十一页\编于二十点§2-7定时器/计数器一、定时器/计数器T0、T1的结构T1T0T0、T1的控制目前五十二页\总数一百九十一页\编于二十点说明:两个16位定时器/计数器T0、T1定时器/计数器的工作方式及控制由TMOD寄存器和TCON寄存器完成。目前五十三页\总数一百九十一页\编于二十点二、基本功能1)定时功能时,每个机器周期定时器加1。2)计数功能时,在外部事件相应输入脚(T0和T1)产生负跳变,计数器加1。K1K2可预置初值的加法计数器中断请求功能选择启动控制内部时钟脉冲(定时)TX外部输入脉冲(计数)溢出信号计数脉冲计数初值目前五十四页\总数一百九十一页\编于二十点三、方式和控制寄存器1、定时器/计数器的方式寄存器TMOD●C/T=1,为计数器方式;C/T=0,为定时器方式。●GATE=1,外部启动定时器/计数器;

GATE=0,程序启动定时器/计数器。

目前五十五页\总数一百九十一页\编于二十点●

M1M0工作方式控制位T0分成两个独立的8位计数器,T1在方式3时停止工作31

1自动重装入初值的8位计数器21016位定时器/计数器10

113位定时器(TH的8位和TL的低5位)000说明方式M1M0目前五十六页\总数一百九十一页\编于二十点2、定时器/计数器控制寄存器TCONIT0IE0IT1IE1TR0TF0TR1TF1与中断有关T0运行控制位:“1”启动T0;“0”关闭T0。由软件进行设置。T0定时器/计数器溢出中断标志位。当T0计数溢出时,由硬件置位,在允许中断的情况下,向CPU发出中断请求信号,CPU响应中断转向中断服务程序时,由硬件自动将该位清零。目前五十七页\总数一百九十一页\编于二十点四、计算时间常数X(初值)加法计数器是计满溢出时才申请中断,所以在给计数器赋初值时,不能直接输入所需的计数值,而应输入的是计数器计数的最大值与这一计数值的差值。初值X的计算方法:

计数功能:X=2ⁿ-计数值定时功能:X=2ⁿ-定时时间/T

其中:方式0:n=13;方式1:n=16;方式2、3n=8T=12÷晶振频率=机器周期

目前五十八页\总数一百九十一页\编于二十点例:计算定时1ms对应的初值,设单片机晶振频率为12MHz,方式1。解X=M-定时时间/T机器周期=12÷12MHz=1μs所以:X=216-1ms/1μs=FC17H目前五十九页\总数一百九十一页\编于二十点例:若晶振频率为6MHz,试计算MCS-51单片机定时/计数器的最小定时时间和最大定时时间。解:先确定机器周期:机器周期T=12÷6MHz=2μs①计算最小定时时间:对于定时器的几种工作方式来说,最小定时时间都是一样的,即:X=M-定时时间/

Tmin=(M-X)T=1×2μs=2μs

②计算最大定时时间:在方式1下的定时时间最长,则最大定时时间为

Tmax=(M-X)T=(216-0)×2μs=131ms目前六十页\总数一百九十一页\编于二十点五、定时器/计数器的初始化定时/计数器在使用之前需要进行初始化。初始化编程包括:

①要能正确写入控制字;

②能进行计数初值的计算。一般情况下,包括以下几个步骤:(1)确定工作方式,即对TMOD寄存器进行赋值。(2)计算计数初值,并写入寄存器TH0、TL0或TH1、TL1中。(3)根据需要,置位ETx允许T/C中断。(4)置位EA使CPU开中断(需要时)。(5)置位TRx启动计数。目前六十一页\总数一百九十一页\编于二十点思考题1、MCS-51单片机有几个定时/计数器?2、定时/计数器的核心是1个(加1、减1)计数器,它的输入脉冲有两个来源:一个是(内部时钟脉冲(定时)),另一个是(外部部时钟脉冲(计数))。3、定时/计数器有几种工作方式?如何选择和设定?4种4、MCS-51单片机定时/计数器在使用之前需要进行初始化,在编程时主要注意两点:第一(正确写入控制字);第二(计数初值的计算)。目前六十二页\总数一百九十一页\编于二十点中断的定义计算机在程序执行过程中,当出现硬件或软件请求时,处理器暂时停止正在执行的程序,转去对请求进行处理,处理完后,回到程序断点位置继续执行。断点主程序中断服务程序有中断请求对外设进行处理继续执行返回断点中断源:任何能够引发中断事件的来源§2-8MCS-51单片机的中断系统目前六十三页\总数一百九十一页\编于二十点一、MCS-51单片机的中断系统结构IEIPTCON的高4位SCON的低2位采用中断技术的优点

(1)可方便地处理随机事件(实时处理、故障处理)。

(2)提高处理器的使用效率和提高计算机的工作速度。

目前六十四页\总数一百九十一页\编于二十点1、5个中断源2个外部中断源信号2个定时器T0、T1溢出中断请求1个串行口数据发送、接收结束中断请求目前六十五页\总数一百九十一页\编于二十点2、中断请求寄存器(TCON、SCON中的部分标志)中断请求标志位:TF1、TF0、IE1、IE0、RI、TI登记各中断源请求信号:=1,有中断请求;=0,无中断请求。CPU响应中断后,TI,RI标志必须软件清零,其余中断标志自动清零。外部中断触发方式选择位:IT0、IT1 =1:负边沿触发中断请求; =0:低电平触发中断请求。目前六十六页\总数一百九十一页\编于二十点3、中断允许控制(IE)EX0ET0EX1ET1ESXXEA

(MSB)(LSB)中断允许控制位:=1开中断;=0关中断。总允许开关源允许开关例:允许CPU响应INT0的中断请求

SETB EX0 SETB EA 目前六十七页\总数一百九十一页\编于二十点4、2级中断的优先级控制(IP)对于每1个中断源,均可通过对IP的设置来确定其优先等级。置1为高优先级,清0为低优先级。PX0PT0PX1PT1PSXXX(MSB)(LSB)同级的中断优先级顺序为:外部中断0→T0中断→外部中断1→T1中断→串行口中断高级

低级

目前六十八页\总数一百九十一页\编于二十点例如,某软件中对寄存器IE、IP设置如下:MOVIE,#8FHMOVIP,#06H

则此时该系统中的中断优先次序为什么?

答:1、除串口中断禁止外,其余均允许。

1111ESXX1中断允许控制位:=1开中断;=0关中断。

2、允许中断源的中断优先次序为:

T0

INT1

INT0→

T1

高级别低级别01100XXXPX0PT0PX1PT1PSXXX目前六十九页\总数一百九十一页\编于二十点二、中断响应的条件、过程1.中断响应的条件单片机响应中断的条件为中断源有请求(中断允许寄存器IE相应位置1),且CPU开中断(即EA=1)。2.中断响应过程单片机一旦响应中断,自动转到各中断源对应的中断服务程序的入口地址执行中断服务程序。目前七十页\总数一百九十一页\编于二十点各中断源中断服务程序的入口地址中断源入口地址外部中断00003HT0中断000BH外部中断10013HT1中断001BH串行口中断0023H3、中断返回

中断返回指令:RETI=RET指令+通知CPU中断服务已结束目前七十一页\总数一百九十一页\编于二十点思考题1、MCS-51单片机的中断源有几个?分别是什么?各中断源所对应的中断服务程序的入口地址是什么?2、寄存器IE、IP和TCON的全称是什么?作用是什么?目前七十二页\总数一百九十一页\编于二十点§2-9MCS-51单片机的串行口一、MCS-51串行口的结构发送器接收器目前七十三页\总数一百九十一页\编于二十点说明:1、MCS-51单片机内部有1个功能很强的全双工串行口。2、发送器:并串数据格式转换,添加标识位和校验位,一帧数据发送结束,设置发送结束标志,申请中断。3、接收器:串并数据格式转换,删除标识位和校验位,保存有效数据,设置接收结束标志,申请中断。4、控制器:接收编程命令和控制参数,设置工作方式:同步/异步、字符格式、波特率、校验方式、数据位与同步时钟比例等。5、串行口数据缓冲器SBUF

SBUF是两个在物理上独立的接收、发送缓冲器,可同时发送、接收数据。目前七十四页\总数一百九十一页\编于二十点二、串行口控制1、串行口控制寄存器SCONRITIRB8TB8RENSM2SM1SM0D7D6D5D4D3D2D1D0

SM0、SM1:串行口工作方式选择位SM2:多机控制位,用于多机通讯REN:允许接收控制位,REN=1,允许接收;REN=0,禁止接收TB8:发送的第9位数据位,可用作校验位和地址/数据标识位RB8:接收的第9位数据位或停止位TI:发送中断标志,发送一帧结束,TI=1,必须软件清零RI:接收中断标志,接收一帧结束,RI=1,必须软件清零目前七十五页\总数一百九十一页\编于二十点2、电源控制寄存器PCONSMODGF1GF0PDIDLD7D6D5D4D3D2D1D0

PCON的最高位SMOD是串行口波特率系数控制位。SMOD=1时,波特率增大一倍。其余各位与串行口无关。目前七十六页\总数一百九十一页\编于二十点三、串行接口的工作方式目前七十七页\总数一百九十一页\编于二十点1、方式0为同步移位寄存器方式,用于扩展并行I/O接口,波特率是固定的(1)方式0输出8051目前七十八页\总数一百九十一页\编于二十点(1)方式0输入目前七十九页\总数一百九十一页\编于二十点2、方式1、2、3共性问题写入SBUF采样(a)发送时序图TXD数据输出TID0D1D2D3D4D5D6D7停止位起始位RXD输入数据(b)接收时序图D0D1D2D3D4D5D6D7停止位起始位RI检测负跳变①RXD:接收数据端。TXD:发送数据端。②发送:写入SBUF,同时启动发送,一帧发送结束,TI=1。③接收:REN=1,允许接收。将接收数据装入SBUF,并使RI=1。目前八十页\总数一百九十一页\编于二十点3、方式1、2、3差别数据位不同。波特率可变、固定。方式1、3波特率:B=(2SMOD/32)×T1溢出率。方式2波特率:

B=(2SMOD

/64)×fosc目前八十一页\总数一百九十一页\编于二十点4、波特率的选择目前八十二页\总数一百九十一页\编于二十点思考题:51系列单片机主要有哪些部分组成?各自作用是什么?目前八十三页\总数一百九十一页\编于二十点第3章MCS-51单片机指令系统★寻址方式★指令系统目前八十四页\总数一百九十一页\编于二十点§3-1MCS-51指令格式及寻址方式

一、汇编语言指令格式1.标号:指令的符号地址2.操作码:指明指令功能。3.操作数:指令操作对象(立即数、寄存器、存储器)4.注释行:说明指令在程序中的作用。操作码和操作数是指令主体。标号:操作码操作数1,操作数2

;注释目前八十五页\总数一百九十一页\编于二十点二、寻址方式

寻址方式,就是寻找操作数地址的方式。寻址方式的多少是反映指令系统优劣的主要指标之一。在MCS-51单片机指令系统中,有以下7种寻址方式:(1)立即寻址;(2)直接寻址;(3)寄存器寻址;(4)寄存器间接寻址;(5)基址寄存器加变址寄存器间接寻址;(6)相对寻址;(7)位寻址。目前八十六页\总数一百九十一页\编于二十点1、立即寻址

立即寻址方式是指操作数包含在指令字节中。跟在指令操作码后面的数就是参加运算的数,该操作数称为立即数。立即数有一字节和二字节两种。例如:

MOVA,#3AH;将立即数3AH传送到累加器A中MOVDPTR,#0DFFFH“#”表示为立即数目前八十七页\总数一百九十一页\编于二十点2、直接寻址

指令中直接给出操作数所在的存储器地址,以供取数或存数的寻址方式称为直接寻址。例:MOVA,40H;把片内RAM地址为40H单元的内容送到A中。直接寻址方式中可以访问3种存储器空间:(1)内部数据存储器的低128个字节单元(00H~7FH);(2)特殊功能寄存器;(3)位地址空间。

目前八十八页\总数一百九十一页\编于二十点3、寄存器寻址

在该寻址方式中,参加操作的数存放在寄存器里。寄存器包括8个工作寄存器R0~R7,累加器A,寄存器B、数据指针DPTR和布尔处理器的位累加器C。例:MOVA,R0;把寄存器R0中的内容传送到累加器A中目前八十九页\总数一百九十一页\编于二十点4、寄存器间接寻址在这种寻址方式中,寄存器的内容为操作数的地址。例:MOV

A,@R0

;将以工作寄存器R0中的内容为地址的片内RAM单元的数据传送到A中去注意:寄存器间接寻址只能使用寄存器R0、R1作为地址指针,寻址内部RAM区的数据。@为间址符目前九十页\总数一百九十一页\编于二十点5、基址加变址寻址这种寻址方式用于访问程序存储器中的数据表格,它以基址寄存器DPTR或PC的内容为基本地址,加上变址寄存器A的内容作为操作数的地址。例如:MOVCA,@DPTR+A

目前九十一页\总数一百九十一页\编于二十点6、相对寻址

相对寻址是以当前程序计数器PC值加上指令规定的偏移量rel,而构成实际操作数地址的寻址方法。它用于访问程序存储器,常出现在相对转移指令中。

目的地址=当前PC值+rel目前九十二页\总数一百九十一页\编于二十点7、位寻址

位寻址是在位操作指令中直接给出位操作数的地址,可以对片内RAM中的128位和特殊功能寄存器SFR中的93位进行寻址。例如:SETBPSW.3;(PSW.3)←1比较: MOV C,40H ;C←40H MOV A,40H ;A←40H位地址字节地址目前九十三页\总数一百九十一页\编于二十点7种寻址方式及使用空间目前九十四页\总数一百九十一页\编于二十点三、指令分类按指令的功能,MCS-51指令系统可分为下列5类,共计111条指令:(1)数据传送;(2)算术运算;(3)逻辑运算;(4)位操作;(5)控制转移。目前九十五页\总数一百九十一页\编于二十点四、符号的约定意义Rn:当前选定的寄存器区中的8个工作寄存器R0-R7,n=0-7。@Ri:当前选定的寄存器区中的2个寄存器R0、R1,i=0、1。Direct:8位内部RAM单元的地址(00H-7FH)或特殊功能寄存器地址。#data:指令中的8位常数。#data16:指令中的16位常数。Addr16:16位的目的地址,用于LJMP,LCALL指令。Addr11:11位的目的地址,用于AJMP,ACALL指令。Rel:8位带符号的偏移量字节,用于所有条件转移指令中。Bit:部数据RAM或特殊功能寄存器中的可直接寻址位。目前九十六页\总数一百九十一页\编于二十点§3-2数据传送类指令

传送类指令不影响PSW(除P位)。目前九十七页\总数一百九十一页\编于二十点数据传送类指令一览表目前九十八页\总数一百九十一页\编于二十点数据传送类指令一览表目前九十九页\总数一百九十一页\编于二十点例:顺序执行下列指令序列,求每一步执行结果。MOVA,#30H MOV4FH,A MOVR0,#20H MOV@R0,4FH MOV21H,20H;A=30H;(4FH)=30H;R0=20H;(20H)=30H;(21H)=30H解2:

MOVR0,#60H MOVA,@R0解1:MOVA,60H例:用两种寻址方式将片内RAM60H单元的数据传送给累加器A。目前一百页\总数一百九十一页\编于二十点

例:若在外部程序存储器中TAB单元开始依次存放0-9的平方值,数据指针DPTR=3A00H,用查表指令取得2003H单元的数据后,要求保持DPTR中的内容不变。

ORG 2000HTAB: DB00,01,04,09,…,81H;平方表

MOVA,#03H ;A←03HPUSHDPH ;保护DPTR高8位入栈PUSHDPL ;保护DPTR低8位入栈MOVDPTR,#TAB ;确定表首地址(基地址)MOVCA,@A+DPTR ;A←(TAB+03H)POPDPL ;弹出DPTR低8位POPDPH ;弹出DPTR高8位执行结果:A=09H,DPTR=3A00H。目前一百零一页\总数一百九十一页\编于二十点例:内部RAM2AH和2BH单元中存放的ASCII码,转换为压缩的BCD码存放在20H单元中。

MOV A,#0 ;A=0MOV R1,#2BH ;R1=2BHMOV R0,#2AH ;R0=2AHXCHD A,@R1 ;A=05HSWAPA ;A=50HXCHD A,@R0 ;A=58HXCH A,20H;(20H)=58H2BH35H2AH38H……XX20HXX58H目前一百零二页\总数一百九十一页\编于二十点§3-3算术运算类指令

一、加、减法指令目的操作数源操作数目前一百零三页\总数一百九十一页\编于二十点影响相应标志位目前一百零四页\总数一百九十一页\编于二十点例:设双字节数X存在片内RAM41H、40H单元,Y存在42H、43H单元,编程求Z=X+Y,并存入片内RAM单元44H、45H、46H。ADDS:MOV A,40H ADD A,42H MOV44H,A MOVA,41H DDCA,43HMOV45H,A MOVA,#0 ADDCA,#0 MOV46H,A RET;取被加数低字节;加上加数低字节;保存和的低字节;取被加数高字节;加上加数高字节;保存和的高字节;求高字节进位;子程序结束目前一百零五页\总数一百九十一页\编于二十点二、十进制调整指令和乘、除法指令DAA;对A寄存器加6调整例:MOVA,#36HADDA,#45HDAA00110110360100010145011110117B0000011006++1000000181DAA加6调整目前一百零六页\总数一百九十一页\编于二十点MULAB;BA=A×B

若乘积大于FFH,则溢出标志OV置1,否则OV清零。乘法指令执行后进位标志CY总是零,即CY=0。DIVAB;A←A÷B之商,B←A÷B之余数进位标志位CY和溢出标志位OV均被清零。若B中的内容为0时,溢出标志OV被置1,即OV=1,而CY仍为0。目前一百零七页\总数一百九十一页\编于二十点例:利用除法指令把累加器A中的8位二进制数转换为BCD数,并以压缩形式存放在内部RAM区M1、M2单元中。MOVB,#64H;除数100送BDIVAB

;得百位数MOVM1,A ;百位数存于M1中MOVA,#0AH;取除数10XCHA,B;上述余数与除数交换DIVAB ;得十位数和个位数SWAPA ;十位数存于A的高4位ADDA,B ;组成压缩BCD数MOVM2,A ;十、个位压缩BCD数存M2

若上述程序执行前:A=A8H(168),则执行后:(M1)=01H,(M2)=68H。目前一百零八页\总数一百九十一页\编于二十点§3-4逻辑运算及移位类指令目的操作数源操作数目的操作数源操作数目前一百零九页\总数一百九十一页\编于二十点逻辑操作指令表目前一百一十页\总数一百九十一页\编于二十点目前一百一十一页\总数一百九十一页\编于二十点例:A=01××××××B,×表示随机状态,为1或0,执行下述一组指令执行后A的值如何?

XRLA,#0C0H ;将累加器A的内容D7、D6取反

ORLA,#03H ;将累加器A的内容D1、D0置1

ANLA,#0E7H ;将累加器A的内容D4、D3清0

解:执行上述指令后,A=10×00×11B。思考:如何将累加器A中的数据高4位清0,低位不变?

如何将寄存器R2中的数据奇数位取反,偶数位不变?目前一百一十二页\总数一百九十一页\编于二十点例:设A=43H,CY=0,则执行指令:RLA;A=86H,CY=0RLCA;A=0CH,CY=1RRA;A=06H,CY=1

RRCA;A=83H,CY=0

目前一百一十三页\总数一百九十一页\编于二十点§3-5控制转移类指令一、无条件转移指令目前一百一十四页\总数一百九十一页\编于二十点二、条件转移指令目前一百一十五页\总数一百九十一页\编于二十点例:将片外RAM首地址为DATA1的一个数据块传送到片内RAM首地址为DATA2的存储区中,当数据块中有0时停止传送 MOVR0,#DATA1;R0作为外部数据块的地址指针 MOVR1,#DATA2 ;R1作为内部数据块的地址指针LOOP:MOVXA,@R0;取外部RAM数据送入A JZHERE;数据为零则终止传送 MOV@R1,A ;数据传送至内部RAM单元INCR0 ;修改指针,指向下一数据地址INCR1SJMPLOOP;循环取数HERE:MOVR7,#0

……

目前一百一十六页\总数一百九十一页\编于二十点例:当从P1口输入数据为01H时,程序继续执行,否则等待,直到P1口出现01H。

MOVA,#01H ;立即数01H送AWAIT:CJNEA,P1,WAIT

;P1≠01H,则等待

MOVR0,#2…….目前一百一十七页\总数一百九十一页\编于二十点例:将内部RAM中从DATA单元开始的10个无符号数相加,相加结果送SUM单元保存。设相加结果不超过8位二进制数,则相应的程序如下:解: MOVR0,#0AH;给R0置计数器初值 MOVR1,#DATA;数据块首址送R1 CLRA;A清零LOOP: ADDA,@R1;加一个数INCR1;修改地址,指向下一个数

DJNZR0,LOOP;R0减1,不为零循环MOVSUM,A;存10个数相加和目前一百一十八页\总数一百九十一页\编于二十点三、子程序调用与返回指令目前一百一十九页\总数一百九十一页\编于二十点(1)RET指令必须作子程序的最后一条指令; RETI指令必须作中断服务程序的最后一条指令。(2)RET指令只能恢复返回地址 RETI指令除恢复断点地址外,还恢复CPU响应中断时硬件自动保护的现场信息。执行RETI指令后,将清除中断响应时所置位的优先级状态触发器,使得已申请的同级或低级中断申请可以响应。目前一百二十页\总数一百九十一页\编于二十点§3-6布尔操作类指令

MCS-51在硬件上设置了一个独立的布尔处理器也称为位处理机有自己相应的累加器,即进位标志位CY。有自己的存储器空间,即内部RAM的位寻址区的128位和特殊功能寄存器SFR中的可位寻址的寄存器中93位。目前一百二十一页\总数一百九十一页\编于二十点目前一百二十二页\总数一百九十一页\编于二十点例:将位地址20H的一位数传送到位地址30H中: MOVC,20H MOV30H,CXX目前一百二十三页\总数一百九十一页\编于二十点例:使仪表蜂鸣器间断发声的程序。N1: CLR P2.3 ;BEEP响 CALL DELAY1 ;延时 SETB P2.3 ;BEEP不响 CALL DELAY2 ;延时 SJMP N1目前一百二十四页\总数一百九十一页\编于二十点影响标志位的指令目前一百二十五页\总数一百九十一页\编于二十点第4章MCS-51汇编语言程序设计伪指令汇编语言程序设计目前一百二十六页\总数一百九十一页\编于二十点§4.1伪指令一、汇编起始指令ORG指令格式:ORGnn功能:指明后面的程序或数据块的起始地址。二、等值指令EQU指令格式:字符名称EQU数字或汇编符号

功能:使指令中的字符名称等价于给定的数字或汇编符号。三、定义字节指令DB指令格式:标号:DB8位二进制数表功能:把8位二进制数表依次存入从标号开始的连续的存储单元中。四、汇编结束指令END指令格式:标号:END地址或标号目前一百二十七页\总数一百九十一页\编于二十点例:

ORG0000HSJMP MAIN

ORG0030H

MAIN:MOVSP,#60HMOVR0,#2FHMOVR2,#0FFHORG伪指令说明其后面程序的目标代码在存储器中存放的起始地址。0000H0030H程序存储器X5X6X3X4…………X1X2目前一百二十八页\总数一百九十一页\编于二十点§4-2汇编语言程序设计

一、简单程序设计例:设内部RAM40H,41H单元中分别存放着8位二进制数,要求取出两个单元中的低半字节,并成一个字节后,存入50H单元中。

MOVR1,#40H;设置R1为数据指针MOVA,@R1;取出第一个单元中的内容ANLA,#0FH;取第一个数的低半字节SWAPA ;移至高半字节INCR1 ;修改数据指针XCHDA,@R1 ;取第二个单元低半字节SWAPAMOV50H,A ;存放结果RET目前一百二十九页\总数一百九十一页\编于二十点§4-3分支程序设计

例:

x,y均为8位二进制数,设x存入R0,y存入R1,求解:目前一百三十页\总数一百九十一页\编于二十点

START:CJNE R0,#00H,SUL1

;X0

则转移SUL1 MOV R1,#00H ;X=0,R1(Y)←0SJMP SUL2SUL1:JC NEG

;两数不等,若X<0,转向NEGMOV R1,#01H;X>0,R1(Y)←01HSJMPSUL2NEG:MOV R1,#0FFH ;X<0,R1(Y)←0FFHSUL2:RET;目前一百三十一页\总数一百九十一页\编于二十点§4-4循环结构程序设计

目前一百三十二页\总数一百九十一页\编于二十点例:将外部存储器8000H开始的50个单元清零。

CLEAR:CLRAMOVDPTR,#8000H;工作单元首址送指针MOVR2,50 ;置循环次数CLEAR1:MOVX@DPTR,AINCDPTR ;修改指针

DJNZR2,CLEAR1 ;控制循环

RET目前一百三十三页\总数一百九十一页\编于二十点例:设计100ms延时程序。解:计算机执行一条指令需要一定的时间,由一些指令组成一段程序,并反复循环执行,利用计算机执行程序所用的时间来实现延时,这种程序称为延时程序。如当系统使用12MHz晶振时,一个机器周期为1μs,计算执行次数约50000次,就可以达到延时100ms的目的。对于50000次循环可采用外循环、内循环嵌套的多重循环结构。目前一百三十四页\总数一百九十一页\编于二十点程序清单:START:ORG1000HMOVR6,#0C8H;外循环200次

LOOP1:MOVR7,#0F8H;内循环250次LOOP2:DJNZR7,LOOP2 ;延时2μs×250=500μsDJNZR6,LOOP1 ;延时500μs×200=100msRET

2μs×250=500μs500μs×200=100ms目前一百三十五页\总数一百九十一页\编于二十点§4-5子程序设计

子程序名即为子程序入口标号。调用子程序之前要检查堆栈是否已设置好。用RET结束子程序,并保证保证栈平衡。子程序嵌套须考虑堆栈容量。提供足够的调用信息:子程序名、子程序功能、入口参数和出口参数、子程序占用的硬件资源、子程序中调用的其他子程序名。目前一百三十六页\总数一百九十一页\编于二十点在汇编语言源程序中使用子程序,需要强调注意两个问题: ①参数传递(入口参数和出口参数) ②现场保护(占用的硬件资源和栈平衡)目前一百三十七页\总数一百九十一页\编于二十点例:把内部RAM40H单元中一个字节的十六进制数转换成两位ASCII码,结果存放在内部RAM的50H,51H两个单元中。可以用堆栈进行参数传递。MAIN:MOV R1,#50H;R1为存结果的指针

MOV A,40H;A为需转换的十六进制数

SWAP A;先转换高位半字

PUSH ACC;压栈

LCALLHEASC;调用将低半字节的内容转换

;成ASCII码子程序HEASC

POP ACCMOV @R1,A;存高半字节转换结果

INC R1PUSH 40H目前一百三十八页\总数一百九十一页\编于二十点

LCALL HEASC

POP ACC MOV @R1,A ;存低半字节转换结果HR1:SJMP HR1;------------------------------------------------------------;功能:将低半字节的内容转换成ASCII码;入口参数:栈顶;出口参数:栈顶;------------------------------------------------------------HEASC: MOV R0,SP DEC R0 DEC R0 ;R0指向入口参数地址

XCH A,@R0 ;取被转换参数

ANL A,#0FH ;保留低半字节

MOV DPTR,#TAB ;查表

MOVC A,@A+DPTR XCH A,@R0 ;结果送回堆栈

RETTAB: DB30H,31H,32H,…

目前一百三十九页\总数一百九十一页\编于二十点

子程序调用中应注意的问题

由于子程序调用过程中,CPU自动使用了堆栈,因此,容易出现以下几种错误:(1)忘记给堆栈指针SP赋初值,堆栈初始化位置与第1组工作寄存器重合,如果以不同的方式使用了同一个内存区域,会导致程序乱套。(2)程序中的PUSH和POP没有配对使用,使RET指令执行时不能弹出正确的断点地址,造成返回错误。(3)堆栈设置太小,使栈区溢出。

目前一百四十页\总数一百九十一页\编于二十点§4-6程序设计举例例:编程完成始终统计来自P1口的数据中正数、负数、零的个数的任务。解:设R0、R1、R2三个工作寄存器分别为统计正数、负数、零的个数的计数器。目前一百四十一页\总数一百九十一页\编于二十点START:CLRAMOVR0,A ;+统计

MOVR1,A ;-统计

MOVR2,A ;0统计

ENTER:MOVA,P1 ;自P1口取一个数

JZZERO ;该数为0,转ZEROJBP1.7,NEG ;该数为负,转NEGINCR0 ;该数不为0、不为负,则必为正数

SJMPENTER ;循环自P1口取数

ZERO:INCR2 ;零计数器加1SJMPENTERNEG:INCR1 ;负数计数器加1SJMPENTER目前一百四十二页\总数一百九十一页\编于二十点例:根据A的位状态散转到不同的处理程序。BIT-JMP:JBACC.0,LP0;A累加器D0为1,则转LP0

JBACC.1,LP1

JBACC.2,LP2JBACC.3,LP3JBACC.4,LP4

JBACC.5,LP5JBACC.6,LP6JBACC.7,LP7

RETLP0:ACALLPRG0;调相应子程序

……..

LJMP XXXLP1:ACALLPRG1…….. LJMP XXXLP7: ACALLPRG7…….. LJMP XXX目前一百四十三页\总数一百九十一页\编于二十点 设:将R3中的二位十六进制数转换成七段显示代码存放在R4、R5中。(1)根据电路图,做出0F的七段显示代码表;(2)分离R3,分别查表。8A0800R3R4R5【例4-6-5】十六进制数转换成七段显示代码。目前一百四十四页\总数一百九十一页\编于二十点START:PUSH A MOV DPTR,#TAB ;置表首地址

MOV A,R3 ;取十六进制数

ANL A,#0FH ;处理低4位

MOVC A,@A+DPTR

;查表,取对应七段显示码

MOV R5,A ;低4位七段显示码存入R5 MOV A,R3 ;取高4位十六进制数

ANL A,#0F0H ;处理高4位

SWAP A ;A中高4位与低4位交换

MOVC A,@A+DPTR

;查表,取高4位七段显示码

MOV R4,A ;高4位七段显示码存入R1 POP A RETTAB: DB 40H,79H,24H,30H,19H,12H,02H,78H 00H,18H,08H,03H,46H,21H,06H,0EH目前一百四十五页\总数一百九十一页\编于二十点例:电路如图,利用单片机内部的定时器/计数器实现喇叭1秒间断发声。设单片机振荡频率fosc=12MHz。分析:单片机内部定时器/计数器,按定时工作方式,最长定时时间只有65.536ms。要达到1秒定时可采用定时器与软件程序结合完成。即:采用定时器1中断定时50ms,用R3做秒计数器,从而实现对喇叭的1秒定时控制。目前一百四十六页\总数一百九十一页\编于二十点

ORG 0000H ;程序入口

AJMP MAIN ;转向主程序

ORG 001BH ;T1中断入口地址

AJMP CONT ;转到中断服务子程序

ORG 30HMAIN: MOVTMOD,#10H ;置定时器1为工作方式1 MOVTH1,#3CH ;置50ms定时初值

MOV TL1,#0B0H SETB EA ;CPU开中断

SETBET1 ;定时器定时器1开中断

MOV R3,#0 ;秒计数初值

SETB P1.0 ;喇叭初始时为不响

SETBTR1 ;启动定时器1NEXT: NOP ;其它工作

SJMP NEXT目前一百四十七页\总数一百九十一页\编于二十点T1中断服务子程序CONT: INC R3 CJNE R3,#20,EXIT

CPL P1.0 ;中断服务子程序主要工作

MOV R3,#0EXIT:

MOV TH1,#3CH ;重置50ms定时初值

MOV TL1,#0B0H SETBTR1 ;启动定时器1 RETI END目前一百四十八页\总数一百九十一页\编于二十点第五章MCS-51系统扩展技术

★单片机的用法★存储器的扩展★I/O的扩展目前一百四十九页\总数一百九十一页\编于二十点§5-1单片机的用法(重点)一、单片用法(最小应用系统)

MCS-51单片机内部带有程序存储器时,就是一个最简单的最小应用系统,许多实际应用系统就是用这种成本低和体积小的单片结构实现了高性能的控制。该系统的特点如下:

(1)单片机提供了P0、P1、P2、P3四个I/O口,32根I/O线。

温馨提示

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

评论

0/150

提交评论