当前位置:文档之家› AT89S52中断系统及应用(汇编)

AT89S52中断系统及应用(汇编)

AT89S52中断系统及应用(汇编)
AT89S52中断系统及应用(汇编)

1

第5章AT89S52中断系统及应用

本章要点:

了解中断的基本概念、中断的作用及中断请求方式

掌握AT89S52单片机中断结构

掌握AT89S52单片机6个中断源的中断请求、中断屏蔽、优先级设置等初始化编程方法

掌握非接触式IC卡门禁系统的中断应用方法

5.1中断的概念

为了提高CPU的工作效率以及对实时系统的快速响应,产生了中断控制方式的信息交换。

在日常生活中广泛存在着“中断”的例子。例如一个人正在看书,这时电话铃响了,于是他将书放下去接电话。为了在接完电话后继续看书,他必须记下当时的页号,接完电话后,将书取回,从刚才被打断的位置继续往下阅读。由此可见,中断是一个过程。计算机是这样处理的,当有随机中断请求后,CPU暂停执行现行程序,转去执行中断处理程序,为相应的随机事件服务,处理完毕后CPU恢复执行被暂停的现行程序。

在这个过程中,应注意如下几方面:

?外部或内部的中断请求是随机的,若当前程序允许处理应立即响应;

?在内存中必须有处理该中断的处理程序;

?系统怎样能正确地由现行程序转去执行中断处理程序;

?当中断处理程序执行完毕后怎样能正确地返回。

现在再从另一方面分析,整个中断的处理过程就像子程序调用,但是本质的差异是调用的时间是随机的,调用的形式是不同的。因此,是否可以认为处理中断的过程是一种特殊的子程序调用。如图5.1和图5.2 所示。

中断有两个重要特征:程序切换(控制权的转移)和随机性。

图5.1 子程序调用过程图5.2中断的执行过程

5.2AT89S52中断源与中断向量地址

中断源就是向CPU发出中断请求的来源。AT89S52共有六个中断源:2个外部中断(INT0和INT1)、3个定时器中断(定时器0、1和2)和1个串行中断。如图5.3所示。

2 5.2.1外部中断

外部中断包括外部中断0和外部中断1。它们的中断请求信号分别由单片机引脚/P3.2和/P3.3输入。

外部中断请求有两种信号方式:电平方式和脉冲方式。电平方式的中断请求信号是低电平有效,即只要在或

引脚上出现低电平时,就激活外部中断标志。脉冲方式的中断请求信号则是脉冲的负跳变有效。在这种方式下,

在两个相邻机器周期内,或引脚电平状态发生变化,即在第一个机器周期内位为高电平,第二个机器周期内为低电平,就激活外部中断标志。

5.2.2内部定时和外部计数中断

单片机芯片内部有三个定时器/计数器,对脉冲信号进行计数。若脉冲信号为内部振荡器输出的脉冲(机器周期信号),则计数脉冲的个数反映了时间的长短,称为定时方式。若脉冲信号为来自T0/P3.4、T1/P3.5、T2/P1.0的外部脉冲信号,则计数脉冲的个数仅仅反映外部脉冲输入的多少,称为计数方式。

当定时器/计数器发生溢出(计算器状态由FFFFH再加1,变为0000H状态),CPU查询到单片机内部硬件自动设置的一个溢出标志位为1时,便激活中断。

定时方式中断由单片机芯片内部发生,不需要在芯片外部设置引入端。计数方式中断外部输入脉冲(负跳变)引起,脉冲加在引脚T0/P3.4、T1/P3.5、T2/P1.0端。

5.2.3串行中断

串行中断是为串行通信的而需要设置的。当串行口发送完或接收完一帧信息时,单片机内部硬件便自动串行发送或接收中断标志位置1。当CPU查询到这些标志位为1时,便激活串行中断。串行中断是由单片机内部自动发生的,不需要在芯片外设置引入脚。

5.2.4中断矢量地址

中断源发出请求,CPU响应中断后便转向中断服务程序。中断源引起的中断服务程序入口地址即为中断矢量地址。中断向量地址是固定的,用户不可改变。中断服务入口地址如表5.1所示。

表5.1 中断源及其对应的矢量地址

3

由于两个相邻的中断服务程序入口地址间隔仅为8字节,一般的中断服务程序是容纳不下的。通常是在相应的中断服务程序入口地址中放一条长跳转指令LJMP,这样就可以转到64KB的任何可用区域了。若在2KB范围内转移,则可存放AJMP指令。

由于0003H~002BH是中断矢量地址区,因此,单片机应在程序入口地址0000H处放一条无条件转移指令(如LJMP XXXXH),转到指定的主程序地址。

5.3中断标志与控制

要实现中断,首先中断源要提出中断申请,而中断请求的过程是单片机内部特殊功能寄存器TCON和SCON相关状态位—中断请求标志位置1的过程,当CPU响应中断时,中断请求标志位才由硬件或软件清0。

5.3.1定时器/计数器控制寄存器TCON

TCON主要用于寄存外部中断请求标志、定时器溢出标志、和外部中断触发方式的选择。该寄存器的字节地址是88H,可以位寻址;位地址是88H~8FH。其格式如下:

其中与中断有关的控制位共6位:

IE0和IE1:外部中断请求标志。当CPU采样到(或)端出现有效中断请求(低电平或脉冲下降沿)时,IE0(或IE1)位由片内硬件自动置1;当中断响应完成转向中断服务程序时,由片内硬件自动清0。

IT0和ITl:外部中断请求信号触发方式控制标志。

IT0(或IT1)=1,(或)信号为脉冲触发方式,脉冲负跳沿有效;

IT0(或IT1)=0,(或)信号电平触发方式,低电平有效。

IT0(或IT1)位可由用户软件置1或清0

TF0和TFl:定时器/计数器溢出中断请求标志。当定时器0(或定时器1)产生计数溢出时,TF0(或TF1)由片内硬件自动置1;当中断响应完成转向中断服务程序时,由片内硬件自动清0。

TR0和TR1:TR0(或TR1)=1,表示启动定时器0(或定时器1);

该标志位也可用于查询方式,即用户程序查询该位状态,判断是否应转向对应的处理程序段。待转如处理程序后,必须由软件清0。

4 5.3.2串行口控制寄存器SCON

SCON的字节地址是98H,可以位寻址;位地址是98H~9FH。其格式如下:

其中与中断有关的控制位共2位:

TI:串行口发送中断请求标志。当串行口发送完一帧信号后,由片内硬件自动置1。但CPU响应中断时,并不清除TI,必须在中断服务程序中由软件对TI清0。

RI:串行口接收中断请求标志。当串行口接收完一帧信号后,由片内硬件自动置1。但CPU响应中断时,并不清除RI,必须在中断服务程序中由软件对其清0。

应当指出,AT89S52系统复位后,TCON和SCON中各位被复位成“0”状态,应用时要注意各位的初始状态。5.3.3中断允许控制寄存器IE

