外部中断控制数码管的启停

合集下载

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附C语言程序)

单片机外部中断实验(附c程序)一、实验目的掌握外部中断的C语言和汇编语言编程方法,会用外部中断解决实际应用问题。

二、实验内容8051C51单片机P2.0接一个发光二极管LED1、P2.1接一个发光二极管LED2,P3.2接一个开关、P3.3接一个开关要求实现以下功能:(1)合上、P3.3断开时LED1闪烁(2)P3.2断开、P3.3合上时LED2闪烁(3)P3.2合上后(不断开)再合上P3.3,LED1闪烁LED2不闪烁(4)P3.3合上后(不断开)再合上P3.2,LED2不闪烁LED1闪烁试编写C语言和汇编语言程序使用自然优先级就可以也可 XO 高级X1低级PX0=1 PX1=0四、实验电路五、参考程序(自己完成)C程序:Include<reg52.h>Sbit P2_0=P2^0;Sbit P2_1=P2^1;Sbit P3_2=P3^2;Sbit P3_3=P3^3;void delay02s(void) //延时0.2秒子程序{unsigned char i,j,k;for(i=20;i>0;i--)for(j=20;j>0;j--)for(k=248;k>0;k--);}Void main{EA=1;EX0=1;EX1=1;ITO=1;IT1=1;PX0=1;PX1=0;While(1);}Void int0(void) interrupt 0 { if(!P3_2){While(1){P2_0=1;delay02s();P2_0=0;delay02s();}}}Void int1(void) interrupt 2 { if(!P3_3){While(1){P2_1=1;delay02s();P2_1=0;delay02s();}}}。

单片机实验——利用中断控制LED

单片机实验——利用中断控制LED

单片机实验——利用中断控制LED本实验利用中断控制单片机的GPIO口控制LED的亮灭,达到了在不同的时间间隔下实现LED的闪烁、呼吸等效果。

本实验可以让初学者更好地理解与掌握单片机的中断和GPIO 控制。

一、实验器材准备1. STC12C5A16S2单片机开发板2. LED灯3. 1KΩ电阻4. 杜邦线二、实验原理本实验中,我们需要利用单片机的GPIO口控制LED灯的亮灭。

其中,单片机的GPIO 口需要设置为输出模式,即控制LED灯亮灭的电平。

在运行中,通过改变电平状态来控制LED的亮灭。

而中断控制则是为了实现不同的效果,比如在不同的时间间隔下闪烁、呼吸等。

中断是指硬件或软件的外部事件,它会打断当前正在执行的程序,转为执行中断程序。

在单片机编程中,我们可以采取中断方式实现不同的操作。

三、实验步骤1. 首先,连接电路。

将LED作为单片机GPIO控制的输出口,同时连接一个1KΩ的电阻,如下图:2. 打开Keil软件,新建工程,导入STC12C5A16S2头文件。

3. 在代码中,首先需要定义GPIO的引脚,接下来进行中断初始化设置。

4. 编写闪烁程序,实现LED在不同时间间隔下闪烁,如下:```cvoid Led_Flash(void){Led_ON(); //LED灯亮Delay(500); //延时等待500msLed_OFF(); //LED灯灭Delay(500); //延时等待500ms}```5. 编写呼吸程序,实现LED在不同时间间隔下进行呼吸灯效果。

```cvoid Led_Breath(void){uint8 i;uint16 j;for (i = 0; i < 10; i++) //变量i控制灯的亮度{for (j = 0; j < 2000; j++) //变量j控制每次延时等待的时间{Led_ON();Delay_us(i * 20);Led_OFF();Delay_us((9 - i) * 20);}}}```6. 编写中断控制程序,通过定时器中断来实现LED的不同效果。

单片机实验-外部中断、计数器定时器

单片机实验-外部中断、计数器定时器

1)用单次脉冲申请中断INT0,在中断处理程序中对输出信号进行反转。

ORG 0000HLJMP STARTORG 0003HLJMP INT0START:CLR P1.0MOV TCON, #01HMOV IE, #81HLJMP $INT0:PUSH PSWCPL P1.0POP PSWRETIEND结果:按一下单脉冲小灯亮,再按一下,小灯灭接线:INT0接单脉冲P1.0接个小灯2)用单次脉冲申请中断INT1,在中断处理程序中实现8个小灯左移点亮1次。

ORG 0000HLJMP STARTORG 0013HLJMP INT1START:MOV TCON,#04HMOV IE,#84HCLR PX1MOV A,#01HSJMP $INT1:MOV R1,#8LOOP:MOV P1,ALCALL DELAYRL ADJNZ R1,LOOPRETIDELAY:MOV R6,#200DELAY1:MOV R7,#125DELAY2:DJNZ R7,DELAY2DJNZ R6,DELAY1RETEND结果:按一下单脉冲,8个小灯左移点亮一次接线:INT1接单脉冲P1口接8个小灯3)将8051计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行单脉冲计数,并将其数值按二进制在P1口驱动LED灯上显示出来。

ORG 0000HSTART:MOV TMOD,#05HMOV TH0,#0MOV TL0,#0SETB TR0LOOP:MOV P1,TL0LJMP LOOPEND结果:P1口与四个小灯相连,按单脉冲的次数在四个小灯上显示接线:(P3.4)T0接单脉冲P1.0到P1.4接4个小灯4)用CPU内部定时器T0中断方式计时,实现每1秒钟输出状态发生一次反转。

