实验五 8051单片机定时中断实验
51单片机实验——单片机定时与外部中断

实验题目:单片机定时与外部中断的作用1 一、实验目的1)熟悉单片机定时功能的使用2)熟悉外部中断的使用3)熟悉一些常用的C语言编程语句4)熟练单片机的一些使用及操作方法二、实验原理工作原理框图7_SEG_LED:8_BI Ts_LED:三、参考程序#include <reg51.h>#define FOSC 11059200L#define BAUD 9600#define TRUE 1#define FALSE 0int CmpCnt;int T0IntCnt;bit FlagTimerOk;unsigned char LedVal;sbit HC373_CLK = P3^6;sbit Int0=P3^2;sbit P1_4=P1^4;sbit P1_5=P1^5;sbit P1_6=P1^6;sbit P1_7=P1^7;unsigned char code a[10]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x19};void Init_T0(void){TMOD = 0x01; //T0 方式1TH0 = (65536-(FOSC)/1200)/256;TL0 = (65536-(FOSC)/1200)&0xff;ET0 = 1;TR0 = 1;}void Init_Uart(void){SCON = 0x50; //UART设置PCON = 0x80;TMOD = 0x21;TH1=0xfa; //定时器1设置TL1=0xfa;TR1=1;ES=1;EA=1;}void Init_INT0(void) interrupt 0 {int s;s=0;while(Int0==0)s++; //防抖设置if(s>100){if(CmpCnt>1)CmpCnt=CmpCnt-1;elseCmpCnt=50;s=0;}}void Init_Ram(void){T0IntCnt = 0;FlagTimerOk = FALSE;CmpCnt = 50;LedVal = 0xff;}void T0_ISR(void) interrupt 1{if(++T0IntCnt >= CmpCnt){T0IntCnt = 0;FlagTimerOk = TRUE;}TH0 =(65536-(FOSC)/1200)/256;TL0 =(65536-(FOSC)/1200)&0xff;TR0 = 1;ET0 = 1;EA = 1;}void LedCtrl(void){static int j=0;LedVal = 0xff & (~(1<<j));if(++j >= 8){j = 0;}P0 = LedVal;HC373_CLK = 1;HC373_CLK = 0;}void delay() //延时函数{int x,y;for(x=0;x<2;x++)for(y=0;y<120;y++);}void main(void){Init_Ram();Init_Uart();Init_T0();EX0=1;IT0=0;EA = 1;while(1){if(FlagTimerOk){FlagTimerOk = FALSE;LedCtrl();}P1_7=1;P1_5=0;P1_6=0;P1_4=0;P0=0x02;delay(); //七段数码管显示 P1_6=1;P1_4=0;P1_5=0;P1_7=0;P0=a[CmpCnt%10];delay(); P1_5=1;P1_4=0;P1_6=0;P1_7=0;P0=a[CmpCnt/10];delay();}}四、实验步骤1、启动Keil C,新建project;2、将写好的文件保存为.c文件;3、译生成hex文件后,用flash magic烧录到单片机中;4、片机复位上电,运行;5、按住INT0键,观察不同的数字显示对应LCD显示的变化;实验结果每按下INT0一次,数码管的显示示数减少10,从启动时的500一直减小到10,然后又恢复500,并且发光二极管的点亮时间和显示的一致,频率越高,LCD跑马灯跑得越快。
c51定时中断实验报告

竭诚为您提供优质文档/双击可除c51定时中断实验报告篇一:51单片机定时器实验报告51单片机定时器实验实验内容:实验内容:(1)编写程序使定时器0或者定时器1工作在方式1,定时50ms触发蜂鸣器。
c语言程序#include#defineuintunsignedint#defineucahrunsignedcharsbitFm=p0^0;voidmain(){TmoD=0x01;Th0=(65535-50000)/256;Th0=(65535-50000)%256;eA=1;//开总中断eT0=1;//开定时器0中断TR0=1;while(1);}voidT0_time()interrupt1{}汇编程序oRg0000hJAmpmAInoRg000bhTh0=(65535-50000)/256;Th0=( 65535-50000)%256;Fm=~Fm;LJmpInT0_InToRg0100hmIAn:seTbeAseTbeT0AJmp$InT0_InT:moVR2,#0FAhmoVR3,#0c8hDJnZR3,$DJnZR2,InT0_InTReTI(2)编写程序使定时器0或者定时器1工作在方式1,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。
#include#defineuintunsignedint#defineucahrunsignedcharuintnum,num1;sbitFm=p0^7;intshi,ge,a;voiddelay(uint);voidshumaguan();unsignedcharcodetable[]={0xc0,0xf9,0xa4,0xb0,0x99,0 x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管0-F编码表voidmain(){TmoD=0x01;Th0=(65535-50000)/256;Th0=(65535-50000)%256;eA=1;//开总中断eT0=1;//开定时器0中断TR0=1;while(1)}voidT0_time()interrupt1{}voidshumaguan(){p3=0x01;p2=table[shi];delay(5);p3=0x02;p2=table[ge];delay(5);Th0=(65535-50000)/256;Th0=(65535-50000)%25 6;num1++;if(num1==10){}num1=0;num++;shi=num/10;ge=n um%10;if(num==100){num=0;}{}shumaguan();voidzuoyi(){}voiddelay(uintx){}(3)编写程序使定时器0或者定时器1工作在方式2,自动重装载模式,定时500ms使两位数码管从00、01、02……98、99每间隔500ms加1显示。
单片机中断实验实训报告