CPU对中断源的开放和屏蔽,以及每个中断源是否被允许中断,都受中断允许寄存器IE控制。

中断允许控制寄存器IE对中断的开放和关闭实行两级控制。即有一个总中断位EA。5个中断源还有各自的控制位进行控制。

,力量看来,-

IE寄存器的字节地址是A8H,可以位寻址;位地址是A8H~AFH。其格式如下:

其中与中断有关的控制位共7位:

EA:中断允许总控制位。

EA=0时,中断总禁止,禁止一切中断;

EA=1时,中断总允许,而每个中断源允许与禁止,分别由各自的允许位确定。

EX0和EX1:外部中断允许控制位。

EX0(或EX1)=0,禁止外部中断(或);

EX0(或EX1)=1,允许外部中断(或)。

ET0和ET1:定时器中断允许控制位。

ET0(ET1)=0,禁止定时器0(或定时器1)中断;

ET0(ET1)=1,允许定时器0(或定时器1)中断。

ES:串行中断允许控制位。

ES=0,禁止串行(TI或RI)中断;

ES=1,允许串行(TI或RI)中断。

ET2:定时器2中断允许控制位。

ET2=0,禁止定时器2(TF2或EXF2)中断;

ET2=1,允许定时器2(TF2或EXF2)中断;

在单片机复位后,IE各位被复位成“0”状态,CPU处于关闭所有中断的状态。所以,在单片机复位以后,用户必须通过程序中的指令来开放所需中断。

5 5.3.4中断优先级控制寄存器IP

AT89S52单片机具有高、低2个中断优先级。高优先级用“1”表示,低优先级用“0”表示。各中断源的优先级由中断优先级寄存器IP进行设定。IP寄存器字节地址为B8H,可以位寻址;位地址为0BFH~0B8H。寄存器的内容及位地址表示如下:

其中与中断有关的控制位共6位:

PX0:外部中断0()中断优先级控制位;

PT0:定时器0(T0)中断优先级控制位;

PX1:外部中断1()中断优先级控制位;

PT1:定时器1(T1)中断优先级控制位;

PS:串行口中断优先级控制位;

PT2:定时器2(T2)中断优先级控制位。

各中断优先级的设定,可用软件对IP的各位置1或清0,为1时是高优先级,为0时是低优先级。

当系统复位后,IP各位均为0,所有中断源设置为低优先级中断。

例如:CPU开中断可由以下两条指令来实现:

SETB 0AFH ;EA置1

或0RL IE,#80H ;按位“或”,EA置1

CPU关中断可由以下两条指令来实现:

CLR 0AFH ;EA清0

或ANL IE,#7FH ;按位“与”,EA清0

又如设置外部中断源为高优先级,外部中断源为低优先级,可由下面指令来实现:SETB 0B8H ;PX0置1

CLR 0BAH ;PXl清0

或MOV IP,#000××0×1B ;PX0置1,PXl清0

5.4优先级结构

中断优先级只有高低两级,所以在工作过程中必然会有两个或两个以上中断源处于同一中断优先级。若出现这种情况,内部中断系统对各中断源的处理遵循以下两条基本原则:

1.低优先级中断可以被高优先级中断所中断,反之不能;

2.一种中断(不管是什么优先级)一旦得到响应,与它同级的中断不能再中断它。

当CPU同时收到几个同一优先级的中断请求时,CPU将按自然优先级顺序确定应该响应哪个中断请求。其自然优先级排列如下:

中断源同级自然优先级

外部中断0 最高级

定时器0中断

外部中断1

定时器1中断

串行口中断

定时器2中断最低级

【例5.1】设AT89S52的片外中断为高优先级,片内中断为低优先级。试设置IP相应值。

解:(a) 用字节操作指令

MOV IP,#05H

或MOV 0B8H,#05H

(b) 用位操作指令

SETB PX0

SETB PX1

CLR PS

CLR PT0

CLR PT1

5.5中断系统的初始化

5.5.1中断系统的初始化及应用

AT89S52中断系统是可以通过4个与中断有关的特殊功能寄存器TCON、SCON、IE和IP进行统一管理的。中断系统初始化是指用户对这些特殊功能寄存器中的各控制位进行赋值。

中断系统初始化步骤如下:

(1) CPU开中断或关中断;

(2) 某中断源中断请求的允许或禁止(屏蔽);

(3) 设定所用中断的中断优先级;

(4) 若为外部中断,则应规定低电平还是负边沿的中断触发方式。

【例5.2】请写出为低电平触发的中断系统初始化程序。

解:(1)采用位操作指令

SETB EA ;CPU开中断

SETB EXl ;开中断

SETB PXl ;令为高优先级

CLR ITl ;令为电平触发

(2)采用字节型指令

MOV IE,#84H ;开中断

ORL IP,#04H ;令为高优先级

ANL TCON,#0FBH ;令为电平触发

显然,采用位操作指令进行中断系统初始化比较简单,因为用户不必记住各控制位在寄存器中的确切位置,而控制名称比较容易记忆。

5.5.2中断系统的应用

中断管理与控制程序一般包含在主程序中,根据需要通过几条指令来实现,例如CPU开中断,可用指令“SETB EA”或“ORL IE,#80H”来实现,关中断可用指令“CLR EA”,或“ANL IE,#7FH”来实现。

中断服务程序的一般格式如下:

ORG ADDRESS

AJMP INTVS

INTVS :CLR EA ;关中断

PUSH PSW ;保护现场

PUSH A

SETB EA ;开中断,允许CPU响应高级中断

中断服务

CLR EA ;关中断

POP A ;恢复现场

POP PSW ;

SETB EA ;开中断

RETI ;中断返回

其中ADDRESS为AT89S52单片机的中断入口地址。INTVS为与中断入口地址相应的中断服务程序首地址。

编写此程序应注意以下几点:

(1) 为了要跳到用户设计的中断服务程序,在相应入口地址安排一条跳转指令;

(2) 在中断服务程序的末尾,安排一条返回指令RETI;

(3) 由于在响应中断时,CPU只自动保护断点,所以CPU的其他现场(如寄存器A、B状态,状态字PSW,通用寄存器R0、R1等)的保护和恢复也必须由用户在中断服务程序中安排;

(4) 在此多级中断的中断服务程序中,保护现场之后的开中断(SETB EA)是为了允许有更高级中断打断此中断服务程序,恢复现场和保护现场之前的关中断(CLR EA)是为了保证在恢复和保护现场时,CPU不响应新的中断请求,从而使现场数据不受到破坏或者造成混乱;

(5) 当把程序中保护现场之后的"SETB EA"和恢复现场之前的"CLR EA"删除,就是一个单级中断服务程序。

5.5.3中断程序举例

【例5.3】使用一个按键控制图5.4所示的流水灯,每按一次按键流水灯的流动方向改变一次,要求使用中断技术处理按键。