ORG 0000HLJMP STARTORG 000BHLJMP INTSTART: MOV TMOD,#01HMOV B,#0AH;即10,设循环次数10次。

单片机中的中断与定时器的原理与应用

单片机中的中断与定时器的原理与应用

单片机中的中断与定时器的原理与应用在单片机(Microcontroller)中,中断(Interrupt)和定时器(Timer)是重要的功能模块,广泛应用于各种嵌入式系统和电子设备中。

本文将介绍中断和定时器的基本原理,并探讨它们在单片机中的应用。

一、中断的原理与应用中断是指在程序执行过程中,当发生某个特定事件时,暂停当前任务的执行,转而执行与该事件相关的任务。

这样可以提高系统的响应能力和实时性。

单片机中的中断通常有外部中断和定时中断两种类型。

1. 外部中断外部中断是通过外部触发器(如按钮、传感器等)来触发的中断事件。

当外部触发器发生状态变化时,单片机会响应中断请求,并执行相应的中断服务程序。

外部中断通常用于处理实时性要求较高的事件,如按键检测、紧急报警等。

2. 定时中断定时中断是通过定时器来触发的中断事件。

定时器是一种特殊的计时设备,可以按照设定的时间周期产生中断信号。

当定时器倒计时完成时,单片机会响应中断请求,并执行相应的中断服务程序。

定时中断常用于处理需要精确计时和时序控制的任务,如脉冲计数、PWM波形生成等。

中断的应用具体取决于具体的工程需求,例如在电梯控制系统中,可以使用外部中断来响应紧急停车按钮;在家电控制系统中,可以利用定时中断来实现定时开关机功能。

二、定时器的原理与应用定时器是单片机中的一个重要模块,可以用于计时、延时、频率测量等多种应用。

下面将介绍定时器的工作原理和几种常见的应用场景。

1. 定时器的工作原理定时器是通过内部时钟源来进行计时的。

它通常由一个计数器和若干个控制寄存器组成。

计数器可以递增或递减,当计数值达到设定值时,会产生中断信号或触发其他相关操作。

2. 延时应用延时是定时器最常见的应用之一。

通过设定一个合适的计时器参数,实现程序的精确延时。

例如,在蜂鸣器控制中,可以使用定时器来生成特定频率和持续时间的方波信号,从而产生不同的声音效果。

3. 频率测量应用定时器还可以用于频率测量。

汇编外部中断及NE555计数实验实验报告

汇编外部中断及NE555计数实验实验报告

外部中断及NE555计数实验11103070315 李青【实验内容】1、利用外部按键中断计数并用数码管显示计数值2、用51单片机T0、T1定时计数器对NE555产生的脉冲信号进行频率计数,频率送LCD显示(或数码管显示)【需要了解的知识】1、GPIO设定2、LCD显示原理,输入与输出及其原理3、定时计数器工作原理及频率测量4、NE555工作原理【实验预习】预读实验指导电子文档的实验十六、七及其前面的实验流程【实验设备】Keil C51软件、ICE52 仿真驱动、MEFlash编程软件、USB驱动程序【实验过程】实验一外部中断实验任务:利用单片机的外部中断功能进行计数,然后将计数值输出到数码管上显示。

K5键—计数值加1(外部中断0)K6键—计数值加1(外部中断1)3位数码管显示,最大计数值255实验步骤:1)首先在硬盘上建立一个文件夹;2)启动Keil C51软件;3)执行Keil C51软件的菜单“Project|New Project……”,弹出一个名为“Create New Project”的对话框。

输入工程文件名,选择保存路径uv2后缀,点击“保存”按钮;4)紧接着弹出“Options for Target‘Target 1’”,为刚才的项目选择ATMEL 的AT89S52的CPU。

选择之后,点击“确定”按钮;5)接下来弹出一个对话框提示你是否要把标准8051的启动代码添加项目中去,此时,点击“否”按钮;6)执行菜单“File|New……”,出现一个名为“Text1”的文档。

接着执行菜单“File|Save”弹出一个名为“Save As”的对话框,将文件名改为“.asm”后缀,然后保存;7)添加源程序文件到工程中,一个空的源程序文件建成。

单击Keil C51软件左边项目工作窗口“Target1”上的“+”,将其展开。

然后右击“Source Group1”文件夹弹出下拉菜单,单击其中的“Add Files to Group‘Source Group1’”项;8)在弹出的对话框中先选择文件类型为“Asm Source file (*.s*;*.src;*.a*)”,这时对话框内创建的空的源程序文件已经出现在项目工作窗口的“Source Group1”文件夹中;输入源程序代码;9)点击工具栏“Options for target”按钮,弹出一个对话框,定义“Xtal”为11.0592.下面依序是存储模式、程序空间大小等设置,均用默认值即可。

外部中断:实现LED灯的亮和灭

外部中断:实现LED灯的亮和灭

