外中断按键计数器程序

合集下载

单片机C语言程序设计:用计数器中断实现100以内的按键计数

单片机C语言程序设计:用计数器中断实现100以内的按键计数

while(1) { P0=DSY_CODE[Count/10]; P2=DSY_CODE[Count%10]; } } //T0 计数器中断函数 voidKey_Counter()interrupt1 { Count=(Count+1)%100;//因为只有两位数码管,计数控制在 100 以内 (00~99) }
P0=0x00; P2=0x00; TMOD=0x06; //计数器 T0 方式 2 TH0=TL0=256-1; //计数值为 1 ET0=1; //允许 T0 中断 EX0=1; //允许 INT0 中断 EA=1; //允许 CPU 中断 IP=0x02; //设置优先级,T0 高于 INT0 IT0=1; //INT0 中断触发方式为下降沿触发 TR0=1; //启动 T0
#include #defineucharunsignedchar #defineuintunsignedint //段码 uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00}; ucharCount=0; //主程序 voidmain() {
单片机 C 语言程序设计:用计数器中断实现 100 以
内的按键计数
/* 名称: 计数器中断实现按键技术,由于计数寄存器初值为 1,因 此 P3.4 引脚的每次负跳变都会触发 T0 中断,实现计数值累加。 计数器的清零用外部中断 0 控制。 */
//INT0 中断函数 voidClear_Counter()interrupt0 { Count=0; } 扩展阅读:10s 的秒表程序

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

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

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次。

51单片机外部脉冲计数程序

51单片机外部脉冲计数程序

51单片机外部脉冲计数程序51单片机外部脉冲计数程序是一种常见的嵌入式应用程序,它可以通过计数外部脉冲信号来实现各种功能,如测量速度、记录行程、控制电机等。

在本文中,我们将介绍如何编写一个简单的51单片机外部脉冲计数程序,供初学者参考。

一、程序框架```c#include <reg52.h>sbit PulsePin = P1^0; //定义脉冲信号输入引脚unsigned long cnt = 0; //计数器void ExternalInterrupt0() interrupt 0 //外部中断0的中断服务程序{cnt++; //计数器加一}```程序中定义了一个脉冲信号输入引脚PulsePin,一个计数器cnt,并在主程序中开启了全局中断和外部中断0,并设置外部中断0为下降沿触发。

在外部中断0的中断服务程序中,计数器cnt会加一。

二、程序解析1. 硬件连接将需要计数的脉冲信号输入引脚连接到单片机的P1.0引脚上,并连接好单片机的电源和地线。

2. 宏定义和全局变量首先定义了PulsePin引脚为输入模式,并定义了计数器cnt为无符号长整型变量。

3. 主程序在主程序中,首先开启了全局中断和外部中断0,然后设置外部中断0为下降沿触发。

最后加入一个无限循环,等待外部中断的触发。

4. 外部中断0的中断服务程序在外部中断0的中断服务程序中,计数器cnt会加一。

三、总结本文介绍了如何编写一个简单的51单片机外部脉冲计数程序。

通过外部中断0的中断服务程序,可以实现对外部脉冲信号的计数。

本程序只是一个简单的例子,读者可以根据自己的需求对其进行改进和优化。

外部中断实验_4

外部中断实验_4

实验四外部中断实验——可控霓虹灯控制一、实验目的1.了解单片机中断系统的结构;2.掌握单片机中断有关的寄存器、中断的开放与禁止以及中断程序的编写。

3.掌握定时器和中断系统的综合应用。

二、实验设备(仪器)PC机、PCB版、ISP下载线和USB线。

三、实验内容(一)开发板实验根据图1原理图,实现以下要求的霓虹灯控制。

(1)正常情况8个灯正向依次点亮,反向两两点亮,时间间隔都为0.5s;(2)按键按下后8个灯同时亮灭一次,时间间隔为1s。

用定时器T0,工作方式1编制延时程序,按键动作采用外部中断INT1实现。

图1 硬件原理图(二)ISIS仿真实验仿真电路如图2所示,实现以下要求的霓虹灯控制。

主函数执行流水灯,时间间隔200ms,无限循环。

(1)按键key0按下后8个灯同时亮灭一次,时间间隔为200ms。

(2)按键key1按下后8个灯从中间向两边依次点亮,时间间隔为500ms,然后再从两边向中间依次点亮。

延时为500ms,再让8个灯同时点亮,延时500ms。

(3)当同时按下key0和key1键时,程序执行(2)步骤。

要求:Key0按键动作采用外部中断INT0实现;Key1按键动作采用外部中断INT1实现。

图2 硬件原理图四、实验步骤(一)开发板实验1.准备焊接好的PCB版,其电路参见图1;2.打开计算机,运行Keil uVision2软件,新建工程项目,编写控制流水灯源程序;3.对源程序调试,连接,生成可执行文件;4.连接ISP下载线;5.运行“progisp1.67”文件夹内的“progisp.exe”,将程序下载到单片机中;6.单片机是否正常运行。

(二)ISIS仿真实验1.运行Proteus ISIS 硬件电路仿真软件,按照实验内容(二)中仿真电路图2画图;2.运行Keil uVision2软件,新建工程项目,编写实验内容(二)要求功能程序;3.对源程序调试,连接,生成可执行文件;4.将可执行文件下载到ISIS仿真电路中的单片机中;5.观察仿真电路是否正常运行。

51单片机interrupt用法

51单片机interrupt用法

51单片机interrupt用法1. 什么是51单片机interrupt?51单片机是一种常用的嵌入式微控制器,被广泛应用于各种电子设备中。

中断是一种特殊的处理机制,它允许单片机在执行某个任务的过程中,临时暂停当前的任务,去处理其他紧急事件。

这些紧急事件可以是来自外部设备的信号、计时器溢出等。

2. 为什么要使用interrupt?使用interrupt的好处是可以及时响应外部事件,提高系统的实时性和可靠性。

不使用interrupt的话,单片机只能按照预定的程序执行,无法即时响应外部事件,造成系统的延迟和不稳定。

3. 如何使用interrupt?首先,我们需要了解51单片机的interrupt架构。

51单片机有两个interrupt源,分别是外部中断和定时器/计数器中断。

外部中断:单片机的P3口(即引脚INT0和INT1)可以接收外部中断信号。

当INT0引脚检测到高电平脉冲时(可以通过软件设置为下降沿触发或低电平触发),单片机就会执行外部中断的相关程序。

INT1引脚类似。

定时器/计数器中断:单片机的定时器/计数器模块可以设置定时中断。

定时器可以根据一定的时钟源进行计数,当计数值达到预设值时,就会触发中断。

通过设置计数器的工作模式和计数初值,可以灵活控制定时中断的触发时间和频率。

对于外部中断,我们可以通过设置相应的中断控制寄存器来选择触发方式(下降沿触发、低电平触发等)。

然后,在主程序中需要响应外部中断的地方,我们可以编写一个中断服务程序(ISR),用来处理中断事件。

中断服务程序需要使用关键字”interrupt”进行声明,同时需要保存现场(将寄存器的值及其他关键状态保存在堆栈中),以便中断结束后能够正确恢复。

对于定时器/计数器中断,我们首先需要对定时器进行初始化设置,选择时钟源和工作模式。

然后,我们可以设置计数初值和中断触发时间。

当计数器达到预设值时,中断程序会被执行。

下面我们就来介绍一个常见应用案例:使用外部中断实现按键控制LED的亮灭。

单片机外部中断实验报告

单片机外部中断实验报告

