北航单片机基础与应用PPT

简介 相关

截图

北航单片机基础与应用PPT

简介

这是一个关于北航单片机基础与应用PPT,包括了中断概述,80C51单片机的中断系统,80C51 单片机的定时器/计数器等内容,单片机基础(第3版)李广弟等编著北京航空航天大学出版社 2007年6 月第5章 80C51单片机的中断与定时 5.1 中断概述当CPU正在处理某事件的时候,CPU暂时中止当前的工作,转到中断服务处理程序处理所请求的事件。处理完该事件后,再回到原来被中止的地方继续原来的工作,这称为中断。中断技术为计算机提供了资源共享。 5.2 80C51单片机的中断系统 5.2.1 中断源与中断向量中断源:产生中断的请求源称为中断源。 80C51的中断系统具有5个中断源:2个外部中断、2个定时器中断、1个串行中断。中断向量:中断服务程序的入口地址。 5.2.2 中断控制中断控制:提供给用户使用的中断控制手段 80C51单片机关于中断的控制包括四项:中断允许控制中断请求控制中断优先控制外中断触发方式控制 涉及四个特殊功能寄存器中断允许控制寄存器IE 定时器控制寄存器TCON 串行口控制寄存器SCON 中断优先级控制寄存器IP 1. 中断允许控制寄存器IE 2. 定时器控制寄存器TCON 3. 串行口控制寄存器SCON 4. 中断优先级控制寄存器IP 【例】若允许外部中断0和定时器1的中断,外部中断0采用脉冲触发方式,并设置为高级中断,其它中断源为低级中断,欢迎点击下载北航单片机基础与应用PPT。

北航单片机基础与应用PPT是由红软PPT免费下载网推荐的一款仪器设备PPT类型的PowerPoint.