外部中断:实现LED灯的亮和灭实验:按⼀下独⽴按键,灯亮,再按⼀次,灯灭之前做过的独⽴按键实验也能实现这个功能,但是会占⽤很多CPU资源,不是好的⽅法,这⾥使⽤外部中断来实现⽐较合适效果和独⽴按键实验⼀样1. 下降沿⽅式触发:外部中断01234 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42#include <reg52.h>#define u16 unsigned int#define u8 unsigned charsbit LED1 = P2^0; // 要点亮的LED灯sbit k3 = P3^2; // 控制LED灯的独⽴按键// 延迟函数,延迟10usvoid delay(u16 time){while(time--);}// 中断条件void int0Init(){EA = 1; // 中断总允许位EX0 = 1; // 外部中断0允许位// 中断标志:边沿触发⽅式(下降沿有效),因为独⽴按键常态下是断开的,处于⾼电平,按下按键后为低电平 IT0 = 1;}// 主函数void main(){// 中断初始化int0Init();// 中断函数while(1);}// 中断函数void int0() interrupt 0{// 消抖,延迟10msdelay(1000);if(k3 == 0) // 按下k3按键{LED1 = ~LED1; // LED灯切换状态}}1. 下降沿⽅式触发:外部中断1 1234 5 6 7 8 9 10 11 12 13#include <reg52.h>#define u16 unsigned int#define u8 unsigned charsbit LED1 = P2^0; // 要点亮的LED灯sbit k4 = P3^3; // 控制LED灯的独⽴按键// 延迟函数,延迟10usvoid delay(u16 time){13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42{while(time--);}// 中断条件void int1Init(){EA = 1; // 中断总允许位EX1 = 1; // 外部中断1允许位// 中断标志:边沿触发⽅式(下降沿有效),因为独⽴按键常态下是断开的,处于⾼电平,按下按键后为低电平 IT1 = 1;}// 主函数void main(){// 中断初始化int1Init();// 中断函数while(1);}// 中断函数void int1() interrupt 2{// 消抖,延迟10msdelay(1000);if(k4 == 0) // 按下k3按键{LED1 = ~LED1; // LED灯切换状态}}以上是外部中断0和外部中断1的实验,可以⽤外部中断0和外部中断1控制同⼀盏灯,模拟两个开关控制同⼀盏灯,按下⼀个开关,灯亮,去按下另外⼀个开关,灯灭。

单片机实验报告四 外部中断实验

单片机实验报告四 外部中断实验

南昌大学实验报告学生姓名:学号:专业班级:实验类型:⃞验证⃞综合⃞设计⃞创新实验日期:2019. 4.30 实验成绩:实验四外部中断实验(一)实验目的1.掌握单片机外部中断原理;2.掌握数码管动态显示原理。

(二)设计要求1.使用外部中断0和外部中断1;2.在动态数码管上显示中断0次数,中断1用作次数清0,数码管采用74HC595驱动。

(三)实验原理1.中断:计算机执行主程序过程中,由于临时重要事件,需要暂停当前程序的运行,转到中断服务程序去处理临时事件,处理完后又返回原程序的断点处继续运行。

图1STC15单片机的中断系统包含21个中断源,2个中断优先级,二级中断服务嵌套,中断允许寄存器IE、IE2和INT_CLKO控制中断允许。

中断优先级寄存器IP、IP2管理中断优先级。

同优先级中断同时提出中断请求时,由内部的查询逻辑确定响应次序。

中断请求源中的外部中断0(INT0)和外部中断1(INT1)详述如下:1)外部中断0(INT0):中断信号由P3.2引脚输入。

通过IT0来设置中断请求的触发方式。

当IT0为“1”时,外部中断0为下降沿触发;当IT0为“0”时,无论是上升沿还是下降沿,都会引发外部中断0.一旦输入信号有效,则置位IE0标志,向CPU申请终端。

2)外部中断1(INT1):中断信号由P3.3引脚输入。

通过IT1来设置中断请求的触发方式。

当IT1为“1”时,外部中断0为下降沿触发;当IT1为“0”时,无论是上升沿还是下降沿,都会引发外部中断0.一旦输入信号有效,则置位IE0标志,向CPU申请终端。

2.LED数码管是显示数字和字母的常见显示器件,由8个发光二极管构成,结构如图2:图2段码:a、b、c、d、e、f、g、dp段的二进制代码(a为最低位),控制显示字型。

位选:公共端com,控制数码管是否显示。

3.数码管动态显示原理:任何时刻只有一个数码管处于显示状态,单片机采用“扫描”方式控制各个数码管轮流显示,通常将所有数码管段码线的相应段并联在一起,由一个8位I/O 端口控制。

单片机外部中断详解及程序

单片机外部中断详解及程序

单片机外部中断详解及程序单片机在自主运行的时候一般是在执行一个死循环程序,在没有外界干扰(输入信号)的时候它基本处于一个封闭状态。

比如一个电子时钟,它会按时、分、秒的规律来自主运行并通过输出设备(如液晶显示屏)把时间显示出来。

在不需要对它进行调校的时候它不需要外部干预,自主封闭地运行。

如果这个时钟足够准确而又不掉电的话,它可能一直处于这种封闭运行状态。

但事情往往不会如此简单,在时钟刚刚上电、或时钟需要重新校准、甚至时钟被带到了不同的时区的时候,就需要重新调校时钟,这时就要求时钟就必须具有调校功能。

因此单片机系统往往又不会是一个单纯的封闭系统,它有些时候恰恰需要外部的干预,这也就是外部中断产生的根本原由。

