首页 单片机高锋版答案全集

单片机高锋版答案全集

举报
开通vip

单片机高锋版答案全集单片机高锋版答案全集 单片微型计算机原理与接口技术_髙锋版 课后答案 第一章 略 第二章 【单片机的基本结构】 思考与练习题解析 【2-1】8()C51单片机在片内集成了哪些主要逻辑功能部件?各个逻辑部件的最主要功能是什么? 【答】80C51单片机在片内主要包含中央处理器CPU(算术逻辑单元ALU及控制器等)、只读存储器ROM、读,写存储器RAM、定时器,计数器、并行I,O口Po,P3、串行口、中断系统以及定时控制逻辑电路等,各部分通过内部总线相连。 1(中央处理器(CPU) 单片机中的中央处理器...

单片机高锋版答案全集
单片机高锋版答案全集 单片微型计算机原理与接口技术_髙锋版 课后答案 第一章 略 第二章 【单片机的基本结构】 思考与练习题解析 【2-1】8()C51单片机在片内集成了哪些主要逻辑功能部件?各个逻辑部件的最主要功能是什么? 【答】80C51单片机在片内主要包含中央处理器CPU(算术逻辑单元ALU及控制器等)、只读存储器ROM、读,写存储器RAM、定时器,计数器、并行I,O口Po,P3、串行口、中断系统以及定时控制逻辑电路等,各部分通过内部总线相连。 1(中央处理器(CPU) 单片机中的中央处理器和通用微处理器基本相同,是单片机的最核心部分,主要完成运算和控制功能,又增设了“面向控制”的处理功能,增强了实时性。80C51的CPU是一个字长为8位的中央处理单元。 2(内部程序存储器 根据内部是否带有程序存储器而形成三种型号:内部没有程序存储器的称为80C31;内部带ROM的称为80c51,80c51共有4 KB掩膜ROM;内部以EPROM代替RoM的称为87C51。 程序存储器用于存放程序和 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 格、原始数据等。 3(内部数据存储器(RAM) 在单片机中,用读,写存储器(RAM)来存储程序在运行期间的工作变量和数据。80C51中共有256个RAM单元。 4(I,O口 单片机提供了功能强、使用灵活的I,O引脚,用于检测与控制。有些I,O引脚还具有多 种功能,比如可以作为数据总线的数据线、地址总线的地址线或控制总线的控制线等。有的单片机I,0引脚的驱动能力增大。 5(串行I,O口 目前高档8位单片机均设置了全双工串行I,0口,用以实现与某些终端设备进行串行通信,或与一些特殊功能的器件相连的能力,甚至用多个单片机相连构成多机系统。有些型号的单片机内部还包含两个串行I,O口。 6?定时器,计数器 80c51单片机内部共有两个16位定时器,计数器,80C52则有3个16位定时器,计数器。 定时器,计数器可以编程实现定时和计数功能。 7(中断系统 80C51单片机的中断功能较强,具有内、外共5 个中断源,具有两个中断优先级。 8(定时电路及元件 单片机内部设有定时电路,只需外接振荡元件。近年来有些单片机将振荡元件也集成到 芯片内部。单片机整个工作是在时钟信号的驱动下,按照严格的时序有规律地一个节拍一个 节拍地执行各种操作。 【2-2】80C51单片机引脚有哪些第二功能? 【答】80C51单片机的P0、P2和P3引脚都具有第二功能。 第一功能 第二变异功能 P0.0,P0.7 地址总线Ao,A7,数据总线D0~D7 P2.0,P2.7 地址总线A8~A15 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INT0外部中断0) P3.3 IINT1(外部中断1) P3.4 TO(定时器,计数器0的外部输入) P3.5 T1(定时器,计数器0的外部输出) P3.6 WR(外部数据存储器或I,O的写选通) P3.7 RD外部数据存储器或I,O的读选通) 【2-3】程序计数器PC和数据指针DPTR有哪些异同? 【答】程序计数器PC中存放的是下一条将要从程序存储器中取出的指令的地址。DPTR是数据指针,在访问外部数据存储器或I,O时,作为地址使用;在访问程序存储器时,作为基址寄存器。 ?PC和DPTR都是与地址有关的16位寄存器。其中PC与程序存储器的地址有关,而DPTR与数据存储器或I/O的端口地址有关。作为地址寄存器使用时,PC与DPTR都是通过P0和P2口输出的。PC的输出与ALE及PSEN信号有关,DPTR的输出则与ALE、WR和RD信号有关。 ?PC只能作为16位寄存器。PC是不可访问的,它不属于特殊功能寄存器,有自己独特的变化方式。DPTR可以作为16位寄存器,也可以作为两个8位寄存器DPL和DPH。DPTR是可以访问的,DPL和DPH都位于特殊功能寄存器区中。 【2—4】 80C51单片机的存储器在结构上有何特点,在物理上和逻辑上各有哪几种地址空间?访问片内RAM和片外RAM的指令格式有何区别? 【答】80C5l单片机采用哈佛(Har—yard)结构,即将程序存储器和数据存储器截然分开,分别进行寻址。不仅在片内驻留一定容量的程序存储器和数据存储器及众多的特殊功能寄存器,而且还具有较强的外部存储器扩展能力,扩展的程序存储器和数据存储器寻址范围都可达64 KB。 1(在物理上设有4个存储器空间 ?片内程序存储器; ?片外程序存储器; ?片内数据存储器; ( ?片外数据存储器。 2(在逻辑上设有3个存储器地址空间 , 片内、片外统一的64 KB程序存储器地址空间。 , 片内256字节(80C52为384字节)数据存储器地址空间。 片内数据存储器空间在物理上又包含两部分: , 对于80C51型单片机,0,127字节为片内数据存储器空间;128,255字节为特殊功能寄存器(SFR) 空间(实际仅占用了20多个字节)。 , 对于80C52型单片机,O,127字节为片内数据存储器空间;128,255字节共128个字节是数据 存储器和特殊功能寄存器地址重叠空间。 片外64 KB的数据存储器地址空间。 在访问3个不同的逻辑空间时,应采用不同形式的指令,以产生不同存储空间的选通信号。访问片内RAM采用MOV指令,访问片外RAM则一定要采用MOVX指令,因为MOVX指令会产生控制信号RD或WR,用来访问片外RAM。访问程序存储器地址空间,则应采用MOVC指令。 【2—5】80C51单片机的EA信号有什么功能?在使用80C51时,EA信号引脚应如何处理?在使用80C31时,EA信号引脚应如何处理? 【答】80C51单片机的EA信号被称为“片外程序存储器访问允许信号”。CPU访问片内还是片外程序存储器,可由EA引脚所接的电平来确定: , EA引脚接高电平时,程序从片内程序存储器地址为0000H开始执行,即访问片内存储器;当PC 值超出片内ROM容量时,程序会自动转向片外程序存储器空间执行。片内和片外的程序存储器地 址空间是连续的。 , EA引脚接低电平时,迫使系统全部执行片外程序存储器0000H开始存放的程序。对于有片内ROM 的80C51,87C51单片机,应将EA引脚接高电平。在使用80C31单片机时,EA信号引脚应接低电 平,即此时程序存储器全部为外部扩展。 【2—6】80C51单片机片内RAM低128个存储单元划分为哪3个主要部分?各部分主要功能是什么? 【答】80C51片内RAM的低128个存储单元划分为3个主要部分: ?寄存器区。共4组寄存器,每组8个存储单元,各组以R0,R7作为单元编号。常用于保存操作数及中间结果等。:R0,R7也称为“通用工作寄存器”,占用00H,1FH共32个单元地址。 ?位寻址区。单元地址为20H~2FH,既可作为一般RAM单元使用,按字节进行操作,也可对单元中的每一位进行位操作。因此,称为“位寻址区”。寻址区共有16个RAM单元,共计128位,位地址为OOH,7FH。 ?用户RAM区。在内部RAM低128单元中,除去前面两个区,剩下80个单元,单元地址为30H,7FH。在用户RAM区内可以设置堆栈区。 【2—7】程序存储器的哪些单元被保留用于特定场合? 【答】80C51单片机复位后,程序计数器PC的地址为0000H,所以系统从0000H单元开 始取指,并执行程序。0000H是系统的启动地址,一般在该单元设置一条绝对转移指令,使之转向用户主程序处执行。 0003H,002DH单元被保留用于6个中断源的中断服务程序的入口地址,故有以下7个特定地址被保留: 复位 0000H 外部中断O 0003H 计时器TO溢出 000BH 外部中断1 0013H 计时器T1溢出 001BH 串行口中断 0023H 计时器T2,T2EX 002BH(仅对80C52单片机) 由于每个中断入口之间的间隔仅为8个地址单元,所以在程序设计时,通常在这些中断入口处设置一条无条件转移指令,使之转向对应的中断服务子程序处执行。 【2—8】80C51单片机设有4个通用工作寄存器组,有什么特点?如何选用?如何实现工作寄存器的现场保护? 【答】片内数据RAM区的O,31(OOH,1FH),共32个单元,是4个通用工作寄存器组,每个组包含8个8位寄存器,编号为R0,R7,工作寄存器组如表2-l所列。在某一时刻,只能选用一个寄存器组。可以通过软件对程序状态字PSW中:RS0、RSl两 位的设置来实现。设置RS0,RSl时,可以对PSW采用字节寻址方式,也可以采用位寻址方 式,间接或直接修改RS0、RSl的内容。例如,若(RS0、RSl均为1,则选用工作寄存器3组为当前工作寄存器。若需要选用工作寄存器2组,则只需将RS0改成0(可用位寻址方式 (即“CLR PSW.3”;其中:PSW.3为RS0位的符号地址)来实现。特别是在中断嵌套时,只要通过软件对程 序状态字PSW中的RS0、RSl两位进行设置,切换工作寄存器组,就可以极其方便地实现对工作寄存器的现场保护。 【2—9】什么是堆栈?堆栈有哪些功能? 设计时,为什么还要对SP重新赋值? 表2—1工作寄存器组 ?????????????????????????? ? RSI ? RS0 ? 组号 ? 寄存器RO,R7地址 ? ?????????????????????????? ? O ? 0 ? O组 ? 00H,07H ? ?????????????????????????? ? O ? 1 ? l组 ? 08H,OFH ? ?????????????????????????? ? 1 ? O ? 2组 ? :10H,17H ? ?????????????????????????? ? 1 ? l ? 3组 ? 18H,1FH ? ?????????????????????????? 堆栈指针SP的作用是什么?在程序 【答】堆栈是在片内数据RAM区中,数据按照“先进后出”或“后进先出”原则进行管理的区域。堆栈功能有两个:保护断点和保护数据。在子程序调用和中断操作时这两个功能特别有用。在80C51单片机中,堆栈在子程序调用和中断时会把断点地址自动进栈和出栈。进栈和出栈的指令(PUSH、POP)操作可用于保护现场和恢复现场。由于子程序调用和中断都允许嵌套,并可以多级嵌套,而现场的保护也往往使用堆栈,所以一定要注意给堆栈以一定的深度,以免造成堆栈内容的破坏而引起程序执行的“跑飞”。 堆栈指针SP在80C51中存放当前的堆栈栈顶所指存储单元地址的一个8位寄存器。80C51单片机的堆栈是向上生成的,即进栈时SP的内容是增加的;出栈时SP的内容是减少的。 系统复位后。80C51的SP内容为07H。若不重新定义,则以07H为栈底,压栈的内容从08H单元开始存放。但工作寄存器R0,R7有4组,占有内部RAM地址为00H,1FH,位寻址区占有内部RAM地址为20H,2FH。若程序中使用了工作寄存器1,3组或位寻址区,则必须通过软件对SP的内容重新定义,使堆栈区设定在片内数据RAM区中的某一区域内(如30H),堆栈深度不能超过片内RAM空间。 【2-10】80C51单片机的特殊功能寄存器SFR区有哪些特点? 【答】特殊功能寄存器SFR区是80C51单片机中各功能部件所对应的寄存器区,用来存放相应功能部件的控制命令寄存器、状态寄存器或数据寄存器的区域。这是80C51系列单片机中最有特色的部分。 ( 80C51系列单片机设有128字节片内数据RAM结构的特殊功能寄存器区。除程序计数器PC和4个通用工作寄存器组外,其余所有的寄存器都在这个地址空间之内。特殊功能寄存器在128字节空间中只分布了很小部分,这为80C51单片机系列功能的增加提供了极大的可能性。所有80C51单片机系列功能部件的增加和扩展几乎都是通过增加特殊功能寄存器来达到的。 在80C51的21个特殊功能寄存器中,字节地址中低位地址为0H或8H的特殊功能寄存 器,除有字节寻址能力外,还有位寻址能力。其中对于PO,P1口4个特殊功能寄存器的位寻址使I,O的控制功能得到了增强。 【2-11】80C51单片机的布尔处理机包括哪些部分?它们具有哪些功能?共有多少个单元可以位寻址? 【答】在80C51单片机系统中,专门设置了一个结构完整、功能极强的布尔(位)处理机。这是一个完整的一位微计算机,它具有自己的CPU、寄存器、I,0、存储器和指令集。80C51单片机把8位机和布尔(位)处理机的硬件资源复合在一起,这是80C51系列单片机的突出优点之一,给实际应用带来了极大的方便。 布尔处理机系统包括以下几个功能部件。 ?位累加器:借用进位标志位CY。在布尔运算中,cY既是数据源之一,又是运算结果的存放处和位数据传送的中心。根据CY的状态实现程序条件转移:JC rel、JNC reI ?位寻址的RAM:内部RAM位寻址区中的0,127位(20H,2FH)。 ?位寻址的寄存器:特殊功能寄存器SF、R中的可位寻址的位。 ?位寻址的I,O口:并行I,O口中可位寻址的位(如P1(0)。 ?位操作指令系统:位操作指令可实现对位的置位、清零、取反、位状态判跳、传送、位逻辑运算、位输入,输出等操作。 布尔处理机的程序存储器和ALU与字节处理器合用。利用内部并行I,O口的位操作,提高了测控速度,增强了实时性。利用位逻辑操作功能把逻辑表达式直接变换成软件进行设计和运算,免去了过多的数据往返传送、字节屏蔽和测试分支,大大简化了编程,增强了实时性能。还可实现复杂的组合逻辑处理功能。因此,一位机在开关决策、逻辑电路仿真和实时控制方面非常有效。 可以位寻址的单元包括两部分:一是内部RAM位寻址区中的0,127位(20H,2FH); 二是SFR中字节地址的低位地址为0H或8H的特殊功能寄存器。 【2一12】80C5l单片机的节拍、状态、机器周期、指令周期是如何设置的?当主频为12 MHz时,各种周期等于多少微秒? 【答】把单片机振荡脉冲的周期定义为节拍。节拍经过二分频后,就是单片机的时钟信号。时钟信号周期定义为状态S,其前半周期对应的节拍叫P1,后半周期对应的节拍叫P2。 一个机器周期宽度为6个状态,并依次表示为S1,S6。由于一个机器周期共有12个振荡脉冲周期, 因此,机器周期就是振荡频率的1,12。机器周期是80C51单片机的最小时间单位。执行一条指令的时间被称为“指令周期”,80C51单片机执行一条指令的时间包含有1个、2个或4个机器周期。当主频为12 MHz时,振荡脉冲的周期为1,12μs,状态周期为1,6μs,机器周期为1 μs, 指令周期为1,4μs 【2一13】程序存储器指令地址、堆栈地址和外接数据存储器地址各使用什么指针?为什么? 【答】程序存储器指令地址使用程序计数器PC指针,PC中存放的是下一条将要从程序存储器中取出的指令的地址。程序计数器PC变化的轨迹决定程序的流程。PC最基本的工作方式是自动加1。在执行条件转移或无条件转移指令时,将转移的目的地址送入程序计数器,程序流向发生变化。在执行调用指令或响应中断时,将子程序的入口地址或者中断矢量地址送人PC,程序流向发生变化。 堆栈地址使用堆栈指针(SP。SP在80C51中存放当前的堆栈栈顶所指存储单元地址,是一个8位寄存器,对数据按照“先进后出”原则进行管理。外接数据存储器地址使用数据指针DPTR。DPTR是一个16位特殊功能寄存器,主要功能是作为片外数据存储器或I,0寻址用的地址寄存器,这时会产生RD或wR控制信号,用于单片机对外扩的数据存储器或I,0的控制。数据指针DPTR也可以作为访问程序存储器时的基址寄存器,此时是寻址程序存储器中的表格、常数等单元,而不是寻址指令。 【2-14】请说明80C51单片机ALE引脚的时序功能,并举例说明其在系统中有哪些应用? 【答】80C51单片机ALE引脚是地址锁存允许信号。在系统中主要有两种应用: ?在访问片外存储器或I,O时,用于锁存低8位地址,以实现低8位地址A0,A7与数据DO,D7的隔离。在ALE的下降沿将P0口输出的地址A0,A7通过锁存器锁存,然后在PO口上出现DO,D7。 ?由于ALE以1,6振荡频率的固定速率输出,因此,可以作为对外输出的时钟或外部定 时脉冲,比如ALE信号可以做ADC0809的时钟。 【2—15】说明80C51单片机的程序状态字PSW的主要功能。 【答】程序状态字PSW(Program Status Word)是一个程序可访问的8位寄存器,其内容的主要部分是算术逻辑运算单元ALU的输出,例如,奇偶校验位P、溢出标志位OV、辅助进位标志位AC及进位标志位CY,都是ALU运算结果的直接输出。一些条件转移指令就是根据PSW中的相关标志位的状态来实现程序的条件转移。 程序状态字PSW如图2-1所示。 CY AC FO Rsl l RS0 OV — P l 图2—1程序状态字PSW 1(P——奇偶标志位 该位表示累加器A中值为1的个数的奇偶性。若累加器A中值为1的个数是奇数,则P 置位(奇校验);否则,P清除(偶校验)。 在串行通信中,常以传送奇偶校验位来检验传输数据的可靠性。通常将P置入串行帧中的奇偶校验位。 2(OV——溢出标志位 当执行运算指令时,由硬件置位或清除,以指示运算是否产生溢出。OV置位表示运算结果超出了目的寄存器A所能表示的带符号数的范围(一128,+127)。 若以Ci表示位i向位i+1有进位,则0V=C6?C7。当位6向位7有进位(或借位),而位7不向cY进位(或借位);或当位7向c进位(或借位),而位6不向位7进位(或借位)时,OV标志置位,表示带符号数运算时运算结果是错误的;否则,清除0V标志,运算结果正确。 对于MUL乘法,当A、B两个乘数的积超过255时,OV置位;否则,OV=0。 对于DIV除法,若除数为0,OV=l;否则,OV=O。 3(RSl、RS0——4组工作寄存器组选择位 用于设定当前工作寄存器的组号,参见表2—1。 4(AC——辅助进位标志位 当进行加法或减法运算时,若低4位向高4位数发生进位(或借位),(AC将被硬件置位;否则,被清除。在十进制调整指令DA中要用到AC标志位状态。 5(CY——进位标志位 在进行算术运算时,可以被硬件置位或清除,以表示运算结果中高位是否有进位(或借位)。在布尔处 理器中,CY被认为是位累加器。 6(F0——用户标志位 开机时该位为0。用户可根据需要,通过位操作指令将FO置1或者清0。当CPU执行对F0位测试条件转移指令时,根据FO的状态实现分支转移,相当于“软开关”。 【2—16】80C51单片机的片内外最大存储容量可达多大? ’ 【答】80C51单片机存储容量应包括程序存储器和数据存储器两部分。80C51具有16条地址线,PC指针为16位,因此,程序存储器最大容量为64 KB。数据指针DPTR为16位,因此,外扩数据存储器最大容量为64 KB,再加上片内具有的256个存储单元,80C51单片机的 片内外最大存储容量可达128(256 KB。采用其他地址译码方法,80C51单片机存储容量会得到更大的扩展。 【2-17】80C51单片机片外数据存储器与片内数据存储器地址允许重复,并与程序存储器地址也允许重复,如何区分? 【答】80C5l单片机对片外数据存储器、片内数据存储器及程序存储器采用不同的指令,会产生不同的控制信号。片外数据存储器有读RD和写WR控制信号,程序存储器有读PSEN控制信号,因此,扩展时虽然数据线和地址线重复,但由不同的控制信号加以区别。片内数据存储器地址采用MOVC指令,不会产生读RD和写WR控制信号。 【2-18】使80C51单片机复位有哪几种方法?复位后单片机的初始状态,即各寄存器及RAM中的状态如何? 【答】复位操作有上电自动复位、按键电平复位和外部脉冲复位3种方式。上电自动复位是通过外部复位电路的电容充电来实现的;按键电平复位是通过按压键使复位端经电阻与VCC接通而实现的;外部脉冲复位是由外部提供一个宽度大于两个机器周期复位脉冲而实现的。 复位操作把Pc初始化为0000H,使单片机从0000H单元开始执行程序。当由于程序运行出错或操作错误使系统处于死锁状态时,可以按复位键以重新启动,也可以通过监视定时器来强迫复位。 除PC之外,复位操作还对其他一些特殊功能寄存器有影响,SFR的复位状态如表2-2所列。复位操作还对单片机的个别引脚信号有影响。例如在复位期间,ALE和PSEN信号变为无效状态,即ALE=1,PSEN=1。复位操作对RAM内容没有影响。 表2-2 SFR的复位状态 ???????????????????????????????? ? 寄存器 ? 复位时的内容 ? 寄存器 ? 复位时的内容 ? ???????????????????????????????? ? PC ? 00H ? TCON ? 0X000000B ? ???????????????????????????????? ? ACC ? 00H ? TLO ? OOH ? ???????????????????????????????? ? B ? 00H ?THO ? OOH ? ???????????????????????????????? ? PSW ? 00H ? TLl ? 00H ? ???????????????????????????????? ? SP ? 07H ? THl ? 00H ? ???????????????????????????????? ? DPTR ? 00H ?SCON ? 00H ? ???????????????????????????????? ? PO~P3 ? FFH ? SBUF ? 不定 ? ???????????????????????????????? ?TMOD ? XX000000B ? PCON ? 0XXX0000B ? ???????????????????????????????? 【2一19】80C51单片机的4个I,O口在使用上有哪些分工和特点? 【答】4个I,O口的分工和特点如下: ? P0口是一个多功能的8位口,可按字节访问也可按位访问。 , 用作I,0口。相当于一个真正的双向口:输出锁存,输入缓冲,但输入时须先将口置l;每根口 线可以独立定义为输入或输出。 , 用作地址,数据复用总线。作数据总线使用时,输入,输出8位数据D0,D7;作地址总 线用 时,输出低8位地址AO,A7。 ? P1口是一个8位口,可按字节访问也可按位访问,因此,P1口不仅可以8位一组进行 输入、输出操作,还可以逐位分别定义各口线为输入线或输出线。输入时有条件,即需要先输出1,将该口设为输入状态。一般作I,o口用。 ? P2口是一个多功能的8位口,可按字节访问也可按位访问。在单片机采用并行扩展方式时,P2口 作为地址总线的高8位D8,D15。 ? P3口是一个多功能的8位口,可按字节访问,也按可位访问。可作为I,0口使用,为准双向口。 既可以字节操作,也可以位操作;既可以8位口操作,也可以逐位定义口线为输入线或输出线。 P3可替代输入、输出功能。 替代输入功能: P3(0一一RXD,串行输入口。 P3(2一一IN'I、0,外部中断O的请求。 P3(3一一INTl,外部中断1的请求。 P3(4一TO,定时器,计数器O外部计数脉冲输入。 P3(5一一T1,定时器,计数器1外部计数脉冲输入。 替代输出功能: P3(1一一TXD,串行输出口。 P3(6一一wR,外部数据存储器写选通,输出,低电平有效。 P3(7,RD,外部数据存储器读选通,输出,低电平有效。 【2—20】80C51单片机的I,0口(P0,P3用作通用I,O口时,要注意什么? 【答】PO,P3用作通用I,0口时,输入时都须先将相应端口锁存器置1,类似于置为输入方式。 I,O口:Po,P3都具有位地址,所以每根I,o口线可以独立定义为输入或输出。 PO口输出时为漏极开路输出,与NM0S的电路接口时,必须要用电阻上拉,才能有高电平输出;输入时为悬浮状态,为一个高阻抗的输入口。P1,P3口输出级接有内部上拉负载电阻,能向外提供上拉负载电流,所以不必外接上拉电阻。 【2—2l】80C51单片机有哪几种工作方式?简单说明其应用场合和特点。 【答】80C51单片机共有复位、程序执行、低功耗以及编程和校验4种工作方式。 , 复位方式:是单片机的初始化操作,其主要功能是把程序计数器Pc初始化为0000H,使单片机从000H 单元开始执行程序。除了进入系统的正常初始化之外,当由于程序运行出错或操作错误使系统处于死 锁状态时,为摆脱困境,可以按复位键重新启动,也可以通过监视定时器WDT来强迫复位。 , 程序执行方式:是单片机的基本工作方式。 , 低功耗方式:80C5l单片机有两种低功耗方式,即待机方式和掉电保护方式。用于降低功耗,提高可 靠性。 , 编程和校验方式:对于片内具有EPROM型程序存储器的87C51(87C52)和片内具有 闪速存储器的 89C51(89C52)、78E51(78E52)等单片机,可以通过编程来修改程序储器中的程序。 【2—22】举例说明80C51单片机在工业控制系统中低功耗工作方式的意义及实现方法。 【答】有些产品和系统要求工作时功耗尽量低,有的要求在停电时采用备用电池能工作较长时间,以上这些设计和要求往往与工业控制系统的低功耗设计密切相连。工业控制系统低功耗设计除了降低功耗,节省能源,满足绿色电子的基本要求之外,还能提高系统的可靠性,满足便携式、电池供电等特殊应用场合产品的要求。 80C51单片机有两种低功耗方式,即待机(空闲)方式和掉电(停机)保护方式。待机(空闲)方式和掉电(停机)保护方式都是由电源控制寄存器PCON的有关位来控制的。电源控制寄存器是一个逐位定义的8位寄存器,其格式如图2-2所示。 ???????????????????????? ?SMOD————— ?GFl GF0 PD IDl。 ? ???????????????????????? 图2-2电源控制寄存器PCON SMOD 波特率倍增位,在串行口工作方式时,设SMOD=1,则波特率加倍。 GFl、GF0 通信标志位1、O,由软件置位或复位。 PD 掉电方位式,PD=1,则进入掉电工作方式。 IDL 待机方式位,IDL=1,则进入待机工作方式。 若PD位和IDL位同时为1,则先激活掉电方式。复位时PCON中所有位均为0。 1(待机方式 ? 使用指令使PCON寄存器IDL位置1,则80C51进入待机方式。 , 此时振荡器仍然运行,并向中断逻辑、串行口和定时器,计数器电路提供时钟,中断功 能继续 存在。 , 向CPU提供时钟的电路被阻断,因此,CPU不能工作,与CPU有关的SP、PC、PSW、ACC以及全部 通用寄存器都被冻结在原状态。 ? 可以采用中断方式或硬件复位来退出待机方式。 在待机方式下,若产生一个外部中断请求信号,在单片机响应中断的同时,IDL位被硬件自动清 0,单片机就退出待机方式,而进入正常工作方式。在中断服务程序中安排一条RETI指令,就可以使 单片机恢复正常工作,从设置待机方式指令的下一条指令开始继续执行程序。 在待机方式下,振荡器仍然在工作,因此,硬件复位只需保持两个机器周期的高电平就可以完成。 RST端复位信号直接将IDL位清O,从而退出待机方式。CPU则从进入待机方式的下一条指令开始重新 执行程序。 2(掉电保护方式 ( ?PCON寄存器的PD位控制单片机进入掉电保护方式。 80C51单片机在检测到电源故障时,除进行信息保护外,还应把PD位置1,使之进入掉电保护方式。此时单片机一切工作都停止,只有内部RAM单元的内容被保护。 ?只能依靠复位退出掉电保护方式。 80C51单片机备用电源由VCC端引人。当VCC恢复正常后,只要硬件复位信号维持10 ms,就能使单片机退出掉电保护方式,CPU则从进入待机方式的下一条指令开始重新执行 【2—2】单片机“面向控制”应用的特点,在硬件结构方面有哪些体现? 【答】单片机“面向控制”应用的特点,在硬件结构方面有以下几个方面的体现: 提供了数量多、功能强、使用灵活的I,O口和串行口。在80C51单片机系统中,还特别设置了布尔(位)处理机,对并行I,O口的口线直接进行位的控制,对“面向控制”的应用带来了极大方便。 设置多个中断源,并具有可编程的中断优先级,对于实时控制非常有利。 提供了多个定时器,计数器,有的单片机内部还具有监视定时器,有利于提高单片机的实时控制能力和控制的可靠性。 第三章 【单片机的指令系统】 思考与练习题解析 【3—1】什么是指令及指令系统? 【答】控制单片机进行某种操作的命令称为“指令”。单片机就是根据指令来指挥和控制 单片机各部分协调工作。指令由二进制代码表示,指令通常包括操作码和操作数两部分:操作码规定操作的类型,操作数给出参加操作的数或存放数的地址。 所有指令的集合称为“指令系统”。80C51单片机的指令系统专用于80C51系列单片机, 是一个具有255种操作码(OOH,FFH,除A5H外)的集合。 【3—2】80C51单片机的指令系统具有哪些特点? 【答】80C51单片机的指令系统容易理解和阅读。只要熟记代表33种功能的42种助记即可。有的功能如数据传送,可以有几种助记符,如MOV、MOVc、MOVX。而指令功能助 记符与操作数各种寻址方式的结合,共构造出111种指令,而同一种指令所对应的操作码可以多至8种(如指令中Rn对应寄存器R0,R7)。 80C51单片机的指令系统具有较强的控制操作类指令,容易实现“面向控制”的功能;具有位操作类指令,有较强的布尔变量处理能力。 【3—3】简述80C51指令的分类和格式。 【答】80C51的指令系统共有111条指令,按其功能可分为5大类:数据传送类指令(28条)、算术运算类指令(24条)、逻辑运算类指令(25条)、控制转移类指令(17条)和布尔操作(位)类指令(17条)。 指令的表示方法称之为“指令格式”,其内容包括指令的长度和指令内部信息的安排等。在80C51系列的指令系统中,有单字节、双字节和三字节等不同长度的指令。 ?单字节指令:指令只有一个字节,操作码和操作数同在一个字节中。 ?双字节指令:包括两个字节。其中一个字节为操作码,另一个字节是操作数。 ?三字节指令:操作码占一个字节,操作数占两个字节。其中操作数既可能是数据,也可能是地址。 【3—4】简述80C51的指令寻址方式,并举例说明。 【答】执行任何一条指令都需要使用操作数,寻址方式就是在指令中给出的寻找操作数或操作数所在地址的方法。 80C5l系列单片机的指令系统中共有以下7种寻址方式。 ?立即寻址。在指令中直接给出操作数。出现在指令中的操作数称为“立即数”,为了与直接寻址指令中的直接地址相区别,在立即数前面必须加上前缀“#”。 例如:MOV DPTR,#1234H ;1234H为立即数,直接送DPTR ?直接寻址。在指令中直接给出操作数单元的地址。 例如: MOV A,55H ;55H是操作数单元的地址,55H单元内的数据才是操作数,取出后送累加器A ?寄存器寻址。在指令中将指定寄存器的内容作为操作数。因此,指定了寄存器就能得 到操作数。寄存器寻址方式中,用符号名称来表示寄存器。 例如: INC R7 ;R7的内容为操作数,加1后再送回R7 ?寄存器间接寻址。在指令中给出的寄存器内容是操作数的地址,从该地址中取出的才 是操作数。可以看出,在寄存器寻址方式中,寄存器中存放的是操作数;而在寄存器间接寻址 方式中,寄存器中存放的则是操作数的地址。 寄存器间接寻址须以寄存器符号名称的形式表示。为了区别寄存器寻址和寄存器间接寻 址,在寄存器间接寻址中,应在寄存器的名称前面加前缀“@”。 例如: ORL A(@Ro; 当R0寄存器的内容是60H时,该指令功能是以RO寄存器的内容60H为地址,将60H地址单元的内容与累加器A中的数相“或”,其结果仍存放在A中。 ?相对寻址。在指令中给出的操作数为程序转移的偏移量。相对寻址方式是为实现程序的相对转移而设立的,为相对转移指令所采用。 在相对转移指令中,给出地址偏移量(在80C51系列单片机的指令系统中,以“rel”表示,为8位带符号数),把PC的当前值加上偏移量就构成了程序转移的目的地址。而PC的当前值是指执行完转移指令后的PC值,即转移指令的PC值加上转移指令的字节数。转移的目的地址可用如下公式表示: 目的地址=(转移指令所在地址+转移指令字节数)+rel 例如:SJMP 80H ;80H为程序转移的偏移量,即一128。当前PC值减去128后即为转移地址 ?变址寻址。以DPTR或PC作基址寄存器,累加器A作变址寄存器,以两者内容相加形成的16位程序存储器地址作为操作数地址。又称“基址寄存器+变址寄存器间接寻址”。变址寻址方式只能对程序存储 器进行寻址。 例如: MOVC A,@A+DPTR ;功能是把DPTR和A的内容相加,所得到的程序存储器地址单元的内容送A ?位寻址。80C51系列单片机有位处理功能,可以对数据位进行操作,因此,就有相应的位寻址方式。位寻址的寻址范围: ?片内RAM中的位寻址区。 ?可位寻址的特殊功能寄存器位。 例如:MOV c,80H ;功能是把位寻址区的80H位(即P0(0)状态送累加位C 【3—5】访问特殊功能寄存器SFR,可使用哪些寻址方式? 【答】访问特殊功能寄存器SFR的惟一寻址方式是直接寻址方式。这时除了可以单元地址形式(如90H)给出外,还可以寄存器符号形式(如P1)给出。虽然特殊功能寄存器可以使用寄存器符号标志,但在指令代码中还是按地址进行编码的。 【3—6】若访问外部RAM单元,可使用哪些寻址方式? 【答】访问外部RAM单元的惟一寻址方式是寄存器间接寻址方式。片外RAM的64 KB单元,使用DPTR作为间址寄存器,其形式为@DPTR,例如“MOVX A,@DPTR”的功能是把DPTR指定的片外RAM单元的内容送累加器A。 片外RAM低256个单元,除了可使用DPTR作为间址寄存器外,也可使用:R0或R1作间址寄存器。例如“MOVX A,@R0'’即把R0指定的片外RAM单元的内容送累加器A。 【3—7】若访问内部RAM单元,可使用哪些寻址方式? 【答】片内RAM的低128单元可以使用寄存器间接寻址方式,但只能采用R0或R1为间址寄存器,其形式为@Ri(i=0,1)。 片内RAM的低128单元可以使用直接寻址方式,在指令中直接以单元地址形式给出。 片内RAM的低128单元中的20H,2FH有128个可寻址位,还可以使用位寻址方式,对这128个位的寻址使用直接位地址表示。 【3—8】若访问程序存储器,可使用哪些寻址方式? 【答】访问程序存储器可使用的寻址方式有立即寻址方式、变址寻址方式和相对寻址方式三种。立即寻址是指在指令中直接给出操作数。变址寻址方式只能对程序存储器进行寻址,或者说这是专门针对程序存储器的寻址方式。相对寻址方式是为实现程序的相对转移而设立的。这三种寻址方式所得到的操作数或操作数地址都在程序存储器中。 【3—9】MOV、MOVC、MO?(指令有什么区别?分别用于哪些场合?为什么? 【答】MOV指令用于对内部RAM的访问。MOVC指令用于对程序存储器的访问,从程序存储器中读取数据(如表格、常数等)。MOVX指令采用间接寻址方式访问外部数据存储器(有Ri和DPTR两种间接寻址方式。执行MOVX指令时,在P3(7引脚上输出RD有效信号(或在P3(6引脚上输出WR有效信号,可以用做外部数据存储器或I,O的读,写选通信号,与单片机扩展电路有关。 【3—10】说明“DA A”指令功能,并说明二一十进制调整的原理和方法。 【答】“DA A”指令的功能是对两个BCD码的加法结果进行调整。两个压缩型BCD码按二进制数相加之后,必须经过该指令的调整才能得到压缩型BCD码的和数。“DA A”指令对两个BCD码的减法结果不能进行调整。 BCD码采用4位二进制数编码,并且只采用了其中的10个编码,即0000,1001,分别代表BCD码0,9,而10lO,1111为无效码。当两个BCD码相加结果大于9时,说明已进入无效编码区;当两个BCD码相加结果有进位时,说明已跳过无效编码区。若结果进入或跳过无效编码区,则结果是错误的,相加结果均比正确结果小6(差6个无效编码)。 十进制调整的修正方法为:当累加器低4位大于9或半进位标志AC=1时,进行低4位加6修正;当累加器高4位大于9或进位标志CY=l时,进行高4位加6修正。 【3一11】说明80C51单片机的布尔处理机的构造及功能。 【答】80C51单片机内部有一个布尔(位)处理机,具有较强的布尔变量处理能力。布尔处理机实际上是一 位微处理机,它包括硬件和软件。布尔处理机以进位标志CY作为位累加器,以80C51单片机内部RAM的 20H,2FH单元及部分特殊功能寄存器为位存储器,以80C51单片机的PO、P1、P2和P3为位I,O。 对位地址空间具有丰富的位操作指令,包括布尔传送指令、布尔状态控制指令、位逻辑操作指令及位 条件转移指令,为单片机的控制带来很大方便。 【3—12】试分析以下程序段的执行结果。 【答】结果如下: MOV SP,#60tt ;(SP)=60H NOV A,#88tt ;(A)=88H MOV B(#0FFH ;(B)=FFH PUSH ACC ;(SP)=61H,(61H)=88H PUSH B ;(SP)=62H,(62H)=FFH POP ACC ;(A)=FFH,(SP)=61H POP B ;(B)=88H,(SP)=60H 程序段的执行结果:累加器A和寄存器B的内容通过堆栈进行了交换。 注意:80C51单片机的堆栈是按照先进后出的原则进行管理的。 【3-1】已知(A)=7AH,(RO)=30H,(30H)=A5 H,(PSW)=80H。请填写各条指令单独执行后的结果。 【答】结果如下: (1) XCH A,R0 ;(A)=30H,(R0):7AH (2) XCH A,30H ;(A)=A5H,(30H)=7AH,(PSW)=81H (3) XCH A,@R0 ;(A)=R5H,(30H)=7AH,(PSW)=81H (4) XCHD A,@R0 ;(A)=75H,(30H)=AAH,(PSW)=81H (5) SWAP A ;(A)=A7H (6) ADD A,R0 ;(A)=AAH,(PSW)=04H (7) ADD A,30H ;(A)=1FH,(PSW)=81H (8) ADD A,#30H ;(A)=AAH,(PSW)=04H (9) ADDC A,30H ;(A)=20H,(PSW)=01H (10) SUBB A,30H ;(A)=D4H,(PSW)=84H (11) SUBB A,#30H ;(A)=49H,(PSW)=01H 【3—14】已知(30H)=40H,(40H)=10 H,(10H)=00H,(P1)=CAH,请写出执行以下程序段后有关单元的内 容。 【答】有关单元的内容如下: MOV R0,#30H ;(RO)=30H MOV A,@R0 ;(A)=40H MOV Rl,A ;(R1)=40H MOV B,@R1 ;(B)=1OH MOV @R1,P1 ;(40H)=CAH MOV A,@RO ;(A)=40H MOV 10H,#20H ;(10H)=20H MOV 30H,10H ;(30H)=20H 执行以上程序段后,有关单元的内容分别为:(30H)=20H,(40H)=CAH,(10H)=20H,(P1)=CAH。 【3-15】已知(R1)=20 H,(20 H)=AAH,请写出执行完下列程序段后A的内容。 【答】各指令的执行结果如下: MOV A,#55H ;(A)=55H ANL A,#0FFH ;(A)=55H ORL 20H,A ;(20H)=FFH XRL A,@R1 ;(A)=AAH CPL A ;(A)=55H 执行完程序段后,A的内容为5 5 H。 【3-16】阅读下列程序,说明其功能。 【答】对程序注释如下: MOV R0,#30H ;(RO)=30H M0V A,@R0 ;取数 RL A ;(A)×2 MOV R1,A RL A ;(A)x 4 RL A ;(A)×8 ADD A,R1 ;(A)X i0 MOV @R0,A ;存数 功能:将30 H中的数乘以10以后再存回30H中。 条件:30 H中的数不能大于25,25×10=250仍为一个字节。若30H中的数大于25,则应考虑进位。 【3—17】已知两个十进制数分别在内部RAM中的40 H单元和50H单元开始存放(低位在前),其字节长度 存放在内部RAM的30 H单元中。编程实现两个十进制数求和,求和结果存放在40 H开始的单元中。 【答】程序如下: ORG 0000H SJMP MAIN ORG 0030H MAIN: MOV R0,#40H ;被加数首址(又作两个十进制数和的首址 MOV R1,#50H ;加数首址 MOV R2,30H ;字节长度 CLR C PP: MOV A,@R1 ;取加数 ADDC A,@R0 ;带进位加 DA A ;二一十进制数调整 MOV @R0,A ;存和 INC R0 ;修正地址 INC R1 DJNZ R2,PP ;多字节循环加 AJMP $ END 【3—18】编程实现把外部RAM中从8000 H开始的100个字节数据传送到 8100开始的单元中。 【答】程序如下: ORG 0000H SJMP MAIN ORG 0030H MAIN:MOV DPTR,#8000H ;字节数据源首地址 MOV R1,#100 ;字节数据计数器 MOV R2,#01H MOV R3,#00H PP: MOVX A,@DPTR ;读数据 MOV R4,A ;保存读出数据 CLR C MOV A,DPL ;计算得到字节数据目的地址 ADD A,R3 MOV DPL,A MOV A,DPH ADDC A,R2 MOV DPH,A MOV A,R4 ;恢复读出数据 MOVX @DPTR,A ;写数据至目的地址 CLR C ;恢复源数据地址 ( MOV A,DPL SUBB A,R3 MOV DPL,A MOV A,DPH SUBB A,R2 MOV DPH,A INC DPTR ;地址加1 DJNZ R1,PP ;是否传送完? SJMP $ 注意:字节数据源地址和目的地址都在外部RAM中,地址指针都为DPTR,所以要注意DPTR地址指针 的保护和恢复。地址的保护和恢复的方法有多种,如通过堆栈或寄存器。 【3-20】读下列程序,请: ? 写出程序功能,并以图示意。 ? 对源程序加以注释。 ORG 0000H MAIN:MOV DPTR,#TAB MOV R1,#06H LP: CLR A MOVC A,@A+DPTR MOV P1,A LCALL DELAY O(5 s ( 、INC DPTR DJNZ R1,LP AJMP MAIN’ TAB:DB 01H,03H,02H,06H,04H,05H DEL AY0(5 s: ?????? RET END 【答】 ( ? 程序功能:将TAB表中的6个参数依次从P1口中输出(每次输出延时0.5 s),然后 重复输出。P1口输出波形如图3-1所示。这是步进电机三相六拍输出波形。 图3-l Pl口输出波形 ? 注释见源程序右边所述。 ORG 0000H MAIN:MOV DPTR,#TAB ;P1输出参数表首地址 MOV R1,#06H ;P1输出参数有6个 L,P: CLR A MOVC A,@A+DPTR ;查表输出 MOV P1,A LCALL DELAY 0(5 s ;软件延时0(5 S INC DPTR DJNZ R1,LP ;输出参数已有6个 ? AJMP MAIN ;输出参数已有6个,则重复输出 TAB:DB 01H,03H,02H,06H,04H,05H ;参数表 DELAY0(5 s: „„ ;延时0(5 S子程序 RET 【3—21】读下列程序,然后 ? 画出P I(O,P1(3引脚上的波形图,并标出电压V一时间t坐标。 ? 对源程序加以注释。 ORG 0000H START: MOV SP,#20H MOV 30H,#01H MOV P1,#01H MLP0: ACALT, D50ms M07 A,30H CJNE A,#08H,MLPI MOV A,#01H MOV DPTR,#ITAB MLP2: MOV 30H,A MOVC A,@A+DPTR MOV P1,A SJMP Mr,p0 MLPl: INC A SJMP MLP2 ITAB:DB 0,1,2,4,8 ( DB 8,4,2,1 D50ms: ?????? ( 【答】 ? 程序功能:P1(O,P1(3引脚上的波形图如图3—2所示。 图3—2 P1(O,P1(3引脚上的波形图 ? 注释见源程序右边所述。 ORG 0000H START: MOV SP,#20H MOV 30H,#01H MOV P1,#01H MLP0: ACALL ,D50ms ;软件延时50 ms MOV A,30H CJNE A,#08H,MLPI ;判断表格中数据是否取完? MOV A,#01H ;取完,从表头开始取 MOV DPTR,#ITAB ;表格首地址 MLP2: MOV 30H,A MOVC A,@A+DPTR ;取表格中数据 MOV P1,A SJMP MLP0 MLPI: INC A ;表格中数据未取完,准备取下一个 SJMP MLP2 ITAB:DB 0,1,2,4,8 ;表 DB 8,4,2,1 D50ms: „„ ;软件延时50 ms子程序 RET 第四章 【单片机的程序设计】 思考与练习题解析 【4—1】简述下列基本概念:程序、程序设计、机器语言、汇编语言及高级语言。 【答】各基本概念如下。 ?程序:为计算某一算式或完成某一工作的若干指令的有序集合。 ?程序设计:单片机的全部工作概括起来,就是执行程序的过程。为单片机准备这一程 序,即编制程序的工作过程。 ’ ?机器语言:用二进制代码表示的指令系统称为“机器语言系统”,简称为“机器语言”。 ?汇编语言:用英文字符来代替机器语言,这些英文字符称为“助记符’’。用这种助记符表示指令系统的语言称为“汇编语言”或“符号语言”。 ?高级语言:参照数学语言而设计的、近似于人们日常用语的语言。它是面向问题或者 面向过程的语言。这种语言不仅直观、易学、易懂,而且通用性强,易于移植到不同类型的机器中。 【4—2】在单片机领域,目前最广泛使用的是哪几种语言?有哪些优越性?单片机能否直接执行这几种语言? 【答】在单片机领域,目前最广泛使用的是汇编语言和高级语言。 汇编语言编写的程序效率高,占用存储空间小,运行速度快,而且能反映单片机的实际运行情况。但编程比使用高级语言困难,通用性差。单片机不能直接执行汇编语言程序,必须通过人工(或机器)汇编把汇编语言程序转换为机器语言程序。 高级语言不受具体机器的限制,而且使用了许多数学公式和习惯用语,从而简化了程序设计的过程,通用性强,易于移植到不同类型的单片机中。 单片机不能直接识别和执行高级语言,需要将其转换为机器语言程序才能识别和执行。 对于高级语言,这一转换工作通常称为“编译”或者“解释”。进行编译或者解释的专用程序称为“编译程序”或者“解释程序”。 【4—3】什么是结构化程序设计?它包含哪些基’本结构程序? 【答】 程序设计有时可能是一件很复杂的工作,但往往有些程序结构是很典型的。采用结 构化程序编程时,规律性极强,简单清晰,易读,写,具有调试方便、生成周期短、可靠性高等特点。 根据结构化程序设计的观点,功能复杂的程序结构一般采用三种基本控制结构,即顺序结构、分支结构和循环结构,再加上子程序结构及中断服务子程序结构,共包含五种基本程序结构。 【4—4】顺序结构程序的特点是什么?试用顺序结构编写三字节无符号数的加法程序段,最高字节的进位存入用户标志F0中。 【答】顺序结构是按照逻辑操作顺序,从某一条指令开始逐条顺序执行,直至某一条指令为止。比如数据的传送与交换、简单的运算、查表等程序的设计。顺序结构是所有程序设计中 最基本、最单纯的程序结构形式,因而是一种最简单、应用最普遍的程序结构。在顺序结构程序中没有分支,也没有子程序,但它是组成复杂程序的基础和主干。 例如:三字节无符号数的加法程序段,最高字节的进位存人用户标志FO中。 假设加数存放在内存20H、21H和22H中,被加数存放在内存3OH、31H和32H中,和存放在内存40H、41H和42H中。数据存放次序为低字节在前。 MOV A,3 0H ;取被加数低字节数 ADD A,20H ;求和 M07 40H,A ;和存入 MOV A,31H ADDC A,21H ;带进位求和 MOV 41H,A MOV A,32H ADDC A,22H ;带进位求和 MOV 42H(A , MOV F0,C ;最高字节的进位存入用户标志F0中 【4—5】80C51单片机有哪些查表指令?它们有何本质区别?请编写按序号i 值查找Di(1 6位长度)的方法。设值i存放在R7中,将查找到的数据存放于片内RAM的30H、31H单元中。请画出程序流程图,编写查表程序段,加上必要的伪指令,并对源程序加以注释。 【答】80c51有两种查表指令,即近程查表指令“MOVC A,@A+PC”和远程查表指令 “MOVC A,@AA+ DPTR" 这两条指令的功能均是从程序存储器中读取数据(如表格、常数等),执行过程相同,其差别是基址不同,因此,适用范围也不同。 累加器A为变址寄存器,而PC、DPTR为基址寄存器。DPTR为基址寄存器时,允许数表存放在程序存储器的任意单元,称为“远程查表”,编程比较直观;而PC为基址寄存器时,数表只能放在该指令单元往下的256个单元中,称为“近程查表”。编程时需要计算累加器A中的值与数表首址的偏移量。 例如,按序号i值查找Di(1 6位长度)的源程序如下所示: ORG XXXXH MOV DPTR,#TABLE 指向表首址 MOV A,R7 ;取值i RL A ;Di为二个字节 MOV R7,A ;i x 2 MOVC A,@A+DPTR ;查表获得Di的高字节 MOV 30H(A MOV A,R7 INC A 指向表的下一个地址 MOVC A,@A+DPTR ;{表获得Di的低字节 MOV 31H, A TABLE: Dw „„ ;表(Dw为双字节,高字节在前) RET 查表程序流程图如图4-1所示。 【4—6】根据运算结果给出的数据到指定的 数据表中查找对应的数据字。运算结果给出的 数据在片内RAM的40H单元中,给出的数据大 小在00,0FH之间,数据表存放在20H开始的 片内存储器中。查表所得数据字为双字节(高字 节在后),高字节存于42H、低字节存于41H单 元。其对应关系为: 给出数据: 00 H 0 1 H 0 2 H „0DH 0EH 0FH 对应数据:00 A0 H 7DC2 H FF09 H „ 3456H 89ABH 5678 H 请编制查表程序段,加上必要的伪指令,并加以注释。 【答】程序如下: ORG 0000H AJMP MAIN , 0RG 0020H TAB:DB OAOH,OOH,0C2H,7DH,09H,OFFH,...,56H,34H,0(ABH,89H,DB 78H,56H; 数据字表 ORG 0050H MAIN: MOV A,40H ;运算结果给出的数据放在40H中 MOV DPTR,#TAB ;指向数据字表首地址 RL A ;由于是双字节,所以A左移1位(乘2) MOV 40H,A ;结果放在40H ’ MOVC A,@A+DPTR ;查表,找出对应的值 MOV 41H,A ;查找出的数据值低字节放入41H MOV A(40H ADD A,#01H ;查找数据的高位字节 MOV DPTR,#TAB MOVC A,@A+DPTR MOV 42H,A 。 ;查找出的数据值高字节放入42H SJMP$ 注意:数据表存放在20 H开始的片内存储器中,该存储器应为内部程序存储器,因为查表指令MOVC的功能是从程序存储器中读数据。 【4—7】什么是分支结构程序?8OC 1的哪些指令可用于分支结构程序编程?有哪些多分支转移指令?由累加器A中的动态运行结果值进行选择分支程序,分支转移指令选用LJMP,请编写散转程序段和画出程序流程图,加上必要的伪指令,并加以注释。 【答】分支结构程序的主要特点是程序执行流程中必然包含有条件判断指令。符合条件要求和不符合条件要求的有不同的处理路径。编程的主要方法和技术是合理选用具有逻辑判断功能的指令。在程序设计时,往往借助程序框图(判断框)来指明程序的走向。 一般情况下,每个分支均需要单独执行一段程序,对分支程序的起始地址赋予一个地址标号,以便当条件满足时转向指定地址单元去执行程序,条件不满足时仍顺序往下执行程序。 80C51的条件判跳指令极其丰富,功能极强,特别是位处理判跳指令,对复杂问题的编程提供了极大方便。程序中每增加一条条件判跳指令,就应增加一条分支。 分支结构程序的形式有单分支结构和多分支结构两种。 ?在80C51指令系统中?可实现单分支程序转移的指令有位条件转移指令,如JC、JNC、 JB、JNB和JBC等,还有一些条件转移指令,如JZ、JNZ和DJNZ等。 ( ?80C51设有两条多分支选择指令。 (a)散转指令:JMP @A+DPTR 散转指令由数据指针DPTR决定多分支转移程序的首地址,由累加器A中内容动态地选择对应的分支程序。因此,可以从多达256个分支中选择一个分支散转。 (b)比较指令:CJNE A,direct,rel (共有4条) 比较两个数的大小,必然存在大于、等于、小于三种情况,这时就需要从三个分支中选择一 个分支执行程序。 例如:由累加器A中的动态运行结果值进行选择分支程序,分支转移指令选用LJMP。 ORG XXXXH MOV DPTR,#JPTAB ;分支转移表首地址 CLR C MOV B, A RLC A JNC TAB INC DPTR TAB: ADD A,B ;(A)* 3 JNC TABLE INC DPTR TABLE: JMP@A+DPTR ;多分支转移 JPTAB:LTMP LOOPl ;长转移指令为3个字节 LJMP LOOP2 注意:长转移指令为3字节,因此,A中内容应乘以3。若大于一个字节,则DPH要加1。 分支程序流程图如图4-2所示。 【4-8】循环结构程序有何特点?80C51的循环转移指令有什么特点?何谓循环嵌套?编程时应注意什么? 【答】循环是强制CPU重复多次地执行一串指令的基本程序结构。从本质上看,循环程序结构只是分支程序中的一个特殊形式。循环程序由4个部分构成,即循环初始化、循环体、循环控制和结束部分。 循环次数已知情况下,采用计数循环程序,其特点是必须在初始化部分设定计数的初值,循环控制部分依据计数器的值决定循环次数。 根据控制循环结束的条件,决定是否继续循环程序的执行。所谓的结束条件可以是搜索 到某个关键字(比如回车符CR),也可以是发生的某种变化(如故障引起电路电平变化)等,什 么时候结束循环是不可预知的。 80C5 1设有功能强的循环转移指令: DJNZ Rn,rel( ( ;以工作寄存器作为控制计数器 DJNZ direct,rel( ;以直接寻址单元作为控制计数器 CJNE A,direct,rel ;比较不相等转移 这几条基本指令可派生出很多条不同控制计数器的循环转移指令,大大扩充了应用范围 和多重循环 层次。 循环嵌套就是在循环内套用循环的结构形式,也称“多重循环”。 循环的执行过程是从内向外逐层展开的。内层执行完全部循环后,外层则完成一次循环, 逐次类推。 层次必须分明,层次之间不能有交叉,否则将产生错误。 编程时要注意循环的正确退出,要防止出现“死循环”。 【4-9】什么是子程序?它的结构特点是什么?什么是子程序嵌套? 【答】在编制应用程序时,往往将需要多次应用但完成的运算或操作相同的程序段,编制 成一个子程序, 并尽量使其 标准 excel标准偏差excel标准偏差函数exl标准差函数国标检验抽样标准表免费下载红头文件格式标准下载 化,存放于某存储区域。调用子程序的程序称为“主程序”或 “调用程序”。 子程序是由专门的子程序调用指令CALL调用,而以子程序返回指令RET结束的程序 段。子程序的第一条指令地址,通常称为“子程序首地址”或“人口地址”,往往采用标号(可用助记符) 加以表示,调用(转子)指令的下一条指令地址,通常称为“返回地址”或“断点”。 在子程序中调用子程序的现象通常称为子程序嵌套。 【4-11】手工汇编下列程序: KEY EQU 2 0H ORG 2000H MOV RO,#30H ;数据区首址 MOV Rl,#1 6 ;数据区长度 MOV 20H,#KEY ;关键字送20H单元 CLR F0 ;清用户标志位 MOV 21H,#0l ;序号置l LP: MOV A,@R0 ;取数 CJNE A,20H,LP1( SJMP HERE ;找到关键字,结束( LPI: INC 21H ;序号加1 INC R0 ;数据区地址指针加1 DJNZ R1,LP ;继续 SETB F0 ;未搜索到关键字,则置位用户标志 HERE:SJMP HERE 【答】根据指令查指令表得到机器码,手工汇编结果如下: KEY EQU 20H ORG 2000H 2000 7830 MOV R0,#30H ;数据区首址 2002 7910 MOV R1,#1 6 ;数据区长度 2004 752020 MOV 20H,#KEY ;关键字送20H单元 2007 C2D5 CLR F0 ;清用户标志位 2009 752101 MOV 21H,#01 ;序号置1 200C E6 LP: MOV A,@R0 ;取数 200D B52002 CJNE A,20H,LPI 2010 8007 SJMP HERE ;找到关键字,结束 2012 0521 LPI:INC 21H ;序号加1 2014 08 INC R0 ;数据区地址指针加1 2015 D9F5 DJNZ R1,LP ;继续 2017 D2D5 SETB F0 ;未搜索到关键字,则置位用户标志 2019 80FE HERE:SJMP HERE 【4-10]把长度为10 H的字符串从内部RAM的输入缓冲区INBUF向设在外部RAM的输出缓冲区OUTBUF进 行传送,一直进行到遇见字符“CR"时停止。若字符串中无字符“CR”,则整个字符串全部传送。加上必要 的伪指令,并对源程序加以注释。 【答】程序如下: ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV R7,#10H ;数据长度 MOV R0,#INBUF ;源数据首地址 MOV DPTR,#OUTBUF ;目的数据首地址 LOOP: MOV A,@R0 ;把源数据的值赋给A CJNE A,#0DH,LOOPl ;判断是否为“CR”(ASCII码值为0DH) SJMP ENDl ;是“CR",则结束传送 LOOPl: MOVX @DPTR,A ;把A的值赋给目的数据 INC R0 ;源数据下一个地址值 INC DPTR ;目的数据下一个地址值 DJNZ R7,L00P ;判断数据传送是否完毕 ENDI: SJMP ENDI END 【4-11】内部RAM从2OH单元开始存放一个正数表,表中之数为无序排列,并以“-1”作为结束标志。编 程实现在表中找出最小正数,存入10H。加上必要的伪指令,并对源程序加以注释。 【答】程序如下: ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV R0,#20H ;正数表首址 MOV 1 0H,#7FH ;初始值设为正数最大值 LOOP: MOV A,@R0 CJNE A,“-1’’,CHK ;比较结束标志“-1” SJMP END1 ;是“-l",结束比较 CHK: CJNE A,10H,CHKI ;比较两个数大小 SJMP LOOP1 ;两个数相等,不交换 CHKI: JNC LOOP1 ;A较大,不交换 MOV 10H,A ;A较小,交换 LOOP1 INC R0 SJMP LOOP ‘ END1: SJMP END1 END 例如:已知(20H)=22 H,(21H)=23H,(22H)=0CH,(23H)=20H,(24H)=16H, (25H)=-1。 执行结 果:(10H)=0CH 【4-12】比较两个ASCII码字符串是否相等。字符串的长度在内部RAM的2 H单元,第一个字符串的首地 址在30H中,第二个字符串的首地址在50H中。如果两个字符串相等,则置用户标志FO为0;否则,置用 户标志FO为1。加上必要的伪指令,并对源程序加以注释(每个ASCII码字符为一个字节,如ASCII码“A” 表示为41H)。 LOOPl: MOVX @DPTR,A ;把A的值赋给目的数据 INC R0 ;源数据下一个地址值 INC DPTR ;目的数据下一个地址值 DJNZ R7,L00P ;判断数据传送是否完毕 ENDI: SJMP ENDI END 【答】字符串中每一个字符都可以用一个ASCII码表示。只要有一个字符不相同,就可以判断字符串不相 等。 ORG 0000H ’ AJMP MAIN ? ORG 0030H MAIN: MOV R0,#30H 第一个字符串的首地址 MOV R1(,#5 0H 第二个字符串的首地址 LOOP: MOV A,@R0 第一个字符串的字符值赋给A MOV B,@R1 ;第二个字符串的字符值赋给B CJNE A,B,NEXT ;两个字符值比较 INC R0 字符值相等,则继续比较 INC R1( DJNZ 20H,LOOP ;判断字符串是否比较完 CLR F0 字符串相等,则F0位清0 SJMP $ NEXT: SETB F0 字符串不等,则F0位置1 SJMP $ END 例如:(2OH)=03H,(3OH)=41H,(31H)=42H,(32H)=43H,(5OH)=41H,(51H)= 42H,(52H)=43H。两个字符串均为“ABC"。 执行结果:F0=0 【4—13】已知经A,D转换后的温度值存在4 0 H中,设定温度值存在4 1 H中。要求编写控制程序,当 测量的温度值大于(设定温度值+2?)时,从P 1.0引脚上输出低电平;当测量的温度值小于(设定温度值 一2?)时,从P 1.0引脚上输出高电平;其他情况下,P 1.0引脚输出电平不变(假设运算中C中的标志 不会被置1)。加上必要的伪指令,并对源程序加以注释。 【答】程序如下: ORG 0000H AJMP MAIN ORG ‘0020H MAIN: ( MOV B,41H ;设定的温度值 MOV A(B ADD A,#02H MOV B,A ;设定温度值+2? MOV A,40H ;测量的温度值 CLR C SUBB A,B JNC LOWER ;测量的温度值>(设定温度值+2?),转LOWER子程序,使P1(0引脚上输出低电平 MOV B,41H ;设定的温度值 MOV A,B DEC A DEC A ( MOV B,A ;设定温度值一2? MOV A,40H ;测量的温度值 CLR C SUBB A,B JC HIGH ;测量的温度值<设定温度值-2?,转HIGH子程序,使P1.0引脚上输出高电平 SJMP $ ;都不是,则P1.0引脚上输出不变 LOWER: CLR P1.0 SJMP $ HIGH: SETB P1.0 ’ SJMP $ END 【4—14】80C51单片机从内部RAM的31H单元开始存放一组8位带符号数,字节个数存放在30H中。请编 写程序统计出其中正数、0和负数的数目,并把统计结果分别存入20H、21H和22H三个单元中。加上必要 的伪指令,并对源程序加以注释。 【答】程序如下: LENGTH EQU 30H ;数据长度 DATA_ADR EQU 31H ;数据首地址 POS_NUM EQU 20H ;正数个数 ZERO_NUM EQU 21H ;0个数 NEG_NUM EQU 22H ;负数个数 ORG 0000H AJMP MAIN , ORG 0030H MAIN: MOV POS_NUM,#0 ;计数单元初始化为0 MOV ZERO_NUM,#0 MOV NEG_NUM,#0 MOV R1,#LENGTH ;数据长度 MOV R0,#DATA_ADR ;数据首地址 LOOP: MOV A,@R0 ( JB ACC(7,INC_NEG ;符号位为1,该数为负数,跳转加1 CJNE A,#0,INC_POS INC ZERO_NUM ;该数为0,0个数加1 AJMP L00P1 INC NEG:INC NE~_NUM ;负数个数加1 AJMP LOOPl ( INC_POS:INC POS_NUM ;该数为正数,正数个数加1 LOOPl: INC R0 ;判断统计是否结束 DJNZ R1,LOOP END 例如:已知(30H)=08H,31H单元起存放数据为00H,80H,7EH,6DH,2FH,34H, EDH,FFH。 执行结果:(20 H)=04 H,(21 H)=01H,(22H)=03 H。 【4-15】两个10位的无符号二一十进制数,分别从内部RAM的40 H单元和50H单元开始存放。请编程计 算该两个数的和,并从内部RAM的60 H单元开始存放。加上必要的伪指令,并对源程序加以注释。 【答】10位的无符号二,十进制数,占5字节,每个字节存放一个压缩BCD码(2位)。 ORG 0000H AJMP MAIN 0Re 0030H MAIN: MOV R7,#05H ;十位(5字节)计数 MOV R0,#40H ;被加数首址 MOV R1,#50H ;加数首址 MOV R2,#60H ;和数首址 CLR C ;清C标志位 ADDB: MOV A,@R0 ADDC A,@R1 DA A ;二一十进制调整 MOV B,R0 ;保护被加数地址 MOV 20H, R2 MOV R0,20H MOV @R0,A ;存和 MOV R2,20H ;恢复和数地址 MOV R0,B ;恢复被加数地址 INC R0 ;三个地址指针均加1 INC R1 INC R2 DJNZ R7,ADDB ;多字节加未结束,则循环 HERE: SJMP HERE END 注意:寄存器间接寻址只针对R0和R1,所以存和时不能使用指令“MOV@R2,A”。 例如: 40 H,44 H内容为78 H,10 H,10 H,10 H,10 H 5O H,54 H内容为42 H,10 H,10 H,10 H,10 H 1 0 1 0 1 0 1 0 7 8 即BCD数 +1 0 1 0 1 0 1 0 4 2 2 0 2 0 2 0 2 1 2 0 运行结果:6O H,64 H单元中的数为20 H,21 H,20 H,20 H,20 H。 【4-16】将外部RAM的40 H单元中的一个字节拆成2个ASCII码,分别存入内部数据存储器40 H和41 H 单元中。试编写以子程序形式给出的转换程序,说明调用该子程序的入口条件和出口功能。加上必要的伪 指令,并对源程序加以注释。 【答】子程序的入口条件、出口功能及源代码如下: 子程序人口条件:准备拆为2个ASCII码的数存入外部RAM的40 H单元中。 子程序出口功能:完成外部RAM单元一个字节拆成2个ASCII码,分别存入内部数据存储器40 H和 41 H单元中。 ORG 1 000H B_TO_A:MOV DPTR,#40H ;外部RAM40H单元 MOV R0,#40H MOVX A,@DPTR ;取数 PUSH A ANL A,#0FH ;低4位转换为ASCII码 LCALL( CHANGE MOV @RO,A INC R0 POP A ’ SWAP A ANL A,#0FH ;高4位转换为ASCII码 LCALL CHANGE MOV @R0,A RET CHANGE:CJNE A,#0AH,NEXT ;转换子程序 NEXT: JNC NEXT2 ;?0AH,转移 ADD A,#3 0H ;?9,数字0-9转化为ASCII码 RET NEXT2: ADD A,#37H ;字母A,F转化为ASCII码 RET END 设外部(40 H)=12 H。 执行程序B_TO_A后:内部(40 H)=31 H,(41 H)=32 H。 设外部RAM(40 H)=ABH。 执行程序B_TO_A后,内部(40 H)=41 H,(41 H)=42 H。 【4-17】根据8100 H单元中的值X,决定P1口引脚输出为: 加上必要的伪指令,并对源程序加以注释。 ( 【答】程序如下: ORG 0000H SJMP BEGIN ORG 0030H BEGIN: MOV DPTR,#8100H MOVX A,@DPTR MOV R2,A JB ACC.7,SMALLER;有符号数<0 SJMP UNSIGNED ;无符号数?0 SMALLER:DEC A ;X<0,输出-X(先减1,再取反) CPL A MOV P1,A SJMP OK UNSIGNED:CJNE A,#00H,BIGGER ;不等于0即大于0 MOV P1,#80H ;X等于0,输出80H SJMP OK BIGGER: CLR C ;X大于0,输出A×2 RLC A ;A×2 MOV P1,A OK: SJMP $ END 例如:输入55 H,P1口引脚输出AAH;输入00 H,P1口引脚输出80 H;输入F1(一1 5的补码),P1 口引脚输出0FH。 【4-18】将4000 H~40FF H中256个ASCII码加上奇校验后从P1口依次输出。加上必要的伪指令,并对 源程序加以注释。 【答】注意:ASCII码的有效位为7位,其最高位D7可与程序状态字PSW中的奇偶校验 位P配合进行校验。 ORG 0000H SJMP BEGIN ORG 0030H BEGIN: MOV DPTR,#4000H ;首地址 MOV R0,#00H ;发送计数器 LOOP: MOVX A,@DPTR MOV C,P CPL C MOV ACC.7,C , ;置奇校验 MOV PI,A ;从PI口输出 INC DPTR DJNZ R0,LOOP ;循环 AJMP $ END 【4-19】 编写将1 O位十六进制数转换为ASCII码的程序。假定十六进制数存放在内部RAM的20 H单元 开始的区域中,转换得到的ASCII码存放在内存3O H单元开始的区域中。加上必要的伪指令,并对源程 序加以注释。 【答】查表法: ORG 0000H SJMP BEGIN ORG 0030H BEGIN: MOV R2,#5 ;10位十六进制数 MOV R0,#20H ;读指针 MOV RI,#30H ;写指针 MOV DPTR,#ASCTB ~ASCII码表首址 LOOP: MOV A,@R0 ‘ ANL A,#0FOH ;取高半字节 SWAP A ACALL TRANS ;调用十六进制到ASCII码转换子程序 MOV A,@R0 ANL A,#0FH ;取低半字节 ACALL TRANS ;调用十六进制到ASCII码转换子程序 INC R0 DJNZ R2,LOOP SJMP $ ;查表法子程序 ( TRANS: MOVC A,@A+DPTR ;取得ASCII码 MOV @R1,A INC R1 RET ASCTB: ;ASCII码表 DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H END 注意:十六进制数0,9所对应的ASCII码为30 H~39 H,十六进制数A,F所对应的ASCII码为41 H, 46 H。 , 例如:在20 H开始输入5个十六进制数:11 H,F4 H,F1 H,12 H,34 H。 执行程序后:内存3 0 H单元开始的区域中依次为31 H,31 H,46 H,34 H,46 H,31 H,31 H,32 H,33 H,34 H。 、 【4-21]80C51单片机的P1.7、P1.6和P 1.5输出的6拍波形如图4-3所示,后面输出波形重复,输出波 形9O拍后停止。请编写源程序,并加以注释,并加上必要的伪指令。 【答】由图4-3分析,可以得到一个周期为6拍的波形表。 ORG 0000H 0000 802E SJMP BEGIN ORG 003 0H 0030 7860 BEGIN: MOV R0,#90 ;90拍波形计数器 0032 7906 LOOP2: MOV R1,#6 ;6拍波形计数器 0034 9 00047 MOV DPTR,#TAB 0037 E4 LOOPI: CLR A 0038 93 MOVC A,@A+DPTR ;查表得到输出波形值 0039 F59 0 MOV PI,A 003B E8 MOV A,R0 、;判断90拍波形输出结束? 003C 14 DEC A 003D F8 MOV R0,A 003E 6005 JZ STOP ;90拍波形输出完,则转停止输出 0040 A3 INC DPTR 0041 D9F4 DJNZ R1,LOOP1 ;6拍波形循环 0043 80ED SJMP L00P2 0045 80FE STOP:SJMP STOP 0047 E040A0 TAB:DB 0E0H,40H,0A0H,60H,0C0H,60H;6拍波形表 004A 60C060 END 【4-22】编写求无符号数最小值的子程序。 入口条件:20 H和21 H中存放数据块起始地址的低位和高位,22 H中存数据 块的长度。出口结 果:求得的最小值存入3O H单元中。对源程序加以注释和加上必要的伪指令。 【答】程序如下: ( ;求无符号数最小值的子程序CMPI ORG 2000H CMPI: MOV DPL,20H MOV DPH,21H MOV 30H,#0FFH ;最小值单元初始值设为最大值 LOOP: MOVX A,@DPTR MOVX A,@DPTR ’ CJNE A,3 0H,CHK ;比较两个数大小 SJMP LOOP1 ;两个数相等,不交换 CHK: JNC LOOP1 ;A较大,不交换 MOV 30H,A ;A较小,交换 LOOP1: INC DPTR DJNZ 22H(LOOP RET 注意:30 H中始终存放两个数比较后的较小值,比较结束后存放的即是最小值。 例如:(20 H)=00 H,(21 H)=80 H((22 H)=0 5 H。从8000 H开始存放下列数:02 H, 04 H,01 H,FFH,03 H。 调用子程序CMPl后的结果:(30 H)=01 H 第五章 【单片机的中断系统原理及应用】 思考与练习题解析 【5—1】什么是中断? 【答】单片机在程序执行过程中,允许外部或内部“事件’’通过硬件打断程序的执行(,使其转向执行处理外部或内部“事件’’的中断服务子程序;而在完成中断服务子程序以后,继续执行原来被打断的程序,这种情况称为“中断",这样的过程称为“中断响应过程"。 【5—2】单片机的中断系统主要应该解决哪几个问题? 【答】单片机的中断系统主要应该解决3个问题,即: ‘ ?当单片机内部或外部有中断 申请 关于撤销行政处分的申请关于工程延期监理费的申请报告关于减免管理费的申请关于减租申请书的范文关于解除警告处分的申请 时,能及时响应中断,中止正在执行的任务,转去处理中断服务子程序。中断服务处理以后,能正确回到原来的断点处继续处理原先的任务。 ?当有多个中断源同时申,请中断时,单片机应能首先响应优先级高的中断源,能实现中断优先级的控制。 ‘ ?当低优先级中断源正在享用中断服务时,若这时优先级比它高的中断源也申请中断,则要求单片机能中止低优先级中断源的服务程序,转去执行更高优先级中断源的服务程序,实现中断嵌套,并能逐级正确返回原断点处,继续处理原先的任务。 【5—3】说明8 0 C5 1单片机的中断流程。 【答】80C51单片机的中断流程由以下几个方面组成。’ ?中断采样:解中断采样是针对外部中断请求信号进行的,而内部中断请求都发生在芯片内部,可以直接置位TCON或SCON中的中断请求标志。在每个机器周期的S5 P2(笫五状态的第二节拍)期间,各中断标志采样相应的中断源,并置人相应标志。 ?中断查询:若查询到某中断标志为1,则按优先级的高低进行处理,即响应中断。 ?中断响应:响应中断后,由硬件自动生成长调用指令LCALL,其格式为“LCALL addrl 6”,而addrl 6就是各中断源的中断矢量地址。首先将程序计数器PC的内容压人堆栈进行保护,先压入PC低8位地址,后压人PC高8位地址,同时堆栈指针SP加2。将对应中断源的中断矢量地址装入程序计数器PC,使程序转向该中断矢量地址,去执行中断服务程序。 ?中断服务子程序:由中断矢量地址开始,执行子程序,直到遇到中断返回指令RETI为止。 ?中断返回:执行指令RETI,撤消中断申请,把断点地址从堆栈弹出送人PC。先弹出PC高8位地址,后弹出PC低8位地址,同时堆栈指针SP减2。程序从断点处恢复执行。 【5-4】什么是单片机的中断优先级?中断优先级处理的原则是什么? 【答】在一个单片机系统中往往允许有多个中断源,通常给每个中断源规定了优先级别,称为“优先权"或“中断优先级’’。 当单片机同时接收到两个或多个不同优先级的中断请求时,先响应高优先级的中断。如果同时接收到的是几个同一优先级的中断请求,则由内部的硬件查询序列确定它们的优先服务次序,当服务结束后,再响应级别较低的中断源。 在80C51单片机中有高、低两个中断优先级,通过中断优先级寄存器IP来设定。 在80C51单片机中存在同一优先级内由内部硬件查询序列确定的第二个优先级结构。 其排列如下: 中断源 中断优先级 外部中断0 最高 定时器T0中断 外部中断1 定时器T1中断 串行口中断 定时器T2中断 最低 【5-5】外部中断请求有哪两种触发方式?对跳变触发和电平触发信号有什么要求?如何选择和设置? 【答】外部中断请求有两种信号触发方式,即电平有效方式和跳变有效方式,可通过设置有关控制位进行定义。 当设定为信号电平有效方式时,若INT0或INT1引脚上采样到有效的低电平,则提出中断请求;当设定为信号跳变有效方式时,若INT0或INT1引脚上采样到有效负跳变,则提出中断请求。 ’ ?INT0(P3(2)—一外部中断O。 当IT0(TCON(O)=0 时,信号触发方式为低电平有效;当IT0(TCON(O)=1时,信号触发方式为下降沿有效。 ?INTI(P3(3)——外部中断1。 当ITI(TCON(2)=0时,信号触发方式为低电平有效;当ITl(TCON(2)=1时,信号触发方式为下降沿有效。 【5-6】80C51单片机有哪些中断源?对其中断请求如何进行控制? 【答】 1(中断源 80C51(单片机中有5个中断源。80c52中增加了一个中断源--定时器,计数器T2中断,共有6个中断源。每一个中断源都能被单片机程控为高优先级或低优先级。 80c51单片机的5个中断源包括2个外部中断源和3个内部中断源。2个外部中断源为INT0和INT1,外部设备的中断请求信号、掉电等故障信号都可以从INT0或INT1引脚输入。3个内部中断源为定时器,计数器TO、T1的定时,计数溢出中断源和串行口发送或接收中断源。80C5 1的5个中断源可以分为3类,即: (1)外部中断 外部中断是由外部信号引起的,共有两个外部中断,其中断请求信号分别从引脚INT0(P3(2)和INTl(P3(3)上引入。 (2)定时中断 定时中断是为满足定时或计数需要而设置的。当计数器发生计数溢出时,表明设定的定时时间已到或计数值已满,这时可以申请中断。由于定时器,计数器位于单片机芯片内部,所以定时中断属于内部中断。80C51(内部有两个定时器,计数器,所以定时中断有两个源,即: ? FF0(P3.4)一一定时器,计数器TO溢出中断。 ? FFI(P3.5)„定时器,计数器T1溢出中断。 (3)串行中断 串行中断是为串行数据传送的需要而设置的。每当串行口发送或接收一组串行数据时,就产生一个中 断请求。 ( TI(SCON(1)和RI(SCON(O)--串行口发送和接收中断源。 2(中断的允许和禁止由中断允许寄存器IE控制 中断允许寄存器IE格式如图5—1所示。 ??????????????????????????????????????????? ? 位地址 ? AFH ? AEH ? ADH ? ACH? ABH ? AAH ? A9H ? A8H ? ??????????????????????????????????????????? ? 符 号 ? EA ? ? ? ES ? ETl ? EXl ? ETO ? EXO ? ??????????????????????????????????????????? 图5—1 中断允许寄存器IE格式 IE寄存器中相应位设置为O时,所对应的中断源被禁止中断;相应位设置为1时,所对应的中断源被允许中断。 系统复位后IE寄存器中各位均为0,即此时禁止所有中断。 与中断有关的控制位共6位,即: EX0 外部中断O中断允许位。 ETO 定时器,计数器T0中断允许位。 EXl 外部中断1中断允许位。 ETl 定时器,计数器T1中断允许位。 ES 串行口中断允许位。 EA CPU中断允许位。当EA=1时,允许所有中断开放,总允许后,各中断的允许或禁止由各中断源的中断允许控制位进行设置;当EA=0时,所有中断屏蔽。 80C51单片机通过中断允许控制寄存器对中断的允许(开放)实行两级控制,即以EA位作为总控制位,以各中断源的中断允许位作为分控制位。只有当总控制位EA有效(即开放中断系统)时,各分控制位才能对相应中断源分别进行开放或禁止。 ( 【5—7】80C51单片机在什么情况下可响应中断? 【答】中断响应是有条件的,即: ?中断源申请中断; ?该中断源已被允许中断,且CPU也已允许中断; ?没有同级或高优先级中断在执行中断服务程序。 在接受中断申请时,如遇下列情况之一,硬件生成的长调用指令LCALL将被封锁: ?CPU正在执行同级或高一级的中断服务程序。因为当一个中断被响应时,其对应的中断优先级触发器被置1,封锁了同级和低级中断。 ?查询中断请求的机器周期不是执行当前指令的最后一个周期。目的在于使当前指令执行完毕后,才能进行中断响应,以确保当前指令的完整执行。 ?当前正在执行RETI指令或执行对IE、IP的读,写操作指令。80C51(中断系统的特性规定,在执行完这些指令之后,必须再继续执行一条指令,然后才能响应中断。 【5—8】如何分析中断响应时间?这对实时控制系统有何意义? 【答】从中断请求发生直到被响应去执行中断服务程序,所需时间称为“中断响应时间”。一般来说,在单级中断系统中,中断的响应时间最短为3个机器周期,最长为8个机器周期。 ? 当中断请求标志位查询占1个机器周期时,若这个机器周期恰好是指令的最后一个机器周期,则在这 个机器周期结束后,CPU立即响应中断,产生硬件长调用LCALL指令。执行这条长调用指令需要2个 机器周期,这样,中断响应时间为3个机器周期。 ? 如果CPU正在执行的是RETI指令或访问IP、IE指令,则等待时间不会多于2个机器周期,而中断系 统规定这几条指令执行完后,必须再继续执行一条指令后才能响应中断。如这条指令恰好是4个机器 周期长的指令(比如乘法指令MUL或除法指令DIV),再加上执行长调用指令LCALL所需2个机器周期, 则总共需要8个机器周期。 ? 如果中断请求被阻止,不能产生硬件长调用LCALL指令,那么所需的响应时间就更长。如果正在处理 同级或优先级更高的中断,那么中断响应的时间还需取决于处理中的中断服务程序的执行时间。 当单片机应用中断于实时控制系统时,往往非常在意中断的响应时间。比如出现故障后, 单片机在多长时间里能够响应和处理,这反映了单片机对故障处理的“失控’’时间长短。 ( 【5—9】为什么单片机需要进行中断请求的撤消?中断请求的撤消有哪些方法? 【答】单片机响应中断请求,转向中断服务程序执行,在其执行中断返回指令RETI之前,中断请求信号必须撤除,否则将会再一次引起中断而出错。 中断请求撤除的方式有三种,即: 1(由单片机内部的硬件自动复位(硬件置位,硬件清除) 对于定时器,计数器TO、T1的溢出中断和采用跳变触发方式的外部中断请求,单片机响应中断后,由内部硬件自动清除中断标志TF0和TFl、IE0和IEl,从而自动撤除中断请求。 2(应用软件清除相应标志(硬件置位,软件清除) 对于串行接收,发送中断请求和80C52中的定时器,计数器T2的溢出和捕获中断请求,单片机响应中断后,必须在中断服务程序中应用软件清除RI、TI、TF2和EXF2这些中断标志,才能撤除中断。 3(采用外加硬件结合软件来清除中断请求(硬件置位,硬、软件结合清除) 对于采用电平触发方式的外部中断请求,中断标志的撤消是自动的,但中断请求信号的低电平可能继续存在。在以后机器周期采样时,又会把已清O的IEO、IEl标志重新置1,再次申请中断。在系统中加入如图5—2所示的电平方式外部中断请求的撤消电路,保证在中断响应后把中断请求信号从低电平强制改变为高电平。 从图5—2中可看到,用D触发器锁存外部中断请求低电平,并通过触发器输出端Q送INT0或INTl,所以D触发器对外部中断请求没有影响。但在中断响应后,为了撤消低电平引起的中断请求,可利用D触发器的直接置位端SD来实现。采用80C51的一根I,O口线来控制SD端。只要在SD端输人一个负脉冲即可使D触发器置1,从而撤消低电平的中断请求信号。 通过在中断服务程序中增加以下两条指令,SD端得到所需负脉冲: ANL P1,#OFEH ;Q置1(SD为直接置位端,低电平有效) ORL P1,#01H ;SD无效 使P1.0输出一个负脉冲,其持续时间为2个机器周期,足以使D触发器置位,撤除低电平中断请求。第二条指令是必要的,否则D触发器的Q端始终输出1,无法再接收外部中断请求。 【5—1 0】请简述8OC51单片机扩展外部中断源的几种方法。 【答】在80C51单片机中,一般只有两个外部中断请求输入端INTO和INTl。当某个系统需要多个外部中断源时,可以通过增加OC门结合软件来扩展;当定时器,计数器在系统中有空余时,也可以通过对计数器计数长度的巧妙设置,使定时器,计数器的外部输入脚(TO或T1)成为外部中断请求输入端。 1(采用OC门经“线或"后实现 图5—3就是占用一个80C51的INTO或INTl扩展4个外部中断源的电路。 当4个扩展的外部中断源中有一个或几个出现高电平时,OC门反相器输出为O,引起INT0低 电平触发中断,所以这些中断源都是电平触发方式。当满足外部中断请求条件时, CPU响应中断,转入中断矢量地址0003H单元开始执行中断服务程序。在中断服务程序中,由软件设定的顺序查询外部扩展中断哪一位是高电平,然后进入该中断处理程序。查询的顺序就是外部扩展中断源的中断优先级顺序。 外部中断源查询的流程图如图5—4所示。 INT0的中断服务程序如下: PINTO: PUSH PSW ;保护现场 PUSH ACC , JB P1.0,LOOPl ;转向中断服务程序1 JB P1.1,LOoP2 ;转向中断服务程序2 JB P1..2,LOOP3 ;转向中断服务程序3 JB P1.3,LOOP4 ;转向中断服务程序4 INTEND:POP ACC 恢复现场 , POP PSW RETI LOOPI: „„ ((;中断服务程序1 ? j(: ( AJMP INTEND + LOOP2: „„ ;中断服务程序2 AJMP INTEND LOOP3: „„ ;中断服务程序3 AJMP INTEND LOOP4: „„ ;中断服务程序4 AJMP INTEND 从程序中可以看出,这里定义的扩展外中断源1的优先级最高,扩展外中断源4的优先级最低,因为先从P1(O开始查询。 2(通过片内定时器,计数器来实现 可以利用定时器,计数器T0或T1的外部事件输人引脚TO、T1作为边沿触发的外部中断源。这时应设置定时器,计数器TO或T1为计数器方式,而计数常数为满刻度值。外部输入的脉冲在负跳变时有效,计数器加1,由于计数常数已设为满刻度值,所以计数器加1后即溢出,向CPU’申请中断。 如果以定时器,计数器TO、T1的计数脉冲输人作为外部中断请求输入,定时器,计数器TO、T1的中断矢量用做第三、第四个扩展的外部中断矢量,定时器,计数器TO、T1的中断服务程序人口地址作为扩展的外部中断服务人口地址,即实现了外部中断源的扩展。 当定时器,计数器2用作波特率发生器时,若EXEN2置1,则T2EX端的信号产生负跳变时;若EXF2置1,但不会发生重装载或捕获操作。这时,T2EX可以作为一个附加的外部中断源。 例如,把外部中断请求信号2连到80C51(单片机的T1引脚上,定时器,计数器T1设为计数器的方式2,即8位自动重装载方式,时间常数设为满刻度值FFH。外部中断2的服务程序人口地址存放在T1的中断矢量区中。其初始化程序段如下: ORG 0000H AJMP MAIN ORG 001BH ;T1中断矢量作为外部中断2的中断矢量使用 LJMP INT2 ORG 0030H MAIN: MOV TMOD,#60H ;设定时器,计数器T1为计数器方式2 MOV TLI(,#0FFH ;置T1计数常数 MOV THI,#0FFH SETB EA ;开中断 SETB TRI( ;启动计数 INT2: „„ ;外部中断2的中断服务程序 RETI 【5一11】请简述80C51单片机的中断与子程序调用的异同点,并举例加以说明。 【答】中断与子程序调用的相似点如下: ?都是中断当前正在执行的程序,转去执行子程序或中断服务子程序。 ?都是由硬件自动把断点地址压入堆栈,然后通过软件完成现场保护。 ?执行完子程序或中断服务子程序后,都要通过软件完成现场恢复,并通过执行返回指令,重新返回到断点处,继续执行程序。 ?两者都可以实现嵌套,如中断嵌套和子程序嵌套。 中断与子程序调用的不同点如下: ?中断请求信号可以由外部设备发出,是随机的,比如故障产生的中断请求、按键中断等;子程序调用却是由软件编排好的。 ?中断响应后由固定的矢量地址转入中断服务程序;子程序地址由软件设定。 ?中断响应是受控的,其响应时间会受一些因素影响;子程序响应时间是固定的。 第六章 【单片机的定时器,计数器原理及应用】 思考与练习题解析 【6-1】80C51单片机内部设有几个定时器,计数器?简述各种工作方式的特点。 【答】80C51单片机内部设有2个16位定时器,计数器TO和T1。定时器,计数器有4种工作方式,其特点如下: ( ?方式O是13位定时器,计数器。由THx高8位(作计数器)和TLx的低5位(32分频的定标器)构成,TLx的低5位溢出时,向THx进位;THx溢出时,硬件置位TFx(可用于软件查询),并可以申请定时器中断。 ?方式1是16位定时器,计数器。TLx的低8位溢出时向THx进位,THx溢出时,硬 件置位TFx(可用于软件查询),并可以申请定时器中断。 ?方式2是定时常数自动重装载的8位定时器,计数器。TLx作为8位计数寄存器, THx作为8位计数常数寄存器。当TLx计数溢出时,一方面将TFx置位,并申请中断;另一方面将THx的内容自动重新装入TLx中,继续计数。由于重新装入不影响THx的内容,所以可以多次连续再装入。方式2对定时控制特别有用。 ( ?方式3只适用于TO,T0被拆成两个独立的8位计数器TLO和TH0。TLO做8位计 数器,它占用了T0的GATE、INTO、启动,停止控制位TRO、TO引脚(P3.4)以及计数溢出标志位TF0和TO的中断矢量(地址为000BH)等TH0只能做8位定时器用,因为此时的外部引脚T0已为定时器,计数器TLO所占用。这时它占用了定时器,计数器T1的启动,停止控制位TRl、计数溢出标志位TFl(及T1中断矢量(地址为001BH)。 T0设为方式3后,定时器,计数器T1只可选方式O、1或2。由于此时计数溢出标志位TFI(及T1中断矢量(地址为001BH)已被TH0所占用,所以T1仅能作为波特率发生器或其他不用中断的地方。 ( 【6—2】定时器,计数器做定时器使用时,定时时间与哪些因素有关?定时器,计数器做计数器使用时,外界输入计数频率最高为多少? 【答】定时器,计数器做定时器用时,定时器的定时时间与系统的振荡频率^sc,计数器的 长度(如8位、13位或16位等)和定时初始值等有关。定时器,计数器做计数器用时,通过引脚T0(P3.4)和Tl(P3.5)对外部信号进行计数,由于检测一个1到O的跳变需要两个机器周期,故计数脉冲频率不能高于振荡脉冲频率的1,24。 【6-3】当定时器,计数器T0设为方式3后,对定时器,计数器T1如何控制? 【答】当定时器,计数器T0设为方式3后,定时器,计数器T1(只可选方式O、1或2。由于此时T1的计数溢出标志位TFl及T1中断矢量(地址为001BH)已被THO所占用,所以定时器,计数器T1仅能作为波特率发生器或用于其他不用中断的地方。T1用作串行口波特率发生器时,它的计数输出直接去串行口,只需设置好工作方式,串行口波特率发生器自动开始运行。若要T1停止工作,只需向T1送一个设T1为工作方式3的控制字即可。 【6-4】门控位GATE可使用于什么场合?请举例加以说明。 【答】当设门控位GATE=1时,由外部中断引脚INT0和TR0、INTl和TRl(共同来启动 定时器。当TR0置位时,INT0引脚为高电平才能启动定时器TO;当TRl置位时,INTl脚为高电平才能启动定时器T1。由此可测得INT0和INTl引脚上输入脉冲的高电平持续时间,继而可测得INT0和INT1引脚上输入脉冲的低电平持续时间,从而测出INT0和INTl引脚上输入脉冲的周期、频率和占空比等。 【6-5】定时器,计数器T2有哪几种工作方式?分别举例说明。 【答】T2有3种工作方式:捕获方式、自动重装载方式和波特率发生器方式,由T2CON 中有关位决定。 ? 捕获方式是指在一定条件下,自动将计数器TH2和TL2的数据读人捕获寄存器 RCAP2H和RCAP2L中,即TH2和TL2内容的捕获是通过捕获寄存器RCAP2H和RCAP2L来实现的。 捕获操作发生于下述两种情况下: ?定时器2的寄存器TH2和TL2溢出时,打开重装载三态缓冲器,把TH2和TL2的内容自动读人到捕获寄存器RCAP2H和RCAP2L中。 ?当EXEN2=1且T2EX(P1.1)端的信号有负跳变时,将发生捕获操作。 ?自动重装载方式是指在一定条件下,自动地将捕获寄存器RCAP2H和RCAP2L的数 据装入计数器TH2和TL2中。一般说来,捕获寄存器RCAP2H和RCAP2L在这里起预置 计数初值的功能。 重装载操作发生于下述两种情况下: ?定时器,计数器T2的寄存器TH2和TL2溢出时,打开重装载三态缓冲器,把捕获寄存器RCAP2H和RCAP2L的内容自动装载到TH2和TL2中。 ?当EXEN2=1且T2EX(P1.1)端的信号有负跳变时,将发生重装载操作。 ? 波特率发生器方式是指T2溢出脉冲用做串行口的时钟,在T2CON中,RCLK选择串行通信接收波 特率发生器,TCLK选择发送波特率发生器,因此,发送和接收的波特率可以不同。 【6—6】监视定时器T3功能是什么?它与定时器,计数器TO、T1有哪些区别? 【答】T3俗称“看门狗",它的作用是强迫单片机进入复位状态,使之从硬件或软件故障中 解脱出来。 在实际应用中,由于现场的各种干扰或者程序设计错误,可能使单片机的程序进入了“死 循环"或"程序区"(如表格数据区)之后,在一段设定的时间内,假如用户程序没有重装监视 定时器T3,则监视电路将产生一个系统复位信号,强迫单片机退出“死循环"或“非程序区”,重新进行“冷启动”或“热启动”。 在程序正常运行时,需要不断地对T3进行“喂狗”,当由于干扰而没能及时“喂狗",则强迫单片机进入复位状态,从而退出非正常运行状态。“喂狗”的时间间隔就是允许的失控时间。T3的定时溢出表示出现非正常状态,而TO和T1的定时溢出是正常状态。 【6—7】如何计算计数和定时工作方式时的定时常数?请以方式O为例说明。 【答】80C51(单片机的定时器,计数器本质上都是计数器,定时方式是对内部机器周期进 行计数,计数方式是对80C51单片机的引脚TO或T1上输入的下跳变脉冲进行计数。由于计数器是加1(向上)计数的,所以预先置人的计数常数TC应为补码。 计数公式如下: N 定时方式 定时时间=(2 一TC)×机器周期 N 计数方式 计数次数=2 —TC 对于定时器,计数器TO和T1: 13 在方式0下, N=13,2=8192 机器周期=12*振荡器周期 【6—8】用8OC51单片机的定时器,计数器如何测量脉冲的周期、频率和占空比?若时钟频率为6 MHz,那么允许测量的最大脉冲宽度是多少? 【答】欲测量的脉冲应接至80C51单片机的引脚T0或T1上,利用门控信号GATE位启 动定时器,对INT0或INT1脚上输入的脉冲的高电平进行测量,从而测出脉宽。 当GATE位设为1,并设定时器,计数器的启动位TR0或TRl为1,这时定时器,计数器的定时完全取决于INT0和INT1引脚上信号的电平,仅当INT0和INT1引脚电平为1时,定时器才工作。换个角度来看,定时器实际记录的时间就是INT0和INT1引脚上高电平的持续时间。脉冲反相后送INT0或INT1引脚上可测得脉冲低电平持续时间,二者之和即为脉冲周期,脉冲周期倒数为脉冲频率,脉冲高电平与总周期之比是占空比。 当时钟频率为6 MHz时,机器周期为2μs。 采用查询方式时,方式1的最大允许被测脉冲宽度为 65536 X 2μ s=131072μ s=131.072 ms 采用中断方式时,方式1的最大允许被测脉冲宽度为 最大允许被测脉冲宽度=131.072 ms,次×中断次数 【6—9】使用一个定时器时,如何通过软硬件结合的方法,实现较长时间的定时? ’ 【答】当需要较长时间的定时情况下,可以采用定时中断的方式,在定时器中断服务程序中对中断次数进行计数,则定时时间一定时×中断次数。若设定为100 ms产生定时中断,当 定时中断次数达到100次时,定时为100 ms,次X 1 00次=10 s。 【6—10】如何在运行中对定时器,计数器进行"飞读"? 【答】80C51单片机可以随时读出计数寄存器TLx和THx(x为O或1)中的值,称为“飞读”,用于实时显示计数值等。但在读取时应注意由于分时读取TLx和TH x而带来的特殊性。假如先读TLx,后读THx,由于这时定时器,计数器还在运行,在读THx之前刚好发生TLx溢出向THx进位的情况,这样读得的TLx值就不正确了。同样,先读THx,后读TLx时也可能产生这种错误。 一种解决办法是:先读THx,后读TLx,再重读TH x,若二次读得的THx值是一样的,则可以确定读人的数据是正确的;若两次读得的THx值不一致,则必须重读。 【6—11】请编程实现8OC51单片机产生频率为100(kHz等宽矩形波(定时器, 计数器TO,方式O,定时器中断),假定单片机的晶振频率为12 MHz。加上必要的伪指令,并对源程序加以注释。 【答】100 kHz等宽矩形波,周期为10s,定时周期为5s,机器周期为1 s。 136 6 计算:TC=2一(1 2 X 10X 5 X 10)?12=8187=1FFBH 方式0:定时常数TCH=FFH,TCL=1BH。 ? 程序如下: ORG 0000H 0000 0130 AJMP MAIN ORG 000BH 定时器T0中断矢量 000B 0141 AJMP INTER‘ ORG 0030H 0030 758900 MAIN:MOV TMOD,#00H ;写控制字,设TO为定时器,方式O 0033 758CFF MOV TH0,#OFFH ;写定时常数,定时为5μ 0036 7 58AIB MOV TL0,#IBH 0039 D28c SETB TR0 ;开启定时器T0 003B D2A9 SETB ET0 ;开定时器T0中断 ’ 003D D2AF SETB EA ;开中断 003F 013F AJMP $ ;中断等待 ‘ 定时器T0中断 ‘ 0041 758CFF INTER: MOV TH0,#0FFH ;重写定时常数 0044 758AIB MOV TL0,#IBH 0047 B290 CPL P1(0 ;P1口作为输出端,P1.0变反输出 0049 32 RETI ;中断返回 END 【6-12】采用中断方法设计8OC51单片机的秒、分脉冲发生器。要求采用定时器,计数器T1的方式1 编程,实现P1.0每秒钟产生一个机器周期的正脉冲,P1.1每分钟产生一个机器周期的正脉冲。加上必要 的伪指令,并对源程序加以注释。晶振频率为12 MHz。 【答】机器周期为1μs,定时器采用方式1时,最长定时时间仅为65 ms。需要采用定时×溢出次数=所 需定时。如定时设为10 ms,则定时溢出中断100次时,为定时1 S。 计算:10 ms=(2 M—TC)×1μs,TC=55536=D8F0 H 程序如下: ORG 0000H 0000 013 0 AJMP MAIN ORG 001BH 001B 0149 AJMP INTER ORG 0030H 0030 758910 MAIN: MOV TMOD,#1 0H ;设控制字,T1为定时器方式1 0033 758DD8 MOV THI,#0D8H ;i 0 ms定时初始值 0036 758BF0 MOV TLI,#0FOH 0039 7F3C MOV R7,#60 ;定时1分计数器 003B 7864 MOV R0,#1 00 ;定时1 S计数器 003D D28E SETB TRI ;开启定时器T1 003F D2AB SETB ETI ;开定时器T1中断 0041 D2AF SETB EA ;开中断 0043 C29 0 CLR P1.0 ;初始值 0045 C29 1 CLR P1.1 0047 0147 AJMP $ ;定时中断等待 定时10ms中断服务程序 ( 0049 758DD8 INTER:MOV THI,#0D8H 004C 758BF0 MOV TLI,#0FOH ;重置10ms定时常数 004F D80A DJNZ( RO,REP 0051 B290 CPL P1(0 ;1 s定时到,P1.0取反输出 0053 7864 MOV R0,#1 00 0055 DF04 DJNZ R7,REP ;若R7不为0,则中断返回 , 0057 B291 CPL P1.1 ;1分定时到,则P1.1取反输出 0059 7F3C MOV R7,#60 ;循环值 005B 32 REP:RETI 【6—1 3】80C51单。片机的定时器,计数器T0以定时方法在P3.1引脚上周期为400μs,占空比为9:1 的矩形脉冲,以定时工作方式2编程实现。加上必要的伪指令,并对源程序加以注释。fosc=6 M H z。 【答】矩形脉冲高电平时间为3 6 0μs,低电平时间为40μs。机器周期为2μs。 8 计算:40μs定时,40μs=(2一TC)×2μs,TC=ECH 8 360μs定时,360μs=(2一TC)×2μs,TC=4CH 采用查询法编程: ORG 0000H 0000 013 0 AJMP MAIN ORG 0030H 0030 758902 MAIN: MOV TMOD,#02H ;定时器T0以方式2定时 0033 758CEC MOV TH0,#0ECH ;定时40μs 0036 758AEC MOV TL0,#0ECH 0039 C2BI CLR P3.1 ;P3.1初始值 003B D28C SETB TR0 ( ;开启定时器TO 003D C2BI LOOP: CLR P3.1 003F 108D02 JBC TF0,REP ;查询40μs定时到,则转 0042 013D AJP LOOP 0044 D2BI REP: SETB P3(1 ;P3(1输出高电平360 μs 0046 7F09 MOV R7,#09H ;定时40 μs X 9=360 μs 0048 108D02 LOOPl:JBC TF0,REPI ;查询高电平360μs定时到,则转 004B 0148 AJMP LOOPl 004D DFF9 REPI:DJNZ R7,LOOPl 004F 013D AJMP LOOP ;360 μs到,则转回输出周期波形 END 【6-14】请编程实现以80C51单片机定时器,计数器T1对外部事件计数。每计数1000个脉冲后,定时 器,计数器T1转为定时工作方式,定时10 ms后,又转为计数方式,如此循环。单片机晶振频率为6 MHz。 请加上必要的伪指令,并对源程序加以注释。 【答】晶振频率为6 MHz时,机器周期为2μs。 16 计算:定时 10 ms=(2-TC)×2 μs,TC=EC7 8 H 16 计数 1000=2-TC,TC=64536=FCl 8 H 程序如下: ORG 0000H 0000 0130 AJMP MAIN ORG 003 0H 0030 758950 MAIN: MOV TMOD,#50H ;计数控制字,T1为计数器、方式1 0033 758DFC MOV THI,#0FCH ;计数初始值(1000) 0036 758818 MOV TLI,#18H 0039 D28E SETB TRI ;开启计数器T1 003B 108F02 LOOP: JBC TFI,TIMING ;查询T1计数溢出,若溢出,则转入定时 003E 013B AJMP LOOP 0040 758910 TIMING:MOV TMOD,#1 0H ;定时控制字,T1为定时器、方式l 0043 758DEC MOV THI,#0ECH ;定时10 ms 0046 758878 MOV TLI,#78H 0049 D28E SETB TRI ;开启定时器T1 004B 108FE2 L00PI:JBC TFI,MAIN ;查询定时溢出,若溢出,则重新开始 004E 014B AJMP LOOPI 【6-15】在80C5 1单片机系统中,已知时钟频率为6 MHz,选用定时器T0设置为定时方式3,请编程使P1.0和P1.1引脚上分别输出周期为4 ms和800 μs的方波。加上必要的伪指令,并对源程序加以注释。 【答】机器周期为2μs,定时分别为2 ms和400μs。 8- 计算:400 μs定时,400μs=(2-TC)×2 μs,TC=38 H。 程序如下: ORG 0000H 0000 0130 AJMP MAIN ORG 000BH ;定时器TO中断矢量 。 000B 2100 AJMP TIME MAIN: 0030 7805 MOV R0,#05H 0032 758903 MOV (TMOD,#03H ;T0方式3,定时器中断 0035 758A38 MOV TL0,#38H ;TLO定时400μs 0038 D28C SETB TR0 ;开启定时器TL0 003A C28E CLR, TRl 003C D2A9 SETB ET0 ;开定时器TLO中断 003E D2AF SETB EA 0040 80FE SJMP$ ;中断等待 ORG 01 00H ( TIME: 0100 758A38 MOV TL0,#38H ;TL0定时400~s 0103 B291 CPL( P1.1 ;400μs 定时到,P1.1输出变反 0105 D804 DJNZ R0,RETURN 0107 7805 MOV R0,#05H 0109 B290 CP[( P1(0 ;400μs * 5=2 ms到,P1.O输出变反 RETURN: 010B 32 RETI END 【6-1.6】如何实现通过定时器,计数器的计数功能达到扩大外部中断源的目的? 【答】可以利用定时器,计数器T0或T1的外部事件输入引脚TO、T1作为边沿触发的外部中断源。这时应设置定时器,计数器为计数器方式,而计数常数为满刻度值。外部输入的脉冲在负跳变时有效,计数器加1,由于计数常数已设为满刻度值,所以计数器加1后即溢出,向CPU申请中断。 以定时器,计数器T0、T1的计数脉冲输入引脚TO、T1作为外部中断请求输入引脚,定时器,计数器、T1的中断矢量用做第三、笫四个扩展的外部中断矢量,定时器,计数器T0、T1的中断服务程序人口T0 地址作为扩展的第三、笫四个外部中断服务人口地址,即实现了外部中断源的扩展。 【6-17】某8 O C5 1单片机应用系统有3个外部中断源,另外要求从P1.O引脚上输出一个5 k Hz的方波,并采用定时器,计数器作为串行口的波特率发生器。请设计该应用系统,并编程实现系统功能。对源程序加以注释和加上伪指令。 【答】分析如下: ?80C51单片机具有两个外部中断源(INT0和INT1),为了不增加其他硬件开销,可以把定时器,计数器T0设置为方式3,这时可把80C51的引脚T0作为第3个外部中断源的输入脚,TL0设置为计数器,计数器的计数常数设为FFH,当T0引脚上出现从1至0的负跳变时,TL0计数溢出,申请中断,这时定时器TO的中断源相当于一个边沿触发的外部中断源。 ?当T0设置为方式3之后,T1做串行口的波特率发生器,设为方式2。 ?在T0方式3下,TH0只能做8位定时器,用来产生5 k H z方波的定时,由P1.0引脚上输出5 k Hz频率的方波,则方波周期为200μs,要求定时时间为1 00 μs。若采用1 2 M Hz的晶体振荡器,则机器周期为1μs。 8。 计算时间常数:1 00μs=(2一TC)×lμs,TC=256—100=156 程序如下: ORG 0000H SJMP MAIN ORG 000BH AJMP TLOINT ;TL0(外部中断)中断入口 ORG 001BH AJMP THOINT ;TH0定时中断入口 ORG 0030H MAIN: MOV TMOD,#27H ;设T0为方式3,TL0为计数器方式, TH0为定时器方式,Tl做波特率发生器 MOV TH0,,#15 6 ;TH0定时常数 MOV TL0,#0FFH ;TL0计数常数 MOV TLI,#BAUD ;BAUD根据波特率算出的时间常数 MOV THI,#BAUD ;BAUD MOV TCON,#55H ;置TR0和TRI为1,启动TL0和TH0 ’ SETB ET0 ;允许TR0中断 SETB ETI ;允许TRI中断 SETB EA ;CPU中断允许 SJMP $ ;中断等待 第3个外部中断的中断服务程序 ORG 0100H TLOINT:MOV TL0,#0FFH ;重置计数长度 (中断处理) RETI THOINT:MOV TH0,#156 ;重置定时常数 CPL P1.0 ;P1.0引脚输出方波 ’ RETI END
本文档为【单片机高锋版答案全集】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_358746
暂无简介~
格式:doc
大小:204KB
软件:Word
页数:81
分类:其他高等教育
上传时间:2018-08-08
浏览量:198