一、实验背景随着电子技术的飞速发展,单片机因其体积小、成本低、功能强大等优点,在各个领域得到了广泛应用。
中断技术是单片机设计中非常重要的一部分,它允许单片机在执行程序的过程中,能够及时响应外部事件,从而提高系统的实时性和效率。
本实训旨在通过实验,加深对单片机中断系统的理解,掌握中断系统的使用方法,并学会在实际应用中灵活运用中断技术。
二、实验目的1. 熟悉单片机中断系统的基本概念和原理。
2. 掌握中断源、中断优先级、中断服务程序等基本概念。
3. 学会使用单片机的中断系统实现实时响应外部事件。
4. 培养动手实践能力和问题解决能力。
三、实验器材1. 单片机实验板2. 示波器3. 电源4. 连接线5. 逻辑分析仪(可选)四、实验内容1. 实验一:外部中断实验(1)实验目的:验证外部中断功能,实现按键控制LED灯的点亮和熄灭。
(2)实验步骤:a. 将外部中断0(INT0)引脚连接到按键,按键按下时产生低电平信号。
b. 编写中断服务程序,实现按键按下时点亮LED灯,按键释放时熄灭LED灯。
c. 编译程序,下载到单片机实验板上。
d. 测试实验效果,观察LED灯的点亮和熄灭情况。
2. 实验二:定时器中断实验(1)实验目的:验证定时器中断功能,实现LED灯的定时闪烁。
(2)实验步骤:a. 配置定时器T0为模式1,设置定时器初值,使定时器溢出时间为1秒。
b. 开启定时器中断,编写定时器中断服务程序,实现LED灯的定时闪烁。
c. 编译程序,下载到单片机实验板上。
d. 测试实验效果,观察LED灯的闪烁情况。
3. 实验三:中断嵌套实验(1)实验目的:验证中断嵌套功能,实现定时器中断和外部中断的嵌套。
(2)实验步骤:a. 配置定时器T0为模式1,设置定时器初值,使定时器溢出时间为1秒。
b. 开启定时器中断和外部中断,设置中断优先级。
c. 编写定时器中断服务程序和外部中断服务程序,实现中断嵌套。
d. 编译程序,下载到单片机实验板上。
实验五 中断与定时(计数)器实验(Keil)