实际上在第二个示例演示中,就已经举过有按键输入的例子了,只不过当时使用的方法并不是外部中断,而是用程序查询的方式。

下面就用外部中断的方法来改写一下第二个示例中,通过按键来更改闪烁速度的例子(第二个例子)。

电路结构和接线不变,仅把程序改为下面的形式。

#include ;unsigned int t=500; //定义一个全局变量t,并设定初始值为500次//===========延时子函数,在8MHz晶振时约1ms=============void delay_ms(unsigned int k){unsigned int i,j;for(i=0;i<k;i++){for(j=0;j<1140;j++);}}//============主函数==================================void main( void ){DDRB = 0xFF; //设置端口B为输出方向PORTB = 0xFF; //设置端口B的输出为全高电平DDRD = 0x00; //设置端口D为输入方向PORTD = 0xFF; //设定端口D为内部上拉方式,无信号输入时处于高电平状态MCUCR = 0x0A; //设定INT0、INT1为下降沿触发GICR = 0xC0; //使能INT0、INT1中断SREG = 0x80; //使能总中断while(1){PORTB = 0x55; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个msPORTB = 0xAA; //让接在端口B上的LED显示01010101 delay_ms(t); //延时t个ms}}//============中断函数(外部0)==========================#pragma vector = INT0_vect__interrupt void INT0_Server(void){t = 100; //设定t的值为100次}//============中断函数(外部1)==========================#pragma vector = INT1_vect__interrupt void INT1_Server(void){t = 500; //设定t的值为500次}把上述程序进行编译并下载到单片机中,可以看到结果与第二个示例中的完全一致。

51单片机中断程序例子

51单片机中断程序例子

51单片机中断程序例子1. 外部中断程序:外部中断是指由外部设备或外部信号触发的中断。

在51单片机中,通过设置中断允许位和中断优先级来实现对外部中断的响应。

例如,当外部设备发出一个信号时,单片机可以立即停止当前任务,转而执行外部中断程序。

外部中断程序的编写需要根据具体的外部设备和信号进行相应的处理,如读取设备状态、处理数据等。

通过外部中断程序,可以实现单片机与外部设备的互动和数据交换。

2. 定时器中断程序:定时器中断是指通过设置定时器的计数值和中断允许位,使得在指定的时间间隔内触发中断。

在51单片机中,可以通过定时器中断来实现定时任务的执行。

例如,可以设置一个定时器,在每隔一定的时间就触发中断,然后在中断程序中执行相应的任务,如数据采集、数据处理等。

通过定时器中断程序,可以实现定时任务的自动执行,提高系统的实时性和可靠性。

3.串口中断程序:串口中断是指通过串口通信接口接收或发送数据时触发的中断。

在51单片机中,可以通过设置串口中断允许位和中断优先级来实现对串口数据的中断处理。

例如,当接收到一个完整的数据包时,单片机可以立即停止当前任务,转而执行串口中断程序,对接收到的数据进行处理。

通过串口中断程序,可以实现单片机与外部设备的数据交换和通信。

4. ADC中断程序:ADC(模数转换器)中断是指在进行模数转换时触发的中断。

在51单片机中,可以通过设置ADC中断允许位和中断优先级来实现对模数转换结果的中断处理。

例如,当模数转换完成后,单片机可以立即停止当前任务,转而执行ADC中断程序,对转换结果进行处理和分析。

通过ADC中断程序,可以实现对模拟信号的采集和处理,用于实时监测和控制。

5. 外部中断优先级设置:在51单片机中,可以通过设置外部中断的中断优先级来确定中断的响应顺序。

中断优先级越高,优先级越高的中断会先被响应。

通过合理设置中断优先级,可以确保关键任务的及时响应和执行。

例如,当多个外部设备同时发出中断信号时,可以通过设置优先级,确保先响应优先级高的设备,保证系统的正常运行。

实验四led灯和数码显示器的中断控制

实验四led灯和数码显示器的中断控制

实验四LED灯和数码显示器的中断控制一、实验目的:掌握外部中断的工作原理,熟悉中断编程及Keil平台软件调试方法。

二、实验原理:实验电路如图A.53所示。

K1和K2分别接于端口P3.2和P3.3,按压后的电平负跳变可分别产生INT0中断请求和INT1中断请求。

INT0中断响应后取端口P0.4电平,使指示灯D1的状态反转,INT1中断响应后使计数值增1并送给数码管LED显示。

电路原理图及中断原理分析:按键K1接外部中断0,K2接外部中断1。

P0.4接指示灯D1,P2口接数码管,每按一次K1键电平产生负跳变,INT0中断响应后取端口P0.4电平,D1的状态反转;每按一次K2键产生负跳变,INT1中断响应使计数值增1并使数码管显示该数值,变化范围为0~F。

三、实验步骤:(1)、按照表A.5所示将元件添加到Proteus ISIS对象选择列表中,并仿照图A.53完成电路原理图绘制。

(2)、在Keil中编写C51程序,并使之编译通过。

(3)、在Keil中加载编译后的可执行文件,并控制Proteus中的程序仿真运行。

Category Reference Value Microprocessor ICs U1 80C51Optoelectromics D1 LED-GREENSwitches&Relays K1~K2 BUTTONResistors R1~R2/100 RES Optoelectronics LED 7SEG-COM-CAT-GRN四、实验要求:(1)、主函数在程序初始化完成后进入原地循环状态,等待中断请求。