单片机外部中断实验报告实验三外部中断实验报告班级:学号:姓名:教师:一、实验LI的1、掌握单片机外部中断的原理及过程。

2、掌握单片机外部中断程序的设计方法。

3、掌握单片机外部中断时中断方式的选择方法。

二、实验内容如下图所示,P3.2设为输入,P2设为输出位,连有8个发光二极管DPD8O每当发生外部中断时,发光二极管以向下流水灯的方式点亮。

分别选择边沿触发外部中断放是和电平触发外部中断方式两种。

三、编程提示1、P3 口是8位准双向口,具有双重功能:第一功能和P1 口一样,作为输入输出口,也有字节操作和位操作两种方式,每一位可分别定义为输入或输出;第二功能定义如下:P3. 0RXD串行输入口P3. 1TXD串行输出口P3. 2INTO外部中断0请求输入线P3. 3INT1外部中断1请求输入线P3.4TO定时器/计数器TO外部计数器脉冲输入线P3. 5T1定时器/计数器T1外部计数器脉冲输入线P3. 6WR外部数据存贮器写脉冲输出线P3. 7RD外部数据存贮器读脉冲输出线2、各中断服务程序入口地址:外部中断003H定时器/计数器T1溢出中断OBH外部中断113H定时器/计数器1BH串行口中断23H3、外部中断的产生条件中断允许寄存器IE:EAESET1EX1ET0EX0(1)外部中断源允许中断(中断0: EX0=l;中断1: EXl=l)o(2)CPU 开中断(EA二1)。

(3)外部中断方式CPU发出中断申请。

4、外部中断方式的选择控制TCOX:TF1TR1TF0TR0IE1IT1IE0IT0IT0是选择文字则外部中断0请求(INTO)边沿触发方式或电平触发方式的控制位。

前一方式IT0二1,后一方式IT0二0。

IT1是选择外部中断1请求(INT1)为边沿触发方式或电平触发方式的控制位。

前一方式IT1=1,后一方式ITl=0o当8031复位后,TCON被清0。

5、外部中断电路负脉冲作为中断请求信号时,为了保证中断的唯一性,必须加上消除开关抖动的电路或者去抖动延时程序,保证每次只产生单脉冲,构成边沿触发方式外部中断电路。

汇编外部中断及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.下面依序是存储模式、程序空间大小等设置,均用默认值即可。

中断原理实验报告总结(3篇)

中断原理实验报告总结(3篇)

第1篇一、实验目的本次实验旨在通过实际操作,加深对中断原理的理解,掌握单片机中断系统的工作机制,学会外部中断和定时/计数器的使用,以及串口数据发送和接收的方法。

二、实验内容1. 外部中断原理及使用(1)实验原理:通过实验,了解外部中断的工作原理,掌握外部中断的使用方法,包括中断源的设置、中断服务程序的编写和中断请求的处理。

(2)实验步骤:设置外部中断源,编写中断服务程序,实现按键控制LED灯亮灭。

2. 定时/计数器的使用(1)实验原理:通过实验,了解定时/计数器的工作原理,掌握定时/计数器的使用方法,包括定时/计数器的初始化、定时/计数器的启动和停止、定时/计数器的中断处理。

(2)实验步骤:设置定时/计数器,实现LED灯的闪烁。

3. 串口数据发送和接收(1)实验原理:通过实验,了解串口通信的工作原理,掌握串口数据发送和接收的方法,包括串口初始化、发送和接收数据的流程。

(2)实验步骤:实现单片机与计算机之间的串口通信,发送和接收数据。

三、实验结果及分析1. 外部中断实验结果及分析实验中,通过按键控制LED灯亮灭,实现了外部中断的基本功能。

实验结果表明,当按键被按下时,外部中断请求信号被触发,中断服务程序被执行,LED灯状态发生改变。

2. 定时/计数器实验结果及分析实验中,通过定时/计数器实现LED灯的闪烁,实现了定时功能。

实验结果表明,定时/计数器能够按照设定的周期产生中断,中断服务程序能够按照要求执行。

3. 串口数据发送和接收实验结果及分析实验中,通过串口通信实现单片机与计算机之间的数据传输。

实验结果表明,单片机能够按照设定的波特率发送和接收数据,计算机端能够正确接收并显示数据。

四、实验总结1. 通过本次实验,加深了对中断原理的理解,掌握了单片机中断系统的工作机制。

2. 掌握了外部中断、定时/计数器和串口通信的使用方法,为后续学习和实践打下了基础。

3. 在实验过程中,培养了动手实践能力,提高了解决问题的能力。

51单片机中断程序大全

51单片机中断程序大全

//实例42:用定时器T0查询方式P2口8位控制LED闪烁#include<reg51.h> // 包含51单片机寄存器定义的头文件void main(void){// EA=1; //开总中断// ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式1TH0=(65536-46083)/256; //定时器T0的高8位赋初值TL0=(65536-46083)%256; //定时器T0的高8位赋初值{//实例43{// EA=1;//{while(TF1==0);TF1=0;sound=~sound; //将P3.7引脚输出电平取反TH1=(65536-921)/256; //定时器T0的高8位赋初值TL1=(65536-921)%256; //定时器T0的高8位赋初值}}//实例44:将计数器T0计数的结果送P1口8位LED显示#include<reg51.h> // 包含51单片机寄存器定义的头文件sbit S=P3^4; //将S位定义为P3.4引脚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口显示}//实例45{EA=1;{}//实例46#include<reg51.h> // 包含51单片机寄存器定义的头文件sbit D1=P2^0; //将D1位定义为P2.0引脚unsigned char Countor; //设置全局变量,储存定时器T0中断次数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; //启动定时器T0Countor=0; //从0开始累计中断次数while(1);}/************************************************************** 函数功能:定时器T0的中断服务程序**************************************************************/ void Time0(void) interrupt 1 using 0{Countor++; //中断次数自加1if(Countor==20) //若累计满20次,即计时满1s{D1=~D1; //按位取反操作,将P2.0引脚输出电平取反Countor=0; //将Countor清0,重新从0开始计数}//实例47{EA=1;}{Countor2++; //Countor2自加1if(Countor1==2) //若累计满2次,即计时满100ms{D1=~D1; //按位取反操作,将P2.0引脚输出电平取反Countor1=0; //将Countor1清0,重新从0开始计数}if(Countor2==8) //若累计满8次,即计时满400ms{D2=~D2; //按位取反操作,将P2.1引脚输出电平取反Countor2=0; //将Countor1清0,重新从0开始计数}TH1=(65536-46083)/256; //定时器T1的高8位重新赋初值TL1=(65536-46083)%256; //定时器T1的高8位重新赋初值}//实例50-1:输出50个矩形脉冲#include<reg51.h> //包含51单片机寄存器定义的头文件sbit u=P1^4; //将u位定义为P1.4/*************************************************函数功能:延时约30ms (3*100*100=30 000μs =30m*************************************************/void delay30ms(void){ unsigned char m,n;for(m=0;m<100;m++)for(n=0;n<100;n++);}{u=1;//实例{//实例51-2#include<reg51.h> //包含51单片机寄存器定义的头文件sbit ui=P3^2; //将ui位定义为P3.0(INT0)引脚,表示输入电压void main(void){TMOD=0x0a; // TMOD=0000 1010B,使用定时器T0的模式2,GATE置1 EA=1; //开总中断ET0=0; //不使用定时器T0的中断TR0=1; //启动T0TH0=0; //计数器T0高8位赋初值TL0=0; //计数器T0低8位赋初值while(1) //无限循环,不停地将TL0计数结果送P1口{while(ui==0) : //INT0为低电平,T0不能启动TL0=0; //INT0为高电平,启动T0计时,所以将TL0清0 while(ui==1): //在INT0高电平期间,等待,计时P1=TL0; //将计时结果送P1口显示} }//实例53:用外中断0的中断方式进行数据采集#include<reg51.h> //包含51单片机寄存器定义的头文件sbit S=P3^2; //将S位定义为P3.2,void main(void){EA=1; //开放总中断EX0=1; //允许使用外中断IT0=1; //选择负跳变来触发外中断P1=0xff;{P1=~P1;//实例54-1sbit u=P1^4;{EA=1;{u=~u; //}//实例54-2sbit u=P3^2;{TMOD=0x02; //TMOD=0000 0010B,使用定时器T0的模式2EA=1; //开放总中断EX0=1; //允许使用外中断IT0=1; //选择负跳变来触发外中断ET0=1; //允许定时器T0中断TH0=0; //定时器T0赋初值0TL0=0; //定时器T0赋初值0TR0=0; //先关闭T0while(1) ; //无限循环,不停检测输入负脉冲宽度}void int0(void) interrupt 0 using 0 //外中断0的中断编号为0{ TR0=1; //外中断一到来,即启动T0计时TL0=0; //从0开始计时while(u==0) //低电平时,等待T0计时;P1=TL0; //将结果送P1口显示TR0=0; //关闭T0}//实例55:方式0控制流水灯循环点亮#include<reg51.h> //包含51单片机寄存器定义的头文件#include<intrins.h> //包含函数_nop_()定义的头文件unsigned char code Tab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//流水灯控制码,该数组被定义为全局变量sbit P17=P1^7;/**************************************************************{{P17=0;_nop_();_nop_();P17=1;;TI=0; //}******************************************/void main(void){unsigned char i;SCON=0x00; //SCON=0000 0000B,使串行口工作于方式0while(1){for(i=0;i<8;i++){Send(Tab[i]); //发送数据delay(); //延时}}}。