解:如图5.4所示,按键接在P3.3,因此采用外部中断1,中断申请从输入路。每按一次按键,产生一次中断,流水灯流动方向便改变一次。当开关SA17闭合时,发出中断请求。中断服务程序的矢量地址为000BH。

图5.4 方向可控流水灯

程序如下:

ORG 0000H ;定义下一条指令的地址

SJMP START ;转向主程序

ORG 0013H ;安排外部中断1处理程序的第一条指令

SJMP:KEYS ;直接转移到中断处理程序

START: ;主程序起点

MOV SP, #40H ;设置堆栈栈底指针

SETB IT1 ;设置外部中断1的中断方式为下降沿中断

SETB EX1 ;开放外部中断1

SETB EA ;开放总中断

MOV A, #01H ;#01H送累加器A

L1: MOV P2, A ;累加器A中内容送P2口

MOV R7, #0FFH ;延时

L3: MOV R6, #0FFH

L2: DJNZ R6, L2

DJNZ R7, L3

JNB FX, L4 ;FX=0时转移到L4(FX是流水灯流动方向标志)

RL A ;累加器A中内容左移一位

SJMP L5 ;转移至L5

L4: RR A ;累加器A中内容右移一位

L5: SJMP L1 ;转移至L1

;=================================================

;按键中断程序

;入口:外部中断1

;功能:确认按键后改变方向标志FX的状态

KEYS: ;中断处理程序入口

MOV R7, #20H ;首先延时去抖

K1: MOV R6, #0FFH

DJNZ R6, $

DJNZ R7,K1

JB KEY ,K2 ;延时完成后再检测按键

CPL FX ;确认按键按下,改变方向标志位状态

K2: RETI ;中断结束返回

KEY BIT P3.3 ;定义按键变量

FX BIT 00H ;定义位变量,用于判断方向

END ;结束

实训三中断的用法

为了提高单片机的工作效率,计算机中常采用中断技术处理一些问题。本训练通过制作一个高效率的流水灯来介绍如何使用中断技术处理按键。

一、目的要求

1.掌握单片机中中断系统的结构。

2.掌握中断源的控制方法。

3.掌握中断处理程序的组成以及中断向量的概念。

4.练习单片机系统简单故障的分析方法。

二、任务目标

使用一个按键控制流水灯,电路见本教材中第五章的图5.4。每按一次按键流水灯的流动方向改变一次,要求使用中断技术处理按键。

通过本技能训练的练习,掌握单片机中中断的处理方法。

三、工具器材

直流电源5V/500、面包板、跳线、元器件、编程器等。

四、实训环节

1.组装用户板。10分

2.输入并调试程序,再将程序传送到用户板中。40分

3.运行程序观察流水灯效果,按下按键开关观察显示变化。10分

4.修改程序,将延时程序段使用子程序实现。10分

5.分析。30分

A.如果89S51第21脚始终为高电位,会出现什么现象?

B.如果89S51第28脚状态正常(有高、低电位变化),但D8始终不亮,可能会有哪些原因?如何进一步检测?C.如果按下按键开关SA17后,显示流动方向不发生变化,应当如何判断是CPU外部故障还是内部程序故障?

五、成绩评定

作业习题 中断及定时器

中断及定时器、串行口习题 一、填空 1.MCS-51的Po口作为输出端口时,每位能驱动个SL型TTL负载. 2.MCS-51有个并行I\O口,其中P0~P3是准双向口,所以由输出转输入时必须先 写入 3.设计8031系统时,_ 口不能用作一般I\O口. 4.MCS-51串行接口有4种工作方式,这可在初始化程序中用软件填写特殊功能寄存 器__ _加以选择. 5.当使用慢速外设时,最佳的传输方式是。 6.当定时器To工作在方式时,要占定时器T1的TR1和TF1_两个控制位. 7.MCS-51有个中断源,有2 个中断优先级,优先级由软件填写特殊功能寄存器加以选择.. 8.用串口扩并口时,串行接口工作方式应选为方式。 9.在串行通信中,有数据传送方向、、三种方式. 10.外部中断入口地址为_ 。 二、判断 1.MCS-51的5个中断源优先级相同。() 2.要进行多机通信,MCS-51串行接口的工作方式应为方式1。() 3.MCS-51上电复位时,SBUF=00H。()。 4.MCS-51有3个中断源,优先级由软件填写特殊功能寄存器IP加以选择.. () 5.用串口扩并口时,串行接口工作方式应选为方式1. () 6.外部中断INTO 入口地址为_0013H() 7.MCS-51外部中断0的入口地址是0003H。(). 8.TMOD中的GATE=1时,表示由两个信号控制定时器的启停。()。 9.使用8751且=1时,仍可外扩64KB的程序存储器。() 10.PC存放的是当前执行的指令。() 11.MCS-51的特殊功能寄存器分布在60H~80H地址范围内。() 12.MCS-51有4个并行I\O口,其中P0~P3是准双向口,所以由输出转输入时必须先写入"0"() 三、选择 1.在中断服务程序中,至少应有一条( ) (A)传送指令(B)转移指令(C)加法指法(D)中断返回指令 2.要使MCS-51能够响应定时器T1中断、串行接口中断,它的中断允许寄存器IE的内容应是() (A)98H (B)84H (C)42 (D)22H 3.D MCS-51在响应中断时,下列哪种操作不会发生( ). (A)保护现场(B)保护PC (C)找到中断入口若悬河(D)保护PC转入中断入口 4.用MCS-51串行接口扩展并行I\O口时,串行接口工作方式应选择( ) (A)方式0 (B)方式1 (C)方式2 (D)方式3 5.MCS-51有中断源() (A)5个(B)2个(C)3个(D)6个 6.MCS-51响应中断时,下面哪一个条件不是必须的() (A)当前指令执行完毕(B)中断是开放的确 (C)没有同级或高级中断服务须(D)必须有RET1指令 7.使用定时器T1时,有几种工作模式() (A)1种(B)2种(C)3种(D)4种 8.计算机在使用中断方式与外界交换信息时,保护现场的工作方式应该是( ) (A)由CPU自动完成(B)在中断响应中完成功之路 (C)应由中断服务程序完成(D)在主程序中完成 9.下面哪一种传送方式适用于处理外部事件( ) (A)DMA (B)无条件传递进(C)中断(D)条件传递 四、编程 1. 1. 8225A控制字地址为300FH,请按:A口方式0输入,B口方式1输出,C口高位输出,C口低位输入,确定8225A控制字并编初始化程序. 2. 2. 编定一个软件延时1S和1min的子程序.设fosc=6Hz,则一个机器周期1μs。

中断系统的应用

实验报告 实验课程名称MCS-51系列单片机系统 实验项目名称中断系统的应用 年级13 专业 姓名 学号 实验时间:2016 年 5月 5 日

