第4次讲义中断及定时器_第1页
第4次讲义中断及定时器_第2页
第4次讲义中断及定时器_第3页
第4次讲义中断及定时器_第4页
第4次讲义中断及定时器_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机的中断系统一、中断简介当CPU正在处理某事件的时候,外部发生的某一事件请求CPU迅速去处理,于是CPU暂时中止当前的工作,转去处理所发生的事件。中断服务处理完该事件后,再返回到原来被中止的地方继续原来的工作,这样的过程称为中断。主程序响应中断请求中断服务程序返回主程序继续执行主程序断点一、中断简介计算机引入中断技术以后有下列优点:(1)有效地解决了快速的CPU和慢速的外设之间的矛盾,可使计算机与外设并行地工作,大大提高了效率。(2)可以及时处理控制系统中随机出现的参数与信息,即计算机具有实时处理能力,从而提高了控制系统的实时性能。(3)使系统具备了处理故障的能力,提高了系统自身的可靠性。查询方式的缺点:CPU在完成一次数据传送后要等待很长时间才能进行下一次的传送。在等待过程中,CPU不能进行其他操作,所以效率比较低。

对事件的整个处理过程,称为中断处理(或中断服务)。执行主程序主程序继续执行主程序断点中断请求中断响应执行中断处理程序中断返回中断响应的过程能够实现中断处理功能的部件称为中断系统;产生中断的请求源称为中断请求源。中断源向CPU提出的处理请求,称为中断请求(或中断申请)。 进入中断→保护现场→中断处理恢复现场→中断返回中断方式优点:大大地提高了CPU的工作效率。

有8个中断请求源,6个中断矢量,两个中断优先级,可两级嵌套。中断系统结构示意图如下图所示。中断系统的结构外部中断0定时器/计数器0外部中断1定时器/计数器1串行口中断定时器2中断定时器是单片机内部的特殊功能模块。在控制系统中,常常要求有一些实时时钟以实现定时或者延时控制,如定时中断、定时检测、定时扫描等等,也往往要求有计数器,对外部事件进行计数。

要实现定时或者延时功能,一般有三种方法:软件定时,不可编程硬件定时,可编程硬件定时。软件定时——让软件循环执行一段程序,程序本身并无执行目的,而是通过执行程序延时固定的时间,也就是以前的程序中经常使用的延时程序。这种方法降低了cpu的利用率。不可编程硬件定时——如外部芯片555时基电路,通过外部阻容,达到一定的延时功能,改变阻容大小可以改变延时长度。这种定时器取决于硬件,设定好以后不能通过软件更改。可编程定时器——这种定时器的定时值可以通过软件确定和修改。中断系统的结构PT2

1、INT0*—

(P3.2)。外部中断请求0,中断请求标志为IE0。可由IT0(TCON.0)选择其为低电平有效还是下降沿有效。当CPU检测到P3.2引脚上出现有效的中断信号时,中断标志IE0(TCON.1)置1,向CPU申请中断。PT2

2、INT1*—(P3.3)。外部中断请求1。中断请求标志为IE1。可由IT1(TCON.2)选择其为低电平有效还是下降沿有效。当CPU检测到P3.3引脚上出现有效的中断信号时,中断标志IE1(TCON.3)置1,向CPU申请中断。PT2

3、定时器/计数器T0溢出中断请求TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。中断请求标志为TF0。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。PT2

4、定时器/计数器T1溢出中断请求TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。中断请求标志为TF1。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。PT2

5、串行口中断请求。RI(SCON.0)或TI(SCON.1),串行口中断请求标志。中断请求标志为TI或RI。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。软件复位PT2

6、定时器/计数器T2溢出中断请求(1)TF2(T2CON.7);(2)EXF2(T2CON.6).定时/计数器T2溢出中断请求标志为TF2或EXF2。当定时/计数器T2发生溢出时,置位TF2,并向CPU申请中断。或外部输入端T2EX发生负跳沿时,向CPU请求中断。(软件复位)PT2中断优先级控制8051有2个中断优先级,每一个中断请求源均可编程为高优先级中断或低优先级中断,从而实现2级中断嵌套。