(2)、两路外部中断均设为下降沿触发方式,且为自然优先级。

(3)、计数变量初值为0,变化范围为0~F。

(4)、实验报告内容包括:电路原理图及分析、中断原理分析,C51源程序(含注释语句),仿真运行截屏图,实验小结。

五、C51源程序如下:#include< reg51.h>char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};char flag;sbit p0_4= P0^4;void delay(unsigned int time){unsigned int j =0;for(;time>0;time--)for(j=0;j<125;j++);}int0_key () interrupt 0{p0_4=!p0_4;}int1_key () interrupt 2{delay(200);P2=led_mod[flag%16];delay(200);flag++;}void main(void) {flag=0;IT0= 1;EX0= 1;EX1= 1;EA= 1;while(1);}六、试验结果:(1)开始运行时如下图:(2)、按键后运行图如下:实验结果分析:由运行结果可以看出,按键K1产生外部中断0控制D1的状态,使指示灯D1由亮到暗一次变化;按键K2产生外部中断1使LED显示0~F不同数值。

指示灯、数码管的中断控制实验报告

指示灯、数码管的中断控制实验报告

指示灯、数码管的中断控制实验报告
本次实验是通过中断控制指示灯和数码管的显示。

我们使用了STC89C52单片机来进行控制实验。

首先,我们定义了两个常量。

一个是DELAY,用于控制指示灯闪烁的速度;另一个是DELAY2,用于控制数码管显示的速度。

由于数码管的刷新速度要比指示灯快,所以我们设置了一个较小的DELAY2值。

在主函数中,我们对单片机进行了初始化,并开启了中断。

然后,我们通过一个while循环不断循环执行,等待中断的触发。

在中断处理函数中,我们利用了定时器来控制指示灯的闪烁,当计数器的值等于DELAY时,就切换指示灯的状态。

通过这种方式,我们可以让指示灯不断地交替闪烁。

对于数码管的中断控制,我们使用了另一个定时器。

每隔一段时间,就会调用中断处理函数,更新数码管的显示内容。

在这个函数中,我们定义了一个数码管显示表,通过循环周期地改变显示的内容,从而实现了数码管数字的滚动显示。

在实验过程中,我们还需要注意一些问题。

首先是定时器的设置,不仅要考虑到闪烁和滚动的速度,还要注意计数器的初始值和中断的开启。

另外,由于中断会频繁地跳入中断处理函数,我们需要尽量减少中断函数的执行时间,避免影响程序的运行。

通过这一次实验,我们掌握了中断控制指示灯和数码管的方法,对单片机的应用有了更深入的了解。

在今后的学习和开发中,这些基础知识将会起到重要的作用。

51单片机中断代码解释

51单片机中断代码解释

51单片机中断代码解释一、引言51单片机是一种广泛使用的微控制器,具有丰富的中断功能。

中断是单片机在执行程序过程中,由于某种原因需要暂停当前的任务,转而处理更为紧急的事件。

处理完该事件后,再返回到之前被中断的程序继续执行。

本文将对51单片机的中断代码进行详细解释,包括中断概念、中断源、中断寄存器和寄存器功能与赋值说明等方面。

二、中断概念中断是一种计算机系统中处理优先级更高任务的方式。

当某个事件发生时,CPU会暂时停止当前任务的执行,转而处理该事件。

处理完该事件后,CPU会返回到之前被中断的程序继续执行。

三、中断源51单片机有多种中断源,包括外部中断0、外部中断1、定时器0、定时器1等。

每个中断源都可以独立地开启或关闭,并且可以设置优先级。

四、中断寄存器51单片机与中断相关的寄存器主要有:1.ICON(中断允许控制寄存器):用于控制中断的开启和关闭。

可以通过设置ICON寄存器的相关位来启用或禁用某个中断。

2.INT0/INT1(外部中断0/1控制寄存器):用于控制外部中断0和外部中断1的触发方式、触发边沿和触发方式等。

3.TMOD(定时器模式控制寄存器):用于设置定时器的模式和工作方式。

4.TH0/TH1(定时器0/1计数器高8位寄存器):用于存储定时器的计数值。

5.TL0/TL1(定时器0/1计数器低8位寄存器):用于存储定时器的计数值。

五、寄存器功能与赋值说明1.ICON寄存器:o EA:全局中断允许位,设置为1时允许所有中断,设置为0时禁止所有中断。

o ET0:定时器0中断允许位,设置为1时允许定时器0中断,设置为0时禁止定时器0中断。

o ET1:定时器1中断允许位,设置为1时允许定时器1中断,设置为0时禁止定时器1中断。

o EX0:外部中断0允许位,设置为1时允许外部中断0,设置为0时禁止外部中断0。

o EX1:外部中断1允许位,设置为1时允许外部中断1,设置为0时禁止外部中断1。

2.INT0/INT1寄存器:o IT0/IT1:外部中断0/1触发方式选择位,设置为0时选择下降沿触发,设置为1时选择低电平触发。

单片机实验报告二-数码管显示实验

单片机实验报告二-数码管显示实验

单片机实验报告二-数码管显示实验摘要:本实验使用单片机控制数码管的显示,在实验过程中通过学习单片机的GPIO口的编程,调试程序、调节电路来达到正确的显示效果。