一、实验目的 1.熟悉51单片机中中断的概念,中断处理系统的工作原理。 2.学习外部中断技术的使用方法。 3.熟悉中断处理程序的c语言编程方法。 二、实验原理 51 单片机内部有一个中断管理系统,它能对内部的定时器事件、串行通信 的发送和接收事件及外部事件(如键盘按键动作)等进行自动的检测判断,当有某个事件产生时,中断管理系统会置位相应标志通知 CPU,请求 CPU 迅速去处理。CPU 检测到某个标志时,会停止当前正在处理的程序流程,转去处理所发生的事件(针对发生的事件,调用某一特定的函数,称为该事件的中断服务函数),处理完以后,再回到原来被中断的地方,继续执行原来的程序。 三、实验步骤 外部中断1触发 1.C语言源程序代码 2.用proteus仿真软件设计一个仿真软件,将单片机的P1口作 为输出口,外部中断0键盘外接button,实验原理图及仿真结果如下:

当按下按钮中断开关按钮时,出现led灯变亮。断开中断开关时候,led灯熄灭。 外部中断0触发 1.C语言源程序代码

2.实验原理图和proteus仿真结果如下图: 当按下按钮中断开关按钮时,出现led灯变亮。断开中断开关时候,led灯熄灭。

四、实验总结 这次的实验,我学习到很多东西,在编程序的时候出现很多错误,但在耐心的看完一步一步的程序后,还有学姐的一一为我解答所困 惑的问题,改变外部中断0和外部中断1的不同触发方式,实验的 结果也不相同。但对于现在初学单片机的我来说,学习不论过程, 只看结果。当然,在这次的实验中我受到了很多的启发,希望在以 后的学习过程中,多多学习各种各样对我有意义的方法。

AT89S52中断系统及应用(汇编)

1 第5章AT89S52中断系统及应用 本章要点: 了解中断的基本概念、中断的作用及中断请求方式 掌握AT89S52单片机中断结构 掌握AT89S52单片机6个中断源的中断请求、中断屏蔽、优先级设置等初始化编程方法 掌握非接触式IC卡门禁系统的中断应用方法 5.1中断的概念 为了提高CPU的工作效率以及对实时系统的快速响应,产生了中断控制方式的信息交换。 在日常生活中广泛存在着“中断”的例子。例如一个人正在看书,这时电话铃响了,于是他将书放下去接电话。为了在接完电话后继续看书,他必须记下当时的页号,接完电话后,将书取回,从刚才被打断的位置继续往下阅读。由此可见,中断是一个过程。计算机是这样处理的,当有随机中断请求后,CPU暂停执行现行程序,转去执行中断处理程序,为相应的随机事件服务,处理完毕后CPU恢复执行被暂停的现行程序。 在这个过程中,应注意如下几方面: ?外部或内部的中断请求是随机的,若当前程序允许处理应立即响应; ?在内存中必须有处理该中断的处理程序; ?系统怎样能正确地由现行程序转去执行中断处理程序; ?当中断处理程序执行完毕后怎样能正确地返回。 现在再从另一方面分析,整个中断的处理过程就像子程序调用,但是本质的差异是调用的时间是随机的,调用的形式是不同的。因此,是否可以认为处理中断的过程是一种特殊的子程序调用。如图5.1和图5.2 所示。 中断有两个重要特征:程序切换(控制权的转移)和随机性。 图5.1 子程序调用过程图5.2中断的执行过程 5.2AT89S52中断源与中断向量地址 中断源就是向CPU发出中断请求的来源。AT89S52共有六个中断源:2个外部中断(INT0和INT1)、3个定时器中断(定时器0、1和2)和1个串行中断。如图5.3所示。

51单片机汇编程序范例

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。 程序可见: http: 32.html中的HEX2BCD子程序。 .说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。 但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。 上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。.单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。 为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的!.近来,在网上发现了一个链接: ,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。 这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:

“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。 .下面说说做而论道的编程思路。;----------------------------------------------------------------------- ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。 ;那么可以写成: ; n = [b15 ~ b0] ;把16位数分解成高8位、低8位来写,也是常见的形式: ; n = [b15~b8] * 256 + [b7~b0] ;那么,写成下列形式,也就可以理解了: ; n = [b15~b12] * 4096 + [b11~b0] ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数; ;上式可以变形为: ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]} ;用x代表[b15~b12],有: ; n =x * 4000 + {x * (100 - 4) + [b11~b0]} ;即: ; n =4*x (千位) + x (百位) + [b11~b0] - 4*x ;写到这里,就可以看出一点BCD码变换的意思来了。 ;;上式中后面的位:

51单片机汇编语言编程:用定时器控制输出矩形波

80C51单片机的时钟频率为12MHz,利用定时器T1和P1.0输出矩形脉冲。 波形只画出了2段:一段为100us 另一段为50us。 要完全的、完整的、详细的编写此程序的过程!谢谢 ------------------------ 最佳答案: 用一个定时器定时50us,也可以达到题目要求。 在我的空间里面有类似的问题和解答。 ORG 0000H SJMP START ORG 001BH ;T1中断入口. SJMP T1_INT START: MOV TMOD, #20H ;设置T1定时方式2 MOV TH1, #206 ;自动重新装入方式. MOV TL1, #206 ;定时时间 MOV IE, #10001000B ;开放总中断和T1中断. SETB TR1 ;启动T1 MOV R2, #3 ;周期是3×50us SJMP $ ;等着吧. T1_INT: SETB P1.0 ;输出高.

DJNZ R2, T1_END ;R2-1 CLR P1.0 ;减到0,就输出低电平. MOV R2, #3 T1_END: RETI ;中断返回. END ;完. ------------------------ 已知51单片机系统晶振频率为12MHz,请利用定时器1工作方式1,中断方式在P2.3输出频率为10Hz的方波。 写出定时设计过程及完整代码 问题补充:用汇编的麻烦写一下 ------------------------ 最佳答案: ORG 0000H SJMP START ORG 001BH ;T1中断入口. SJMP T1_INT START: MOV TMOD, #10H ;设置T1定时方式1 MOV TH1, #(65536-50000) / 256 ;送入初始值.

第四章MCS-51汇编语言程序设计

第四章MCS-51汇编语言程序设计 重点及难点: 单片机汇编语言程序设计的基本概念、伪指令、单片机汇编语言程序的三种基本结构形式、常用汇编语言程序设计。 教学基本要求: 1、掌握汇编语言程序设计的基本概念; 2、掌握伪指令的格式、功能和使用方法; 3、掌握顺序结构、分支结构和循环结构程序设计的步骤和方法; 4、掌握常用汇编语言程序设计步骤和方法。 教学内容 §4.1汇编语言程序设计概述 一、汇编语言的特点 (1)助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。 (2)使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。 (3)汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。 (4)汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用;但是掌握了一种计算机系统的汇编语言后,学习其他的汇编语言就不太困难了。 二、汇编语言的语句格式 [<标号>]:<操作码> [<操作数>];[<注释>] 三、汇编语言程序设计的步骤与特点 (1)建立数学模型 (2)确定算法 (3)制定程序流程图 (4)确定数据结构 (5)写出源程序 (6)上机调试程序 §4.2伪指令 伪指令是程序员发给汇编程序的命令,也称为汇编命令或汇编程序控制指令。 MCS- 51常见汇编语言程序中常用的伪指令:

