INT0中断计数
- 格式:doc
- 大小:3.23 MB
- 文档页数:22
一、实验目的1. 理解单片机外部中断的工作原理和触发条件。
2. 掌握如何通过外部中断实现计数功能。
3. 学习中断服务程序的设计方法。
4. 提高单片机编程和调试能力。
二、实验环境1. 单片机:80C512. 开发工具:Keil uVision3. 实验电路:按键、LED灯、单片机及其相关外围电路三、实验原理外部中断是指单片机通过外部引脚接收到的中断信号,使得CPU暂停当前程序,转而执行中断服务程序。
本实验通过外部中断实现计数功能,具体原理如下:1. 将单片机的某个外部引脚(如P3.2)设置为外部中断0(INT0)的触发引脚。
2. 在外部中断0的中断服务程序中,设置一个计数变量,每次中断发生时,计数变量加1。
3. 将计数变量的值通过LED灯显示出来,以观察计数过程。
四、实验步骤1. 创建Keil uVision项目,并添加80C51固件库。
2. 编写C语言程序,实现以下功能:- 初始化外部中断0,设置中断触发方式为下降沿触发。
- 初始化定时器,用于产生中断。
- 编写外部中断0的中断服务程序,实现计数功能。
- 编写主函数,用于设置单片机的工作状态和显示计数结果。
3. 编译并下载程序到单片机。
4. 连接实验电路,包括按键、LED灯和单片机及其相关外围电路。
5. 观察实验现象,验证计数功能是否实现。
五、实验结果与分析1. 实验现象:按下按键,LED灯显示的计数值加1。
2. 分析:- 外部中断0的中断服务程序被正确调用。
- 计数变量在每次中断发生时加1。
- LED灯能够正确显示计数结果。
六、实验总结1. 本实验成功实现了通过外部中断实现计数功能,验证了单片机外部中断的工作原理。
2. 通过编写中断服务程序,掌握了中断编程方法。
3. 实验过程中,遇到了一些问题,如中断服务程序编写错误、程序编译错误等,通过查阅资料和调试,最终解决了问题。
4. 通过本次实验,提高了单片机编程和调试能力,加深了对单片机外部中断的理解。
中断的用法52单片机INT0-外部中断0,低电频或下降沿引起。
INT1-外部中断1,低电频或下降沿引起。
T0-定时器/计数器0中断,由T0计数器计满回零引起。
T1-T2TI/RI-串行口中断,串行端口完成一帧字符发送/接收后引起。
中断允许寄存器IE(可位寻址)D7 EA-全局中断允许位EA=1,开。
EA=0,关。
D6 无效位。
D5 ET2 计数器2,ET2=1,开ET2=0,关。
D4 ES 串行口中断D3 ET1定时器1中断。
D2 EX1外部中断1。
D1 ET0 定时器0。
D0 EX0 外部中断0。
中断优先级寄存器IP(可位寻址)D7、D6、D5无效位。
1为高优先级,0为低优先级。
单片机的定时中断TMOD确定工作方式和功能;TCON控制启动和停止及设置溢出标志。
TMOD(不能位寻址)高四位控制T1,低四位控制T0。
D7 GATE-门控制位GA TE=0,启动与停止仅受TCON寄存器中TRX(X=0,1)来控制。
GA TE=1,受TRX和外部中断引脚(INTO或INT1)上的电平状态来共同控制。
D6 C/T定时器和计数器选择位,1时计数,0时定时。
D5 M1 D4 M0 工作方式选择位。
00方式013位计数器能装载8192个数THX=(8192-N)/32,TLX=(8192-N)%32.01方式一THX=(65536-N)/256,TLX=(65536-N)%256。
10 方式2 THX=256-N,TLX=256-N.。
11方式3 同方式2。
TCON(可位寻址)D7 TF1-定时器1溢出标志位。
D6 TR1-定时器1运行控制为(由软件清零关闭定时器1当GA TE=1,且INT1为高电平时,TR1置1启动定时器1;当GATE=0时,TRI置1启动定时器1。
)D5 TF0 D4 TR0D3 IE1 外部中断1请求标志。
D2 IT1 D1 IE0 D0 IT0定时器初始化过1)对TMOD赋值2)计算初值,并写入TH0、TL0、或THI、TL1。
1、外部中断利用中断INT0计数,并显示计数值,INT0为P3.2口,中断的接线图参考下图:外部中断有INT0和INT1两个,CPU通过INT0引脚(12脚,即P3.2口)及INT1引脚(即13脚,即P3.3口)即可接受外部中断的请求。
外部中断信号的采样方式可分电平触发(低电平触发)及边缘触发(负边缘触发)两种。
通过TCON寄存来控制(见第二点)。
(1)中断允许中断启用寄存器IE,可看作开闭中断功能的开关,各个位的功能见下图:(3)中断向量表中断编号中断源名称中断向量地址- 系统复位0x000 第一个外部中断INT0 0x031 第一个定时器/计数器中断TF0 0x0B2 第二个外部中断INT0 0x133 第二个定时器/计数器中断TF1 0x1B4 串行口中断RI/TI 0x235 第三个定时器/计数器(8052)TF2/EXF2 0x02B上表所示为8051/8052的中断向量。
当发生中断时,程序员将跳至其对应的中断向量地址,执行该位置上的程序。
对于C语言程序,可心不必知道其真实地址,程序设计者只要知道发生中断时,将会执行其中断程序即可。
当然,在中断也程序的定义上,必须明确定义该中断子程序属于哪个中断的中断也程序。
(4)中断子程序格式void 中断子程序名称(void)interrupt中断编号using 寄存器组如:void my_INT0 interrupt 1{}#include <AT89X52.H>unsigned char code table[]={0x28, 0x7E, 0xA2, 0x62, 0x74, 0x61, 0x21, 0x7A, 0x20, 0x60,0xff}; unsigned char count;unsigned int f,e;void delay10ms(void){unsigned char i,j;for(i=20;i>0;i--)for(j=248;j>0;j--);}//***显示子程序**///void disp_count(){ e=count;f=e%10; //个位P0 =table[f];P2 = 0x7f;delay10ms();f=e/10; //十位P0 =table[f];P2 = 0xbf;delay10ms() ;}void main(void){ // IT0=0; //低电平触发IT0=1; //下降沿触发EA=1; ///允许中断EX0=1; ///开外部中部INT0while(1){ disp_count();}}/********************************************************* INT0中断函数*********************************************************/void counter(void) interrupt 0{char x;EX0=0;count++;disp_count();EX0=1;}/********************************************************/练习:1.中断前,程序执行P1口的灯从L1~L8灯顺序点亮,如此不断循环。
51单片机的中断系统8031单片机的中断系统简单实用,其基本特点是:有5个固定的可屏蔽中断源,3个在片内,2个在片外,它们在程序存储器中各有固定的中断入口地址,由此进入中断服务程序;5个中断源有两级中断优先级,可形成中断嵌套;2个特殊功能寄存器用于中断控制和条件设置的编程。
中断系统的结构:5个中断源的符号、名称及产生的条件如下。
INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。
INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。
T0:定时器/计数器0中断,由T0计满回零引起。
T1:定时器/计数器l中断,由T1计满回零引起。
TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。
整个中断系统的结构框图见下图一所示。
由图一可见,外部中断有下跳沿引起和低电平引起的选择;串行中断有发送(TI)相接收(R1)的区别;各个中断源打开与否,受中断自身的允许位和全局允许位的控制,并具有高优先级和低优先级的选择。
中断系统的控制寄存器:中断系统有两个控制寄存器IE和IP,它们分别用来设定各个中断源的打开/关闭和中断优先级。
此外,在TCON中另有4位用于选择引起外部中断的条件并作为标志位。
中断允许寄存器—IEIE在特殊功能寄存器中,字节地址为A8H,位地址(由低位到高位)分别是A8H-AFH。
IE用来打开或关断各中断源的中断请求,基本格式如下图二所示:EA:全局中断允许位。
EA=0,关闭全部中断;EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。
×:无效位。
ES:串行I/O中断允许位。
ES=1,打开串行I/O中断;ES=0,关闭串行I/O中断。
ETl;定时器/计数器1中断允许位。
ETl=1,打开T1中断;ETl=O,关闭T1中断。
EXl:外部中断l中断允许位。
EXl=1,打开INT1;EXl=0,关闭INT1。
ET0:定时器/计数器0中断允许位。
51单片机中断系统详解51 单片机中断系统详解(定时器、计数器)51 单片机中断级别中断源INT0---外部中断0/P3.2 T0---定时器/计数器0 中断/P3.4 INT1---外部中断1/P3.3 T1----定时器/计数器1 中断/P3.5 TX/RX---串行口中断T2---定时器/计数器 2 中断第5 最低4 5 默认中断级别最高第2 第3 第4 序号(C 语言用) 0 1 2 3 intrrupt 0中断允许寄存器IE位序号符号位EA/0 ------ET2/1 ES ET1 EX1 ET0 EX0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 EA---全局中允许位。
EA=1,打开全局中断控制,在此条件下,由各个中断控制位确定相应中断的打开或关闭。
EA=0,关闭全部中断。
-------,无效位。
ET2---定时器/计数器2 中断允许位。
ET2=1, 打开T2 中断。
ET2=0,关闭T2 中断。
关,。
ES---串行口中断允许位。
关,。
ES=1,打开串行口中断。
关,。
ES=0,关闭串行口中断。
关,。
ET1---定时器/计数器1 中断允许位。
关,。
ET1=1,打开T1 中断。
ET1=0,关闭T1 中断。
EX1---外部中断1 中断允许位。
EX1=1,打开外部中断1 中断。
EX1=0,关闭外部中断1 中断。
ET0---定时器/计数器0 中断允许位。
ET0=1,打开T0 中断。
EA 总中断开关,置1 为开;EX0 为外部中断0 (INT0) 开关,。
ET0 为定时器/计数器0(T0)开EX1 为外部中断1(INT1)开ET1 为定时器/计数器1(T1)开ES 为串行口(TX/RX)中断开ET2 为定时器/计数器2(T2)开ET0=0,关闭T0 中断。
EX0---外部中断0 中断允许位。
EX0=1,打开外部中断0 中断。
EX0=0,关闭外部中断0 中断。
中断优先级寄存器IP位序号位地址------PS/0 PT1/0 PX1/0 PT0/0 PX0/0 DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 -------,无效位。
下面是一个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值达到某个阈值时,可以执行特定的操作。
注意,这只是一个基础的示例,具体的代码可能会因具体硬件和应用需求而略有不同。
目录1单片机基础知识 (1)1.1单片机的定义 (1)1.2单片机的基本组成 (1)1.3单片机的特点 (2)1.3.1 Protues的特点 (3)1.3.2软件内部结构 (3)2 Keil软件及Protues软件的应用 (4)2.1 Keil软件的应用步骤 (4)2.2 Protues软件的应用步骤 (4)2.3用软件仿真 (8)3 INT0中断计数 (9)3.1设计任务 (9)3.2硬件设计 (9)3.2.1设计思路 (9)3.2.2设计原理图 (9)3.2.3 源程序 (9)3.2.4设计过程 (11)3.2.5仿真 (17)总结 (19)致谢 (20)参考文献 (21)1单片机基础知识1.1单片机的定义所谓的单片机是将计算机的基本部件微型化并集成到一块芯片上,具备独特功能的微型计算机,通常片内都含有CPU、ROM、RAM、并行I/O、串行I/O、定时器/计数器、中断控制、系统时钟及系统总线等。
单片机全称为单片微型计算机,又称微控制器或嵌入式控制器。
1.2单片机的基本组成1 单片机与现代微型计算机一样,结构均采用冯诺依曼提出的“存储程序”思想,即程序和数据都被放在内存中,采用二进制代替十进制进行运算和存储程序。
一个最简单的单片机由以下五部分组成:(1)中央处理器CPU,包括运算器,控制器和寄存器组;(2)存储器,包括ROM和RAM;(3)输入输出(I/O)接口,它与外部输入输出设备相连;(4)电源和时钟电路。
基本结构图如图1.1所示。
图1.1 单片机的基本结构51系列单片机在功能上有基本型和增强型两类。
它具有体积小、功能全、面向控制、开发应用方便等特点,在工业实时控制、智能控制、测控等方面得到广泛应用。
2 以8051为例介绍其功能和结构,它的内部结构由8大部分组成:(1)一个8位中央处理器CPU. CPU的内部结构是由算术逻辑运算单元、累加器、程序状态字寄存器、堆栈指针、寄存器、程序计数器、指令寄存器、暂存器等部件组成,是单片机的核心部件。
(2)128个字节的片内数据存储器RAM(3)3KB的片内程序存储器ROM或EPROM(4)18个特殊功能寄存器SFR(5)4个8位并行输入输出I/O接口:P0、P1、P2、P3。
(6)1个串行I/O接口,完成单片机与其他微机之间的串行通信。
(7)2个16位定时器/计数器T0、T1。
(8)具有5个中断源,2个可编程优先级的中断系统,它可以接收外部中断申请,定时器/计数器中断申请,串行接口中断申请。
1.3单片机的特点1 单片机与通用微机相比,具有以下优点:(1)控制功能强(2)抗干扰性强,可靠性高,工作温度范围宽(3)开发周期短,性价比高,易于产品化2 微型计算机的出现是电子数字计算机广泛应用到人们日常工作、生活领域中去的一个重大的转折点。
3 单片微型计算机简称为单片机。
单片机是指一个集成在一块芯片上的完整计算机系统。
尽管他的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:中央处理部件(CPU)、存储器(RAM,ROM)、定时器/计数器、各种输入/输出(I/O)接口(如并行I/O口、串行I/O口和A/D转换器)等,目前大部分还会具有外存。
同时集成诸如通讯接口、定时器,实时时钟等外围设备。
而现在最强大的单片机系统甚至可以将声音、图像、网络、复杂的输入输出系统集成在一块芯片上。
4 单片机也被称为微控制器(Microcontroller),是因为它最早被用在工业控制领域。
单片机由芯片内仅有CPU的专用处理器发展而来。
最早的设计理念是通过将大量外围设备和CPU集成在一个芯片中。
他支持汇编和C的混合编程,同时具备强大的软件仿真和硬件仿真功能。
Protues 能够很方便的和KEIL、Matlab IDE等编译模拟软件结合。
Proteus提供了大量的元件库有RAM,ROM,键盘,马达,LED,LCD,AD/DA,部分SPI器件,部分IIC器件,它可以仿真单片机和周边设备,可以仿真51系列、AVR,PIC等常用的MCU,与keil和MPLAB不同的是它还提供了周边设备的仿真,只要给出电路图就可以仿真。
1.3.1 Protues的特点Proteus软件具有其它EDA工具软件的功能。
这些功能是:(1)原理布图(2)PCB自动或人工布线(3)SPICE电路仿真具有3大功能模块:(1)—个易用而又功能强大的ISIS原理布图工具;(2)PROSPICE混合模型SPICE仿真;(3) ARES PCB设计.1.3.2 软件内部结构Proteus提供了丰富的资源:(1)Proteus可提供的仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。
(2)Proteus可提供的仿真仪表资源:示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。
理论上同一种仪器可以在一个电路中随意的调用。
(3)除了现实存在的仪器外,Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。
这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。
这些都尽可能减少了仪器对测量结果的影响。
(4)Proteus可提供的调试手段 Proteus提供了比较丰富的测试信号用于电路的测试这些测试信号包括模拟信号和数字信号。
2 Keil软件及Protues软件的应用2.1 Keil软件的应用步骤1 建立工程文件2 汇编,调试系统程序Keil 单片机模拟调试软件内集成了一个文本编辑器,用该文本编辑器可以编辑源程序。
在集成开发环境中选择菜单“File → New”、单击对应的工具按钮或者快捷键Ctrl +N 将打开一个新的文本编辑窗口,完成汇编语言源文件的输入,并且完成源程序向当前工程的添加。
然后在集成开发环境中选择菜单“File→Save As”可以完成文件的第一次存储。
注意,汇编语言源文件的扩展名应该是“ASM”,它应该与工程文件存储在同一文件夹之内。
在完成文件的第一次存储以后,当对汇编语言源文件又进行了修改,再次存储文件则应该选择菜单“File→Save”,单击对应的工具按钮或者快捷键Ctrl +S 实现文件的保存。
接着的工作需要把汇编语言源文件加入工程之中。
选择工程管理器窗口的子目“Source Group 1”,再单击鼠标右键打开快捷菜单。
在快捷菜单中选择“Add File to Group ‘Source Group 1’”,加入文件对话框被打开。
在这个对话框的“查找范围(I)”下拉列表框中选择存储汇编语言源文件的文件夹,在“文件类型(T)”下拉列表框选择“Asm Source file(*.a*;*.src)”,这时存储的汇编语言源文件将显示出来。
双击要加入的文件名或者选择要加入的文件名再单击“Add”按钮即可完成把汇编语言源文件加入工程。
文件加入以后,加入文件对话框并不消失,更多的文件也可以利用它加入工程。
如果不需要加入其它文件,单击“Close”按钮可以关闭加入文件对话框。
这时工程管理窗口的文件选项卡中子目录“Source Group 1”下出现一个汇编语言源文件。
需要注意,当把汇编语言源文件加入工程但还没有关闭加入文件对话框,这时有可能被误认为文件没有成功地加入工程而再次进行加入操作,系统将显示所需的文件已经加入的提示。
在这种情况下,单击提示框中的“确定”按钮,再单击“Close”按钮可以关闭加入文件对话框。
3 编译源程序,出现错误时,返回上一级对错误更改后重新编译,直到没有错误为止。
2.2 Protues软件的应用步骤1 Protues打开后会出现以下窗口界面,如图2.1所示:图2.1 Protues窗口界面2 各个部分的功能介绍:(1)原理图编辑窗口(The Editing Window):顾名思义,它是用来绘制原理图的。
蓝色方框内为可编辑区,元件要放到它里面。
注意,这个窗口没有滚动条,可用预览窗口来改变原理图的可视范围。
(2)预览窗口(The Overview Window):它可显示两个内容,一个是:当你在元件列表中选择一个元件时,它会显示该元件的预览图;另一个是:当你的鼠标焦点落在原理图编辑窗口时(即放置元件到原理图编辑窗口后或在原理图编辑窗口中点击鼠标后),它会显示整张原理图的缩略图,并会显示一个绿色的方框,绿色的方框里面的内容就是当前原理图窗口中显示的内容,因此,你可用鼠标在它上面点击来改变绿色的方框的位置,从而改变原理图的可视范围。
(3)模型选择工具栏(Mode Selector Toolbar ):主要模型(Main Modes):①选择元件(components)(默认选择的)②放置连接点③放置标签(用总线时会用到)④放置文本⑤用于绘制总线⑥用于放置子电路⑦用于即时编辑元件参数(先单击该图标再单击要修改的元件)(4)2D 图形(2D Graphics):①画各种直线②画各种方框③画各种圆④画各种圆弧⑤画各种多边形⑥画各种文本⑦画符号⑧画原点等(5)元件列表(The Object Selector):用于挑选元件(components )、终端接口(terminals )、信号发生器(generators )、仿真图表(graph )等。
举例,当你选择“元件(components)”,单击“P”按钮会打开挑选元件对话框,选择了一个元件后(单击了“OK”后),该元件会在元件列表中显示,以后要用到该元件时,只需在元件列表中选择即可。
(6)方向工具栏(Orientation Toolbar):旋转:旋转角度只能是90 的整数倍。
翻转:完成水平翻转和垂直翻转。
使用方法:先右键单击元件,再点击(左击)相应的旋转图标。
(7)仿真工具栏仿真控制按钮①运行②单步运行③暂停④停止3 添加元件到元件列表中,如图2.2所示:图2.2 元件添加窗口4 添加元件和连线如图2.3图2.3 连线图2.3 用软件仿真1 打开Keil uVision3,新建Keil项目,选择AT89C51单片机作为CPU,新建汇编源文件,编程序,并将其导入到Source Group 1中。
在Options for Targt对话窗口中,选中Output 选项卡中的Creat HEX File 选项。
编译汇编源程序,改正程序中的错误。
2 在Protues中,选中AT89C51并单击鼠标左键,打开Edit Compont对话框,在此窗口中Program File 栏中,选择先前用Keil生成的HEX文件。
如图2.4所示:图2.4 载入HEX文件3 INT0中断计数3.1设计任务用AT89C51及电阻、电容、晶闸管、数码管、排阻等实现中断计数。