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

合集下载

单片机原理及应用第四版林立第六章选择题答案

单片机原理及应用第四版林立第六章选择题答案

第六章选择题(1)使80C51定时/计数器T0停止计数的C51命令为______。

A.IT0=0;B.TF0=0;C.IE0=0;D.TR0=0;(2)80C51单片机的定时器T1用作定时方式时是______。

A.由内部时钟频率定时,一个时钟周期加1 B.由内部时钟频率定时,一个机器周期加1C.由外部时钟频率定时,一个时钟周期加1 D.由外部时钟频率定时,一个机器周期加1(3)80C51单片机的定时器T0用作计数方式时是______。

A.由内部时钟频率定时,一个时钟周期加1 B.由内部时钟频率定时,一个机器周期加1C.由外部计数脉冲计数,一个脉冲加1D.由外部计数脉冲计数,一个机器周期加1(4)80C51的定时器T1用作计数方式时,______。

A.外部计数脉冲由T1(P3.5引脚)输入B.外部计数脉冲由内部时钟频率提供C.外部计数脉冲由T0(P3.4引脚)输入D.外部计数脉冲由P0口任意引脚输入(5)80C51的定时器T0用作定时方式时是______。

A.由内部时钟频率定时,一个时钟周期加1B.由外部计数脉冲计数,一个机器周期加1C.外部计数脉冲由T0(P3.4)输入定时D.由内部时钟频率定时,一个机器周期加1(6)设80C51晶振频率为12MHz,若用定时器T0的工作方式1产生1ms定时,则T0计数初值应为______。

A.0xfc18B.0xf830C.0xf448D.0xf060(7)80C51的定时器T1用作定时方式且选择模式1时,工作方式控制字为______。

A.TCON=0x01;B.TCON=0x0H;C.TMOD=0x10;D.TMOD=0x50; (8)80C51的定时器T1用作定时方式且选择模式2时,工作方式控制字为______。

A.TCON=0x60; B.TCON=0x02; C.TMOD=0x06; D.TMOD=0x20; (9)80C51的定时器T0用作定时方式且选择模式0时,C51初始化编程为______。

单片机原理与应用试题(含答案)

单片机原理与应用试题(含答案)

单片机原理与应用试题(含答案)一、单选题(共64题,每题1分,共64分)1.MCS-51单片机有( )个中断优先级别。

A、1B、2C、3D、4正确答案:B2.MCS-51单片机有中断源( )。

A、5个B、2个C、3个D、6个正确答案:A3.当外部中断1发出中断请求后,中断响应的条件是( )。

A、EX1=1B、IE=0x84C、ET1=1D、IE=0x81正确答案:B4.MCS-51单片机的4个并行I/O端口作为通用I/O端口使用,在输出数据时,必须外接上拉电阻的是( )。

A、P0口B、P1口C、P2口D、P3口正确答案:A5.MCS-51单片机指令系统中,求反指令是( )。

A、CPL AB、RLC AC、CLR AD、RRC A正确答案:A6."对两个数组a和b进行初始化Char a[ ]=" ABCDEF" Char b[ ]={ ´A´,´B´,´C´,´D´,´E´,´F´};则以下说法正确的是( )。

"A、a与b 数组完全相同B、a与b 数组长度相同C、a与b 数组中都存放字符串D、a比b 数组长度长正确答案:D7.定时/计数器0中断入口地址为( )。

A、0003HB、000BHC、0013HD、001BH正确答案:B8.定时器/计数器T0的中断服务程序入口地址是( )。

A、0003HB、000BHC、0023HD、001BH正确答案:B9.MCS-51单片机响应中断的过程是( )。

A、断点PC自动压栈,对应中断矢量地址装入PCB、关中断,程序转到中断服务程序C、断点压栈,PC指向中断服务程序地址D、断点PC自动压栈,对应中断矢量地址装入PC,程序转到该矢量地址,再转至中断服务程序首地址正确答案:D10.在MCS-51单片机系统中,若晶振频率为12MHz,一个机器周期等于( )μs。

微机原理与接口技术(单片机)试题答案