(单片机原理与应用实验)实验4外中断实验

(单片机原理与应用实验)实验4外中断实验
设置中断的临时和永久关闭
可通过硬件电路和程序操作实现中断的暂停、延迟和关闭。
单片机中断的限制与局限性
一次中断只能处理单 一任务
每次中断响应只能处理一个事 件,无法同时执行多个中断任 务。
对中断处理的时间和 精度要求较高
中断程序需要快速响应和实现, 并保持高精度和低误差。
中断任务的开销和存 储空间较大
智能门锁
中断用于执行网络任务并接收无 线信号,保证网络的稳定和性能。
中断用于检测密码和指纹等,实 现智能门禁功能和安全保障。
交通信号灯
中断用于控制信号变化和流量监 测,实现交通安全和效率。
中断优先级的控制与调度
提高任务的优先级
终止当前执行的任务,并开始响应更高优先级的中断任务。
屏蔽低优先级的中断
阻止低优先级的中断过程,优先完成高优先级的中断任务并避免误操作。
采用合适的中断驱 动模式
不同的中断驱动模式有着不 同的优点和局限性,需要根 据实际情况及时调整。

对中断控制和优先 级进行优化
中断控制和优先级的设置能 够直接影响到中断系统的性 能和效率,应进行优化和梳 理。
定期检测和维护中 断系统
中断系统的稳定性和可靠性 需要定期检查和维护,及时 修复故障和调整优化。
可能是中断控制端口连接错误或电路设计有误,需要检查原理图和程序,并进行调试和 重组。
2 问题2:中断运行速度太慢。
可能是程序优化不当或中断优先级设置有误,需要进行程序的升级和重新排列优先级。
实验效果的总结与评估
实验优点
本次实验通过对中断控制的学习和探究,深入理解 了单片机系统设计的基本原理和应用方法。
常见中断相关问题与FAQ
1 中断和定时器有什么 2 什么情况下需要进行 3 如何调整中断控制的

外部中断脉冲计数实验

外部中断脉冲计数实验

《单片机原理与应用》课程实验报告实验名称:外部中断----脉冲计数实验实验日期:班级:电技13-2班姓名:马倩南学号:02号指导老师:评分:一、实验目的:1.熟悉单片机外部中断的使用方法;2.熟悉数码管的工作原理和驱动方法;3.程序设计中数组的使用。

、实验内容: 连接最小系统板与脉冲开关、数码管模块电路,构成模拟计数器电路。

编程检测外部脉冲的输入,并通过数码管来指示脉冲个数1、设计出外部中断计数器的电路原理图,单片机选用AT89C51 P0 口接八位逻辑电平显示发光二极管,INTO或INT1接单次脉冲输出端。

2、打开Keil uVision2 仿真软件,首先建立本实验的项目文件,接着编写外部中断计数器.AS M源程序,进行编译,直到编译无误,生成HEX文件。

3、将HEX文件上载到Protues电路原理图的AT89C5仲,并仿真成功。

4、实验电路功能,连续按动单次脉冲产生电路的按键,对单次脉冲进行计数,八个发光二极管显示计数结果。

三、程序及其运行结果:1、外部中断的初始化设置共有三项内容:中断总允许即EA=1,外部中断允许即EXi=1 (i=0 或1),中断方式设置。

中断方式设置一般有两种方式:电平方式和脉冲方式,本实验选用后者,其前一次为高电平后一次为低电平时为有效中断请求。

因此高电平状态和低电平状态至少维持一个周期,中断请求信号由引脚INT0(P3.2)或INT1(P3.3)引入。

2、中断服务的关键:a、保护进入中断时的状态。

堆栈有保护断点和保护现场的功能使用PUSH在转中断服务程序之前把单片机中有关寄存单元的内容保护起来。

b、必须在中断服务程序中设定是否允许中断重入,即设置EX0位。

c、用POP指令恢复中断时的现场。

3、中断控制原理:中断控制是提供给用户使用的中断控制手段。

实际上就是控制一些寄存器,51系列用于此目的的控制寄存器有四个:TCON、IE、SCON及IP。

4、中断响应的过程:首先中断采样然后中断查询最后中断响应。

实验三定时器及外部中断实验

实验三定时器及外部中断实验

实验三定时器及外部中断实验一、实验目的1)熟悉VC5416的定时器工作原理。

2)掌握VC5416定时器的编程控制方法。

3)学会使用定时器的中断方式来控制程序执行方法。

4)掌握外部中断的编程控制方法,理解DSP对于中断的响应的过程。

5)了解并学习混合编程的实现方法。

二、实验设备1)计算机一套,DSP硬件仿真器一台,实验箱一台。

2)CCS4.1-CCS5.5软件版本。

3)源程序及链接命令文件见:D:\ EXPER\EXP3目录下的.asm 、.cmd、.C 和.lib文件。

三、实验步骤(一)、连接仿真器,将仿真器插接到C5416的JTAG接口上,另一头插接到电脑的USB接口上,因为仿真器是金属外壳,容易和箱子内部的电路触碰造成短路,从而对实验箱造成损坏,这个要特别注意,也不允许在机箱打开电源情况下插拔仿真器。

(二)、实验箱配置及连线:C5416DSP核心板上的SW1的1-6的开始设置为off off off off on on(上电后工做于1/2分频器方式,其它实验也按照此设置不变,我试验过改为PLL*2方式仿真器就连接不上了),SW2设置为on on on on。

将DSP核心板所在试验箱引脚连线区的BCANRX(C54的XF)引脚,与指示灯连线区LAMP的L1连接起来,这样就可以通过XF控制这个L1这个方光管的亮灭了。