在同时收到几个同一优先级的中断请求时,哪一个中断请求能优先得到响应,取决于内部查询次序,这相当于在同一个优先级内,还同时存在按次序决定的第二优先级结构,其查询次序见下表。中断优先级控制定时器2TF2(手动清零)(手动清零)1、TCON的中断标志TCON为外部中断、定时器/计数器0、1的控制寄存器,

字节地址为88H。各标志位的功能:(1)IT0—选择外部中断请求0为跳沿触发方式还是电平触发方式:

IT0=0,为低电平触发方式。

IT0=1,为下降沿触发方式。可由软件置“1”或清“0”。(2)IT1—外部中断请求1为下降沿触发方式还是低电平触发方式,意义与IT0类似。(3)IE0—外部中断请求0的中断请求标志位。

IE0=0,无中断请求。

IE0=1,外部中断0有中断请求。当CPU响应该中断,转向中断服务程序时,由硬件清“0”IE0。1、TCON的中断标志

TCON为外部中断、定时器/计数器0、1的控制寄存器,

字节地址为88H。(4)IE1—外部中断请求1的中断请求标志位,意义与IE0类似。(5)TF0—T0溢出中断请求标志位。T0计数后,溢出时,TF0由硬件置“1”,向CPU申请中断,CPU响应TF0中断时,硬件自动清“0”TF0,TF0也可由软件清0。1、TCON的中断标志

TCON为外部中断、定时器/计数器0、1的控制寄存器,

字节地址为88H。(6)TF1—T1的溢出中断请求标志位,功能和TF0类似。1、TCON的中断标志

TCON为外部中断、定时器/计数器0、1的控制寄存器,

字节地址为88H。(7)TR0—T0运行控制位。

TR0=1,允许定时器/计数器T0运行。

TR0=0,禁止定时器/计数器T0运行。此位相当于T0的开关。(8)TR1—T1的运行控制位,功能和TR0类似。2、SCON的中断标志

SCON为串行口控制寄存器,字节地址为98H。各标志位的功能:(1)TI—发送中断请求标志位。串口每发送完一帧串行数据后,硬件自动置“1”TI。必须在中断服务程序中用软件对TI标志清“0”。(2)RI—接收中断请求标志位。串口接收完一个数据帧,硬件自动置“1”RI标志。必须在中断服务程序中用软件对RI标志清“0”。3、T2CON为定时器/计数器2的控制寄存器,字节地址为C8H。D7D6D5D4D3D2D1D0T2CONTF2EXF2字节地址:C8H位地址CFHCEHCDHCCHCBHCAHC9HC8H可位寻址TF2(T2CON.7):定时/计数器2溢出中断请求标志位。当定时/计数器2计数产生溢出时,TF2置1,向CPU请求中断,必须由软件复位。EXF2(T2CON.6):定时/计数器2外部中断请求标志位。外部输入端T2EX发生负跳沿时,向CPU请求中断,必须由软件复位。中断允许寄存器IECPU对中断源的开放或屏蔽,由片内的中断允许寄存器IE控制。字节地址为A8H,可位寻址。格式如下:D7D6D5D4D3D2D1D0IEEA—ET2ESET1EX1ET0EX0字节地址:A8H位地址AFH9EHADHACHABHAAHA9HA8H可位寻址IE对中断的开放和关闭为两级控制

(1)总的开关中断控制位EA(IE.7位):EA=0,所有中断请求被屏蔽。

EA=1,CPU开放中断,但8个中断源的中断请求是否允许,还要由IE中的8个中断请求允许控制位决定。(2)ET2:定时器/计数器T2的溢出或捕获中断允许位

0:禁止T2溢出中断;1:允许T2溢出中断。

(3)ES:串行口中断允许位

0:禁止串行口中断;1:允许串行口中断。(4)ET1:定时器/计数器T1的溢出中断允许位

0:禁止T1溢出中断;1:允许T1溢出中断。(5)EX1:外部中断1中断允许位

0:禁止外部中断1中断;1:允许外部中断1中断。中断允许寄存器IECPU对中断源的开放或屏蔽,由片内的中断允许寄存器IE控制。字节地址为A8H,可位寻址。格式如下:D7D6D5D4D3D2D1D0IEEA—ET2ESET1EX1ET0EX0字节地址:A8H位地址AFH9EHADHACHABHAAHA9HA8H可位寻址(6)ET0:定时器/计数器T0的溢出中断允许位