最终按照要求实现了单片机控制数码管的计数器。

关键词:单片机、数码管、GPIO口、计数器一、实验介绍数码管是一种介于机械仪表和液晶显示器之间的电子显示器件,广泛应用于计时器、计数器、仪表等电子产品中。

本实验旨在通过单片机控制数码管的显示来加深对GPIO口的使用和调试程序的理解,同时了解数码管的原理。

本实验主要分为两部分:数码管显示基础实验和数码管控制开关实验。

通过这两部分的实验可以了解数码管的工作原理和单片机的基本控制方式。

二、实验原理2.1 数码管的基本原理数码管显示器将数字显示为一组符号,例如“0”到“9”。

表示不同数字的符号被编码成一个数字码。

七段数码管用一个七段数码字母来表示数字,如下表所示:| 数字 | a | b | c | d | e | f | g || ---- | - | - | - | - | - | - | - || 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 || 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 || 2 | 1 | 1 | 0 | 1 | 1 | 0 | 1 || 3 | 1 | 1 | 1 | 1 | 0 | 0 | 1 || 4 | 0 | 1 | 1 | 0 | 0 | 1 | 1 || 5 | 1 | 0 | 1 | 1 | 0 | 1 | 1 || 6 | 0 | 0 | 1 | 1 | 1 | 1 | 1 || 7 | 1 | 1 | 1 | 0 | 0 | 0 | 0 || 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 || 9 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |通过控制数码管的七个LED灯的亮灭,可以实现不同符号显示。

实验4.指示灯 数码管的中断控制

实验4.指示灯 数码管的中断控制

实验4.指示灯/数码管的中断控制【实验目的】掌握外部中断原理,学习中断编程与程序调试方法。

【实验原理】实验电路原理图如图A.53所示,图中按键K1和K2分别接于P3.2和P3.3,发光二极管D1接于P0.4,共阴极数码管LED1接于P2口。

时钟电路、复位电路、片选电路忽略。

图A.53 实验的电路原理图在编程软件配合下,要求实现如下功能:程序启动后,D1处于熄灯、LED1处于黑屏状态;单击K1,可使D1亮灯状态反转一次;单击K2,可使LED1显示值加1,并按十六进制数显示,达到F后重新从1开始。

软件编程原理为:K1和K2的按键动作分别作为INT0和INT1的中断请求,在中断函数中进行指示灯与数码管的信息处理。

初始化后,主函数处于无限循环状态,等待中断请求。

【实验内容】(1)熟悉μVision3的软件调试方法;(2)完成C51语言编程;(3)练习μVision3与ISIS的联机仿真方法。

【实验步骤】(1)提前阅读与实验4相关的阅读材料;(2)参考图A.53;和表A.5,在ISIS中完成原理图的绘制;(3)在KeilμVision3中编写和编译C51程序,并生成可执行文件;(4)在μVision3中启动ISIS的仿真运行,并进行联机调试。

【实验要求】提交实验报告并包括如下内容:电路原理图、C51源程序(含注释语句)、软件调试分析、仿真运行截图及实验小结。

【参考图表】【实验程序】/*指示灯、数码管的中断控制程序*/#include <reg51.h>sbit P0_4 = P0^4;unsigned char i = 0; //数码管计数初始值0unsigned char duanma[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0-F的数码管段码void main(){ P2 = 0x00; //开机数码管黑屏P0_4 = 1; //开机LED灯灭EA = 1; //总中断允许EX1 = EX0 = 1; //INT0、INT1允许IT1 = IT0 = 1; //脉冲触发while(1);}void INT_0SVR() interrupt 0 //INT0中断函数{ P0_4 = !P0_4; //将P0_4非赋值给P0_4}void INT_1SVR() interrupt 2 //INT1中断函数{ i++; //数码管计数加一if(i==16) //当数码管计数达到16时回归1i = 1;P2 = duanma[i]; //将段码赋值给P2}【仿真截图】略【实验小结】通过实验对Protues有了更多的了解,同时了解到中断系统在实际中的更好应用。

06 外部中断控制数码管的启停

06 外部中断控制数码管的启停
பைடு நூலகம்
void delay10ms(); //10ms延时函数说明
void int0(void)interrupt 0//外中断0中断服务程序 {
delay10ms(); //调用10ms延时函数 if(P3_2==0) //确认按键按下 { flag=~flag; //启停标志取反 } while(P3_2==1); //等待按键松开
}
注意: 1、函数说明应写在程序开头。 2、需要包含头文件。 若头文件用reg51.h,P3_2需要自行定 义;若头文件用at89x51.h,P3_2无需 定义。
void delay() //定义延时函数 { unsigned int i; for(i=0;i<30000;i++); } void delay10ms() //定义10ms延时函数 { uchar i,j; for(i=20;i>0;i--) //执行1次"i=20",20次"i>0"、"i--" for(j=250;j>0;j--); //执行20次"j=250",20×250次"j>0"、"j--"
任务二 按键变数
子任务一 用外部中断控制数码管的启停
一、任务分析
利用单片机外部中断0和一个按键来控制数码
管显示的启停。
二、硬件电路
三、程序设计
主程序完成中断初始化、数码管静态显示控
制工作。 中断函数实现显示启停切换。每次产生外部 中断0,显示启停切换一次。
void delay(); //延时函数说明 uchar Table_yin[10]={0x3f,0x06,0x5b, 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; char shu=0; //外部变量,数码管显示数值 bit flag=1; //外部变量,启停控制位,1时启动显示 void main( ) //主函数 { IT0=1; //外中断0下降沿触发 EA=1; //开总中断 EX0=1; //外中断0允许 while(1) // 无限循环 { while(flag) { P0=Table_yin[shu]; //P2口输出十位数的字型编码 delay(); //调用延时函数 shu++; //显示值加1 if(shu>9)shu=0; //显示值过大,清0 } } }