将DSP核心板所在试验箱引脚连线区的INT0(C54的外部中断0输入)引脚与单脉冲按键PAULSE的P-(按下输出负脉冲)连接起来,这样按下按键时,就会给DSP的INT0中断引脚发送一个负脉冲。

连线照片见程序目录中的图片文件。

(二)、打开实验箱电源开关。

(三)、使用给定的文件,按照实验一的步骤建立实验项目,例如工作区目录为D:\ exp3 中建立一个exp3的实验项目,添加所有的给定的文件。

(四)、仿真调试方法1、通过菜单Project- Build All 对项目进行编译和链接,如下:如果有错误会出现在problem 窗口中。

KeilC51学习4按键外部中断

KeilC51学习4按键外部中断

KeilC51学习4按键外部中断主板介绍:P3^2~P^5为四个按键;P1^0~P1^7为8个LED灯#include "reg52.h"//此⽂件中定义了单⽚机的⼀些特殊功能寄存器typedef unsigned int uint; //对数据类型进⾏声明定义typedef unsigned char u8;sbit k1=P3^5; //定义P31⼝是k1sbit led=P1^0; //定义P10⼝是led/******************************************************************************** 函数名 : delay* 函数功能 : 晶振11.0592M延时函数*******************************************************************************/void delay(uint z){uint i,j;for(j=z;j>0;j--)for(i=112;i>0;i--);}/******************************************************************************** 函数名 : keypros* 函数功能 : 按键处理函数,判断按键K1是否按下*******************************************************************************/void keypros(){if(k1==0){delay(50);if(k1==0) //再次判断按键是否按下led=~led; //led状态取反}while(!k1); //检测按键是否松开}/******************************************************************************** 函数名 : main* 函数功能 : 主函数* 输⼊ : ⽆* 输出 : ⽆*******************************************************************************/void main(){while(1){keypros(); //按键处理函数}}按键取反灯亮或灭计数器(计数器0⽤P3^4按钮,计数器1⽤P3^5按钮,不懂)/*-----------------------------------------------名称:计数器0论坛:编写:shifang⽇期:2009.5修改:⽆内容:通过外部按键计数进⼊中断执⾏LED取反------------------------------------------------*/#include<reg52.h> //包含头⽂件,⼀般情况不需要改动,头⽂件包含特殊功能寄存器的定义sbit LED=P1^0; //定义LED端⼝/*------------------------------------------------定时器初始化⼦程序(按钮P3^4控制,不知为什么)------------------------------------------------*/void Init_Timer0(void){TMOD |= 0x01 | 0x04; //使⽤模式1,16位计数器,使⽤"|"符号可以在使⽤多个定时器时不受影响TH0=0xFF; //给定初值TL0=245; //从245计数到255EA=1; //总中断打开ET0=1; //定时器中断打开}/*------------------------------------------------主程序------------------------------------------------*/main(){Init_Timer0();while(1);}/*------------------------------------------------定时器中断⼦程序------------------------------------------------*/void Timer0_isr(void) interrupt 1using1{TH0=0xFF; //重新给定初值TL0=245;LED=~LED; //指⽰灯反相,可以看到闪烁}计数器0/*-----------------------------------------------名称:计数器1论坛:编写:shifang⽇期:2009.5修改:⽆内容:通过外部按键计数进⼊中断执⾏LED取反------------------------------------------------*/#include<reg52.h> //包含头⽂件,⼀般情况不需要改动,头⽂件包含特殊功能寄存器的定义sbit LED=P1^0; //定义LED端⼝/*------------------------------------------------定时器初始化⼦程序------------------------------------------------*/void Init_Timer1(void){TMOD |= 0x10 | 0x40; //使⽤模式1,16位计数器,使⽤"|"符号可以在使⽤多个定时器时不受影响TH1=0xFF; //给定初值TL1=245; //从245计数到255EA=1; //总中断打开ET1=1; //定时器中断打开TR1=1; //定时器开关打开}/*------------------------------------------------主程序------------------------------------------------*/main(){Init_Timer1();while(1);}/*------------------------------------------------定时器中断⼦程序------------------------------------------------*/void Timer1_isr(void) interrupt 3{TH1=0xFF; //重新给定初值TL1=245;LED=~LED; //指⽰灯反相,可以看到闪烁}计数器1中断定义:当机器正在执⾏程序的过程中,⼀旦遇到⼀些异常或者特殊请求时,停⽌正在执⾏的程序转⼊必要的处理,处理完毕后,⽴即返回断点继续执⾏。

外部中断0按键计数器实验总结心得

外部中断0按键计数器实验总结心得

外部中断0按键计数器实验总结心得
外部中断0按键计数器实验总结。

今天,学习完了外部中断0按键计数器实验后,在分析这个实验之前,让我来总结一下吧:其实,有些人会觉得编写一段程序很简单、很容易,但真正去做时,发现原来它并不像他们所说的那样简单和容易。

以前都只看到别人表面上显示出来的东西而没有深入地去体会或者感受它背后隐藏着的一些细
节问题!下面,请大家认真观察,跟随我的脚步走进去瞧瞧吧!如果你仔细阅读了本文,相信对你也能够起到帮助作用哦!
首先我们知道了这个程序的设计思想就是;当按下按钮时,计算机执行一条指令,然后再将结果送回给计算机,由于这种方式可以使计算机重复工作,因此称为“重复”。

程序经过分析与设计,确定采用中断方法来控制计算机的运转。

主要考虑三点:1.计算机需要多次响应按钮的操作;2.每次响应按钮的操作必须保证输出的状态变化量是连续的;3.响应按钮的操作时间尽量短。

下面开始写程序了。

首先我们把程序的流程图画好,接着就是根据流程图写代码啦~首先我们要找到一个中断源,即按钮,它的作用是按下时触动中断服务程序,然后启动中断处理程序,最终返回一个中断处理程序的响应值。

接着我们还要判断按钮是否被按下,若已经被按下则跳过这一步继续往下写,直至程序结束。

- 1 -。

STC15单片机外部中断的特点及应用研究

STC15单片机外部中断的特点及应用研究