0:禁止T0溢出中断;1:允许T0溢出中断。(7)EX0:外部中断0中断允许位。

0:禁止外部中断0中断;1:允许外部中断0中断。

单片机复位后,IE清0,所有中断请求被禁止。若使某一个中断源被允许中断,除了IE相应的位的被置“1”

,还必须使EA位=1。中断允许寄存器IECPU对中断源的开放或屏蔽,由片内的中断允许寄存器IE控制。字节地址为A8H,可位寻址。格式如下:D7D6D5D4D3D2D1D0IEEA—ET2ESET1EX1ET0EX0字节地址:A8H位地址AFH9EHADHACHABHAAHA9HA8H可位寻址外部中断初始化程序及中断服务程序main(){P1=0x55;//P1口初始值

EA=1;//全局中断开

EX0=1;//外部中断0开

IT0=0;//电平触发

while(1){//在此添加其他程序

}}/*------------------------------------------------

外部中断程序------------------------------------------------*/voidISR_Key(void)interrupt0using1{P1=~P1;//进入中断程序执行程序,

//此时可以通过EA=0指令暂时关掉中断}main(){P1=0x55;//P1口初始值

EA=1;//全局中断开

EX0=1;//外部中断0开

IT0=1;//边沿触发

while(1){//在此添加其他程序

}}/*-------------------------------------------

外部中断程序--------------------------------------------*/voidISR_Key(void)interrupt0using1{P1=~P1;//s3按下触发一次,P1取反一次}中断服务程序编写:void函数名()interruptnusingmn为中断源编号:外部中断0——0;定时器T0——1;外部中断1——2;定时器T1——3;串行口TI,RI——4

定时器T2——5m为中断服务程序指定使用的工作寄存器组;m=0-3.using可以省去voidINT_0()interrupt0//外部中断0函数void函数名()interruptnusingmKeilC中程序是根据interrupt来判断该函数是中断程序,根据interrupt后面的序号来判断该中断类型。只要有中断事件发生,并且CPU允许响应,程序自动跳出主程序,执行中断服务程序,执行完成中断服务程序后程序才回到主程序刚才跳出的地方继续向下执行未完成的主程序。中断的执行取决于两方面:1、主程序中是否进行正确的初始化;2、中断服务程序写得是否正确;外部中断初始化流程及中断服务程序样式……voidInit_int0(void){EX0=1//外部中断0中断允许位。

IT0=1;//选择触发方式下降沿触发;EA=1;//开总中断}voidmain(void){

Init_int0();……while(1){……}}voidISR_Int0(void)interrupt0using1{……}外部中断初始化流程及中断服务程序样式……voidInit_int1(void){EX1=1//外部中断0中断允许位。

IT1=1;//选择触发方式下降沿触发;EA=1;//开总中断}voidmain(void){

Init_int1();……while(1){……}}voidISR_Int1(void)interrupt2using1{……}定时器/计数器部分用于T0、T1的TMOD寄存器1、GATE门控位

GATE=0只用运行控制位TR1/TR0=1即可启动定时器

GATE=1在外部中断请求信号(INT1/INT0=1)且TR1/TR0=1时才启动定时器2、C/T定时方式或计数方式选择位

C/T=0定时工作方式

C/T=l计数工作方式3、M1、M0工作方式选择位

M1、M0=00方式0M1、M0=01方式1M1、M0=10方式2M1、M0=11方式3M1M0工作方式00方式0:13位定时器/计数器01方式1:16位定时器/计数器10方式2:具有重装初值8位定时器/计数器11方式3:定时器/计数器0分为两个8位定时器/计数器,定时器/计数器1在此方式无意义定时器/计数器的工作方式一、方式0(M1M0=00)

1、电路逻辑结构方式0是13位计数结构的工作方式,其计数器由TH0全部8位和TL0的低5位构成。TL0的高3位弃之不用。下图是定时器/计数器0在工作方式0的逻样结构(定时器/计数器1与此完全相同)。定时器/计数器的工作方式

在方式0下当为计数工作方式时,计数值的范围是:

1~8192(213)当为定时工作方式时,定时时间的计算公式为:(213一计数初值)×晶振周期×12或(213-计数初值)×机器周期定时器/计数器的工作方式一、方式0(M1M0=00)