单片机外部中断技术原理及应用案例

单片机外部中断技术原理及应用案例

单片机外部中断技术原理及应用案例单片机是一种微型电脑,它集成了处理器、内存和输入输出接口等功能,广泛应用于各种电子设备中。

在单片机的应用过程中,外部中断技术起到了重要的作用。

本文将介绍单片机外部中断技术的原理,以及一些应用案例。

一、单片机外部中断技术原理单片机外部中断技术是通过对外部信号的检测和响应,实现单片机与外设之间的交互。

当外部信号满足特定条件时,单片机将进入中断服务程序,执行相应的操作。

单片机外部中断主要包括中断源、中断触发方式和中断向量表等几个关键要素。

1. 中断源:中断源是指引起中断的外部信号。

常见的中断源有外部按键、传感器信号等。

当外部信号满足特定条件时,会触发中断信号,从而引起单片机进入中断状态。

2. 中断触发方式:中断触发方式主要有两种,即电平触发和边沿触发。

- 电平触发:当外部信号保持在高电平或低电平时,单片机将进入中断状态。

电平触发的稳定性较好,在噪声较多的环境中有较好的抗干扰能力。

- 边沿触发:当外部信号从低电平变为高电平(上升沿)或从高电平变为低电平(下降沿)时,单片机将进入中断状态。

边沿触发灵敏度较高,适合对信号变化较快的应用场景。

3. 中断向量表:中断向量表存储了每个中断源对应的中断服务程序的入口地址。

当中断发生时,单片机会自动根据中断源的编号在中断向量表中查找相应的入口地址,并跳转到该地址执行中断服务程序。

二、单片机外部中断应用案例为了更好地理解单片机外部中断技术的应用,下面将介绍两个常见的案例。

1. 按键中断:在很多电子设备中,我们经常会见到按键的应用。

通过单片机外部中断技术,可以实现对按键的检测和响应。

以一个简单的LED闪烁控制器为例,假设有一个按键连接到单片机的外部中断引脚上。

当按键按下时,外部中断触发,单片机进入中断状态,执行相应的中断服务程序。

在中断服务程序中,可以控制LED的闪烁频率或状态。

这种按键中断的应用案例在很多电子设备中常见,比如遥控器的按键控制、电子游戏手柄的按键检测等。

单片机数码管静态显示及定时器和中断应用

单片机数码管静态显示及定时器和中断应用

例 利用定时/计数器T1的方式1,产生10ms的定时,并使P1.0引脚上输出周期为20ms的方波,采用中断方式,设系统时钟频率为12 MHz。 解:1、计算计数初值X: 由于晶振为12 MHz,所以机器周期Tcy为1 s。 所以: N=t/ Tcy =10000/1=10000 X=65536-10000=55536=D8F0H 即应将D8H送入TH0中,F0H送入TL0中 2、求T1的方式控制字TMOD: M1M0=01,GATE=0,C/T=0,可取方式控制字为01H;
GATE:门控位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚或也为高电平时,才能启动定时/计数器工作。即此时定时器的启动多了一条件。 :定时/计数模式选择位。 =0为定时模式; =1为计数模式。 M1M0:工作方式设置位。定时/计数器有四种工作方式,由M1M0进行设置。
TF0(TCON.5),片内定时/计数器T0溢出中断请求标志。当定时/计数器T0发生溢出时,置位TF0,并向CPU申请中断。
TF1(TCON.7),片内定时/计数器T1溢出中断请求标志。当定时/计数器T1发生溢出时,置位TF1,并向CPU申请中断。
RI(SCON.0)或TI(SCON.1),串行口中断请求标志。当串行口接收完一帧串行数据时置位RI或当串行口发送完一帧串行数据时置位TI,向CPU申请中断。
使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。TX实验板用共阴LED显示器,根据电路连接图显示16进制数的编码已列在下表。

实验五_外部中断控制数码管显示实验

实验五_外部中断控制数码管显示实验

实验五、外部中断控制数码管显示实验一、实验目的(1)掌握80C51扩展显示、外部中断的硬件设计和编程方法。

二、实验内容按键每按下一次,数码管循环显示0-9字符。

三、实验接线图图4-1 独立按键电路图4-2 数码块显示电路图4-3 实验接线图1、程序流程图图2-4 主程序流程图 图2-5 中断服务程序流程图2、源程序#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit P32=P3^2;uchar led_c[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };void delay(uint N) //N=500,延时1s ;N=5,延时10ms{uint i;while(N--) for(i=0;i<100;i++) _nop_();}void int0_s(void) interrupt 0{ uchar i; P2=0xfe;for(i=0;i<10;i++){P0=led_c[i]; delay(500); P0=0xff;} }void main(void){ SP=0x40; P0=0xff;IT0=1; EA=1; EX0=1;while(1); }1、P0口接数码显示模块的P17,P2.0接数码显示模块的P16的Q4B,独立键盘模块的P12引脚之一接P3.2;2、用keil编辑、编译程序,生成hex文件;3、用STC-ISP软件下载hex文件;4、观察程序运行时数码块显示情况。