第四章MCS-51汇编语言程序设计91 1.ORG (ORiGin)汇编起始地址命令 [<标号:>] ORG <地址> 2.END (END of assembly)汇编终止命令 [<标号:>] END [<表达式>] 3.EQU (EQUate)赋值命令 <字符名称> EQU <赋值项> 4.DB (Define Byte)定义字节命令 [<标号:>] DB <8位数表> 5.DW (Define Word)定义数据字命令 [<标号:>] DW <16位数表> 6.DS (Define Stonage )定义存储区命令 [<标号:>] DW <16位数表> 7.BIT位定义命令 <字符名称> BIT <位地址> 8.DA TA数据地址赋值命令 <字符名称> DATA <表达式> §4.3单片机汇编语言程序的基本结构形式 一、顺序程序 [例4-1]三字节无符号数相加,其中被加数在内部RAM的50H、51H和52H单元中;加数在内部RAM的53H、5414和55H单元中;要求把相加之和存放在50H、51H和52H单元中,进位存放在位寻址区的00H位中。 MOV R0 ,# 52H ;被加数的低字节地址 MOV R1 ,# 55H ;加数的低字节地址 MOV A ,@ R0 ADD A ,@ R1 ;低字节相加 MOV @ R0 , A ;存低字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;中间字节带进位相加 MOV @ R0 , A ;存中间字节相加结果 DEC R0 DEC R1 MOV A ,@ R0 ADDC A ,@ R1 ;高字节带进位相加 MOV @ R0 , A ;存高字节相加结果 CLR A

汇编语言例子

实验三: 1)题目:在内存中从ARRAY开始的连续三个字节单元存放着30H,40H,50H。编制程序将这三个连续的数据传送到内存TABLE开始的单元。 DATA SEGMENT ARRAY DB 30H,40H,50H 定义数据段 TABLE DB 3 DUP (?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,ARRAY LEA DI,TABLE MOV CX,3 REP MOVSB JMP $ CODE ENDS END START (2)题目:把内存2000H和3000H字单元的内容相加,结果存入4000H单元。(不考虑溢出) DATA SEGMENT ORG 2000H DW 1234H ORG 3000H DW 5678H ORG 4000H DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AX,[2000H] ADD AX,[3000H] MOV [4000H],AX JMP $ CODE ENDS END START 实验四 1、数据传送指令和算术运算指令完成NUM1和NUM2相加,结果放入SUM中。

DATA SEGMENT NUM1 DW 0012H,0030H,0FC21H ; 数1 NUM2 DW 3E81H,44E9H,6D70H ; 数2 SUM D W 3 DUP(?) ; 结果单元 DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV CX,3 LEA SI,NUM1 LEA DI,NUM2 LEA AX,SUM HE: MOV BX,[SI] ADD BX,[DI] MOV [AX],BX INC SI INC DI INC AX LOOP HE MOV AH, 4CH ; 返回DOS INT 21H CODE ENDS END START 2、内存中自TABLE开始的七个单元连续存放着自然数0至6的立方值(称作立方表)。;任给一数X(0≤X≤6)在XX单元,查表求X的立方值,并把结果存入YY单元中。;提示用XLAT指令 DATA SEGMENT TABLE DB 0H,1H,2H,3H,4H,5H,6H XX DB 1 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,TABLE MOV AL,[XX] XLAT MOV DL,AL MOV AH,02H INT 21H JMP $

定时器中断综合实验

实验2 定时器、中断综合实验 一、实验目的 熟悉MCS-51定时器,串行口和中断初始化编程方法,了解定时器的应用,时钟程序的设计与调试技巧。 二、实验内容 编写程序,用定时器中断现实LED跑马灯实验。 实验内容1: 1).用查表法实现LED跑马灯实验; 2).采用定时器控制跑马灯的变化速度。 三、流程框图 四、实验步骤及程序 ORG 0000H LJMP MAIN ORG 000BH ; T0 中断入口地址 MOV TH0,#0BH ; 62.5毫秒定时 MOV TL0,#0DCH DJNZ R2,T0OUT ; 中断16次为1秒 MOV R2,#16 PUSH ACC ; 保存数据 MOVC A,@A+DPTR ; 查表法LED 左右移 MOV P0,A POP ACC INC A CJNE A,#24,T0OUT ; 24种"花样" CLR A T0OUT: RETI ORG 0050H MAIN: MOV SP,#6FH ; MOV R2,#16 ; 定时器中断次数,@12M MOV A,#00H ; 查表起始值 MOV DPTR,#TABLE MOV TMOD,#00000001B ; 定时器方式1 MOV TH0,#0BH ; 62.5MS MOV TL0,#0DCH SETB EA ; 中端总允许 SETB ET0 ; 允许T0 中断 SETB TR0 ; 启动定时 WAIT: SJMP $ ;原地等待中断

RET TABLE:DB 0FEH,0FDH,0FBH,0F7H ;LED 左右移数据表,共有24种"花样" DB 0EFH,0DFH,0BFH,07FH DB 00H,55H,0AAH,00H DB 7FH,0BFH,0DFH,0EFH DB 0F7H,0FBH,0FDH,0FEH DB 00H,0AAH,55H,00H END 思考:换用T1定时器,定时方式2。 用汇编语言编辑8个LED灯,实现第一秒只有L1不亮,其余七个全亮,第二个L2不亮,其余七个全亮 ORG 0000H SJMP START ORG 000BH SJMP T0_INT START: MOV TMOD, #01H MOV TH0, #3CH ; (65536 - 50000) / 256; MOV TL0, #0B0H ; (65536 - 50000) % 256; SETB TR0 SETB ET0 SETB EA MOV A, #01H MOV R2, #20 SJMP $ T0_INT: MOV TH0, #3CH ; (65536 - 50000) / 256; MOV TL0, #0B0H ; (65536 - 50000) % 256; DJNZ R2, T0_END MOV R2, #20 MOV P0, A RL A T0_END: RETI END 实验内容2: 设计一个实时时钟,用42H显示秒单元,用41H显示分单元,用40H显示时单元。要求每满1秒,秒单元内容加1;秒满60,分单元加1,分满60,时单元加1。时满24 ,时分秒全部清0。 从秒到分,从分到时,通过软件累加现实。P115。 ORG 0000H LJMP MAIN ;上电,跳向主程序 ORG 000BH ;T0的中断入口

单片机定时器汇编