实验五中断与定时/计数器实验一、实验目的1.了解单片机中断与定时器工作原理,掌握中断与定时器程序结构;2.掌握在µVision环境中调试中断与定时器程序的方法。
二、实验仪器和设备Keil软件;THKSCM-2综合实验装置;三、实验原理及实验内容1.示例及相关设置(1)建立一个文件夹:lx51。
(2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx51.asm文件名存盘到lx51文件夹中。
ORG 0000HLJMP MAINORG 0003HMOV P2,ARL ARETIORG 0040HMAIN:MOV SP,#5FHMOV A,#0FEHSETB EASETB EX0SETB IT0SJMP $END(3)在lx51文件夹下建立新工程,以文件名lx51存盘(工程的扩展名系统会自动添加)。
(4)在Project菜单的下拉选项中,单击Opt ions for Target ‘Target1’,在弹出的窗口中要完成一下设置:○1单片机芯片选择A T89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。
○2晶振频率设为11.0592MHz。
○3Output标签下的Create HEX File前小框中要打钩。
○4在Debug标签选择Use Simulator(软件模拟)。
(5)在Project菜单的下拉选项中,单击build Target 选项完成汇编,生成目标文件(.HEX)。
按F5运行程序。
(6)在P3窗口的P3.2位单击鼠标(模拟INT0引脚信号),观察P2窗口变化。
(7)修改程序,使之适合字节数大于8的中断服务情况。
(8)利用单片机最小系统板演示该程序的运行情况。
2.示例及相关设置(1)建立一个文件夹:lx52。
(2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx52.asm文件名存盘到lx52文件夹中。
c51定时中断实验报告

c51定时中断实验报告本文介绍的是C51定时中断实验,利用这个实验可以更好地理解C51的定时器与中断模块,进一步熟悉C语言的使用。
一、实验目的1.掌握C51单片机的定时器模块和中断模块。
2.熟悉定时器与中断的工作原理。
3.掌握利用中断实现定时功能的方法。
4.掌握如何调试程序,发现和解决程序问题。
二、实验装置硬件:STC89C52微控制器、电源、电路板、电路元件等。
软件:Keil C51集成开发环境。
三、实验原理1.定时器模块C51单片机中的定时器模块包含了3种不同的工作方式:工作模式0、模式1和模式2。
这些工作模式拥有不同的计数器范围和计数方式。
在本实验中,将使用工作模式1,因为它适用于大多数定时需求,并且易于编写程序。
工作模式1基本特点如下:(1)Timer1用两个8位计数器(TH1和TL1)组成,当一个计数器溢出时(从FFH计数到00H),计数值自动重装,同时中断请求位TF1被设置。
(2)计数器TH1可以初始值,TL1需要重新初始计数。
(3)Timer1的计数时钟来源可以是外部时钟源或内部时钟源,一般选择内部时钟源。
(4)TH开头的寄存器和TL开头的寄存器合起来组成16位的Timer1计数器,这个计数器的数值大小为TH1-TH1。
(5)x表示H或L。
用C语言对Timer1进行编程,首先需要完成以下配置:TMOD |= 0x10; // 定时器模式选择,使用模式1,TH0和TL0为一组计数器TH1 = (65536 - 50000) / 256; // 定时器初值设置ET1 = 1; // 打开定时器中断其中,TMOD是用来选择定时器工作模式,可以用对应的数值进行配置;TH1和TL1需要根据需要设置计数器初始值,该初值的计算公式为:计数初值 = (65536 - 计数时间/12)。
ET1为定时器1允许中断的位,EA为总中断允许位,TR1为定时器1工作使能位。
2.中断模块中断是一种实时响应外部事件处理的技术手段,当特定的硬件事件发生时,CPU自动调出相应的中断处理程序来响应事件,处理程序完成任务后返回继续程序运行,从而提高了CPU的效率。
中断及定时器实验报告

一、实验目的1. 理解中断和定时器的基本概念及工作原理。
2. 掌握51单片机中断系统和定时器的配置方法。
3. 学会使用中断和定时器实现特定功能,如延时、计数等。
4. 培养动手实践能力和问题解决能力。
二、实验原理中断是计算机系统中的一种机制,允许CPU在执行程序过程中,暂停当前程序,转去执行另一个具有更高优先级的程序。
51单片机具有5个中断源,包括两个外部中断(INT0、INT1)、两个定时器中断(定时器0、定时器1)和一个串行口中断。
定时器是51单片机内部的一种计数器,可以用于产生定时中断或实现定时功能。
51单片机有两个定时器,即定时器0和定时器1。
定时器可以工作在模式0、模式1、模式2和模式3。
三、实验内容及步骤1. 实验内容一:外部中断实验(1)实验目的:掌握外部中断的使用方法,实现按键控制LED灯的亮灭。
(2)实验步骤:- 使用Keil for 8051编译器创建项目。
- 根据电路原理图连接电路。
- 编写程序,配置外部中断,实现按键控制LED灯的亮灭。
2. 实验内容二:定时器中断实验(1)实验目的:掌握定时器中断的使用方法,实现LED灯闪烁。
(2)实验步骤:- 使用Keil for 8051编译器创建项目。
- 根据电路原理图连接电路。
- 编写程序,配置定时器中断,实现LED灯闪烁。
3. 实验内容三:定时器与外部中断结合实验(1)实验目的:掌握定时器与外部中断结合使用的方法,实现按键控制LED灯闪烁频率。
(2)实验步骤:- 使用Keil for 8051编译器创建项目。
- 根据电路原理图连接电路。
- 编写程序,配置定时器中断和外部中断,实现按键控制LED灯闪烁频率。
四、实验结果与分析1. 外部中断实验:成功实现了按键控制LED灯的亮灭。
当按下按键时,LED灯亮;松开按键时,LED灯灭。
2. 定时器中断实验:成功实现了LED灯闪烁。
LED灯每隔一定时间闪烁一次,闪烁频率可调。
3. 定时器与外部中断结合实验:成功实现了按键控制LED灯闪烁频率。
单片机中断实验报告

通过单片机的下载接口,将可执行的二进制文件 下载到单片机中。
实验测试
通过按键触发外部中断,观察LED灯的状态变化, 验证程序的正确性。
04
实验结果与分析
中断响应时间测试
总结词
响应时间快
详细描述
在测试中,我们发现单片机的中断响应时间非常快,能够在极短的时间内对外 部事件做出响应。这主要得益于单片机的硬件架构和中断处理机制,使得单片 机能够迅速识别并处理外部事件。
提高编程能力
通过本次实验,我们认识到自己的编程能力还有很大的提升空间。在未来的学习中,我们将注重提高自 己的编程能力,包括代码的优化、调试技巧等方面。
THANKS
感谢观看
实验中的问题与解决方案
在实验过程中,我们遇到了一些问题,如中断触发条件不 稳定等,通过调整相关参数和优化代码,最终解决了这些 问题。
对实验的反思与建议
01
实验操作流程的不足
在实验过程中,我们发现操作流程仍存在一些不足之处,如某些步骤的
描述不够清晰,导致实验过程中出现了一些不必要的困惑。建议在后续
的实验指导书中对操作流程进行更加详细的描述。
深入学习单片机中断机制
通过本次实验,我们对单片机的中断机制有了初步的了解。在未来的学习中,我们计划深入学习单片机的中断机制, 了解更多关于中断的细节和应用技巧。
探索更多中断应用场景
除了本次实验中实现的按键中断和定时器中断外,我们还计划探索更多的中断应用场景,如串口中断、ADC中断等 ,以拓宽我们的知识面和应用能力。
05
结论与建议
实验结论
实验目标达成情况
实验目标是通过单片机实现外部中断和定时器中断,实验 过程中成功实现了外部按键中断和定时器中断,验证了单 片机的中断处理机制。
定时器中断实验

实验五定时器中断实验1.实验目的:学习8031内部计数器的使用和编程方法。
进一步掌握中断处理程序的编程方法。
2.实验要求:用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转.3.实验说明:(1)关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。
内部计数器在单片机中主要有定时器和计数器两个功能。
本实验使用的是定时器。
(2)定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。
TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。
TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
(3)内部计数器用作定时器时,是对机器周期计数。
每个机器周期的长度是12个振荡器周期。
因为实验系统的晶振是6MHZ,本程序工作于方式2,即8位自动重装方式定时器, 定时器100us中断一次, 所以定时常数的设置可按以下方法计算:机器周期=12÷6MHZ=2uS (256-定时常数)×2uS=100us定时常数=206. 然后对100us中断次数计数10000次,就是1秒钟.(4)在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
4.实验器材:(1)G2100 实验平台 1 台(2)LabMON51 仿真器 1 台(3)计算机 1 台(4)实验连线若干5.实验电路:6.程序框图:7.实验步骤:(1)连接相关连线。
(2)编写程序并调试。
代码如下:org 0000hljmp mainorg 000bhljmp interorg 0100hmain: mov tmod,#02hmov th1,#0cehmov tl1,#0cehsetb easetb et0setb tr0sjmp $inter:djnz r6,nextdjnz r7,nextmov r6,#10hmov r7,#10hcpl p1.0 next: retiend结果:。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验五8051单片机定时中断实验
一实验目的:
了解8051系列单片机的定时中断基本工作原理。
掌握8051系列单片机定时中断的用法。
二实验原理:
在上一个实验里我们介绍了8051单片机的外中断应用,本实验要介绍的是定时器中断的应用。
8051系列单片机至少有两个16位的内部定时器/计数器,既可以编程为定时器使用,也可以作为计数器使用。
如果是计数内部晶振驱动时钟,它是定时器,如果是计数8051的输入管脚的信号,就是计数器。
MCS-51单片机内部的定时/计数器的结构如图5-1所示,定时器T0特性功能寄存器TL0(低8位)和TH0(高8位)构成,定时器T1由特性功能寄存器TL1(低8位)和TH1(高8位)构成。
特殊功能寄存器TMOD控制定时寄存器的工作方式,TCON则用于控制定时器T0和T1的启动和停止计数,同时管理定时器T0和T1的溢出标志等。
程序开始时需对TL0、TH0、TL1和TH1进行初始化编程,以定义它们的工作方式和控制T0和T1的计数。
图5-1
TMOD特殊功能寄存器的格式参见下表(表5-1):
表5-1
高4位为定时器/计数器1的控制字,低4位为定时器/计数器0的控制字。
其中GATE
为门控信号,C/T为定时器或计数器的选择,而M1,M0是工作方式选择位。
当M1M0=00时,T/C工作在方式0。
方式0为13位的T/C,其计数器由TH的8位和TL的5
位构成,计数器的计数值范围是: 1—8192(213),但是启动前可以预置计数初值。
当C/T为
0时,T/C为定时器,计数脉冲为振荡源12分频的信号;当C/T为1时,T/C为计数器,对输入端T0或T1输入的脉冲进行计数。
计数脉冲加到计数器上与否决定于启动信号。
当GATE=0时,TR=1时T/C便启动,当GATE=1时,启动受到TR与INT的双重控制,即二者同时为高
时才启动。
当计数满时,TH向高位进位,这时中断溢出标志TF置1,即产生中断请求。
而当CPU转向中断服务程序时,TF自动清零。
当M1M0=01时,T/C工作在方式1。
方式1和方式0的区别仅在于方式0的计数器位数为13位,而方式1的为16位。
当M1M0=10时,T/C工作在方式2。
区别于前面的两种工作方式的是,方式2具有自动重装载的功能。
TH和TL作为两个8位的计数器,TH中的8位初值始终保持不变,由TL进行8位计数。
在计数溢出时不但会产生中断请求,而且自动将TH中的值加载至TL 中,即自动重装载。
当M1M0=11时,T/C工作在方式3。
但是这种工作方式只存在于T/C0中,这时TH0与TL0成为两个独立的计数器。
只有在T/C1作为串行口的波特率发生器使用,而造成定时器不够用时,T/C0才能工作在方式3。
下面是定时器时间常数计算公式,这个公式在方式1,即16 位定时或计数模式可用。
THX=(65536-定时时长[µS]/(机器周期数/时钟频率[MHz])/256;
TLX=(65536-定时时长[µS]/(机器周期数/时钟频率[MHz])%256;
在定时器重装载过程中因为TL1=0可以不写。
三实验内容:
利用中断方式在LED上输出10HZ方波,系统晶体频率11.059MHz。
四实验电路图:
图5-2
五实验方法:
1.根据如上电路图连接好实验电路。
实验板中只要将P1.3与LED1相连。
2.按照实验要求编写实验程序,建立新工程,保存为TINT。
3.调试程序。
4.将keilC51产生的tint.hex文件通过在线下载ISP或商用编程器。
六参考程序:
1.汇编源程序
ORG 0000H
LJMP MAIN
ORG 001Bh ;定时1中断服务入口地址
LJMP TMR1_INT_SRV
MAIN: LCALL INIT_TMR1
LCALL INIT_TMR1INT
AGAIN: SJMP AGAIN
TMR1_INT_SRV: MOV TH1,#0x4C ;中断服务子程序
CPL P1.3
RETI
INIT_TMR1INT: SETB ET1 ;定时中断初始化
SETB EA ;开中断
RET
INIT_TMR1: MOV TMOD,#0x11 ;初始化定时器
MOV TH1,#0x4C
CLR A
MOV TL1,A
SETB TR1
RET
END
2.C语言源程序
/********************************************************
文件名:tint.c
*描述:方波输出
********************************************************/ #include <reg51.h>
sbit LED= P1^3;
/********************************************************
* 描述:定时中断设置子程序
* 输入:无
* 返回:无
********************************************************/ void INIT_TMR1(void)
{
TMOD=0x11;
TH1=0x4C; // (65536-50000uS/(12cyc/11.0592MHz))/256
TL1=0; // (65536-50000uS/(12cyc/11.0592MHz))%256
TR1=1;
}
/**************************************************
* 描述:定时器 1 开中断程序
* 输入:无
* 返回:无
**************************************************/
void INIT_TMR1INT(void)
{
ET1=1;
EA=1;
}
/**************************************************
* 描述:中断服务子程序,输出方波
* 输入:无
* 返回:无
**************************************************/
void TMR1_INT_SRV(void) interrupt 3
{
TH1=0x4C;
LED=~LED;
}
void main(void)
{
INIT_TMR1();
INIT_TMR1INT();
while(1){}
}
思考题:
请查阅8051的数据手册,请把定时器设置成13位完成本实验的功能。