六、实验结果七、思考题1、调整接线,并修改程序,使接收到外部中断后数码管显示00-99数字。

2、利用外部中断,控制音乐的播放。

实验4指示灯-数码管的中断控制

实验4指示灯-数码管的中断控制
通过这次的指示灯数码管的外部中断控制程序设计让我对protues软件有了更多的了解同时我也学会了其中断编程设计
实验4指示灯-数码管的中断控制
单片机原理及应用实验报告电路图截图:
实ห้องสมุดไป่ตู้总结:
通过这次的指示灯\数码管的外部中断控制程序设计让我对Protues软件有了更多的了解,同时我也学会了其中断编程设计。在这次试验中,我认识到了自己的不足,编程方面掌握的还不是那么牢固。这次的课程设计和电路连接让我受益匪浅,对以后的编程和程序设计方面来说,会有很大的帮助。

外部中断详解

外部中断详解

由于不少同学们,学习51单片机到了中断课程的时候,就开始进入一知半解的状态了,为此,开题一篇,以供大家搞明白,中断这回事。

我们还是用清晰点的逻辑来分析,围绕这四个部分来介绍,当然重点在于3和4部分。

通篇我会以让初学者都能看懂的语言来说明。

如果有专业一点的术语名词,我也尽量用简单易懂的描述。

注:本文旨在让大家理解什么是中断和怎么去设置。

具体的东西有些考虑到深浅问题,则跳过不讲。

如需了解,可自行查询资料1.什么是中断?2.为什么要有中断?3.中断怎么触发?4.怎么设置中断?什么是中断?举个老生常谈的例子——接电话。

在一个风和日丽的下午,你在电脑前看着视频,突然间,你桌上的手机来电话了,这时候你就该暂停视频,拿起手机接电话。

OK,回到单片机里来,我们之前写程序,都是在main函数里,甚至main 函数里的while(1)里执行我们的程序。

这就相当于这个例子中的【看视频】,而【电话响了】这个过程,就相当于产生了中断,而【接电话】就是你在中断里做的事情。

为什么要有中断?为什么要有中断,再举一个例子好了。

简单来讲,就是一些程序我们平时不执行,但到了某个特殊时刻,我们才去执行。

所以我们就让这个特殊时刻产生一个中断,这时候,就跳去了我们特殊时刻才执行的函数里了。

什么情况会触发中断?那么,我们什么情况下,单片机才会识别到中断,或者说,什么情况下,单片机才会跳入我们中断的函数里呢?简单来讲,我们的中断大致分为三种,外部中断、定时器中断、串口中断。

这三种的触发方式不一样。

外部中断:顾名思义,就是单片机外部出现了一定的情况,才进入了中断。

89c51有两个外部中断,一个是P3.2引脚,一个是P3.3引脚。

分别是外部中断0和外部中断1。

我们以外部中断0为例,当P3.2这个脚读到一个低电平(0)或者下降沿(由高电平变低电平)的时候,这时单片机自己就识别到了,所以就会自己跳入中断。

定时器中断:定时器中断不再这详细说明,大致是讲,我们可以设置一个时间(或者叫闹钟),然后这个单片机会开始计时,当到了这个时间点,单片机就会跳入中断。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、任务分析
❖ 利用单片机外部中断0和一个按 主程序完成中断初始化、数码管静态显示控 制工作。
❖ 中断函数实现显示启停切换。每次产生外部 中断0,显示启停切换一次。
void delay(); //延时函数说明
uchar Table_yin[10]={0x3f,0x06,0x5b,
若头文件用reg51.h,P3_2需要自行定 义;若头文件用at89x51.h,P3_2无需 定义。
void delay() //定义延时函数 { unsigned int i;
for(i=0;i<30000;i++); } void delay10ms() //定义10ms延时函数 { uchar i,j;
void int0(void)interrupt 0//外中断0中断服务程序 {
delay10ms(); //调用10ms延时函数 if(P3_2==0) //确认按键按下 {
flag=~flag; //启停标志取反 } while(P3_2==1); //等待按键松开
}
注意: 1、函数说明应写在程序开头。 2、需要包含头文件。
while(1) // 无限循环
{ while(flag)
{ P0=Table_yin[shu];
//P2口输出十位数的字型编码
delay(); //调用延时函数
shu++;
//显示值加1
if(shu>9)shu=0;
//显示值过大,清0
}
}
}
void delay10ms(); //10ms延时函数说明
for(i=20;i>0;i--) //执行1次"i=20",20次"i>0"、"i--"
for(j=250;j>0;j--); //执行20次"j=250",20×250次"j>0"、"j--"
0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; char shu=0; //外部变量,数码管显示数值 bit flag=1; //外部变量,启停控制位,1时启动显示
void main( ) //主函数
{ IT0=1;
//外中断0下降沿触发
EA=1; //开总中断
EX0=1; //外中断0允许
相关文档
最新文档