1、电路逻辑结构方式0是13位计数结构的工作方式,其计数器由TH0全部8位和TL0的低5位构成。TL0的高3位弃之不用。下图是定时器/计数器0在工作方式0的逻样结构(定时器/计数器1与此完全相同)。二、方式1(M1M0=01)16位计数结构的工作方式,计数器由TH0全部8位和TL0全部8位构成。其逻辑电路和工作情况与方式0完全相同。在方式1下,当为计数工作方式时,计数值的范围是:

1~65536(216)当为定时工作方式时,定时时间的计算公式为:(216一计数初值)×晶振周期×12或(216-计数初值)×机器周期定时器/计数器的工作方式8位例:已知某单片机振荡频率fosc=12MHz,使用定时器产生周期为1ms的等宽方波,由P1.0端输出。(1)使用定时器1以工作方式0,采用查询方式;(2)使用定时器0,以工作方式1,采用中断方式。1)使用定时器1,工作方式0,查询方式①计算计数初值TH1、TL1

要产生1ms的等宽方波,只要使用P1.0端交替输出各为500us的高、低电平即可。定时时间为500us,设计数初值为x由下式可得:(213-x)×1us=500×us

解得

x=7692x=7692,转化为二进制为:1111000001100

将其低5位装入TL1,TL1=0x0C;高8位装入TH1,TH1=0x0F0。使用定时器1以工作方式0(13位),采用查询方式例:已知某单片机振荡频率fosc=12MHz,使用定时器产生周期为1ms的等宽方波,由P1.0端输出。(1)使用定时器1以工作方式0,采用查询方式;(2)使用定时器0,以工作方式1,采用中断方式。②TMOD寄存器初始化因为用定时器1的定时功能,所以C/T=0;因为无需INT1控制,直接用TR1=1控制,GATE=0;工作方式0,所以M1M0=00,因此,TMOD寄存器的高4位的内容为0。使用定时器1以工作方式0(13位),采用查询方式例:已知某单片机振荡频率fosc=12MHz,使用定时器产生周期为1ms的等宽方波,由P1.0端输出。(1)使用定时器1以工作方式0,采用查询方式;(2)使用定时器0,以工作方式1,采用中断方式。#include<reg52.h>sbitsquare_wave=P1^0;voidInit_Timer1(void){TMOD&=0x0f; //使用模式0,13位

TH0=0xf0; TL0=0x0c;EA=0;//总中断打开

ET1=0;//禁止定时器1中断

TR1=1;//定时器1运行}voidmain(void){square_wave=0;Init_Timer1(void);while(1){if(TF1==1){square_wave=~square_wave;TH0=0xf0; TL0=0x0c;

TF1=0;//中断标志位手动清零

}}}使用定时器1以工作方式0(13位),采用查询方式例:已知某单片机振荡频率fosc=12MHz,使用定时器产生周期为1ms的等宽方波,由P1.0端输出。(1)使用定时器1以工作方式0,采用查询方式;(2)使用定时器0,以工作方式1,采用中断方式。使用定时器0以工作方式1(16位),采用中断方式(2)使用定时器0,工作方式1,中断方式。①计算计数初值由下式得:(216-x)×1us=500usx=216-500=10000H-1F4H=0FE0CH所以TH0=0FEH,TL0=0CH。

TMOD寄存器初始化化

TMOD=0x01//即0b00000001③

IE及IR的使用中断方式,要使EA=1及ET0=1开放中断。由TR0=1启动定时。使用定时器0以工作方式1(16位),采用中断方式#include<reg52.h>sbitsquare_wave=P1^0;voidInit_Timer0(void){

TMOD|=0x01; //使用模式1,16位定时器

TH0=0xfe; //给定初值,

TL0=0x0c;EA=1;//总中断打开

ET0=1;//定时器中断打开

TR0=1;//定时器0运行}main(){Init_Timer0();while(1){……}}voidTimer0_isr(void)interrupt1using1{TH0=0xfe; //重新赋值

TL0=0x0c;square_wave=~square_wave;}voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出

TL0=0x00;EA=1;//总中断打开

ET0=1;//定时器中断打开