S T C 15单片机外部中断的特点及应用研究*刘宝成(内蒙古民族大学工学院,通辽028043)*基金项目:内蒙古自治区高等学校科学研究项目 无线电波充电技术的研究(N J Z Y 17202);内蒙古民族大学教育教学研究课题 实践教学的综合改革与实践的研究(Y B 2017008)㊂摘要:外部中断在单片机应用系统中经常用于系统故障处理㊁采集数据的处理㊁人机交互的键盘输入以及通过按键唤醒单片机退出掉电工作模式等工作场景㊂S T C 15系列单片机外部中断0㊁外部中断1增加了上升沿或下降沿均可触发中断的新特性,这种新特性在使用时如果不加以注意可能会使中断服务程序重复执行两次,导致程序出错,尤其是在采集数据的处理㊁人机交互的键盘输入等应用场合埋下隐患㊂通过对使用S T C 15系列单片机的外部中断0㊁外部中断1的实例分析,给出解决方案㊂对使用S T C 15系列单片机进行系统设计,尤其是对原来使用S T C 89系列等通用51单片机的系统进行硬件升级后的软件移植具有重要指导意义和参考价值㊂关键词:S T C 15;单片机;外部中断;A D C中图分类号:T P 368.1 文献标识码:AR e s e a r c h o n C h a r a c t e r i s t i c s a n d A p p l i c a t i o n o f E x t e r n a l I n t e r r u pt o n S T C 15M C U L i u B a o c h e n g(C o l l e g e o f E n g i n e e r i n g ,I n n e r M o n g o l i a U n i v e r s i t y f o r N a t i o n a l i t i e s ,T o n gl i a o 028043,C h i n a )A b s t r a c t :E x t e r n a l i n t e r r u p t i s t y p i c a l l y u s e d i n s y s t e m f a u l t p r o c e s s i n g ,d a t a a c q u i s i t i o n ,k e y b o a r d i n p u t a n d w a k e -u p s i n g l e -c h i p mi c r o -c o m p u t e r t o q u i t p o w e r -o f f m o d e .T h e e x t e r n a l i n t e r r u p t 0a n d e x t e r n a l i n t e r r u pt 1o f S T C 15s e r i e s M C U a d d a n e w f e a t u r e t h a t t h e i n -t e r r u p t c a n b e t r i g g e r e d b y t h e r i s i n g e d g e o r f a l l i n g e d g e .I f t h e u s e r d o e s n o t p a y m u c h a t t e n t i o n t o t h i s f e a t u r e ,i t m a y ca u s e t h e i n t e r -r u p t s e r v i c e p r o g r a m t ob e e x ec u t ed t w i ce ,w h i c h w i l l l e a d t o a p r o g r a m e r r o r .T h i s k i n d of n e w f e a t u r e w i l l h a v e a n u n d e r l y i ng pr o b l e m i n t h e a p p l i c a t i o n o f d a t a a c q u i s i t i o n p r o c e s s i n g ,k e y b o a r d i n p u t o f h u m a n -c o m p u t e r i n t e r a c t i o n a n d o t h e r a p p l i c a t i o n s .T h e e x a m pl e s o f e x t e r n a l i n t e r r u p t 0a n d e x t e r n a l i n t e r r u p t 1o f S T C 15s e r i e s M C U a r e d i s c u s s e d i n t h i s p a p e r ,t h e s o l u t i o n s a r e g i v e n .T h e s t u d y o f t h i s p a p e r h a s i m p o r t a n t g u i d i n g s i g n i f i c a n c e a n d r e f e r e n c e v a l u e f o r t h e s y s t e m d e s i g n e d b y S T C 15s e r i e s M C U ,e s p e c i a l l yt h e s o f t w a r e t r a n s -p l a n t a t i o n a f t e r a h a r d w a r e u p g r a d e o f t h e o r i g i n a l s y s t e m u s e d S T C 89s e r i e s a n d o t h e r g e n e r a l -p u r p o s e M C S 51s i n g l e -c h i p m i c r o c o m pu t e r .K e yw o r d s :S T C 15;M C U ;e x t e r n a l i n t e r r u p t ;A D C 0 引 言中断系统是单片机的重要组成部分,一般包括定时/计数器中断㊁串行口中断㊁外部中断等[1]㊂中断的使用提高了单片机系统的数据处理效率,因此在单片机中得到了广泛的应用[2]㊂外部中断在单片机应用系统中经常用于故障中断㊁A /D 转换数据处理等实时性要求很高的操作中㊂笔者从事51单片机的教学工作多年,过去在学生实验中使用S T C 89系列单片机,也使用S T C 89系列单片机及A T 89系列单片机进行过一些电子装置的设计,都很顺利㊂最近,在调试一个使用S T C 15F 2K 60S 2单片机的外部中断0和外部中断1的中断实验中遇到了一个奇怪的问题:中断服务程序总是被执行两次㊂仔细分析实验程序,没有发现任何问题,事实上该实验程序在S T C 89C 52R C 上执行也没有任何问题,曾一度使笔者陷入迷惑㊂1 外部中断实验1.1 外部中断实验设计外部中断实验是教学中为了演示单片机外部中断特性和中断优先级而设计的,软㊁硬件思路是:主程序循环点亮接在P 1.0~P 1.3的4个L E D 发光二极管,点亮时间间隔约1s ;两个按键分别接在单片机的两个外部中断引脚I N T 0和I N T 1上,按键按下为低电平,触发相应外部中断进而执行相应外部中断服务程序;外部中断0的服务程序使接在P 1.6上的L E D 发光二极管点亮约5s,外部中断1的服务程序使接在P 1.7上的L E D 发光二极管点亮约10s㊂电路原理图如图1所示㊂图1 外部中断实验电路原理图1.2 实验现象及存在问题为了突出S T C 15系列单片机同S T C 89系列单片机及其他通用M C S 51兼容单片机外部中断0和外部中断1的主要区别,下面的实验仅描述外部中断0和外部中断1单独中断的现象㊂实验程序如图2所示,其中图2(a )㊁图2(b )㊁图2(c)分别是实验主程序㊁外部中断0服务程序㊁外部中断1服务程序,这三个程序对于S T C 89C 52R C 和S T C 15F 2K 60S 2是一样的㊂由于S T C 15系列单片机是1T 单片机,S T C 89系列单片机是12T 单片机,因此实现相同延时时间的延时子程序不一样,S T C 89C 52R C 的延时子程序如图2(d )所示,S T C 15F 2K 60S 2的延时子程序如图2(e)所示㊂图2 外部中断实验汇编源程序把汇编好的单片机程序分别下载到S T C 89C 52R C 和S T C 15F 2K 60S 2单片机中,接在P 1.0~P 1.3的L E D 按约1s 的时间间隔逐个点亮并周而复始地循环,说明下载到两个单片机里的延时程序的延时时间是正确的㊂分别单独按下I N T 0所接按键K 1和I N T 1所接按键K 2,均能正常中断主程序的执行,但两种单片机中断服务程序的执行时间不同,S T C 15F 2K 60S 2的执行时间约为S T C 89C 52R C 执行时间的2倍,即S T C 89C 52R C 的中断现象是正常的,S T C 15F 2K 60S 2的中断现象不对,似乎重复执行了两遍中断服务程序㊂仔细分析两种单片机的实验程序,在两个外部中断服务程序里均通过切换工作寄存器组的方法对主程序和中断服务程序共同使用的延时程序里的R 3㊁R 4㊁R 5进行了切换,不存在资源冲突的情况,同时S T C 15F 2K 60S 2单片机的延时子程序在主程序中调用的延时时间是正确的,而同样的中断服务程序在S T C 89C 52R C 又是正常的㊂那么唯一的可能就是S T C 15F 2K 60S 2和S T C 89C 52R C 的中断特性不一样㊂2 S T C 15系列单片机中断特性S T C 15系列和S T C 89系列单片机都是M C S 51的兼容单片机,只不过S T C 15系列单片机是1T 单片机,S T C 89系列单片机是12T 单片机,容易让人想当然地认为除了软件执行速度不同外,其他都是一样的㊂这种惯性思维方式一度使上述问题的分析陷入了困境,甚至怀疑是不是S T C 15F 2K 60S 2单片机存在B U G ㊂通过仔细阅读S T C 15系列单片机的数据手册才发现S T C 15系列单片机外部中断0和外部中断1的触发方式已经不再是低电平和下降沿两种通常所用的触发方式,而是变成了下降沿+上升沿和下降沿两种触发方式[3-4]㊂默认的触发方式为下降沿+上升沿触发,也就是说下降沿或者上升沿都可以触发中断㊂为了验证是不是由于这种新的触发方式引起的上述问题,将触发方式设置为单一的下降沿触发,发现进入中断后点亮L E D 发光二极管的时间正确了,也就是说确实是这种新的触发特性导致的㊂2.1 S T C 15系列单片机外部中断新的触发方式对比分析51单片机外部中断0或1的触发方式是由特殊功能寄存器T C O N 中的I T 0或I T 1进行设置,单片机上电复位后T C O N 的复位值是00H ,即对于普通51单片机来说外部中断0或1的触发方式是低电平触发,对于S T C 15系列单片机来说外部中断0或1的触发方式是下降沿+上升沿触发㊂在上面的实验中,按键从按下到释放需要的时间一般在0.1~0.3s 之间,而上述中断服务程序的执行时间约为5s 或10s,即中断服务程序的执行时间远远大于按键的操作时间,当中断服务程序执行完,按键早已经释放,对应的中断引脚电平已经恢复为高电平㊂I T 0或I T 1为0时,对应普通51单片机而言,外部中断0或1是低电平触发方式,按键按下单片机执行相应外部中断服务程序,当外部中断服务程序执行完,按键已经释放,单片机不会再次进入中断㊂而对于S T C 15系列单片机来说,为什么按键早已释放还会再次进入中断呢?只有一种解释,那就是S T C 15系列单片机对按键释放时的上升沿做了记忆㊂推测S T C 15系列单片机对I T x (x 取0或1)为0时外部中断的执行过程如下:当按下按键时,外部中断0或1的引脚上出现下降沿,置位I E x (x 取0或1),在允许中断的情况下C P U 响应该中断,内部生成一条长调用指令(L C A L L )转到相应的中断入口地址执行相应的中断服务程序,与此同时清除置位的I E x (x 取0或1)外部中断请求标志位;当按键释放时,外部中断0或1的引脚上出现上升沿,再次置位I E x (x 取0或1),此时单片机正在执行中断服务程序,待中断服务程序执行完返回主程序后,由于I E x (x 取0或1)置位导致单片机再次进入中断㊂如果真的是这样的过程,对于采用这种触发方式进行按键处理和A /D转换数据处理时就会带来致命错误,尤其是对从S T C 89系列或其他普通51单片机移植过来的程序来说,这种错误更容易发生,必须引起足够重视㊂图3 判断I E 0在进入中断服务程序后的状态2.2 S T C 15系列单片机下降沿+上升沿触发方式验证为了弄清楚S T C 15系列单片机外部中断0或1的下降沿+上升沿触发方式的操作机理,特设计下面实验进行验证㊂2.2.1 中断请求标志位在进入中断时是否被清零以外部中断0为例进行说明㊂在开总中断和允许外部中断0中断的情况下,当外部中断0满足中断条件时,I E 0被置1向C P U 申请中断,C P U 响应该中断后把I E 0清0并生成一条长调用指令转到外部中断0的矢量地址0003H 去执行程序㊂由于I E 0是内部信号,故设计图3所示程序,以判断I E 0在进入中断服务程序后的状态㊂仍然沿用图1所示电路,把图3中程序汇编后下载到S T C 15F 2K 60S 2单片机中,按下接外部中断0引脚的K 1按键,可以发现在K 1按键按下的同时P 1.0所接的L E D 点亮,说明在进入中断服务程序后I E 0已经被清0㊂2.2.2 下降沿之后的上升沿是否被记忆在上述实验中已经验证I E 0在进入中断服务程序后被清0,但并不能说明按键释放后I E 0是否又被置1,从而再次进入中断服务程序㊂为此又设计如图4(a )所示程序进行实验,延时程序D E L A Y 1000M S 同图2(e)㊂图4 判断下降沿之后上升沿是否置位I E 0实验程序同样把图4(a )所示程序汇编后下载到S T C 15F 2K 60S 2单片机中,按下就马上松开接外部中断0引脚的K 1按键,观察到的现象是:接在P 1.0上的L E D 先是点亮约1s,然后熄灭1s ,接着又再次点亮㊂这个实验现象说明当按键按下后单片机进入中断服务程序,且I E 0是被清0的,由于按键按下后马上就松开了,这个过程的时间小于中断服务程序的执行时间,在中断服务程序的第一个1s 延时后再去读I E 0,此时I E 0又被置1了,这就是实验现象中L E D 先点亮约1s ,然后熄灭1s 的原因㊂接下来L E D 又再次点亮说明单片机中断返回后马上又再次进入中断㊂即S T C 15F 2K 60S 2单片机的外部中断0在下降沿触发中断后还能记忆上升沿的触发标志㊂为进一步验证该现象又设计了如图4(b )所示的程序,把这个程序汇编后下载到单片机中,按下并立即释放按键K 1发现接在P 1.0的发光二极管D 1在按下按键K 1的同时熄灭了,然后发光二极管D 1马上又点亮的同时接在P 1.1的发光二极管D 2熄灭了㊂延长按键按下的持续时间,可以清楚地发现:在按键K 1按下的同时,发光二极管D 1开始点亮并持续到按键K 1释放;按键K 1释放的同时,发光二极管D 1熄灭,而发光二极管D 2点亮㊂用S T C 15F 2K 60S 2单片机的外部中断1重复实验,实验现象与此相同㊂此实验现象充分说明S T C 15F 2K 60S 2单片机的外部中断0和外部中断1在下降沿触发中断后还能记忆上升沿的触发标志㊂用类似的方法也可以验证S T C 15F 2K 60S 2单片机的外部中断0和外部中断1在上升沿触发中断后也能记忆下降沿的触发标志,这里不再赘述㊂3 S T C 15系列单片机下降沿+上升沿触发方式的应用及注意事项S T C 15系列单片机外部中断0和外部中断1在单片机上电复位后的默认触发方式是下降沿+上升沿触发方式㊂由于S T C 15系列单片机外部中断0和外部中断1对下降沿和上升沿均能触发中断并能对下降沿(上升沿)随后的上升沿(下降沿)触发信号记忆,在使用时需要注意以下事项㊂3.1 用于键盘中断由于S T C 15系列单片机外部中断0和外部中断1的上述新特性,在触发中断后并不能区分是下降沿还是上升沿触发的中断,而且还会对下降沿(上升沿)随后的上升沿(下降沿)触发信号记忆㊂而普通51单片机在上电复位后的外部中断的默认触发方式是低电平触发,这种触发方式是每个机器周期都去采样外部中断引脚上的电平信号,但并不对该信号做记忆,当单片机正在执行该外部中断服务程序或其他同优先级/高优先级中断服务程序时,即使采样到低电平信号,也不会置位相应中断标志位,而是直接丢弃该中断申请,只有在中断返回后采样到外部中断引脚上的低电平信号,才会置位相应中断标志位㊁向C P U 申请中断㊂因此在普通51单片机中只要在中断服务程序返回前外部引脚上的低电平信号消失,就不会引发二次中断㊂因此,在键盘中断应用中使用S T C 15系列单片机外部中断0或外部中断1将会出现按键按下时进入中断,执行一次中断服务程序,在按键释放时还会进入中断,并再次执行中断服务程序㊂因此在键盘中断应用中如果不能很好考虑到这种触发特性,将导致键码或按键功能被识别或执行两次,从而引起系统功能错误㊂这种错误经常发生在由普通51单片机改型为S T C 15系列单片机的使用者身上,可以在这类应用中将特殊功能寄存器T C O N 中的I T x (x 取0或1)设置为1,即使用外部中断的下降沿触发方式㊂3.2 用于A /D 转换的数据处理许多A D C 芯片具有转换结束输出信号E O C ,如A D C 0809㊁T L C 2543等,常把该信号接到单片机的外部中断引脚,以便于及时对采样到的数据进行处理㊂以A D C 0809为例,一般是把E O C 信号经非门接到单片机的外部中断引脚,假设接到外部中断0引脚[5-6]㊂如果使用S T C 15系列单片机的默认触发方式,就会出现在A D C 开始转换和A D C 转换结束分别进入中断,进行两次数据处理,如果是直接使用单次转换结果还比较容易发现错误,可是如果在数据处理上使用了一些滤波算法就不容易发现该错误㊂因此千万不要认为S T C 15单片机外部中断0和外部中断1的默认触发是下降沿或者上升沿都可以,而没有深入认识到这种单片机外部中断触发特性的真正机理,就直接使用这种默认触发模式,会给系统调试带来困难㊂在这类应用中也推荐将特殊功能寄存器T C O N 中的I T x (x 取0或1)设置为1,使用外部中断的下降沿触发方式㊂3.3 用于单片机低功耗模式唤醒S T C 15系列单片机外部中断0和外部中断1的下降沿+上升沿触发方式特别适合于单片机低功耗省电模式的唤醒,在外部中断0或外部中断1的引脚上无论出现下降沿还是上升沿,都能把单片机从掉电模式或空闲模式唤醒㊂外部中断0或外部中断1引脚上的信号可以由按键动作给出,也可以是其他系统给出的下降沿或上升沿信号,还可以由串行通信信号给出,特别适合于需要上升沿唤醒单片机掉电模式的应用场景㊂3.4 用于正负脉冲宽度及矩形波周期的测量普通的51单片机通过定时/计数器的门控位可以直接进行正脉冲宽度的测量,如果要对一个矩形波的周期或负脉冲进行测量,一般需要外加硬件电路才能实现㊂由于S T C 15系列单片机外部中断0和外部中断1在I T x (x 取0或1)置0的模式下,可以由上升沿或下降沿触发新特性,再结合定时/计数器的门控位,使用定时器应该可以对输入的矩形波进行正脉冲和负脉冲宽度以及周期的测量㊂这里不做展开,留待后续的应用中进行深入探讨㊂4 结 语S T C 15系列单片机外部中断0和外部中断1的默认下降沿+上升沿触发方式是一种全新的触发方式,与普通51单片机外部中断0和外部中断1默认触发方式存在较大差异,通过几个实验程序对S T C 15系列单片机外部中断触发新特性的执行机理进行了分析和验证㊂S T C 15系列单片机的这种新特性可以较好地应用于单片机掉电模式的唤醒,但也会让熟悉普通51单片机的使用者先入为主地认为S T C 15系列单片机只是多了一种上升沿触发方式,使程序设计出现一种隐性错误㊂通过文中的分析可以清楚了解到S T C 15系列单片机的外部中断0和外部中断1的默认触发方式可以对下降沿(或上升沿)随后的上升沿(或下降沿)进行记忆,对于键盘中断㊁A /D 转换中断等的处理上会使中断服务程序执行两次,导致结果出错㊂文中的分析与讨论对于新接触S T C 15系列单片机或经常使用普通51单片机的人来说具有很好的指导意义,对于从普通51单片机升级到S T C 15系列单片机的系统移植也具有参考意义㊂对S T C 15系列单片机这种新特性的具体应用给出了参考思路,在后续的研究中再进行深入探讨㊂参考文献[1]张毅刚,赵光权,刘旺.单片机原理及应用[M ].3版.北京:高等教育出版社,2016:12.[2]马淑华,王凤文,张美金.单片机原理与接口技术[M ].2版.北京:北京邮电大学出版社,2011:146147.[3]江苏国芯科技有限公司(宏晶科技).S T C 89C 51R C /R D+系列单片机器件手册[E B /O L ].[202010].h t t p://w w w.s t c -m c u d a t a .c o m /d a t a s h e e t /s t c /S T C A D P D F /S T C 15.pd f .[4]江苏国芯科技有限公司(宏晶科技).S T C 89C 51R C /R D +系列单片机器件手册[E B /O L ].[202010].h t t p://w w w .s t c m c u d a t a .c o m /d a t a s h e e t /s t c /S T C A D P D F /S T C 89C 51R C R D .pd f .[5]Te x a s I n s t r u m e n t s I n c o r po r a t e d .A D C 0808/A D C 08098B i t P C o m p a t i b l e A /D C o n v e r t e r s w i t h 8C h a n n e l M u l t i pl e x e r d a t a s h e e t (R e v .H )[E B /O L ].[202010].h t t ps ://w w w .t i .c o m /l i t /d s /s y m l i n k /a d c 0809n .pd f ?t s =1603095063975&ref _u r l =h t t ps %253A %252F %252F w w w .t i .c o m%252F p r o d -u c t %252F A D C 0809N .[6]T e x a s I n s t r u m e n t s I n c o r p o r a t e d .12B i t A n a l o g t o D i gi t a l C o n v e r t e r s W i t h S e r i a l C o n t r o l a n d 11A n a l o g I n pu t s d a t a s h e e t (R e v .F )[E B /O L ].[202010].h t t ps ://w w w.t i .c o m /l i t /d s /s y m l i n k /t l c 2543.pd f ?t s =1603095199651&ref _u r l=h t t p s %253A%252F %252F w w w.t i .c o m%252F pr o d u c t %252F T L C2543%253F k e yM a t c h %253D T L C 2543%2526t i s e a r c h %253D S e a r c hE Ne v e r y-t h i n g%2526u s e c a s e %253D G P N.刘宝成(副教授),主要研究方向为嵌入式系统㊁智能仪器仪表设计㊁自动化控制等㊂(责任编辑:薛士然 收稿日期:2020-10-29)参考文献[1]牛跃听.C A N 总线嵌入式开发:从入门到实战[M ].北京:北京航空航天大学出版社,2016.[2]陈海燕.支持多主通信的星载C A N 总线应用协议设计[J ].航天器工程,2014(4).[3]曾青林.反熔丝F P G A 在多路数据采集存储系统中的应用[J ].计算机测量与控制,2011(11).[4]王福友.舰船导航系统C A N 总线网络设计的关键技术[J ].中国造船,2008(2).[5]李云.基于S J A 1000的C A N 总线控制节点的设计与实现[J ].空军工程大学学报(自然科学版),2003(3).[6]岳奎.S J A 1000内寄存器的V H D L 语言读写设计与应用[J ].计算机与数字工程,2009(10).[7]尤程瑶.C A N 通信电路的干扰分析与抗干扰措施[J ].电子测量技术,2017(11).[8]崔艳召.TM S 320L F 2407系统设计及外扩C A N 总线设计[J ].航天返回与遥感,2008(2).刘志宏(工程师),主要研究方向为空间遥感器嵌入式系系统开发㊂(责任编辑:薛士然 收稿日期:2020-07-31)儒卓力和英飞凌扩大合作关系自2020年10月1日起,儒卓力成为原赛普拉斯半导体公司整个产品组合的分销商㊂儒卓力原有的分销协议在英飞凌收购赛普拉斯之后,得以扩展到欧洲㊁中东以及非洲地区㊂英飞凌负责欧洲㊁中东以及非洲地区分销及E M S 管理的M a t h i a s R o e t t je s 解释道: 现有协议的扩展,是我们与儒卓力成功合作重要且必要的一步㊂这不仅扩大了我们的销售网络,同时还能为客户提供更好的支持以满足其系统需求㊂增加的产品组合包括存储器㊁微控制器㊁传感器㊁蓝牙和W i F i 技术㊂对儒卓力而言,此次分销协议的扩展,使其现有产品阵容更加丰富,尤其是在汽车㊁工业㊁电机控制和照明等细分市场中㊂儒卓力半导体产品营销总监T h o m a s U l i n s k i 表示:这使得我们能够为客户提供其应用所需的更加优化的全方位解决方案㊂这次产品组合的扩展还巩固了我们作为主动㊁被动㊁无线和机电等元器件分销商的领先地位㊂关于儒卓力儒卓力(R u t r o n i k E l e k t r o n i s c h e B a u e l e m e n t e G m b H )是欧洲第三大分销商(资料来源:E u r o pe a n 分销报告2017)以及世界第十一大分销商(资料来源:S o u r c e T o d a y,2018年5月)㊂作为宽线产品分销商,儒卓力可提供半导体㊁无源和机电组件以及显示屏㊁嵌入式主板㊁存储解决方案和无线解决方案等㊂公司的主要目标市场是汽车㊁医疗㊁工业㊁家用电器㊁能源和照明业㊂儒卓力通过R U T R O N I K E M B E D D E D ㊁R U T R O N I K S MA R T ㊁R U T R O N I K P OW E R 及R U T R O N I K A U T OMO T I V E 系列提供定制的综合性产品和服务,为客户满足其应用的需求㊂对产品开发及设计的专业技术支持㊁物流和供应链管理解决方案,以及综合服务使得儒卓力的服务日趋完善㊂。

