汇编语言之定时器中断(优.选)
- 格式:pdf
- 大小:400.98 KB
- 文档页数:4
单片机一些常用的延时与中断问题及解决方法(总4页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--单片机一些常用的延时与中断问题及解决方法延时与中断出错,是单片机新手在单片机开发应用过程中,经常会遇到的问题,本文汇总整理了包含了MCS-51系列单片机、MSP430单片机、C51单片机、8051F的单片机、avr单片机、STC89C52、PIC单片机…..在内的各种单片机常见的延时与中断问题及解决方法,希望对单片机新手们,有所帮助!一、单片机延时问题20问1、单片机延时程序的延时时间怎么算的答:如果用循环语句实现的循环,没法计算,但是可以通过软件仿真看到具体时间,但是一般精精确延时是没法用循环语句实现的。
如果想精确延时,一般需要用到定时器,延时时间与晶振有关系,单片机系统一般常选用 2 MHz、12 MHz或6 MHz晶振。
第一种更容易产生各种标准的波特率,后两种的一个机器周期分别为1 μs和2 μs,便于精确延时。
本程序中假设使用频率为12 MHz的晶振。
最长的延时时间可达216=65 536 μs。
若定时器工作在方式2,则可实现极短时间的精确延时;如使用其他定时方式,则要考虑重装定时初值的时间(重装定时器初值占用2个机器周期)。
2、求个单片机89S51 12M晶振用定时器延时10分钟,控制1个灯就可以答:可以设50ms中断一次,定时初值,TH0=0x3c、TL0=0xb0。
中断20次为1S,10分钟的话,需中断12000次。
计12000次后,给一IO口一个低电平(如功率不够,可再加扩展),就可控制灯了。
而且还要看你用什么语言计算了,汇编延时准确,知道单片机工作周期和循环次数即可算出,但不具有可移植性,在不同种类单片机中,汇编不通用。
用c 的话,由于各种软件执行效率不一样,不会太准,通常用定时器做延时或做一个不准确的延时,延时短的话,在c中使用汇编的nop做延时3、51单片机C语言for循环延时程序时间计算,设晶振12MHz,即一个机器周期是1us。
例2 利用定时/计数器T0的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms 的方波,采用中断方式,设系统时钟频率为12 MHz。
解:1、计算计数初值X:由于晶振为12 MHz,所以机器周期Tcy为1 s。
所以:N=t/ Tcy =10×10-3 / 1×10-6=10000X=65536-10000=55536=D8F0H即应将D8H送入TH0中,F0H送入TL0中2、求T0的方式控制字TMOD:M1M0=01,GATE=0,C/T=0,可取方式控制字为01H;ORG 0000HLJMP MAIN ;跳转到主程序ORG 000BH ;T0的中断入口地址LJMP DVT0 ;转向中断服务程序ORG 0100HMAIN:MOV TMOD,#01H ;置T0工作于方式1MOV TH0,#0D8H ;装入计数初值MOV TL0,#0F0HSETB ET0 ;T0开中断SETB EA ;CPU开中断SETB TR0 ;启动T0SJMP $ ;等待中断DVT0:CPL P1.0 ;P1.0取反输出MOV TH0,#0D8H ;重新装入计数值MOV TL0,#0F0HRETI ;中断返回END•2、串行口方式1的发送和接收例7-4:89C51串行口按双工方式收发ASCII字符,最高位用来作奇偶校验位,采用奇校验方式,要求传送的波特率为1200b/s。
编写有关的通信程序。
解:7位ASCII码加1位奇校验共8位数据,故可采用串行口方式1。
89C51单片机的奇偶校验位P是当累加器A中1的数目为奇数时,P=1。
如果直接把P 的值放入ASCII码的最高位,恰好成了偶校验,与要求不符。
因此,要把P的值取反以后放入ASCII码最高位,才是要求的奇校验。
•2、串行口方式1的发送和接收•双工通信要求收、发能同时进行。
收、发操作主要是在串行接口进行,CPU只是把数据从接收缓冲器读出和把数据写入发送缓冲器。
51单片机实用程序库4.1 流水灯程序介绍:利用P1 口通过一定延时轮流产生低电平输出,以达到发光二极管轮流亮的效果。
实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。
程序实例(LAMP.ASM)ORG 0000HAJMP MAINORG 0030HMAIN:9MOV A,#00HMOV P1,A ;灭所有的灯MOV A,#11111110BMAIN1:MOV P1,A ;开最左边的灯ACALL DELAY ;延时RL A ;将开的灯向右边移AJMP MAIN ;循环DELAY:MOV 30H,#0FFHD1: MOV 31H,#0FFHD2: DJNZ 31H,D2DJNZ 30H,D1RETEND4.2 方波输出程序介绍:P1.0 口输出高电平,延时后再输出低电平,循环输出产生方波。
实际应用中例如:波形发生器。
程序实例(FAN.ASM):ORG 0000HMAIN:;直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAYSETB P1.0ACALL DELAY10CLR P1.0AJMP MAIN;////////////////////////////////////////////////// DELAY:MOV R1,#0FFHDJNZ R1,$RETEND五、定时器功能实例5.1 定时1秒报警程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1 次,以达到定时报警的目的。
实际应用例如:定时报警器。
程序实例(DIN1.ASM):ORG 0000HAJMP MAINORG 000BHAJMP DIN0 ;定时器0入口MAIN:TFLA G EQU 34H ;时间秒标志,判是否到50个0.2秒,即50*0.2=1秒MOV TMOD,#00000001B;定时器0工作于方式1MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒11SETB EA ;开总中断SETB ET0 ;开定时器0中断允许SETB TR0 ;开定时0运行SETB P1.0LOOP: AJMP LOOPDIN0:;是否到一秒//////////////////////////////////////// INCC: INC TFLAGMOV A,TFLAGCJNE A,#20,REMOV TFLAG,#00HCPL P1.0;////////////////////////////////////////////////// RE:MOV TL0,#0AFHMOV TH0,#3CH ;设定时时间为0.05秒,定时20次则一秒RETIEND5.2 频率输出公式介绍:f=1/ts51 使用12M晶振,一个周期是1微秒使用定时器1工作于方式0,最大值为65535,以产生200HZ的频率为例:200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电12平或低电平的时间为2500 微秒。
一.单项选择题(30分)在中断服务程序中至少应有一条()A.传送指令B.转移指令C.加法指令D.中断返回指令2.当MCS-51复位时,下面说法准确の是()A.PC=0000HB.SP=00HC.SBUF=00HD.(30H)=00H3.要用传送指令访问MCS-51片外RAM,它の指令操作码助记符是()A.MOVB.MOVXC.MOVCD.以上都行4.ORG2000H LACLL3000H ORG 3000H RET 上边程序执行完RET指令后,PC=()A.2000HB.3000HC.2003HD.3003H5.要使MCS-51能响应定时器T1中断,串行接口中断,它の中断允许寄存器IEの内容应是()A.98HB.84HC.42HD.22H6.JNZREL指令の寻址方式是()A.立即寻址B.寄存器寻址C.相对寻址D.位寻址7.执行LACLL4000H指令时, MCS-51所完成の操作是( )A保护PCB.4000HPC C.保护现场 D.PC+3入栈, 4000HPC8.下面哪条指令产生信号()A.MOVX A,@DPTRB.MOVC A,@A+PCC.MOVC A,@A+DPTRD.MOVX @DPTR,A9.若某存储器芯片地址线为12根,那么它の存储容量为()A. 1KBB. 2KBC.4KBD.8KB10.要想测量引脚上の一个正脉冲宽度,则TMODの内容应为()A.09HB.87HC.00HD.80H11.PSW=18H时,则当前工作寄存器是()A.0组B. 1组C. 2组D. 3组12.MOVX A,@DPTR指令中源操作数の寻址方式是()A. 寄存器寻址B. 寄存器间接寻址C.直接寻址D. 立即寻址13. MCS-51有中断源()A.5B. 2C. 3D. 614. MCS-51上电复位后,SPの内容应为( )A.00HB.07HC.60HD.70H0003H LJMP2000H ORG000BH LJMP3000H 当CPU响应外部中断0后,PCの值是()A.0003HB.2000HC.000BHD.3000H16.控制串行口工作方式の寄存器是()A.TCONB.PCONC.SCOND.TMOD17.执行PUSHACC指令, MCS-51完成の操作是()A.SP+1SP, ACCSPB. ACCSP, SP-1SPC. SP-1SP, ACCSPD. ACCSP, SP+1SP18.P1口の每一位能驱动()A.2个TTL低电平负载B. 4个TTL低电平负载C.8个TTL低电平负载D.10个TTL低电平负载19.PC中存放の是()A.下一条指令の地址B. 当前正在执行の指令C.当前正在执行指令の地址D.下一条要执行の指令20.8031是()A.CPU B.微处理器 C.单片微机 D.控制器21.要把P0口高4位变0,低4位不变,应使用指令( )A.ORL P0,#0FHB.ORL P0,#0F0HC.ANL P0,#0F0HD.ANL P0,#0FH22.下面哪种外设是输出设备()A.打印机B.纸带读出机C.键盘D.A/D转换器23.所谓CPU是指( )A.运算器和控制器B.运算器和存储器C.输入输出设备D. 控制器和存储器24.LCALL指令操作码地址是2000H,执行完响应子程序返回指令后,PC=( )A.2000HB.2001HC.2002HD.2003H25. MCS-51执行完MOVA,#08H后,PSWの哪一位被置位( )A.CB. F0C.OVD.P26.计算机在使用中断方式与外界交换信息时,保护现场の工作应该是()A.由CPU自动完成B.在中断响应中完成C.应由中断服务程序完成D.在主程序中完成27.关于MCS-51の堆栈操作,正确の说法是()A.先入栈,再修改栈指针B.先修改栈指针,再出栈C. 先修改栈指针,在入栈D.以上都不对28.某种存储器芯片是8KB*4/片,那么它の地址线根数是()A.11根B.12根C. 13根D. 14根29.若MCS-51中断源都编程为同级,当他们同时申请中断时CPU首先响应()A.B. C.T1 D.T030. MCS-51の相对转移指令の最大负跳变距离()A.2KBB. 128BC. 127BD. 256B二.判断题(10分)1.我们所说の计算机实质上是计算机の硬件系统和软件系统の总称。
简答题1.什么是指令系统?指令系统:计算机所能执行的全部指令的集合,它描述了计算机内全部的控制信息和“逻辑判断”能力。
不同计算机的指令系统包含的指令种类和数目也不同。
一般均包含算术运算型、逻辑运算型、数据传送型、判定和控制型、输入和输出型等指令。
2.什么是指令指令是指示计算机执行某种操作的命令,它由一串二进制数码组成。
3.什么是汇编语言?答:汇编:汇编语言源程序在交付计算机执行之前,需要先翻译成目标程序,这个翻译过程叫汇编。
4.什么是寻址方式答:寻址方式:寻址方式就是寻找指令中操作数或操作数所在地址的方式。
也就是如何找到存放操作数的地址,把操作数提取出来的方法。
5.什么是堆栈答:堆栈是在片内RAM中专门开辟出来的一个区域,数据的存取是以"后进先出"的结构方式处理的。
实质上,堆栈就是一个按照"后进先出"原则组织的一段内存区域。
6.什么是指令周期指令周期:指执行一条指令所占用的全部时间。
通常一个指令周期含1~4个机器周期。
7.串行数据传送的主要优点和用途是什么?答:串行数据传送的主要优点是硬件接口简单,接口端口少(2个)。
主要用于多个单片机系统之间的数据通信。
8.MC S一51指令集中有无“程序结束”指令?怎样实现“程序结束”功能?答:没有这样的指令。
但实现“程序结束”至少可以借助4种办法:①用原地踏步指令SJMP $ 死循环。
②在最后一条指令后面设断点,用断点执行方式运行程序。
③用单步方式执行程序。
④在末条指令之后附加一条LJMP监控显示器程序首地址或LJMP 0000H,返回监控状态。
9.中断服务子程序与普通子程序有哪些异同之处?2.中断服子程序与普通子程序的执行和返回有什么异同之处?答:中断服务子程序与普通子程序都是一种能完成某一特定任务的程序段。
其资源要为所有调用程序共享。
因此,子程序在结构上应具有独立性和通用性。
子程序的第一条指令的地址称为子程序的入口地址。
C51中断处理过程3 C51中断处理过程C51编译器支持在C源程序中直接开发中断过程,因此减轻了使用汇编语言的繁琐工作,提高了开发效率。
中断服务函数的完整语法如下:void函数名(void)[模式][再入]interrupt n [using r]其中n(0~31)代表中断号。
C51编译器允许32个中断,具体使用哪个中断由80C51系列的芯片决定。
r(0~3)代表第r组寄存器。
在调用中断函数时,要求中断过程调用的函数所使用的寄存器组必须与其相同。
"再入"用于说明中断处理函数有无"再入"能力。
C51编译器及其对C语言的扩充允许编程者对中断所有方面的控制和寄存器组的使用。
这种支持能使编程者创建高效的中断服务程序,用户只须在C语言下关心中断和必要的寄存器组切换操作。
例3 设单片机的fosc=12MHz,要求用T0的方式1编程,在P1.0脚输出周期为2ms的方波。
例3 设单片机的fosc=12MHz,要求用T0的方式1编程,在P1.0脚输出周期为2ms的方波。
用C语言编写的中断服务程序如下:#includesbit P1_0=P1^0;void timer0(void)interrupt 1 using 1 {/*T0中断服务程序入口*/P1_0=!P1_0;TH0=-(1000/256); /*计数初值重装*/TL0=-(1000%256);}void main(void){TMOD=0x01; /*T0工作在定时器方式1*/P1_0=0;TH0=-(1000/256); /*预置计数初值*/TL0=-(1000%256);EA=1; /*CPU开中断*/ET0=1; /*T0开中断*/TR0=1; /*启动T0*/do{}while(1);}在编写中断服务程序时必须注意不能进行参数传递,不能有返回值。
8051 系列 MCU 的基本结构包括:32 个 I/O 口(4 组8 bit 端口);两个16 位定时计数器;全双工串行通信;6 个中断源(2 个外部中断、2 个定时/计数器中断、1 个串口输入/输出中断),两级中断优先级;128 字节内置RAM;独立的 64K 字节可寻址数据和代码区。