微机原理与接口技术(单片机)试题答案
3)中断服务程序能完成高低电平输出2分
4)定时时间能完成100us和350us交替定时2分
(未采用中断法,但能实现波形输出的,扣3分)
七、综合设计题(每题10分,共10分)
得分
评阅人
1、设有一个8路模拟量输入的巡回监测系统,如下图所示,试求:
(1)、该系统中所扩展的芯片片选信号采用的方法是线选法,此外还有译码法;(2分)
5、当RS1=1,RS0=0,将寄存器R1中的内容压入堆栈,应使用(A)指令。
A、PUSH 11HB、PUSH @R1
C、PUSH 01HD、PUSH R1
6、定时/计数器T1的工作方式2为(A)位工作方式。
A、8B、10C、13D、16
7、当单片机的振荡频率为12MHz时,则定时器每计一个内部脉冲的时间为(A)。
EX0
SCON
98H
D7
D6
D5
D4
D3
D2
D1
D0
SM0
SM1
SM2
REN
TB8
RB8
TI
RI
得分
评阅人
1、内部RAM低128单元划分为哪3个主要部分?说明各部分的特点。
1)00H~1FH为通用工作寄存器区,共分为4组,每组由8个工作寄存器(R0~R7)组成。(2分)
由RS1、RS0决定当前组。工作时只有1组做当前组。(1分)
2)20H~2FH位地址区
分为128位,位地范围为00H~(2分)
3)30H~7FH用户数据区(2分)
2、指令MOV@Ri,A和指令MOVX@Ri,A的功能是否相同.如果不同区别是什么?
两条指令功能是有区别的。(2分)
1)MOV @Ri, A指令是对片内RAM 00H~7FH的访问(2分)

t0中断服务函数的书写方法

t0中断服务函数的书写方法

t0中断服务函数的书写方法t0中断服务函数是嵌入式系统中用来处理定时器中断的函数,也是一个操作系统内核中最基本的中断服务函数之一。

在实际开发过程中,编写t0中断服务函数是非常重要的,因为它可以保证系统的稳定性和可靠性。

本文将介绍t0中断服务函数的书写方法。

1. 定义中断服务函数在编写t0中断服务函数之前,我们需要定义中断服务函数。

中断服务函数的定义包括函数名、返回值类型、参数类型等。

在定义t0中断服务函数时,我们需要使用特殊的关键字"__interrupt",这个关键字告诉编译器,这个函数是一个中断服务函数。