IAR FOR STM8例程

IAR FOR STM8例程

IAR+STM8——EXTI外部中断控制寄存器2013-03-21 23:23:15| 分类:STM8|举报|字号订阅这块三合一的开发板上有且只有一个按键,没办法,就拿这唯一的按键来用吧。

吸取前面UART3的教训,先看开发板的原理图吧。

这个按键被接到了STM8S207SB的PD7上,已做了上拉处理。

为了简单明了,还是点LED1吧。

按一下LED1亮,再按一下LED1灭。

好了,写程序吧。

#i nclude <iostm8s207sb.h>#define LED1_FLASH PD_ODR_ODR3 = !PD_ODR_ODR3 // 开发板上的LED1接在PD3上void GPIO_init(void){PD_DDR = 0x08; // 配置PD端口的方向寄存器PD3输出PD_CR1 = 0x08; // 设置PD3为推挽输出PD_CR2 = 0x80; // 使能PD7外部中断}void EXTI_init(void){EXTI_CR1 = 0x80; // PD口下降沿触发中断}#pragma vector=0x02 // 这里很关键!看下面说明。

__interrupt void EXTI_PD7_TLI(void){LED1_FLASH;}void init_devices(void){asm("sim"); // 关全局中断GPIO_init();EXTI_init();asm("rim"); // 开全局中断}void main( void ){init_devices();// 主循环里没有程序需要执行while(1);}这里着重要说明的一点是PD7的外部中断程序。

看了一下芯片手册,PD口外部中断EXTI3的中断向量号是6,想当然,又是想当然,按IAR的规矩中断向量要加2,就这样写#pragma vector=0x08,结果就是按下按键,程序没响应了,一直在中断里不出来。

51单片机计数器程序c语言

51单片机计数器程序c语言

下面是一个51单片机计数器的简单程序,使用C语言编写。

c
#include <reg51.h>
// 定义计数器的值
volatile unsigned int counter = 0;
// 定义外部中断0的服务函数
void INT0_Handler() interrupt 0 {
// 清除外部中断0标志位
EX0 = 0;
// 计数器值加1
counter++;
}
void main() {
// 设置外部中断0触发方式为下降沿触发
IT0 = 1;
// 使能外部中断0
EX0 = 1;
// 全局中断使能
EA = 1;
while(1) {
// 在此处添加处理计数器值的代码,例如:
// if (counter >= 100) {
// // 计数器值达到100,执行某些操作
// counter = 0; // 计数器清零
// }
}
}
此代码实现了51单片机的外部中断0的计数器功能。

当INT0引脚检测到下降沿时,会触发外部中断0,并执行INT0_Handler()函数,使counter值加1。

在main()函数中,可以添加处理counter值的代码。

例如,当counter值达到某个阈值时,可以执行特定的操作。

注意,这只是一个基础的示例,具体的代码可能会因具体硬件和应用需求而略有不同。

单片机秒表实验报告(一)

单片机秒表实验报告(一)

单片机秒表实验报告(一)单片机秒表实验报告实验目的通过本次实验,掌握单片机外部中断的使用方法,并实现一个简单的秒表功能。

实验材料•STC89C52单片机开发板•12864液晶屏•面包板、杜邦线若干•USB转串口模块及数据线•电脑实验原理本次实验的主要原理是单片机外部中断。

当按下按键时,引脚的电平会发生变化,从而触发外部中断。

单片机在中断服务程序中可以对计数器进行增加或减少等操作,从而实现秒表的功能。

实验步骤1.将按键连接至单片机的外部中断引脚(如P3.2)。

2.在程序中配置外部中断,使单片机可以正确响应按键。

3.编写程序,在中断服务程序中对计数器进行增加或减少,并将计数值显示在LCD液晶屏上。

程序设计#include <reg52.h>sbit sw = P3 ^2;// 定义按键接口sbit rs = P0 ^0;sbit rw = P0 ^1;sbit en = P0 ^2;void delay(unsigned int i){while(i--);}void write_command(unsigned char tt){P2 = tt;rs =0;rw =0;en =1;delay(5);en =0;delay(100);}void write_data(unsigned char tt){P2 = tt;rs =1;rw =0;en =1;delay(5);en =0;delay(100);}void init(){write_command(0x38);// 8位数据口,双行显示,5x7字符 write_command(0x0c);// 关闭光标显示write_command(0x06);// 清屏后光标移动方向设为右write_command(0x01);// 显示开启}void display(unsigned int num){unsigned int i, j, k;i = num /100;j = num %100/10;k = num %10;write_command(0x80);write_data(i +'0');write_data(j +'0');write_data(k +'0');}void main(){unsigned int num =0;init();display(num);IE =0x88;// 打开中断允许while(1){}}void int0() interrupt 0{if(sw ==0){delay(100);if(sw ==0){num ++;display(num);}while(!sw);}}实验结果经过调试,成功实现了秒表实验功能。

单片机开发 外部中断实验

单片机开发 外部中断实验

(4)指定中断向量表中断服务函数地址 比如外部中断1,其设置如下: EALLOW; // 修改被保护的寄存器,修改前应添加EALLOW语句 PieVectTable.XINT1 = &EXTI1_IRQn; EDIS; // EDIS的意思是不允许修改被保护的寄存器 (5)使能外设对应的PIE中断 比如外部中断1,它是由PIE组1的第4通道连接 PieCtrlRegs.PIEIER1.bit.INTx4 = 1; // 使能PIE组1的INT4 EDIS;
1.2 外部中断相关寄存器 (1)外部中断控制寄存器(XINTnCR)。
2.外部中断配置步骤
外部中断相关函数及寄存器在DSP2833x_PieCtrl.c、 DSP2833x_PieVect.c、DSP2833x_GlobalVariableDefs.c文件及其 对应的头文件内查找到 (1)失能CPU级中断,并初始化PIE控制器寄存器和PIE中断向量表 InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable();
外部中断实验
本讲主要内容
1.外部中断介绍 2.外部中断配置步骤 3.硬件设计 4.软件设计
1.外部中断介绍
1.1 外部中断简介 F28335共支持7个外部中断XINT1-XINT7,其中XINT1-XINT2只能
对GPIO0-GPIO31配置;XINT3-XINT7只对GPIO32-GPIO63配置。 XINT13还有一个不可屏蔽的外部中断XNMI共用中断源。每一个外部 中断可以被选择为正边沿或负边沿触发,也可以被使能或者禁止( 包括XNMI)。可屏蔽中断单元包括一个16位增计数器,该计数器在 检测到有效中断边沿时复位为0,同时用来准确记录中断发生的时 间。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档