1 / 37

单片机的 汇编 语言

单片机的 汇编 语言. 破天单片机培训 电话:0755-89705289. 一、中断的概念. 中断:当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊请求。. 中断的执行:当 CPU 正在执行某一程序时,若有中断响应,则 CPU 转而执行中断服务程序,当中断服务程序执行完毕后, CPU 自动返回原来的程序继续执行。. 二、中断源. 中断源: 任何引起计算机中断的事件,一般一台机器允许有许多个中断源。.

dallon
Download Presentation

单片机的 汇编 语言

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 单片机的汇编语言 破天单片机培训电话:0755-89705289

  2. 一、中断的概念 中断:当计算机执行正常程序时,系统中出现某些急需处理的异常情况和特殊请求。 中断的执行:当CPU正在执行某一程序时,若有中断响应,则CPU转而执行中断服务程序,当中断服务程序执行完毕后,CPU自动返回原来的程序继续执行。

  3. 二、中断源 中断源:任何引起计算机中断的事件,一般一台机器允许有许多个中断源。 8051系列单片机至少有5个可能的中断(8052有6个,其它系列成员最多可达15个)。下面以5个中断源为例。 8051单片机的五个中断源是: 外部中断请求0,由INT0(P3.2)输入; 外部中断请求1,由INT1(P3.3)输入; 片内定时器/计数器0溢出中断请求; 片内定时器/计数器1溢出中断请求; 片内串行口发送/接收中断请求。

  4. D7 D6 D5 D4 D3 D2 D1 D0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 三、与中断有关的寄存器 1、定时/计数器控制寄存器TCON . IT0、IT1:外部中断0、1触发方式选择位,由软件设置; 1→下降沿触发方式,INT0/INT1管脚上高到低的负跳变可引起中断; 0→电平触发方式, INT0/INT1管脚上低电平可引起中断。 . IE0、IE1:外部中断0、1请求标志位; 当外部中断0、l依据触发方式满足条件,产生中断请求时由硬件置位 (IE0/IE1=1);当CPU响应中断时由硬件清除(IE0/IE1=0)。 . TR0、TR1: 启动定时/计数器0、1。 . TF0、TF1:定时器/计数器0、1(T/C0、T/C1)溢出中断请求标志; 当T/C0、1计数溢出时由硬件置位(TF0/TF1=l); 当CPU响应中断由硬件清除(TFO/TF1=0)。

  5. D7 D6 D5 D4 D3 D2 D1 D0 TI RI 三、与中断有关的寄存器 2、串行口控制寄存器SCON . RI:串行口接收中断请求标志位; 当串行口接收完一帧数据后请求中断,由硬件置位(RI=1) RI必须由软件清“0”。 . TI:串行口发送中断请求标志位。 当串行口发送完一帧数据后请求中断,由硬件置位(TI=1) TI必须由软件清“0”。

  6. D7 D6 D5 D4 D3 D2 D1 D0 EA ET2 ES ET1 EX1 ET0 EX0 三、与中断有关的寄存器 3、中断允许寄存器IE . EX0、EX1:外部中断0、1的中断允许位; l→外部中断0、1开中断;0→外部中断0、1关中断。 . ET0、ET1:定时器/计数器0、1(T/C0、T/C1)溢出中断允许位; 1→T/C0、T/Cl开中断;0→T/C0、T/Cl关中断。 . ES:串行口中断允许位; 1→串行口开中断;0→串行口关中断。 . ET2:定时器/计数器2(T/C2)溢出中断允许位; 1→T/C2开中断;0→T/C2关中断。 . EA:CPU开/关中断控制位。 1→CPU开中断。0→CPU关中断。 8051复位时,IE被清“0”,此时CPU关中断,各中断源的中断也都屏蔽

  7. D7 D6 D5 D4 D3 D2 D1 D0 PS PT1 PX1 PT0 PX0 三、与中断有关的寄存器 4、中断优先级寄存器IP . PX0、PX1:外部中断0、1中断优先级控制位; 1→高优先级;0→低优先级。 . PT0、PT1:定时器/计数器0、1中断优先级控制位; 1→高优先级;0→低优先级。 . PS:串行口中断优先级控制位; 1→高优先级;0→低优先级. 8051复位时,IP被清“0”,5个中断源都在同一优先级,其内部优先级的顺序从高到低为: 外部中断0(IE0) 定时器/计数器0(TF0) 外部中断1(IE1) 定时器/计数器1(TF1) 串行口中断(RI+TI)

  8. 四、中断响应 8051的CPU在每个机器周期采样各中断源的中断请求标志位,如果没有下述阻止条件,将在下一个机器周期响应被激活了的最高级中断请求: 1.CPU正在处理同级或更高级的中断; 2.现行机器周期不是所执行指令的最后一个机器周期; 3.正在执行的是RETI或是访问IE或IP的指令。 CPU在中断响应后完成如下的操作: 1.硬件清除相应的中断请求标志; 2.执行一条硬件子程序,保护断点,并转向中断服务程序人口 3.结束中断时执行RETI指令,恢复断点,返回主程序。 8051的CPU在响应中断请求时,由硬件自动形成转向与该中断源对应的服务程序入口地址,这种方法为硬件向量中断法。

  9. 五、中断服务程序的入口地址 编号 中断源 人口地址 0 外部中断0 0003H 1 定时器/计数器0 000BH 2 外部中断1 0013H 3 定时器/计数器1 001BH 4 串行口中断 0023H 各中断服务程序入口地址仅间隔8个字节,编译器在这些地址放入无条件转移指令跳转到服务程序的实际地址。

  10. 六、中断服务程序的语法规则 org 0000h ljmp start org 0003h ljmp int0 org 000bh ljmp timer0 org 0013h ljmp int1 org 001bh ljmp timer1 org 0023h ljmp serial org 0040h start: ………..

  11. 七、中断处理流程 关中断 保护现场和断点 开中断 中断服务 关中断 恢复现场 开中断 中断返回(RETI)

  12. 八、中断例子 设P1口的高4位接开关,低4位接LED,用开关控制相应的LED。有一按键接INT0,每按一次,根据开关点亮相应的LED。 org 0000h ajmp main org 0003h ajmp extr org 0040h main: setb it0 setb ex0 setb ea here: ajmp here extr: mov a,#0fh mov P1,a mov a,P1 cpl a orl a,#0fh swap a mov P1,a reti end

  13. 习题 试设计满足下列要求的电路图: 1 单片机采用89C51,时钟11.0592MHz; 2 有4个指示灯表示状态; 3 外接12位A/D芯片AD574; 4 有4 * 4的键盘; 5 有字符型LCD(画成插座形式,12Pin插座,管脚接法见书P253); 6 有串行接口与计算机连接; 7 设置8位二进制的地址,地址范围可表示为0~255; 8 外接EEPROM。

  14. 定时器/计数器(T/C) 8051系列单片机至少有两个16位内部定时器/计数器,8052有三个定时器/计数器,其中有两个是基本定时器/计数器是定时器/计数器。它们既可以编程为定时器使用,也可以编程为计数器使用。 若是计数内部晶振驱动时钟,它是定时器;若是计数,8051的输入管脚的脉冲信号,它是计数器。 当T/C工作在定时器时,对振荡源12分频的脉冲计数,即每个机器周期计数值加1,计数率=1/12f osc。例当晶振为12MHz时,计数率=1000kHz,即每1μs计数值加1。 当T/C工作在计数器时,计数脉冲来自外部脉冲输入管脚T0(P3.4)或T1(P3.5),当T0或T1脚上负跳变时计数值加1。识别管脚上的负跳变需两个机器周期,即24个振荡周期。所以T0或T1脚输入的可计数外部脉冲的最高频率为1/24fosc,当晶振为12MHZ时,最高计数率为500kHz,高于此频率将计数出错。

  15. 一、与T/C有关的SFR 1、计数寄存器Th和TL T/C是16位的,计数寄存器由TH高8位和TL低8位构成。 在特殊功能寄存器(SFR) 中, 对应T/C0为TH0和TL0; 对应T/C1为TH1和TL1。 定时器/计数器的初始值通过TH1/TH0和TL1/TL0设置。 2、定时器/计数器控制寄存器TCON 前面已介绍。

  16. D7 D6 D5 D4 D3 D2 D1 D0 GATE C/T M1 M0 GATE C/TM1 M0 T/C1 T/C0 二、与T/C有关的SFR 3、T/C的方式控制寄存器TMOD . C/T:计数器或定时器选择位; 1→为计数器;0→为定时器。 . GATE :门控信号; 1 → T/C的启动受到双重控制,即要求TR0/TR1和INT0/INT1同时为高; 0 → T/C的启动仅受TR0或TR1控制。

  17. 三、四种工作方式 M1 M0 方式 功 能 0 0 0 13位定时器/计数器,TL是低5位,TH是高8位 0 1 1 16位定时器/计数器 1 0 2 常数自动重装的8位定时器/计数器 1 1 3 仅用于T/C0,是两个8位定时器/计数器

  18. 四、T/C工作方式的说明 1. 方式0: 当TMOD中MlM0=00时,T/C工作在方式0; 方式0为13位的T/C,由TH的高8位、TL的低5位的计数值,满计数值213,但启动前可以预置计数初值。 若T/C开中断(ET=1)且CPU开中断(EA=1)时,则定时器/计数器溢出时,CPU转向中断服务程序时,且TF白动清0。 2. 方式1: 当TMOD中MlM0=01时,T/C工作在方式1; 方式1与方式0基本相同。唯一区别在于计数寄存器的位数是16位的,由TH和TL寄存器各提供8位,满计数值为216。

  19. 四、T/C工作方式的说明 3. 方式2: 当TMOD中MlM0=10时,T/C工作在方式2; 方式2是8位的可自动重载的T/C,满计数值为28; 在方式0和方式1中,当计数满后,若要进行下一次定时/计数,须用软件向TH和TL重装预置计数初值; 方式2中TH和TL被当作两个8位计数器,计数过程中,TH寄存8位初值并保持不变,由TL进行8位计数。计数溢出时,除产生溢出中断请求外,还自动将TH中初值重装到TL,即重装载。 4. 方式3: 方式3只适合于T/C0。当T/CO工作在方式3时,TH0和TL0成为两个独立的8位计数器。

  20. 五、定时器/计数器的初始化 在使用8051的定时器/计数器前,应对它进行编程初始化,主要是对TCON和TMOD编程;计算和装载T/C的计数初值。一般完成以下几个步骤: (1)确定T/C的工作方式——编程TMOD寄存器; (2)计算T/C中的计数初值,并装载到TH和TL; (3)T/C在中断方式工作时,须开CPU中断和源中断——编程IE寄存器; (4)启动定时器/计数器——编程TCON中TR1或TR0位。

  21. 六、定时器/计数器的初值计算 在定时器方式下,T/C是对机器周期脉冲计数的,若fosc=12MHz,一个机器周期为12/fosc=1μs,则: 方式0 13位定时器最大定时间隔=213 ×1μs=8.192ms; 方式1 16位定时器最大定时间隔=216 ×1μs=65.536ms; 方式2 8位定时器最大定时间隔=28×1μs=256μs。 若使T/C工作在定时器方式1,要求定时1ms,求计数初值。设计数初值为x,则有: (216-x)×1μs=1000μs 或x=216一1000 因此,TH、TL可置216 –1000=64536; 即:TH= FCH;TL= 18H。 对一般fosc有下列公式(设定时时间为timeμs): (216-x)×12/fosc= time μs

  22. mov tmod,#00h mov th1,#0fch mov tl1,#03h mov ie,#00h setb tr1 loop: jbc tf1,loop1 ajmp loop loop1:mov th1,#0fch mov tl1,#03h clr tf1 cpl P1.0 ajmp loop ret 例1、设单片机的fosc=6MHz,使用定时器1以方式0产生周期位500uS的等宽正方波,并在P1.0脚上输出,以查询方式完成。

  23. mov tmod,#10h mov th1,#0ffh mov tl1,#0a1h setb ea setb et1 loop: setb tr1 here: sjmp $ mov th1,#0ffh mov tl1,#0a1h cpl p1.0 reti 例2、设单片机的fosc=6MHz,使用定时器1以方式1产生周期位500uS的等宽正方波,并在P1.0脚上输出,以中断方式完成

  24. 例3、设单片机的fosc=6MHz,要求在P1.7脚上的指示灯亮一秒灭一秒。 org 0000h ajmp start org 000bh ajmp time0 org 0100h time0: mov th0,# mov tl0,# inc r0 cjne r0,#10,exit mov a,#00h mov r0,a exit: reti start: mov sp,#60h mov th0,# mov tl0,# setb tf0 setb ea setb tr0 here: sjmp $

  25. 七、定时器与中断的联合应用 以MCS-51单片机来实现时钟 设使用定时器/计数器0,以工作方式1进行125mS的定时,如单片机时钟为6MHz,为此计算计数初值X为: (216-x)*2=125000 计算得x= 6070,二进制表示为1011110110110,十六进制表示17B6H。 采用中断方式进行溢出次数的累计,计满8次即得秒计时。从秒到分和从分到时的计时是通过累加和数值比较实现的。时钟显示及显示缓冲区 时钟时间在六位数码管上进行显示,为此在内部RAM中要设置显示缓冲区,共6个地址单元,设对应地址为: LED5 LED4 LED3 LED2 LED1 LED0 7EH 7DH 7CH 7BH 7AH 79H 显示时从左到右依次存放时、分、秒的数值。

  26. org 0000h start: ajmp main org 000bh ajmp pit0 org 0100h main: mov sp,#60h mov r0,#79h mov r7,#06h ml1: mov @r0,#00h inc r0 djnz r7,ml1 mov tmod,#01h mov tl0,#8h mov th0,#17h setb tr0 setb ea setb et0 mov 30h,#08h ml0: lcall display sjmp ml0 pit0: push psw push acc setb psw.3 mov tl0,#b8h mov th0,#17h mov a,30h dec a mov 30h,a jnz ret0 mov 30h,#08h mov r0,#7ah acall daad1 mov a,r2 xrl a,#60h jnz ret0 acall clr0 mov r0,#7ch acall daad1 mov a,r2 xrl a,#60h jnz ret0 acall clr0 mov a,r2 xrl a,#24h jnz ret0 acall clr0 ret0: pop acc pop psw erti daad1: mov a,@r0 dec r0 swap a orl a,@r0 add a,#01h da a mov r2,a anl a,#0fh mov @r0,a mov a,r2 inc r0 anl a,#0f0h swap a mov @r0,a ret clr0: clr a mov @r0,a dec r0 mov @r0,a ret end

  27. 串行口 8051系列单片机有一个标准的串行通信接口,发送数据时由TXD端口送出,接收数据时由RXD端口输入。 内置两个缓冲器SBUF,一个接受缓冲器,另一个是接收缓冲器,可实行全双工的串行通信。 近距离可直接用TTL电平,若与计算机通信,则需要将电平转换成RS232电平形式,若需长距离通信可以采用RS485电平形式,通信的数据必须通过软件的编写来完成。

  28. D7 D6 D5 D4 D3 D2 D1 D0 SM0 SM1 SM2 REN TB8 RB8 TI RI 一、与串行口有关的SFR 1、串行口控制寄存器SCON . SM0、SM1:串行口工作方式控制位(见书P158)。 . SM2:多机通信控制位(方式2、3); 1→只有接收到第9位(RB8)为1,RI才置位; 0→接收到字符RI就置位。 . REN :串行口接收允许位; 1→允许串行口接收;0→禁止串行口接收。 . TB8:方式2和方式3时,为发送的第9位数据,也可以作奇偶 校验位。 . RB8:方式2和方式3时,为接收到的第9位数据;方式1时, 为接收到的停止位。 . TI:发送中断标志;由硬件置位,必须由软件清0。 . RI:接收中断标志;由硬件置位,必须由软件清0。

  29. D7 D6 D5 D4 D3 D2 D1 D0 SMOD 一、与串行口有关的SFR 2、电源控制寄存器PCON PCON的第7位SMOD是与串行口的波特率设置有关的选择位。 . SMOD:串行口波特率加倍位。 1→方式1、3波特率=定时器1溢出率/16;方式2波特率为fosc/32; 0→方式1、3波特率=定时器1溢出率/32;方式2波特率为fosc/64。

  30. 二、串行口的工作方式 1. 方式0 方式0为移位寄存器输入/输出方式,串行数据通过RXD输入/输出 ,TXD则用于输出移位时钟脉冲。 方式0时,收发的数据为8位,低位在前。波特率固定为fosc/12,其中fosc为单片机外接晶振频率。 发送是以写SBUF寄存器的指令开始的,8位输出结束时TI被置位。 方式0接收是在REN=1和RI=0同时满足时开始的。接收的数据装入SBUF中,结束时RI被置位。 移位寄存器方式的也可用于两个单片机之间的通信。和通常9600波特相比,lMHz通信能力对短距离通信很吸引人。

  31. 二、串行口的工作方式 2. 方式1 方式1是10位异步通信方式,1位起始位(0),8位数据位和1位停止位(1)。其中的起始 位和停止位在发送时是自动插入的。 任何一条以SBUF为目的寄存器的指令都启动一次发送,发送的条件是TI=0,发送完置TI为1; 方式l接收的前提条件是SCON中的REN为l,同时下列两个条件都满足,本次接收有效,将其装入SBUF和RB8位。否则放弃接收结果。两个条件是:(1)RI=0;(2)SM2=0或 接收到的停止位为1; 方式1的波特率是可变的,波特率可由以下计算公式计算得到: 方式1波特率=2SMOD.(定时器1的溢出率)/32 其中的SMOD为PCON的最高位。定时器1的方式0,1,2,都可以使用,其溢出率为定时时间的倒数值。

  32. 二、串行口的工作方式 3. 方式2和方式3 这两种方式都是11位异步接收/发送方式,它们的操作过程完全一样,所不同的是波特率: 方式2波特率=2SMOD.(fosc/64); 方式3波特率同方式1(定时器l作波特率发生器)。 方式2和方式3的发送起始于任何一条“写SBUF”指令,当第9位数据(TB8)输出之后,置位TI。 方式2和方式3的接收前提条件也是REN为1。在第9位数据接收到后,如果下列条件同时满足(1)RI=0;(2)SM2=0或接收到的第9位为1,则将已接收的数据装入SBUF和RB8,并置位RI,如果条件不满足,则接收无效。

  33. 三、串行口的初始化 在使用串行口之前,应对它进行编程初始化,主要是设置产生波特率的定时器1、串行口控制和中断控制寄存器。具体步骤如下: (1) 确定定时器1的工作方式——编程TMOD寄存器; (2) 计算定时器1的初值——装载TH1、TL1,具体TH1和 TL1的值可查表得到; (3) 启动定时器1——编程TCON中的TR1位,即置TR1为1; (4) 确定串行口的控制——编程SCON; (5) 串行口在中断方式工作时,须开CPU和源中断——编程IE寄存器。

  34. 四、串行口举例1 #include 〈reg51.h> #define uchar unsigned char #define uint unsigned int uchar idata trdata[10]= {'M','C','S','-','5','1', 0x0d, 0x0a,0x00}; void main(void) { uchar i; uint j; TMOD=0x20; TL1=0xfd;TH1=0xfd; SCON=0xd8;PCON=0x00; TR1=1; while(1) {i=0; while(trdata[i]!=0x00) {SBUF=trdata[i]; while(TI==0); TI=0; i++; } for (j=0;j<12500;j++); } }

  35. 四、串行口举例2 #include 〈reg51.h> void main(void〉 {unsigned char a; TMOD=Ox20; TL1=0xfd;TH1=0xfd; SCON=Oxd8;PCON=0x00; TR1=1; while (1) {while (RI==0); RI=0; a=SBUF; SBUF=a; while (TI==O); TI=0; } }

More Related