我们在学单片机时我们第一个例程就是灯的闪烁,那是用延时程序做的,现在回想起来,这样做不很恰当,为什么呢?我们的主程序做了灯的闪烁,就不能再干其它的事了,难道单片机只能这样工作吗?当然不是,我们能用定时器来实现灯的闪烁的功能。例1:查询方式ORG 0000H AJMP START ORG 30H START: MOV P1,#0FFH ;关所灯 MOV TMOD,#00000001B ;定时/计数器0工作于方式1 MOV TH0,#15H MOV TL0,#0A0H ;即数5536 SETB TR0 ;定时/计数器0开始运行 LOOP: JBC TF0,NEXT ;如果TF0等于1,则清TF0并转NEXT处(LOOP:JNB TF0,$) AJMP LOOP ;不然跳转到LOOP处运行 NEXT: CPL P1.0 MOV TH0,#15H MOV TL0,#9FH;重置定时/计数器的初值 AJMP LOOP END 键入程序,看到了什么?灯在闪烁了,这可是用定时器做的,不再是主程序的循环了。简单地分析一下程序,为什么用JBC呢?TF0是定时/计数器0的溢出标记位,当定时器产生溢出后,该位由0变1,所以查询该位就可知宇时时间是否已到。该位为1后,要用软件将标记位清0,以便下一次定时是间到时该位由0变1,所以用了JBC指令,该指位在判1转移的同时,还将该位清0.以上程序是能实现灯的闪烁了,可是主程序除了让灯闪烁外,还是不能做其他的事啊!不对,我们能在LOOP:……和AJMP LOOP指令之间插入一些指令来做其他的事情,只要保证执行这些指令的时间少于定时时间就行了。那我们在用软件延时程序的时候不是也能用一些指令来替代DJNZ吗?是的,但是那就要求你精确计算所用指令的时间,然后再减去对应的DJNZ循环次数,很不方便,而现在只要求所用指令的时间少于定时时间就行,显然要求低了。当然,这样的办法还是不好,所以我们常用以下的办法来实现。程序2:用中断实现 ORG 0000H AJMP START ORG 000BH ;定时器0的中断向量地址 AJMP TIME0 ;跳转到真正的定时器程序处 ORG 30H START: MOV P1,#0FFH ;关所灯 MOV TMOD,#00000001B ;定时/计数器0工作于方式1 MOV TH0,#15H MOV TL0,#0A0H ;即数5536 SETB EA ;开总中断允许 SETB ET0 ;开定时/计数器0允许 SETB TR0 ;定时/计数器0开始运行 SJMP $ ;LOOP: AJMP LOOP ;真正工作时,这里可写任意程序 TIME0:

汇编教程汇编语言编程实例

汇编语言编程实例一这一章,我们要把我们已学的知识集合起来。具体来讲,我们来写一个使用ODBC APIs的程序.为简单起见,这个程序中我使用Microsoft的Access数据库(Microso ft Access 97) . 注意:如果你使用的windows.inc 是1.18及其以下版本,在开始编译之前要修改其中的一个小bug.在windows.inc中查找 "SQL_NULL_HANDLE",将得到下面这行: SQL_NULL_HANDLE equ 0L 将0后面的"L"删除,象这样: SQL_NULL_HANDLE equ 0 这个程序是一个基于对话框的程序,有一个简单的菜单.当用户选择"connect"时,它将试图连接test.mdb数据库,如果连接成功,将显示由ODBC驱动程序返回的完整连接字符串.接下来,用户可选择"View All Records"命令,程序会使用listview control来显示数据库中的所有数据.用户还可以选择"Query"命令来查询特定的记录.例子程序将会显示一个小对话框提示用户输入想找的人名.当用户按下OK钮或回车键,程序将执行一个查询来查找符合条件的记录.当用户完成对数据库的操作时,可以选择"disconnect"命令与数据库断开连接. 现在看一下源程序: .386 .model flat,stdcall include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\odbc32.inc include \masm32\include\comctl32.inc include \masm32\include\user32.inc includelib \masm32\lib\odbc32.lib includelib \masm32\lib\comctl32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\user32.lib IDD_MAINDLG equ 101 IDR_MAINMENU equ 102 IDC_DATALIST equ 1000 IDM_CONNECT equ 40001 IDM_DISCONNECT equ 40002 IDM_QUERY equ 40003 IDC_NAME equ 1000 IDC_OK equ 1001 IDC_CANCEL equ 1002 IDM_CUSTOMQUERY equ 40004 IDD_QUERYDLG equ 102 DlgProc proto hDlg:DWORD, uMsg:DWORD, wParam:DWORD, lParam:DWORD

T0作定时器汇编程序中断法

T0作定时器汇编程序(中断法) 单片机T0作定时器实现数码管显示的汇编程序(中断法) 电路是:P0口接数码管的字型码笔段,P2口接数码管的数位选择端. 下面是汇编语言源程序: SECOND EQU 30H TCOUNT EQU 31H ORG 00H LJMP START ORG 0BH LJMP INT0X START: MOV SECOND ,#00H MOV A,SECOND MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B

MOVC A,@A+DPTR MOV P2,A MOV TCOUNT,#00H MOV TMOD,#01H MOV TH0,#(65536-50000)/256 MOV TL0,#(65536-50000) MOD 256 SETB TR0 SETB ET0 SETB EA SJMP $ INT0X: MOV TH0,#(65536-5000)/256 MOV TL0,#(65536-5000) MOD 256 INC TCOUNT MOV A,TCOUNT CJNE A,#20,NEXT MOV TCOUNT,#00H

INC SECOND MOV A,SECOND CJNE A,#60,NEX MOV SECOND,#00H NEX: MOV A,SECOND MOV B,#10 DIV AB MOV DPTR,#TABLE MOVC A,@A+DPTR MOV P0,A MOV A,B MOVC A,@A+DPTR

MOV P2,A NEXT: RETI TABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH END T0工作在方式1,计时50ms,共20个循环,总计时1秒。 P0口显示低位,P2口显示高位,满60清零

DSP 的定时器和外中断实验报告