单片机基础(第3版)李广弟等编著北京航空航天大学出版社 2007年6 月第5章 80C51单片机的中断与定时 5.1 中断概述当CPU正在处理某事件的时候,CPU暂时中止当前的工作,转到中断服务处理程序处理所请求的事件。处理完该事件后,再回到原来被中止的地方继续原来的工作,这称为中断。中断技术为计算机提供了资源共享。 5.2 80C51单片机的中断系统 5.2.1 中断源与中断向量中断源:产生中断的请求源称为中断源。 80C51的中断系统具有5个中断源:2个外部中断、2个定时器中断、1个串行中断。中断向量:中断服务程序的入口地址。 5.2.2 中断控制中断控制:提供给用户使用的中断控制手段 80C51单片机关于中断的控制包括四项:中断允许控制中断请求控制中断优先控制外中断触发方式控制 涉及四个特殊功能寄存器中断允许控制寄存器IE 定时器控制寄存器TCON 串行口控制寄存器SCON 中断优先级控制寄存器IP 1. 中断允许控制寄存器IE 2. 定时器控制寄存器TCON 3. 串行口控制寄存器SCON 4. 中断优先级控制寄存器IP 【例】若允许外部中断0和定时器1的中断,外部中断0采用脉冲触发方式,并设置为高级中断,其它中断源为低级中断。 也可以写为如下程序段: MOV IE, #89H MOV IP, #01H MOV TCON, #01H 在主程序中编写如下程序段: SETB EA ;CPU开中断 SETB EX0 ;允许外中断0中断 SETB ET1 ;允许定时器1中断 SETB PX0 ;外中断0为高级中断 SETB IT0 ;外中断0为脉冲触发方式 5.2.3 中断优先级控制 1. 中断优先级定义原则 2. 中断优先原则在中断响应时的体现当高、低优先级中断请求同时出现时,高优先级中断请求被响应;如果同级的多个中断请求同时出现,则按CPU查询次序确定哪个中断请求被响应。查询次序是: 3. 中断嵌套 80C51具有两个优先级,中断嵌套只能一层,其原则是:高优先级中断请求可以打断低优先级的中断服务,进行中断嵌套;同优先级的中断不能嵌套;低优先级中断请求不能对高优先级的中断进行嵌套。 5.2.4 中断响应过程 1. 外部中断请求采样每个机器周期的S5P2对INT0(P3.2)和INT1(P3.3)引脚进行采样,采样结果在TCON中的IE0、IE1位进行设置。 2. 中断查询 CPU每个机器周期的S6进行中断查询,逐个检测TCON、SCON中六个中断标志位的状态。查询按优先级顺序进行,即先高级、后低级。同级中断按“外部中断0定时器0中断外部中断1定时器1中断串行中断”。 3. 中断响应中断响应的主要内容由硬件自动生成一条长调用指令“LCALL addr16”。中断响应的封锁: ① 同级的或高级的中断正在发生; ② 查询中断请求的机器周期不是当前指令的最后一个机器周期; ③ 当前指令是返回指令(RET、RETI)或访问IE、IP的指令。这类指令执行完还应再执行一条指令才能响应中断。 4. 中断响应的快慢中断响应的时间为3~8个机器周期。 5.2.5 中断服务程序 1. 主程序中的中断初始化 ORG 0000H AJMP MAIN ;系统复位后转向主程序 ORG 0003H AJMP EXINT0 ;转向外部中断0服务程序 MAIN: MOV TCON, #01H ;脉冲触发方式 MOV IE, #81H ;中断开发,外中断0允许 MOV IP, #01H ;外中断0为高优先级 MOV SP, #03FH ;设置堆栈 ┇ EXINT0: ;外中断0服务程序 ┇ 2. 中断服务流程 ①现场保护和现场恢复 ②关中断和开中断 ③中断处理 ④中断返回 用AT89S51的P1口接8个LED发光二极管,由P3.2(INT0)引脚接一消抖按键开关。开始接P1.0的LED亮,以后每按键一次引发一次中断,则下一个LED亮。顺序下移,且每次只一个LED亮,周而复始。请编制程序。 5.3 80C51 单片机的定时器/计数器 5.3.1 定时器/计数器的计数和定时功能 1. 计数功能 外部计数脉冲由T0(P3.4)和T1(P3.5)引脚引入。每个机器周期的S5P2拍节对计数脉输入引脚进行采样。计数脉冲负跳变有效,若前一机器周期采样为高电平,后一机器周期采样为低电平,即为一个计数脉冲。计数频率不能高于振荡脉冲频率的1/24。 2. 定时功能 计数脉冲来自单片机内部,每个机器周期计数一次。计数频率为振荡频率的1/12。 5.3.2 用于定时器/计数器控制的寄存器 1. 定时器控制寄存器(TCON) 2. 定时器方式选择寄存器(TMOD) 5.3.3 定时器工作方式0 1. 电路逻辑结构 2. 启停控制 3. 定时和计数范围计数功能时,计数范围是1~8192(213)。定时功能时,定时时间的计数公式为: (213—计数初值)×晶振周期×12 或 (213—计数初值)×机器周期 若晶振频率为6MHz,则最小定时时间为: [213-(213-1)]×2us=2us 最大定时时间为: [213-0]×2us=16384us 4. 应用举例【例5.1】设单片机晶振频率为6MHz,使用定时器1以方式0产生周期为500us的等宽方波连续脉冲,并由P1.0输出。计算计数初值(213-X)×2us=250us 求解得:X=8067,表示为二进制为11111100 00011. 高8位放入TH1,即TH1=0FCH; 低5位放入TL1,即TL1=03H。 TMOD寄存器初始化 M1M0=00,C/T=0,GATE=0,则TMOD寄存器初始化为00H。参考程序: MOV TMOD, #00H ;设置T1为工作方式0 MOV TH1, #0FCH ;设置定时器初值 MOV TL1, #03H MOV IE, #00H ;禁止中断 SETB TR1 ;启动定时 LOOP: JBC TF1, LOOP1 ;查询溢出标志 AJMP LOOP LOOP1: MOV TH1, #0FCH ;重置定时器初值 MOV TL1, #03H CPL P1.0 ;输出取反 AJMP LOOP ;重复循环 5.3.4 定时器工作方式1 方式1为16位计数结构的工作方式,计数器由寄存器TH0、TL0(或TH1、TL1)的全部共16位构成T0(或T1)。计数功能时,计数范围是1~65536(216)。定时功能时,定时时间的计数公式为: (216—计数初值)×晶振周期×12 或 (216—计数初值)×机器周期 若晶振频率为6MHz,则最小定时时间为: [216-(216-1)]×2us=2us 最大定时时间为: [216-0]×2us=131072us≈131ms 【例】设单片机晶振频率为6MHz,使用定时器1以方式1产生周期为100ms的等宽方波连续脉冲,并由P1.0输出。计算计数初值(216-X)×2us=50 000us 求解得:X=40536,表示为二进制为9E58H。 高8位放入TH1,即TH1=9EH; 低8位放入TL1,即TL1=58H。 TMOD寄存器初始化 M1M0=01,C/T=0,GATE=0,则TMOD寄存器初始化为10H。参考程序: MOV TMOD, #10H ;设置T1为工作方式0 MOV TH1, #9EH ;设置定时器初值 MOV TL1, #58H MOV IE, #00H ;禁止中断 SETB TR1 ;启动定时 LOOP: JBC TF1, LOOP1 ;查询溢出标志 AJMP LOOP LOOP1: MOV TH1, #9EH ;重置定时器初值 MOV TL1, #58H CPL P1.0 ;输出取反 AJMP LOOP ;重复循环 5.3.5 定时器工作方式2 1. 电路逻辑结构 2. 循环定时应用 【例5.2】使用定时器0以工作方式2产生100us定时,在P1.0输出周期为200us的连续正方波脉冲。已知晶振频率为6MHz。计算计数初值(28-X)×2us=100us 求解得:X=206D=11001110B=0CEH. TH0和TL0分别存入0CEH,即TH0=TL0=0CEH。 TMOD寄存器初始化 M1M0=10,C/T=0,GATE=0,则TMOD寄存器初始化为02H。参考程序: MOV IE, #00H ;禁止中断 MOV TMOD, #02H ;设置定时器0为方式2 MOV TH0, #0CEH ;保存计数初值 MOV TL0, #0CEH ;预置计数初值 SETB TR0 ;启动定时 LOOP: JBC TF0, LOOP1 ;查询计数溢出 AJMP LOOP LOOP1: CPL P1.0 ;输出方波 AJMP LOOP ;重复循环 3. 循环计数应用【例5.3】用定时器1以工作方式2实现计数,每计100次进行累加器加1操作。按查询方式编程。计算计数初值 28-100=156D=9CH,则TH1=TL1=9CH。 TMOD寄存器初始化 M1M0=10,C/T=1,GATE=0, 则TMOD=60H。参考程序: MOV IE, #00H ;禁止中断 MOV TMOD, #60H ;设置定时器1为方式2 MOV TH1, #9CH ;保存计数初值 MOV TL1, #9CH ;预置计数初值 SETB TR1 ;启动定时 DEL: JBC TF1, LOOP ;查询计数溢出 AJMP DEL LOOP: INC A ;累加器加1 AJMP DEL ;重复循环 5.3.6 定时器工作方式3 1. 工作方式3下的定时器/计数器0 2. 当定时器0工作方式3下的定时器/计数器1 【例】假设系统时钟为6MHz,编写定时器T0产生1秒定时的程序。(1)T0工作方式的确定 定时时间较长,采用哪一种工作方式? 方式0最长可定时16.384ms; 方式1最长可定时131.072ms; 方式2最长可定时512s。 选方式1,每隔100ms中断一次,中断10次为1s。 (2)计算计数初值 因为:(216-X)×2us = 100 000us 所以:X=15536=3CB0H, 因此:TH0=3CH,TL0=0B0H (3)10次计数的实现 采用循环计数法。 4)程序设计(查询方式) MAIN: MOV TMOD,#01H ;设T0工作在方式1 MOV TH0,#3CH ;给T0设初值 MOV TL0,#0B0H MOV B,#0AH ;设循环次数10次 SETB TR0 ;启动T0 LOOP:JNB TF0,$ ;100ms定时是否到 CLR TF0 MOV TH0,#3CH ;重装T0初值 MOV TL0,#0B0H DJNZ B,LOOP ;判断T0定时溢出10次是否到 CLR TR0 SJMP $ 4)程序设计(中断方式) ORG 0000H LJMP MAIN ;上电转主程序入口MAIN ORG 000BH ;T0的中断入口 MOV TH0,#3CH MOV TL0,#0B0H ;T0重装初值 DJNZ B,LOOP ;判断T0是否中断10次 CLR TR0 ;1s定时时间到,停止T0工作 LOOP:RETI ORG 0030H MAIN: MOV TMOD,#01H ;设T0工作在方式1 MOV TH0,#3CH ;给T0设初值 MOV TL0,#0B0H MOV IE,#82H ;允许T0中断 MOV B,#0AH ;设循环次数10次 SETB TR0 ;启动T0 SJMP $ ;等待一次次中断 【例】设MCS-51单片机系统时钟频率为6MHz,请编出利用定时/计数器T0在P1.0引脚上产生周期为2秒,占空比为50%的方波信号的程序。 1、主程序 任务: 1)T0工作方式的设定: 选择方式1(16位方式),最大定时131ms,本题拟定时时长为100ms。因此TMOD为01H。 2)定时常数的设定: X=216-100ms/2us =15536=3CB0H 即:TH0应装3CH,TL0应装0B0H。 3)中断管理: 允许T0中断,开放总中断 即:IE应装10000010B。 4)启动定时器T0: SETB TR0 5)设置软件计数器初值:(如使用R7) 即R7应装0AH 6)动态停机:SJMP $ 主程序如下: MAIN:MOV TMOD,#01H;设定T0为方式1定时 MOV TH0,#3CH ;装入定时常数高8位 MOV TL0,#0B0H;装入定时常数低8位 MOV IE,#82H ;开放T0中断 SETB TR0 ;启动T0 MOV R7,#0AH ;设置软件计数器 SJMP $ ;等待一次次中断 2、中断服务程序任务: 1)恢复T0计数初值; 2)软件计数器R7减1,并判断是否为0。若为0时,则改变P1.0状态,并恢复R7初值,中断返回;若不为0,则直接中断返回。中断服务程序如下: T0INT:MOV TH0,#3CH ;恢复定时常数 MOV TL0,#0B0H DJNZ R7,NEXT CPL P1.0 MOV R7,#0AH ;重装R7初值 NEXT:RETI ORG 0000H AJMP MAIN ORG 000BH AJMP T0INT ORG 0030H MAIN: MOV TMOD, #01H;设定T0为方式1定时 MOV TH0, #3CH ;装入定时常数高8位 MOV TL0, #0B0H ;装入定时常数低8位 MOV IE, #82H ;开放T0中断 SETB TR0 ;启动T0 MOV R7, #0AH ;设置软件计数器 SJMP $ T0INT:MOV TH0, #3CH ;恢复定时常数 MOV TL0, #0B0H DJNZ R7, NEXT CPL P1.0 MOV R7, #0AH NEXT:RETI END 例:已知8051单片机的fosc=6MHz, 请利用T0和P1.0输出矩形波。矩形波高电平宽50μs,低电平宽200μs。采用查询方式编程实现。 例:已知8051单片机的fosc=6MHz, 请利用T0和P1.0输出矩形波。矩形波高电平宽50μs,低电平宽200μs。采用中断方式编程实现。 例:已知8051单片机fosc=12MHz, 用T1定时。试编程由P1.0和P1.1引脚分别输出周期为 2ms和500μs的方波。采用查询方式编程。 例:已知8051单片机fosc=12MHz, 用T1定时。试编程由P1.0和P1.1引脚分别输出周期为 2ms和500μs的方波。采用中断方式编程。 【例】以定时器1对外部外部事件计数,每计数1000个脉冲后,定时器1转为定时工作方式,定时10ms后,又转为计数方式,如此循环不止。假定单片机晶振频率为6MHz,请编程实现。 分析: 确定工作方式及初值定时器1计数时的工作方式设置:TMOD=50H 定时器1计数1000次的初值:TH1=0FCH,TL1=18H 定时器1定时时的工作方式设置:TMOD=10H 定时器1定时10ms的初值设置:TH1=0ECH,TL1=78H ORG 0H MAIN:MOV TMOD, #50H MOV TH1, #0FCH MOV TL1, #18H MOV IE, #88H SETB TR1 JNB TF1,$ CLR TF1 MOV TMOD, #10H MOV TH1, #0ECH MOV TL1, #78H JNB TF1,$ CLR TF1 SJMP MAIN END ORG 0H LJMP MAIN ORG 1BH MOV A, TMOD JB ACC.6, TM MOV TMOD, #50H MOV TH1, #0FCH MOV TL1, #18H RETI TM: MOV TMOD, #10H MOV TH1, #0ECH MOV TL1, #78H RETI MAIN: MOV TMOD, #50H MOV TH1, #0FCH MOV TL1, #18H MOV IE, #88H SETB TR1 SJMP $ END 【例】利用定时器T0确定P3.2引脚上出现的正脉冲的宽度,将检测到的机器周期的个数存入30H、31H中(假定计数值小于216)。 参考程序: ORG 0000H MAIN:MOV TMOD, #01H MOV TL0, #00H MOV TH0, #00H CLR TR0 WAIT1:JNB P3.2, WAIT1 SETB TR0 WAIT2:JB P3.2, WAIT2 CLR TR0 MOV 30H, TL0 MOV 31H, TH0 SJMP $ END 作 业用中断方式实现P115-[例5.3]。分别采用中断方式和查询方式,由定时器1定时产生一个50Hz的方波,并由P1.0输出,fosc=12MHz。利用P1.0输出周期为60ms的方波,在一个方波周期中高电平持续时间20ms,低电平持续时间40ms。系统晶振为12MHz。分别用中断方式和查询方式编程实现。 【P97-题1】把长度为10H的字符串从内部RAM的输入缓冲区inbuf向位于外部RAM的输出缓冲区outbuf传送,一直进行到遇见回车符CR或整个字符串传送完毕,试编程实现。(请参考P83例题) 【P97-题2】内部RAM从list单元开始存放一正数表,表中数作无序排列并以-1作结束标志。编程实现找出表中最小数。 MOV R0, #list MOV 30H, @R0 LOOP: INC R0 MOV A, @R0 CJNE A, #0FFH, NEQ SJMP $ NEQ: CJNE A, 30H, LK LK: JNC LOOP MOV 30H, A SJMP LOOP 【P97-题6】试编程实现比较两个ASCII码字符串是否相等。字符串的长度在内部RAM 41H单元中,第一个字符串的首地址为42H,第二个字符串的首地址为52H。如果两个字符串相等,则置内部RAM 40H单元为00H;否则置内部RAM 40H单元为0FFH。 【P97-题7】在外部RAM首地址为table的数据表中,有10个字节数据,试编程实现将每个字节的最高位无条件置1。 MOV R7,#10 MOV DPTR,#table LOOP:MOVX A,@DPTR SETB ACC.7 MOVX @DPTR,A INC DPTR DJNZ R7,LOOP SJMP $BTD红软基地

展开

同类推荐

热门PPT

相关PPT