TR0=1;//定时器开关打开}定时器0初始化流程及中断服务程序样式main(){Init_Timer0();while(1){……}}voidTimer0_isr(void)interrupt1using1{TH0=0x00; //重新赋值

TL0=0x00;……}voidInit_Timer1(void){TMOD|=0x10; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

TH1=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出

TL1=0x00;EA=1;//总中断打开

ET1=1;//定时器中断打开

TR1=1;//定时器开关打开}定时器1初始化流程及中断服务程序样式main(){Init_Timer1();while(1){……}}voidTimer0_isr(void)interrupt3using1{TH1=0x00; //重新赋值

TL1=0x00;……}三、方式2(M1M0=10)

1、电路逻辑结构初始化时,8位计数初值同时装入TL0和TH0中。当TL0计数溢出时,置位TF0,同时把保存在预置寄存器TH0中的计数初值自动加载TL0,然后TL0重新计数。

四、方式3(M1M0=11)1.工作方式3下的定时器/计数器0

在工作方式3下,定时器/计数器0被拆成两个独立的8位计数器TL0和TH0。其中TL0既可以计数使用,又可以定时使用,定时器/计数器0的各控制位和引脚信号全归它使用。TH0则只能作为定时器使用。四、方式3(M1M0=11)2.工作方式3下的定时器/计数器1

如果定时器/计数器0已工作在工作方式3,则定时器/计数器1只能工作在方式0、方式1或方式2下,因为它的运行控制位TR1及计数溢出标志位TF1已被定时器/计数器0借用,如图所示。在这种情况下,定时器/计数器1通常是作为串行口的波特率发生器使用,以确定串行通信的速率。定时器/计数器初始化的步骤(1)确定工作方式、工作模式、启动控制方式一写入TMOD寄存器。(2)设置定时器或计数器的初值一可直接将初值送入TH0、TL0或TH1、TL1

(3)根据要求是否采用中断方式一直接对IE寄存器赋值。(4)启动定时器工作—可使用TR0=1、TR1=1。用定时器0设计一个0.5s定时器,控制LED每0.5s闪烁一次分析:因为最小初值为0,数到65535时溢出产生中断,数了65536次,如果晶振是12MHz,机器周期为1us,定时器0,定时器1最长定时时间为65536us=65.536ms.0.5s=500ms>65.536ms思路:我们可以每次定时50000us=50ms,即每隔50ms中断一次,中断10次就是500ms了为此,我们编程时必须定义一个全局变量,如:

unsignedchartimes=0;

来计算中断的次数。#include<reg52.h>sbitLED=P1^0;unsignedchartimes=0;voidInit_Timer0(void){

TMOD|=0x01; //使用模式1,16位定

TH0=(65536-50000)/256; //给定初值,

TL0=(65536-50000)%256;//50msEA=1;//总中断打开

ET0=1;//定时器中断打开

TR0=1;//定时器0运行}main(){Init_Timer0();while(1){……}}voidTimer0_isr(void)interrupt1using1{

TH0=(65536-50000)/256; //重赋初值

TL0=(65536-50000)%256;times++;if(times==10)//500ms到了

{LED=~LED;times=0;//下个10次开始

}}#ifndef__TIMER0_H__#define__TIMER0_H__

voidInit_Timer0(void){TMOD|=0x01; //使用模式1,16位定

TH0=(65536-50000)/256; //给定初值,

TL0=(65536-50000)%256;//50msEA=1;//总中断打开

ET0=1;//定时器中断打开

TR0=1;//定时器0运行}#endifs另外,有的常用的子程序可以放在头文件中,下面来举例:定义一个名叫timer0.h的文件,保存在当前项目文件夹中,内容如下:#include<reg52.h>#include"timer0.h“sbitLED=P1^0;unsignedchartimes=0;main(){Init_Timer0();while(1);}voidTimer0_isr(void)interrupt1using1{

TH0=(65536-50000)/256; //重赋初值

TL0=(65536-50000)%256;times++;if(times==10)//500ms到了

{LED=~LED;times=0;//下个10次开始

}}#include<reg52.h>指定系统默认路径C:\Keil\C51\INC#include"timer0.h“指本地路径

例定时器0以工作方式2产生100us定时,在P1.0输出周期为200us的连续正方波脉冲。已知晶振频率fosc=12MHz.