实验三:DSP 的定时器和外中断 定时器: 一.实验目的 1.通过实验熟悉VC5509A 的定时器; 2.掌握VC5509A 定时器的控制方法; 3.掌握VC5509A 的中断结构和对中断的处理流程; 4.学会C 语言中断程序设计,以及运用中断程序控制程序流程。 二.实验设备 计算机,ICETEK-VC5509-A 实验箱(或ICETEK 仿真器+ICETEK–VC5509-A 系统板+ 相关连线及电源)。 三.实验原理 1.通用定时器介绍及其控制方法(详见spru595b.pdf): TMS320VC5509A 内部有两个20 位通用定时器(GP): * 每个通用定时器包括: - 一个16 位的减计数的计数器TIM; - 一个16 位的定时器周期寄存器PRD; - 一个16 位的定时器控制寄存器TCR; - 一个16 位的定时器预定标寄存器PSCR; * PSCR 寄存器说明: 15 10 9 6 5 4 3 0 Reserved PSC Reserved TDDR PSC: 4 位的预定标值,与TIM 共同组成20 位的定时计数器. TDDR: 预定标周期寄存器(在需要时重装入PSC 的值) TCR 寄存器说明(详见spru595b.pdf) 2.中断响应过程(详见spru595b.pdf): 外设事件要引起CPU 中断,必须保证:IER 中相应使能位被使能,IFR 相应中断也被 使能。在软件中,当设置好相应中断标志后,开中断,进入等待中断发生的状态;外设(如定时器)中断发生时,首先跳转到相应中断高级的服务程序中(如:定时器1 会引起TINT 中断),程序在进行服务操作之后,应将本外设的中断标志位清除以便能继续中断,然后返回。 3.中断程序设计: - 程序中应包含中断向量表,VC5509A 默认向量表从程序区0 地址开始存放,根据IPVD 和IPVH 的值确定向量表的实际地址。 - 注意观察程序中INTR_init()函数的定义部分,其中IPVD 和IPVH 的值都为0x0d0;同时 观察配置文件ICETEK–VC5509-AE.cmd 中的VECT 段描述中o=0x0d000。 - 向量表中每项为8 个字,存放一个跳转指令,跳转指令中的地址为相应服务程序入口地址。第一个向量表的首项为复位向量,即CPU 复位操作完成后自动进入执行的程序入口。 - 服务程序在服务操作完成后,清除相应中断标志,返回,完成一次中断服务 5.实验程序分析:

24个汇编实例小程序

24个汇编小程序 题目列表: 1.逆序输出字符串“BASED ADDRESSING” 2.从键盘上输入两个数,分别放到x,y单元,求出它们的和 3.是编写一段程序,要求在长度为10h的数组中,找出大于42h的无符号数的个数并存入地址为up开始区域,找出小于42h的无符号数的个数并存入地址为down的开始区域 4.键盘输入一段字符串,其中小写字母以大写字母输出,其他字符不变输出 5.从键盘上就收一个小写字母,找出它的前导字符和后续字符,在顺序显示这三个字符 7.把一个包含20个数据的数组M分成两组:正整数组P和负整数组N,分别把这两个数组中的数据的个数显示出来 8.求出首地址为data的100个字数组中的最小偶数,并把它放在ax中 9输入两船字符串string1和string2,并比较两个字符串是否相等,相等就显示“match”,否则显示“no match” 10从键盘接收一个四位的十六进制数,并在终端显示与它等值的二进制数 11从键盘输入一系列以$为结束符的字符串,然后对其中的非数字字符计数,并显示计数结果 12有一个首地址为mem的100个字的数组,试编程序删除数组中所有为零的项,并将后续项向前压缩,最后将数组的剩余部分补上零 13.从键盘上输入一串字符(用回车键结束,使用10号功能调用)放在string中,是编制一个程序测试字符串中是否存在数字。如有,则把cl的第五位置1,否则将该位置置0 14.在首地址为data的字数组中,存放了100h的16位字数据,试编写一个程序,求出平均值放在ax寄存器中,并求出数组中有多少个数小于此平均值,将结果放在bx寄存器中(f 分别考虑有符号数、无符号数情况) 15.一直数组A包含15个互不相等的整数,数组B包含20个互不相等的整数。试编制一个程序,把既在A中又在B中出现的整数存放于数组C中 16.设在A、B和D单元中分别存放着三个数。若三个数都不是0,则求出三个数的和并存

用汇编语言编写的秒表计时器

实验报告十 课程名称:微机原理与接口技术指导老师:李素敏 学生姓冬:向春霞学号:1243013专业:通信工程日期:6月地点:理工603 实验九矩阵键盘检测 一、实验目的和要求 1.掌握利用单片机定时器实现定时。 2.熟悉单片机与数码管的接口技术及数码管动态显示的控制过程。 3.熟悉单片机与键盘的接口技术及按键识别过程。 4.学会如何编制含数码管显示,定时器中断及按键控制等多种功能的综合程序,体会大型程序的编制和调试技巧。 > 二、主要仪器设备 电脑,Keil软件 三、实验内容 1、实验要求: 要求其实现的功能如下(其中定时要求采取中断方式): (1)、用6位数码管显示秒表时间,最左边2位显示分,中间2位显示秒,最右边2位显示秒的小数位(~秒),秒与小数位之间要显示小数点。 (2)、两个按键: ①计时/停止按键:首次按下从0开始计时,再次按下暂停计时,之后每次按 下按键实现'继续计时、暂停计时,继续计时、暂停计时……'。(继续计时即从上次暂停时的时间开始继续计时) ②复位按键:按下后全部清0,等待下次按下'计时/停止按键’时重新开始计时。 2.设计思路: (1)、采用内部脉冲定时,实现计时,最低显示位为10ms记一次数显示一次,即一秒。100个10ms是1秒,所以当低位计满100次,(当50H为10时,把50H 单元清零,向51H进1)即得到秒计时,然后把51H单元清零,给52H单元加1?

当52H为10时,清零,给53H加1,当53H为6时秒计时达到60次,则向分计时,即给54H加1,再给53H清零,当54H计满10时,清零,给55H加4 直到55H为6时给55H清零。 50H z51H放最低位计数 52-53H放秒位次数 54-55H放分位计数 (2)、S2键,用扫描 S2:当为低电平时,让TR0为0,即暂停计数。当再次为低电平时继续计?数, 让TR0=l. (3)、S3键,T1计数模式实现中断响应,复位按键 S3:当F0为0时,给50-55H单元清零;然后按S2开始计数 3.源程序: ORG 0000H AJMP MAIN ORG 000BH LJMPTIME ;定时 ORG 001BH LJMPS3 ;暂停 ORG 0030H MAIN: CLR A MOV 50H,A ;最低位次数 MOV51H,A MOV 52H,A ;秒位次数 MOV 53H,A MOV 54H,A ;分位计数 MOV 55H,A

第五章 中断系统应用