例如:__interrupt void timer0_isr(void){// 主体代码}2. 中断向量表中断向量表是一个存储中断服务函数地址的表格,每个中断向量都对应一个中断服务函数。

在t0中断服务函数中,我们需要将中断向量表的t0位置为我们定义的中断服务函数的地址。

例如:#pragma vector=T0_VECTOR__interrupt void timer0_isr(void){// 主体代码}3. 主体代码t0中断服务函数的主要功能是处理定时器中断。

在t0中断服务函数中,我们可以编写一些针对定时器中断的处理代码,例如更新计数器、清除标志位等。

由于t0中断服务函数是在中断周期内执行的,因此我们需要尽量减少中断服务函数的执行时间,以提高系统的响应速度。

例如:#pragma vector=T0_VECTOR__interrupt void timer0_isr(void){T0IFG &= ~BIT0; // 清除标志位timer_count++; // 更新计数器}4. 中断服务函数的优化在编写t0中断服务函数时,我们需要注意一些优化技巧,以提高代码的执行效率和系统的响应速度。

这些优化技巧包括:a. 尽量避免在中断服务函数中使用延时函数或长时间的循环语句,以免影响系统的响应速度。

用T0定时器实现1秒定时

用T0定时器实现1秒定时

用T0定时器实现1秒定时
T0定时器是8051单片机中的一个定时/计数器,可以用来实现定时功能。

下面是使用T0定时器实现1秒定时的C代码:
```C
#include <reg52.h>
TH0=TIMER_VALUE/256;//设置定时器初值的高8位
TL0=TIMER_VALUE%256;//设置定时器初值的低8位
void main
TMOD=0x01;//设置T0为模式1,16位定时器
TH0=TIMER_VALUE/256;//设置定时器初值的高8位
TL0=TIMER_VALUE%256;//设置定时器初值的低8位
TR0=1;//启动定时器
EA=1;//允许中断
ET0=1;//允许T0中断
while (1)
//1秒到达,执行相应的操作
//这里可以添加你需要的代码
}
}
```
以上是一个简单的示例代码,使用T0定时器实现了每隔1秒触发一
个中断,并在中断处理函数中设置了一个标志位。

在主循环中检查标志位,如果标志位为1,则表示定时器已经到达1秒,执行相应的操作,并将标
志位重置为0。

请注意,上述代码使用的定时器初值是根据传输速率设置的。

如果你
需要更准确的1秒定时,需要根据你的实际系统时钟频率进行适当的调整。

定时器中断延时程序

定时器中断延时程序

定时器中断延时程序(1)该类型的delay()函数采用的延时是通过对变量进行递减或递增实现的,很难计算精确的延时时间。

(2)由于跑马灯的状态函数和延时函数是和主任务耦合到一起的,因此主任务的执行时间要对延时的时间产生影响。

如图6-12所示,假设一个跑马灯的延时函数的延时时间是1s,但是由于主函数可能存在不同的分支,因此当主函数执行不同分支程序时,实际的跑马灯延时时间是不一样的。

图6-12 程序分支对delay()函数的影响因此,对于某些对定时精度有要求的场合,例如某项工程需要跑马灯1s更换一个状态(最典型的例子就是时钟指示),就不能采用变量递减或递增的延时方法,而要采用更加精确的中断定时方法。

中断的概念在前面的章节已经有过详细讲解,这里不再赘述,与采用递增递减延时函数相比,采用中断来进行跑马灯的状态更换有以下几个优点。

(1)采用中断函数进行延时,可以精确保证延时的精度,即有效地保证跑马灯状态更换的频率;(2)采用中断函数进行跑马灯状态的更换,在进行延时期间,并不占用单片机资源,单片机可以执行其他的任务。

采用中断延时函数来进行跑马灯状态更换的软件结构如图6-13所示,主程序和跑马灯状态变换程序是独立分开的,当中断发生时,主程序被打断,进行跑马灯状态的变换。

AT89S51单片机里有两个独立的计时器T0和T1,为了得到精确的定时中断,在这里采用T0的模式0来产生定时中断。

如图6-14所示为T0工作于模式0时的结构图。

图6-13 采用时间中断函数的程序结构图6-14 计时器T0的工作模式0当T0工作于模式0时,相关需要配置的寄存器如下:(1)TMOD寄存器:TMOD寄存器是管理计时器T0和T1工作模式和相关配置的寄存器,寄存器内各位如图6-15所示,需要配置的功能位如下所示。

·M10-M00:M10-M00用于选择T0的工作模式,工作于模式0时,T0是一个13位的定时器/计数器,如图6-14所示,THx和TLx分别为8bits和5bits长度,共为13位计数器。

51单片机中断程序大全

51单片机中断程序大全

//实例42:用定时器T0查询方式P2口8位控制LED闪烁#include<> // 包含51单片机寄存器定义的头文件void main(void){// EA=1; //开总中断// ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式1TH0=(65536-46083)/256; //定时器T0的高8位赋初值TL0=(65536-46083)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0@TF0=0;P2=0xff;while(1)//无限循环等待查询{while(TF0==0);TF0=0;P2=~P2;TH0=(65536-46083)/256; //定时器T0的高8位赋初值TL0=(65536-46083)%256; //定时器T0的高8位赋初值|//实例43:用定时器T1查询方式控制单片机发出1KHz音频#include<> // 包含51单片机寄存器定义的头文件sbit sound=P3^7; //将sound位定义为引脚void main(void){// EA=1; //开总中断// ET0=1; //定时器T0中断允许TMOD=0x10; //使用定时器T1的模式1TH1=(65536-921)/256; //定时器T1的高8位赋初值TL1=(65536-921)%256; //定时器T1的高8位赋初值TR1=1; //启动定时器T1—TF1=0;while(1)//无限循环等待查询{while(TF1==0);TF1=0;sound=~sound; //将引脚输出电平取反TH1=(65536-921)/256; //定时器T0的高8位赋初值TL1=(65536-921)%256; //定时器T0的高8位赋初值}}://实例44:将计数器T0计数的结果送P1口8位LED显示#include<> // 包含51单片机寄存器定义的头文件sbit S=P3^4; //将S位定义为引脚void main(void){// EA=1; //开总中断// ET0=1; //定时器T0中断允许TMOD=0x02; //使用定时器T0的模式2TH0=256-156; //定时器T0的高8位赋初值TL0=256-156; //定时器T0的高8位赋初值#TR0=1; //启动定时器T0while(1)//无限循环等待查询{while(TF0==0) //如果未计满就等待{if(S==0) //按键S按下接地,电平为0P1=TL0; //计数器TL0加1后送P1口显示}TF0=0; //计数器溢出后,将TF0清0}}//实例45:用定时器T0的中断控制1位LED闪烁)#include<> // 包含51单片机寄存器定义的头文件sbit D1=P2^0; //将D1位定义为引脚void main(void){EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式2TH0=(65536-46083)/256; //定时器T0的高8位赋初值TL0=(65536-46083)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0^while(1);}函数功能:定时器T0的中断服务程序**************************************************************/void Time0(void) interrupt 1 using 0寄存器{D1=~D1; //按位取反操作,将引脚输出电平取反TH0=(65536-46083)/256; //定时器T0的高8位重新赋初值TL0=(65536-46083)%256; //定时器T0的高8位重新赋初值}|//实例46:用定时器T0的中断实现长时间定时#include<> // 包含51单片机寄存器定义的头文件sbit D1=P2^0; //将D1位定义为引脚unsigned char Countor; //设置全局变量,储存定时器T0中断次数void main(void){EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式2;TH0=(65536-46083)/256; //定时器T0的高8位赋初值TL0=(65536-46083)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0Countor=0; //从0开始累计中断次数while(1);}/**************************************************************函数功能:定时器T0的中断服务程序**************************************************************/ void Time0(void) interrupt 1 using 0{@Countor++; //中断次数自加1if(Countor==20) //若累计满20次,即计时满1s{D1=~D1; //按位取反操作,将引脚输出电平取反Countor=0; //将Countor清0,重新从0开始计数}TH0=(65536-46083)/256; //定时器T0的高8位重新赋初值TL0=(65536-46083)%256; //定时器T0的高8位重新赋初值}//实例47:用定时器T1中断控制两个LED以不同周期闪烁#include<> // 包含51单片机寄存器定义的头文件)sbit D1=P2^0; //将D1位定义为引脚sbit D2=P2^1; //将D2位定义为引脚unsigned char Countor1; //设置全局变量,储存定时器T1中断次数unsigned char Countor2; //设置全局变量,储存定时器T1中断次数void main(void){EA=1; //开总中断ET1=1; //定时器T1中断允许TMOD=0x10; //使用定时器T1的模式1TH1=(65536-46083)/256; //定时器T1的高8位赋初值—TL1=(65536-46083)%256; //定时器T1的高8位赋初值TR1=1; //启动定时器T1Countor1=0; //从0开始累计中断次数Countor2=0; //从0开始累计中断次数while(1);}void Time1(void) interrupt 3 using 0{Countor1++; //Countor1自加1Countor2++; //Countor2自加1。

89c51单片机李朝青版第6章课后习题答案

89c51单片机李朝青版第6章课后习题答案
MOV TL1,#78H
SETB TR1 ;启动T1定时
LOOP2:JBC TF1,L1 ;查询10ms时间到?时间到,转L1
SJMP LOOP2 ;时间未到,转LOOP2,继续查询
9、一个定时器定时时间有限,如何实现两个定时器的串行定时以满足较长定时时间的要求?
答:当一个定时器溢出时,设置另一个定时器的初值为0开始定时。
SJMP LOOP2 ;时间未到,转LOOP2,继续查询
14、已知89C51单片机的fosc=12MHz,用T1定时。试编程由P1.0和P1.1引脚分别输出周期为2ms和500μs的方波。
解:采用模式0作定时初值:
所以
MOV R2,#04H ;R2为“250μs”计数器,置入初值4
CLR P1.0 ;P1.0输出低电平
第6章习题答案
1、定时器模式2有什么特点?适用于什么场合?
答:
(1)模式2把TL0(或TL1)配置成一个可以自动重装载的8位定时器/计数器。TL0计数溢出时不仅使溢出中断标志位TF0置1,而且还自动把TH0中的内容重新装载到TL0中。TL0用作8位计数器,TH0用以保存初值。
(2)用于定时工作方式时间(TF0溢出周期)为,用于计数工作方式时,最大计数长度(TH0初值=0)为28=256个外部脉冲。
模式0:
T0低5位11000B=18H
T0高8位:01100011B=63H
模式1:
模式2:在此情况下最长定时为512μs,无法一次实现定时10ms,可用0.1ms循环100次
16、89C51单片机的定时器在何种设置下可提供三个8位计数器定时器?这时,定时器1可作为串行口波特率发生器。若波特率按9600b/s,4800b/s,2400b/s,1200b/s,600b/s,100b/s来考虑,则此时可选用的波特率是多少(允许存在一定误差)?设fosc=12MHz。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档