1.计算计数初值

12MHz晶振下:假设计数初值为X,则:(256-X)×1us=100us求解得:X=156=0x9C把0x9C分别装入TH0和TL0中:TH0=0x9C,TL0=0x9C

2.TMOD寄存器初始化

M1M0=10C/T=0GATE=0

所以:TMOD=02H

例定时器0以工作方式2产生100us定时,在P1.0输出周期为200us的连续正方波脉冲。已知晶振频率fosc=12MHz.#include<reg52.h>sbitwave=P1^0;unsignedinttimes=0;voidInit_Timer0(void){TMOD|=0x02; //使用模式2,8位定,自动装载

TH0=256-100; //给定初值,装载一样的数值

TL0=256-100;//100usEA=1;//总中断打开

ET0=1;//定时器中断打开

TR0=1;//定时器0运行 }main(){Init_Timer0();while(1);}voidTimer0_isr(void)interrupt1using1{//此处不需要重新装载

wave=~wave; }voidTimer0_isr(void)interrupt1using1{times++;if(times==5000)//500ms到了

{LED=~LED;times=0;//下个5000次开始

} }在开发板上可以用蓝色的部分根据LED的闪烁情况进行测试。利用T0门控位测试INT0引脚上出现的正脉冲宽度,已知晶振频率为12MHz。分析:应采用定时模式,GATE=1;C/T=0M1M0=011、GATE门控位

GATE=0只用运行控制位TR1/TR0=1即可启动定时器

GATE=1在外部中断请求信号(INT1/INT0=1)且TR1/TR0=1时才启动定时器#include<reg52.h>sbitwave=P3^2;//信号必须接P3.2main(){unsignedintresult;unsignedinttemp;EA=1;//总中断打开

ET0=1;//定时器中断打开

TMOD|=0x09;//M1M0=01,16位,GATE=1,//INT0和TR0一起控制计数器0TH0=0//TL0=0;//TR1=1;//此时定时器0并未启动,因为要等INT0(P3.2)为高电平;

while(!wave);//等待0变成1,信号=1后,计数器开始工作,同时退出while语句

while(wave);//信号为1继续等待,计数继续进行,当信号变为0,计数停止,同时推出while语句

利用T0门控位测试INT0引脚上出现的正脉冲宽度(0-65.536ms),已知晶振频率为12MHz。//为了送显示,对result的处理

disData[0]=0;disData[1]=0;disData[2]=0;

disData[3]=result/10000;//万位

disData[4]=low4bit/1000%10;//千位

disData[5]=low4bit/100%10;//百位

disData[6]=low4bit%100/10;//十位

disData[7]=low4bit%10;//个位单位:ustemp=TH0;temp<<=8;temp+=TL0;

result

=temp;//在0~65535之间}#include<reg52.h>sbitwave=P3^2;//无须接P3.2,任意IOmain(){unsignedintresult;unsignedinttemp;EA=1;//总中断打开

ET0=1;//定时器中断打开

TMOD|=0x01;//M1M0=01,16位,GATE=0,//仅由TR0控制计数器0

TH0=0TL0=0;//此时wave=0while(!wave);//等待wave等于1TR0=1;//wave=1后,定时器0启动

while(wave);//wave=1期间,计数正在进行

TR0=0;//wave=0,跳出上面的whlie语句,同时关闭定时器0

temp=TH0;temp<<=8;temp+=TL0;

result

=temp;//在0~65535之间利用T0门控位测试INT0引脚上出现的正脉冲宽度(0-65.536ms),已知晶振频率为12MHz。//为了送显示,对result的处理

disData[0]=0;disData[1]=0;disData[2]=0;

disData[3]=result/10000;//万位

disData[4]=low4bit/1000%10;//千位

disData[5]=low4bit/100%10;//百位

disData[6]=low4bit%100/10;//十位

disData[7]=low4bit%10;//个位单位:us#include<reg52.h>sbitwave=P1^2;unsignedchartimes=0;main(){unsignedlongresult;unsignedinttemp;EA=1;//总中断打开

ET0=1;//定时器中断打开

TMOD|=0x01;//使用模式1,16位,GATE=0TH0=0TL0=0;while(!wave);TR0=1;//定时器0运行

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论