第五章中断系统 第一节中断系统 现代微机控制系统中,主要依靠中断机制实现对外界随机发生的事件做出及时处理。所谓中断是指CPU暂时终止当前任务,转而处理突发事件,事件处理完成后,再回到原来被终止的地方,继续原来的工作。 1.中断相关概念 中断源:引起中断的原因,中断申请的来源,中断源可以是I/O设备、故障、时钟、调试中人为进行的设置等。 中断响应过程:CPU暂时终止当前工作,转去处理事件的过程。 中断服务:对事件的处理过程。 中断返回:事件处理完毕,回到原来被中止的地方。 中断优先级:当有多个中断源同时向CPU申请中断时,CPU优先响应最需紧急处理的中断请求,处理完毕再响应优先级别较低的中断,中断优先级直接反映每个中断源的中断请求被CPU响应的优先程度。 中断嵌套:CPU响应了某一中断源的中断请求,并正在执行它的中断服务程序时,若有优先级更高的中断源提出中断请求,那么CPU将停止正在执行的中断服务程序,转而响应和处理优先级更高的中断服务程序,等处理完成后再执行原来的中断服务程序,这就是中断嵌套。 2.中断的应用 中断的应用包括中断设置、中断请求,中断响应,中断处理、中断返回五个部分。 1)中断设置 中断设置包括中断允许设置、中断优先级设置和外部中断触发方式设置3个部分。 中断允许控制寄存器IE用于设置中断允许或禁止;中断优先级控制寄存器IP用于设置中断优先级的高低;外部中断的触发方式可以通过特殊功能寄存器TCON进行设置。 2)中断请求 5个中断源中2个为外部中断,3个为内部中断。 外部中断源 ①INT0 外部中断0请求,通过P3.2引脚引入,中断请求标志为IE0。 ②INT1 外部中断1请求,通过P3.3引脚引入,中断请求标志为IE1。 内部中断源 ①T0 定时/计数器0溢出中断申请,中断请求标志为TF0。 ②T1 定时/计数器1溢出中断申请,中断请求标志为TF1。 ③TXD/RXD 串行口中断,当串行口发送或接收完一帧数据时,申请中断,发送中断

汇编语言程序实例

一:题目 编写求十进制数12678532与41412042(本人学号)之和的程序,并将和以十进制数的形式送屏幕显示。 二:要求 (1)两个加数均以压缩(组合)十进制数形式存放在ADD1和ADD2为首址的存贮器单元。 (2)和以压缩十进制数的形式存入SUM以下单元。 (3)将和送到屏幕显示部分功能的实现采用子程序的形式。三:算法设计 1:程序 DATAS SEGMENT ;此处输入数据段代码 ADD1 DD 12678532H ADD2 DD 41412042H SUM DD ? DATAS ENDS STACKS SEGMENT STACK 'STACK';此处输入堆栈段代码 DW 100H DUP(?) TOP LABEL WORD STACKS ENDS CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX MOV AX,STACKS MOV SS,AX ; LEA SP,TOP LEA SI,ADD1 LEA DI,ADD2 MOV AL,[SI] ADD AL,[DI] DAA MOV BYTE PTR SUM,AL MOV AL,[SI+1] ADC AL,[DI+1] DAA MOV BYTE PTR SUM+1,AL MOV AL,[SI+2] ADC AL,[DI+2] DAA MOV BYTE PTR SUM+2,AL

MOV AL,[SI+3] ADC AL,[DI+3] DAA MOV BYTE PTR SUM+3,AL MOV AX,WORD PTR SUM+2 CALL DISPAX MOV AX,WORD PTR SUM CALL DISPAX ; MOV AH,4CH INT 21H DISPAL PROC NEAR PUSH AX PUSH CX PUSH DX PUSH AX MOV CL,4 SHR AL,CL CALL CHANG MOV AH,02 MOV DL,AL

单片机基础汇编语言编程实例

单片机基础汇编语言编程实例 单片机汇编语言编程 1.编写程序,用位处理指令实现“P1.4=P1.0∨(P1.1∧P1.2)∨P1.3”的逻辑 功能。 MOV C,P1.1ANL C,P1.2ORL C,P1.0ORL C,P1.3MOV P1.3,C2.编写程序,若累加器A 的内容分别满足下列条件,则程序转到LABLE 存储单元。设A 中存 放的的无符号数。(1)A≥10;(2)A>10;(3)A≤10。(1)CJNE A,#10,NEXTLJMP LABLENEXT:JNC LABLE(2)CJNE A,#10,NEXTLJMP NEXT2NEXT:JNC LABLENEXT2:(3)CJNE A,#10,NEXTLJMP LABLENEXT:JC LABLE3.编写程序,查找片内RAM 的30H~50H 单元中是 否有55H 这一数据,若有,则51H 单元置为FFH;若未找到,则将51H 单元 清0。MOV R0,29HNEXT:INC R0CJNE R0,#51H,NEXT2MOV 51H,#0FFHAJMP OVERNEXT2:CJNE @R0,#55H,NEXTMOV 51H,#0OVER:4.编写程序,查找片内RAM 的30H~50H 单元中出现0 的次数,并将查找的结果存入51H 单元。MOV R0,30HMOV 51H,#0NEXT:CJNE @R0,#00H,NEXT2INC 51HNEXT2:INC R0CJNE R0,#51H,NEXT5.在片外RAM 中有一个数据块,存有若干字符、数字,首地址为SOURCE 要求将该数据块传送到片内RAM 以DIST 开始的区域,直到遇到字符“$”时结束($也要传送,它的ASCII 码为24H)。MOV DPTR,#SOURCEMOV R0,#DISTNEXT:MOVX A,@DPTRMOV @R0,AINC DPTRINC R0CINE A,#24H,NEXT6.片内RAM 的30H 和31H 单元中存放着一个16 位的二进制数,高位在前,低位在后。编写程序对其求补,并存回原处。CLR CMOV A,#0SUBB A,31HMOV 31H,AMOV A,#0SUBB A,30HMOV 30H,A7.片内RAM 中有两个4 字节压缩的BCD 码形式存放的十进制数,一

5.7 定时器与外部中断程序设计举例

1 第五章指令系统及应用程序设计 5.7 汇编语言程序设计举例 例5.15 设定时器T0选择工作模式0,定时时间为1ms,fosc=6MHZ (1)试确定T0初值,计算最大定时时间 (2)编程实现其定时功能 (1) 设T0的初值为X,(TL0低5位,TH0高8位) 从X开始加1次数: 213-X 加1一次的时间: Tosc*12=1/6 *12=2μs (213-X) * 1/6 *12=1ms X=7692D=1111000001100B

TL0低5位=01100B=0CH TH0=11110000B=F0H 最大定时时间: 213*1/6*12

(2) ORG 0000H SETB TR0 RESET: AJMP MAIN SETB ET0 ORG 000BH SETB EA AJMP ITOP RET ORG 0100H ORG 0120H MAIN: MOV SP,#60H ITOP: MOV TL0,#0CH ACALL PTOMD MOV TH0,#F0H HERE: AJMP HERE RETI PTMOD: MOV TL0,#0CH MOV TH0,#0F0H

例5.16 将P1口的P1.4~P1.7作为输入位,P1.0~P1.3作为输出位,利用89C51 将开关所设的数据读入单片机内,并通过P1.0~P1.3输出,驱动发光二极管。要求采用中断边沿触发方式,每中断一次,完成一次读/写操作。

Vcc P1.7 EA P1.6 P1.5 X1 P1.4 P1.3 X2 P1.2 P1.1 P1.0 RST INT0 Vss +5V 3133pF 19 1833pF +5V 22uF 1 k Ω 1 k Ω 1 k Ω 200 k Ω38373635 34 33 32 39+5V K 4.7 k Ω89C51+9外部中断INT0电路 图5.13 外部中断INT0电路

相关主题
文本预览
相关文档 最新文档