单片机中断作业(三)
单片机 中断处理
![单片机 中断处理](https://img.taocdn.com/s3/m/4f1bf4f88ad63186bceb19e8b8f67c1cfbd6ee4d.png)
单片机中断处理【实用版】目录1.什么是单片机中断处理2.单片机中断处理的作用和优势3.单片机中断处理的工作原理4.单片机中断处理的应用实例5.单片机中断处理的注意事项正文一、什么是单片机中断处理单片机中断处理是指在单片机系统中,当某个外部事件发生时,单片机会暂停当前正在执行的任务,转去处理这个外部事件,处理完外部事件后再回到原来暂停的任务继续执行。
这种机制可以使单片机更加高效地响应和处理各种外部事件,实现多道程序设计的必要条件。
二、单片机中断处理的作用和优势1.提高系统响应速度:当有外部事件发生时,单片机可以立即暂停正在执行的任务,转去处理外部事件,使系统能够快速地响应和处理各种突发情况。
2.实现多道程序设计:通过中断处理,单片机可以在一个循环中执行多个任务,实现多道程序设计,提高系统运行效率。
3.提高系统稳定性:当发生外部事件时,单片机可以及时地处理这些事件,避免系统崩溃或数据丢失,提高系统的稳定性。
三、单片机中断处理的工作原理单片机中断处理的工作原理主要包括以下几个步骤:1.中断请求:当外部事件发生时,会向单片机发送一个中断请求信号,告诉单片机有外部事件需要处理。
2.中断响应:单片机接收到中断请求信号后,会立即暂停正在执行的任务,并将当前任务的状态保存在内存中。
3.中断处理:单片机根据中断请求信号的类型,调用相应的中断处理函数,处理外部事件。
4.中断返回:处理完外部事件后,单片机会返回到原来暂停的任务,继续执行被暂停的任务。
四、单片机中断处理的应用实例1.按键触发:当用户按下某个按键时,单片机接收到按键信号,立即暂停当前任务,执行按键处理函数,判断按键的类型,并根据按键类型执行相应的操作。
处理完按键事件后,单片机返回原来暂停的任务。
2.传感器触发:当某个传感器检测到外部环境变化时,会向单片机发送一个中断请求信号。
单片机接收到信号后,立即暂停当前任务,执行传感器处理函数,读取传感器数据,并根据数据执行相应的操作。
单片机中断系统
![单片机中断系统](https://img.taocdn.com/s3/m/e4b48475a22d7375a417866fb84ae45c3b35c289.png)
单片机中断系统一、单片机中断系统的概念单片机中断系统是指在程序运行过程中,由于出现特殊情况(如外部设备的输入信号、定时器溢出等),使得单片机暂时停止当前任务的执行,转而执行相应的中断服务程序(ISR),以处理中断事件。
中断处理完毕后,再返回到中断点继续执行原来的任务。
这种特殊的中断机制,使得单片机能够同时处理多个任务,实现了实时性较高的应用程序设计。
二、单片机中断系统的结构单片机中断系统主要由以下几个部分组成:1、中断源:产生中断的外部设备或内部定时器。
2、中断请求寄存器:用于存储各个中断源的中断请求状态。
3、中断优先级寄存器:用于确定多个中断源的优先级。
4、中断服务程序(ISR):用于处理中断事件,执行相应的操作。
5、中断返回:中断处理完毕后,返回原程序继续执行。
三、单片机中断系统的处理过程当单片机检测到某个中断源发出中断请求时,会暂停当前任务的执行,按照优先级顺序执行相应的中断服务程序(ISR)。
在ISR中,程序会读取中断源的中断请求状态,并对相应的中断源进行处理。
处理完毕后,程序会返回原程序继续执行。
如果此时还有其他的中断源发出中断请求,则根据优先级顺序再次执行相应的ISR。
四、单片机中断系统的应用单片机中断系统在实时控制、数据采集、通信等领域有着广泛的应用。
例如,在工业控制中,当某个传感器发出中断请求时,单片机可以暂停当前任务的执行,转而执行相应的中断服务程序(ISR),对传感器数据进行采集和处理。
处理完毕后,再返回原程序继续执行。
这样,单片机可以在不丢失任何数据的情况下,实时地响应外部设备的请求。
五、总结单片机中断系统是实现实时控制和数据处理的重要手段之一。
通过合理的配置和使用中断系统,可以提高单片机的实时性能和数据处理能力。
在实际应用中,需要根据具体的需求和硬件条件选择合适的单片机型号和中断系统配置方案,以满足系统的实时性和稳定性要求。
单片机的中断系统在嵌入式系统设计中,单片机因其体积小、性价比高、可靠性强等特性被广泛应用。
51单片机中断程序例子
![51单片机中断程序例子](https://img.taocdn.com/s3/m/f0b504ee27fff705cc1755270722192e45365887.png)
51单片机中断程序例子
1. 外部中断:当外部信号引脚检测到高电平时,单片机会触发外部中断服务程序。
可以利用外部中断实现按键扫描功能,当按键按下时,触发中断程序对按键进行处理。
2. 定时器中断:利用定时器中断可以实现精确的时间控制。
例如,我们可以设置定时器中断为1秒,当定时器溢出时,触发中断程序,实现1秒钟执行一次的任务。
3. 串口中断:当接收到串口数据时,单片机会触发串口中断服务程序,可以利用串口中断实现串口通信功能。
4. ADC中断:当模数转换器完成一次转换时,单片机会触发ADC中断服务程序,可以利用ADC中断实现模拟信号的采集和处理。
5. 看门狗中断:看门狗定时器溢出时,单片机会触发看门狗中断服务程序,可以利用看门狗中断实现系统复位或其他相关功能。
6. 外部中断优先级:当多个外部中断同时触发时,可以通过设置外部中断的优先级来确定触发的顺序和优先级。
7. 定时器中断优先级:当多个定时器中断同时触发时,可以通过设置定时器中断的优先级来确定触发的顺序和优先级。
8. 中断嵌套:单片机支持中断嵌套,即在一个中断服务程序中触发
另一个中断服务程序,可以通过中断嵌套实现复杂的任务处理。
9. 中断屏蔽:单片机支持对中断的屏蔽,即可以通过设置中断屏蔽标志位来屏蔽某些中断,使其暂时不被触发。
10. 中断标志位:单片机提供中断标志位,用于标识中断是否被触发。
在中断服务程序中,可以通过读取和清除中断标志位来判断中断是否发生。
以上是根据51单片机中断程序的例子进行的描述,这些例子涵盖了常见的中断类型和相关功能。
通过学习和理解这些例子,可以更好地掌握51单片机中断编程的原理和方法。
单片机中断Microsoft Office Word 文档
![单片机中断Microsoft Office Word 文档](https://img.taocdn.com/s3/m/316d2a180912a2161479292a.png)
1.中断源:发出中断请求的来源。
2.51中断源有三类:外部中断、定时中断和串行口中断。
3.80C51单片机有5个中断源(8052有六个),具有两个中断优先极,可以实现二级中断嵌套。
4.5个中断源的排列顺序由中断优先级控制寄存器IP和顺序查询逻辑电路(图6-4中的硬件查询)共同决定。
5.5个中断源对应5个固定的中断入口地址(在内部ROM),亦称矢量地址。
6.与中断系统有关的特殊功能寄存器有中断源寄存器(即专用寄存器TCON、SCON的相关位)、中断允许控制寄存器IE和中断优先级控制寄存器IP。
7.5个中断源的中断请求是否会得到响应,要受中断允许寄存器IE各位的控制,它们的优先级分别由IP各位来确定。
8.中断请求标志例如CPU开中断可由以下两条指令来实现:SETB 0AFH ;EA置1或 ORL IE,#80H ;按位“或”,EA置1CPU关中断可由以下两条指令来实现:CLR 0AFH ;EA清0或 ANL IE,#7FH ;按位“与”,EA清0又如设置外部中断源0为高优先级,外部中断源1为低优先级,可由下面指令来实现:SETB 0B8H ;PX0置1CLR 0BAH ;PXl清0或 MOV IP,#000××0×1B ;PX0置1,PXl清0例:设80C51的片外中断为高优先级,片内中断为低优先级。
试设置IP相应值。
解:(a)用字节操作指令MOV IP, #05H或 MOV 0B8H,#05H(b)用位操作指令SETB PX0SETB PX1CLR PSCLR PT0CLR PT16.3.3 中断处理过程中断处理过程可分为三个阶段,即中断响应、中断处理和中断返回。
1. 中断响应(1) 响应条件CPU响应中断的条件有:①有中断源发出中断请求。
②中断总允许位EA=1,即CPU开中断。
③申请中断的中断源的中断允许位为1,即中断没有被屏蔽。
④无同级或更高级中断正在被服务。
⑤当前的指令周期已经结束。
51单片机中断程序大全
![51单片机中断程序大全](https://img.taocdn.com/s3/m/19beec652e3f5727a5e962b7.png)
//实例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(); //延时}}}。
单片机外部中断实验报告
![单片机外部中断实验报告](https://img.taocdn.com/s3/m/54972a4dec3a87c24128c466.png)
实验三外部中断实验报告班级:学号:姓名:教师:一、实验目的1、掌握单片机外部中断的原理及过程。
2、掌握单片机外部中断程序的设计方法。
3、掌握单片机外部中断时中断方式的选择方法。
二、实验内容如下图所示,P3.2设为输入,P2设为输出位,连有8个发光二极管D1~D8。
每当发生外部中断时,发光二极管以向下流水灯的方式点亮。
分别选择边沿触发外部中断放是和电平触发外部中断方式两种。
三、编程提示1、P3口是8位准双向口,具有双重功能:第一功能和P1口一样,作为输入输出口,也有字节操作和位操作两种方式,每一位可分别定义为输入或输出;第二功能定义如下:P3.0 RXD 串行输入口P3.1 TXD 串行输出口P3.2 INT0 外部中断0请求输入线P3.3 INT1 外部中断1请求输入线P3.4 T0定时器/计数器T0外部计数器脉冲输入线P3.5 T1定时器/计数器T1外部计数器脉冲输入线P3.6 WR外部数据存贮器写脉冲输出线P3.7 RD外部数据存贮器读脉冲输出线2、各中断服务程序入口地址:外部中断0 03H定时器/计数器T1溢出中断0BH外部中断1 13H定时器/计数器1BH串行口中断23H3、外部中断的产生条件中断允许寄存器IE:EA ES ET1 EX1 ET0 EX0(1)外部中断源允许中断(中断0:EX0=1;中断1:EX1=1)。
(2)CPU开中断(EA=1)。
(3)外部中断方式CPU发出中断申请。
4、外部中断方式的选择控制TCON:TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0IT0是选择文字则外部中断0请求(INT0)边沿触发方式或电平触发方式的控制位。
前一方式IT0=1,后一方式IT0=0。
IT1是选择外部中断1请求(INT1)为边沿触发方式或电平触发方式的控制位。
前一方式IT1=1,后一方式IT1=0。
当8031复位后,TCON被清0。
5、外部中断电路负脉冲作为中断请求信号时,为了保证中断的唯一性,必须加上消除开关抖动的电路或者去抖动延时程序,保证每次只产生单脉冲,构成边沿触发方式外部中断电路。
单片机中断问题30例
![单片机中断问题30例](https://img.taocdn.com/s3/m/3f386c05de80d4d8d15a4f75.png)
前八例1、单片机外中断INT0为下降沿触发,当中断被触发后cpu执行中断程序,若本次中断的程序还未执行完INT0又来了一个相同的下降沿中断信号怎么办?cpu会怎么处理?若是定时器中断呢?串口中断呢?求解释答:再来一个INT0信号不会执行。
相同的优先级不会打断正在执行的中断。
一. 如果是高优先级的中断来了,会打断低优先级的正在执行的中断而执行高优先级的中断。
51单片机的默认(此时的IP寄存器不做设置)中断优先级为:外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断;当同时有几种中断到达时,高优先级中断会先得到服务。
例如:当计数器0中断和外部中断1(优先级计数器0中断>外部中断1)同时到达时,会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的,包括逻辑优先级比它高的外部中断0计数器0中断。
51单片机的中断优先级控制寄存器IP可以把默认的中断优先级设置为高或低级,例如默认是外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断;现在设为定时1 和串行中断为高优先级其它为低,那么中断0执行时会被定时器1 或串行中断打断,如果设定的两个高优先级定时/计数器1 和串行中断同时响应,会再自然排队,先执行定时1中断再执行串行中断。
2、单片机中断问题,中断3为什么不执行,整个程序有什么不对的地方呢?#include <reg52.h>#define uint unsigned int#define uchar unsigned charsbit p1_0=P1^0;sbit p1_1=P1^1;sbit p1_2=P1^2;sbit p1_3=P1^3;sbit p1_4=P1^4;sbit p1_5=P1^5;uchar PWM_T1 = 0;uchar PWM_T2 = 0;uint i,m;void delay(uint z){for(i=z;i>0;i--)for(m=0;m<110;m++);}void PWM_value_left(int pwm_set){PWM_T1=pwm_set;}void PWM_value_right(int pwm_set){PWM_T2=pwm_set;}void main(void){bit flag = 1;uint n;TMOD=0x22;TH0=241;TH1=241;TL0=241;TL1=241;TR0=1;TR1=1;ET0=1;ET1=1;EA=1;P1=0xf0;delay(20);PWM_value_left(7); PWM_value_right(10); delay(100);PWM_value_left(8); PWM_value_right(9); delay(100);PWM_value_left(9); PWM_value_right(8); delay(100);PWM_value_left(10); PWM_value_right(7);}timer0() interrupt 1 using 2 {static uint t ;t++;if(t==10){t=0;p1_0=1;p1_1=0;}if(PWM_T1==t)P1=P1&0xfc;}timer1() interrupt 3{static uint t1 ;t1++;if(t1==10){t1=0;p1_2=1;p1_3=0;}if(PWM_T2==t1)P1=P1&0xf3;}答:没有主循环,没有等到中断3程序运行一次就跑飞了!!!在void main(void){//...你的程序//在这里加死循环,等待中断while(1){;}}而且,中断响应函数里必须要清中断标志位(你的没有)!3、各位大侠帮我看一下我写的51单片机C程序中断有没有问题,执行中断后不能继续执行主程序,注:P3.2口一直接注:P3.2口一直接地,程序如下:#include <reg52.h>sbit dula=P2^6;sbit wela=P2^7;sbit d0=P1^0;sbit d1=P1^1;sbit d2=P1^2;sbit d3=P1^3;sbit d4=P1^4;sbit d5=P1^5;sbit d6=P1^6;sbit d7=P1^7;#define uchar unsigned char#define uint unsigned int uchar num;uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delay(uint z);void main(){EA=1;EX0=1;IT0=0;wela=1;P0=0xc0;wela=0;while(1){for(num=0;num<16;num++) {dula=1;P0=table[num];dula=0;delay(1000);}}}void delay(uint z){uint a,b;for(a=z;a>0;a--)for(b=110;b>0;b--);}void exter0() interrupt 0 {uint c;for(c=0;c<25000;c++);d0=0;for(c=0;c<25000;c++);d0=1;for(c=0;c<25000;c++);d1=0;for(c=0;c<25000;c++);d1=1;for(c=0;c<25000;c++);d2=0;for(c=0;c<25000;c++);d2=1;for(c=0;c<25000;c++);d3=0;for(c=0;c<25000;c++);d3=1;for(c=0;c<25000;c++);d4=0;for(c=0;c<25000;c++);d4=1;for(c=0;c<25000;c++);d5=0;for(c=0;c<25000;c++);d5=1;for(c=0;c<25000;c++);d6=0;for(c=0;c<25000;c++);d6=1;for(c=0;c<25000;c++);d7=0;for(c=0;c<25000;c++);d7=1;}答:IT0=0;//低电平触发,只要单片机监测到是低电平,就触发中断你P3.2一直接地,一直是低电平,那中断就不断的执行,当然回不到主程序中了。
单片机课程形考作业指导3
![单片机课程形考作业指导3](https://img.taocdn.com/s3/m/5c9ad707f78a6529647d5368.png)
第五章中断系统第六章定时器及应用一、判断下列说法的正误,并说明原因:1、中断允许寄存器IE的最高位(EA)为1是89C51系统响应中断的重要条件。
√2、TCON 及SCON寄存器内的6个中断标志位都可以用软件指令对其置位或复位。
√3、89C51的INT0信号只能以“保持足够宽度的低电平”这一种方式来触发中断。
×4、中断响应过程必定有堆栈操作。
√5、89C51单片机中,外部中断源的优先级比内部中断源的优先级高。
×6、多个中断源同时请求服务时,CPU将响应优先级别最高的中断请求,这就意味着其他低级中断申请信号无效,再也不会被响应。
×7、89C51单片机在响应某低级中断请求并进入中断服务后,定能再响应高优先级的中断请求。
×8、89C51单片机在响应某设备的中断请求并进入中断服务后,不能再响应该设备的第二次中断请求(即不能实现自身中断嵌套)。
√9、89C51单片机中两个定时器的工作方式是由同一个方式选择控制字设定的。
√10、定时器不重复装入初值与不再启动定时器是一回事。
×11、T0和T1用做计数器时,计数频率不能超过晶振频率的1/24。
√12、无论是定时还是计数方式,当启动T0工作时都需要TR0=1。
√13、89C51中的两个定时器能实现硬件直接级连。
√14、当定时器0工作在模式3时,定时器1就不能工作在中断方式。
√15、无论使定时还是计数方式,当启动定时/计数器工作时都要用到INT i信号,此时对应的外部中断方式就不能同时使用。
×16、输入/输出设备必须通过I/O接口才能接到系统总线上和主机进行信息交换。
√17、TMOD中的GATE=1时表示由两个信号控制定时器的启停。
√18、在MCS-51系统中,一个机器周期等于1μs。
×二、填空题:1、若89C51的晶振为12MHz,则其两个定时计数器对重复频率高于MHz的外部事件是不能正确计数的。
单片机 中断实验 实验报告
![单片机 中断实验 实验报告](https://img.taocdn.com/s3/m/ee7a204f5acfa1c7aa00cc60.png)
实验三中断实验一、实验内容1.当单片机的INT0端出现负脉冲时,进入相应的中断服务程序,P1口做输出口,接8只发光二极管,通过程序控制发光二极管依次点亮。
2.选择外部中断0(P3.2)接按键INTO到地,按下出现负脉冲时,进入相应的中断服务程序,在中断服务程序中,数码管显示加1,在0-9之间循环。
二、实验目的1、学习外部中断技术的基本使用方法。
2、学习中断处理程序的编程方法。
三、实验原理(中断原理部分参考教材填写)本实验中断处理程序的应用,最主要的地方是如何保护进入中断前的状态,使得中断程序执行完毕后能回到交通灯中断前的状态。
要保护的地方,除了累加器ACC、标志寄存器PSW外,还要注意。
一是主程序中的延时程序和中断处理程序中的延时程序不能混用,本实验中,主程序延时用的寄存器和中断延时用的寄存器应不相同。
四、实验电路(参考学习板说明书Page11)五、接线方式(参考学习板说明书Page11)P1口接发光二极管的L1—L8;单脉冲输出端“”接INI0,即接89C51的P3.2管脚。
六、参考程序程序一、ORG 0030Htmpdate: DB 01H,02H,04H,08H,10H,20H,40H,80H /*定义常量做为输出*/ORG 0000HLJMP MAINORG 0003HLJMP INTMAIN: SETB EA /*首先开启总中断*/SETB EX0 /*开启外部中断0 */SETB IT0 /* 设置成下降沿触发方式*/MOV R7,#8MOV DPTR,#TMPDATEL0: SJMP L0 //等待中断INT: DJNZ R7,L1 /*外部中断0 每按一次主板上的"INT0"键,中断响应,调用该函数,我们从P1口输出点亮发光二极管*/MOV R7,#8L1: MOV A,R7MOVC A,@A+DPTRCPL AMOV P1,ARETIEND程序二、/***************************************************************功能:按下按键,数码管加1,用中断的方法作者:txl时间:2009-04版本:V1.0***************************************************************/#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit wei1=P2^0;sbit key1=P3^2;uchar code table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//共阳数码管码表//全局变量uchar num;//函数声明void delay(uint z);void led_show(uchar temp);void main(){num=0;// IT0=1; //中断以下降沿方式触发IT0=0; //中断以低电平方式触发EX0=1; //允许外部中断0中断EA=1; //总中断开wei1=0;while(1){led_show(num); //显示}}/*************************************************************** 功能:外部中断0入口***************************************************************/ void EX0_Int() interrupt 0{EX0 = 0; //关中断num++;if(num==10)num=0;while(!key1);//消除抖动delay(5);while(!key1);// for(;!key1;); //等待放开EX0 = 1; //开中断}void delay(uint z){uint x,y;for(x=z;x>0;x--)for(y=110;y>0;y--);}void led_show(uchar temp){P0=table[temp];delay(5);}扩展程序三、#include <AT89X52.H> //包含头文件sbit led=P1^0;#define shuma P0 //数码管数据口sbit LED_0=P2^0; //定义数码管4个控制位sbit LED_1=P2^1;sbit LED_2=P2^2;sbit LED_3=P2^3;unsigned char m;unsigned int code ton[7];void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4);/*=====0-9=====A-G=====*/unsigned char a[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阳极数码管的段码0 1 2 3 4 5 6 7 8 9 A B C D E F//定时初值计算方法:以5ms为例,5ms=5000us,0xffff-5000/1.085即为TH和TL的值void int1() interrupt 3 //T1中断,时间是5ms{TR1=0; //关中断TH1=0xed; //装定时器初值实现5ms定时TL1=0xff;ET1=1; //开中断TR1=1;display(1,2,3,4); //在中断里显示数字}void main( void ){m=1;TMOD=0x10; //设置为T1定时器TH1=0xed; //装定时器初值TL1=0xff;TR1=1; //开中断ET1=1;EA=1;while(1){}}void display(unsigned char d1,unsigned char d2,unsigned char d3,unsigned char d4) {if(m==1) //每进入一次中断显示1位,用变量m作为显示位标识{LED_0=0; //使能该数码管控制位LED_1=LED_2=LED_3=1; //其他控制位无效shuma=a[d1]; //按照数据点亮该数码管}if(m==2) //第二次中断显示第二位{LED_1=0;LED_0=LED_2=LED_3=1;shuma=a[d2];}if(m==3) //第三次中断显示第三位{LED_2=0;LED_1=LED_0=LED_3=1;shuma=a[d3];}if(m==4) //第四次中断显示第四位{LED_3=0;LED_1=LED_2=LED_0=1;shuma=a[d4];}m++; //数码管位循环扫描if(m>=5) //如果4次中断显示完成,则回到第一重新显示m=1;}。
51单片机中断程序例子
![51单片机中断程序例子](https://img.taocdn.com/s3/m/9c6a5efaba4cf7ec4afe04a1b0717fd5360cb2c9.png)
51单片机中断程序例子1. 外部中断程序:外部中断是指由外部设备或外部信号触发的中断。
在51单片机中,通过设置中断允许位和中断优先级来实现对外部中断的响应。
例如,当外部设备发出一个信号时,单片机可以立即停止当前任务,转而执行外部中断程序。
外部中断程序的编写需要根据具体的外部设备和信号进行相应的处理,如读取设备状态、处理数据等。
通过外部中断程序,可以实现单片机与外部设备的互动和数据交换。
2. 定时器中断程序:定时器中断是指通过设置定时器的计数值和中断允许位,使得在指定的时间间隔内触发中断。
在51单片机中,可以通过定时器中断来实现定时任务的执行。
例如,可以设置一个定时器,在每隔一定的时间就触发中断,然后在中断程序中执行相应的任务,如数据采集、数据处理等。
通过定时器中断程序,可以实现定时任务的自动执行,提高系统的实时性和可靠性。
3.串口中断程序:串口中断是指通过串口通信接口接收或发送数据时触发的中断。
在51单片机中,可以通过设置串口中断允许位和中断优先级来实现对串口数据的中断处理。
例如,当接收到一个完整的数据包时,单片机可以立即停止当前任务,转而执行串口中断程序,对接收到的数据进行处理。
通过串口中断程序,可以实现单片机与外部设备的数据交换和通信。
4. ADC中断程序:ADC(模数转换器)中断是指在进行模数转换时触发的中断。
在51单片机中,可以通过设置ADC中断允许位和中断优先级来实现对模数转换结果的中断处理。
例如,当模数转换完成后,单片机可以立即停止当前任务,转而执行ADC中断程序,对转换结果进行处理和分析。
通过ADC中断程序,可以实现对模拟信号的采集和处理,用于实时监测和控制。
5. 外部中断优先级设置:在51单片机中,可以通过设置外部中断的中断优先级来确定中断的响应顺序。
中断优先级越高,优先级越高的中断会先被响应。
通过合理设置中断优先级,可以确保关键任务的及时响应和执行。
例如,当多个外部设备同时发出中断信号时,可以通过设置优先级,确保先响应优先级高的设备,保证系统的正常运行。
单片机指令的中断处理方法
![单片机指令的中断处理方法](https://img.taocdn.com/s3/m/d6b382e4b1717fd5360cba1aa8114431b90d8ec2.png)
单片机指令的中断处理方法中断是指单片机在执行某个程序的过程中,突然暂停当前的工作,去处理另外一个优先级更高的任务,待处理完后再回到原来的地方继续执行。
在单片机系统中,中断处理是一种重要的功能,能够提高系统的实时性和可靠性。
本文将介绍常见的单片机中断处理方法。
1. 软件中断处理方法软件中断是一种通过修改程序计数器(PC)的值,使之指向中断服务程序的起始地址的中断方式。
在单片机中,软件中断通常使用特殊的指令来触发,比如软中断指令"INT"。
具体步骤如下:(1)在程序中插入软中断指令,指定软中断号。
(2)程序执行到软中断指令时,自动跳转到中断服务程序的起始地址。
(3)中断服务程序执行完毕后,使用"RETI"指令返回到中断发生前的位置继续执行。
2. 硬件中断处理方法硬件中断是指通过外部硬件设备的信号触发单片机的中断,使其进行相应的中断处理。
通常,硬件中断由硬件的工作方式决定,例如计时器溢出、外部中断引脚的边沿触发等。
具体步骤如下:(1)配置中断使能位和中断标志位。
(2)设置中断服务程序的起始地址。
(3)当中断事件发生时,单片机暂停当前任务,自动跳转到中断服务程序的起始地址执行。
(4)中断服务程序执行完毕后,自动返回到中断发生前的位置继续执行。
3. 嵌套中断处理方法嵌套中断是指在中断服务程序执行期间,有更高优先级的中断事件发生,导致当前中断服务程序被打断,处理更高优先级的中断事件,然后再返回到之前的中断服务程序中继续执行。
嵌套中断可以保证对高优先级事件的及时响应。
具体步骤如下:(1)配置中断优先级,确定各个中断的优先级关系。
(2)当低优先级中断发生时,中断服务程序会被高优先级中断打断。
(3)处理完高优先级中断后,返回到低优先级中断服务程序的被打断位置继续执行。
(4)低优先级中断被完全处理后,才会回到主程序中继续执行。
总结:中断处理在单片机系统中起着重要作用,能够实现对多个任务的快速切换和响应。
单片机中断51单片机中断应用(全)
![单片机中断51单片机中断应用(全)](https://img.taocdn.com/s3/m/32a19502a6c30c2259019eba.png)
单片机中断:51单片机中断应用(全)
疯狂代码 / ĵ:http://NetworkProgramming/Article25409.html
/*****一直想把51的中断做一个总结,总是没有什么时间或被什么事给中断,现在终于弄好了^_^*****/ /*******最近一直做32位的,8位的都快忘记得差不多了,写在这里也好想用的时候有个地方查*******/ /************************************************************ *51单片机各中断初始化及子程序模板,几乎包括了传统51单片机的全部中断 *1、外部中断0 *2、定时器中断0 *3、外部中断1 *4、定时器中断1 *5、串行中断 *6、定时器中断2---本中断在52时才有 *在使用定时中断的时候需要根据实际需要重设定时器的初值和工作方式 *在串行通讯中,使用11.0592M晶振,通讯波特率为9600bps *为了保证文件的单一和方便保存,本项目只用了一个文件, *************************************************************/ #include<reg52.h>/*如果是使用51单片机,则应该是reg51.h,且不能使用定时器2*/ #include<intrins.h>/*以下两个包含文件在本代码中实际不需要,但经常用到,所以列出*/ #include<absacc.h>
单片机中断实验报告
![单片机中断实验报告](https://img.taocdn.com/s3/m/078aaa3b1fd9ad51f01dc281e53a580217fc5048.png)
一、实验目的1. 理解单片机中断的基本概念和工作原理。
2. 掌握单片机中断系统的初始化方法。
3. 学会编写中断服务程序,实现特定功能。
4. 熟悉中断优先级设置及其对系统性能的影响。
二、实验设备1. 单片机实验板:STC89C52单片机实验板2. 串口下载线:USB转串口下载线3. 电脑:一台运行Windows操作系统的电脑4. 软件工具:Keil uVision4集成开发环境三、实验原理单片机中断系统是单片机的重要组成部分,它允许单片机在执行主程序时,响应外部或内部事件的中断请求,暂停主程序执行,转而执行相应的中断服务程序。
中断系统由硬件和软件两部分组成。
1. 硬件部分:包括中断源(如定时器、外部中断等)、中断控制器、优先级寄存器、中断服务寄存器等。
2. 软件部分:包括中断初始化程序、中断服务程序等。
四、实验步骤1. 创建项目:在Keil uVision4中创建一个新项目,选择STC89C52单片机作为目标芯片。
2. 设计电路:根据实验要求,绘制电路原理图,连接单片机实验板上的相关元器件。
3. 编写程序:编写C语言程序,实现以下功能:(1)初始化单片机中断系统,包括设置中断优先级、启用中断等;(2)编写中断服务程序,处理中断请求;(3)编写主程序,实现特定功能。
4. 编译程序:将编写好的程序编译成hex文件。
5. 烧录程序:将编译好的hex文件烧录到单片机实验板中。
6. 运行实验:观察实验现象,验证程序功能。
五、实验内容1. 实验一:外部中断实验(1)功能:当外部中断0(INT0)或外部中断1(INT1)有信号输入时,触发对应的中断服务程序,使LED灯闪烁。
(2)步骤:a. 初始化外部中断0和外部中断1,设置中断优先级;b. 编写外部中断0和外部中断1的中断服务程序;c. 编写主程序,实现LED灯闪烁。
2. 实验二:定时器中断实验(1)功能:定时器0每隔1秒产生一次中断,触发中断服务程序,使LED灯闪烁。
单片机的中断
![单片机的中断](https://img.taocdn.com/s3/m/ff9a7c9c6e1aff00bed5b9f3f90f76c661374c9e.png)
unsigned char Countor; //设置全局变量,储存定时器T0中断次数
void main(void)
{
EA=1;
//开总中断
ET0=1;
//定时器T0中断允许
TMOD=0x01;
//使用定时器T0的模式2
TH0=(65536-46083)/256; //定时器T0的高8位赋初值
TL0=(65536-46083)%256; //定时器T0的高8位赋初值
有关的特殊功能寄存器(SFR)有: 中断允许寄存器IE 中断优先级控制寄存器IP 中断源寄存器(TCON、SCON中的有关位) 注:均可位寻址。
中断源
8051单片机共有五个中断源,分别是外部中断、定时 中断和串行中断。 2个外部中断是: 外部中断0--INT0,由P3.2提供, 外部中断1—INT1,由P3.3提供, 外部中断有两种触发方式,即低电平方式和负边沿 方式。
interrupt表示该函数是一个中断服务函数 整数n表示该中断服务函数对应哪一个中断源
[ void] 函数名 ([void]) interrupt n [using m] { 函数体语句 }
using m 指定该中断服务程序要使用的工作寄存器组号,m 为0~3。 若缺省using项,则编译系统默认为是当前工作寄存器组。
中断的使用(编程):
1 接通中断信号通道( 开总中断EA=1; ,开 中断源中断。如ET0=1;。
3 中断做什么(写中断服务函数)。
4、中断使用(编程)例
//例:用外中断0的负跳变产生中断信号点亮LED
#include<reg51.h>
void main(void)
{
EA=1; //开放总中断 EX0=1; //允许使用外中断 IT0=1; //选择负跳变来触发外中断
单片机中断实验报告
![单片机中断实验报告](https://img.taocdn.com/s3/m/8bd70b703868011ca300a6c30c2259010302f379.png)
单片机中断实验报告单片机中断实验报告引言:单片机是一种集成电路,具有微处理器、存储器和各种输入输出设备等功能模块。
中断是单片机中的一种重要机制,它可以使单片机在执行某个任务时,暂停当前操作,转而执行其他紧急任务。
本次实验旨在深入了解单片机中断的原理和应用,以及如何在程序中实现中断功能。
一、实验目的本次实验的目的是通过编写程序,实现单片机中断功能,并验证中断的正确性和可靠性。
具体而言,我们将使用单片机的外部中断和定时器中断功能,分别实现按键中断和定时中断。
二、实验器材1. 单片机开发板2. 按键模块3. 七段数码管模块4. 电源模块5. 连接线等三、实验原理1. 外部中断外部中断是通过外部中断引脚与外部电路连接来实现的。
当外部电路触发中断条件时,单片机将暂停当前操作,转而执行中断服务程序。
在本实验中,我们将按键模块连接到外部中断引脚,当按下按键时,触发外部中断,实现按键中断功能。
2. 定时器中断定时器中断是通过定时器模块来实现的。
定时器可以按照设定的时间间隔产生中断请求信号,从而实现定时中断功能。
在本实验中,我们将使用定时器模块来实现每隔一段时间触发一次中断,实现定时中断功能。
四、实验步骤1. 连接电路将按键模块的输出引脚连接到单片机的外部中断引脚,将七段数码管模块连接到单片机的IO口。
接通电源,确保电路连接正确。
2. 编写程序使用C语言编写程序,首先需要初始化单片机的中断向量表和相关寄存器。
然后编写中断服务程序,根据实验要求实现按键中断和定时中断功能。
最后,在主程序中设置中断使能位,使得中断能够正常触发。
3. 烧录程序使用烧录器将编写好的程序烧录到单片机中。
4. 实验验证按下按键,观察七段数码管的显示是否按照预期变化。
等待一段时间,观察定时中断是否按照设定的时间间隔触发。
五、实验结果与分析经过实验验证,按键中断和定时中断功能均能够正常运行。
按下按键时,七段数码管的显示会按照预期变化,定时中断也能够按照设定的时间间隔触发。
单片机中断处理
![单片机中断处理](https://img.taocdn.com/s3/m/264759598f9951e79b89680203d8ce2f00666532.png)
单片机中断处理单片机是一个由微处理器、存储器、输入/输出接口电路和定时/计数器构成的微型计算机系统,实现了集成化、通用性、可编程性、易扩展性、性能稳定等优点。
而单片机中断技术是其应用非常广泛的技术之一,下面就来介绍一下单片机中断处理。
一、中断的概念中断是指指令执行的过程中,由于发生了某种事件,使得CPU暂停正在执行的程序,去执行一个由事件所触发的服务程序,当服务程序执行结束后,CPU按原来的方式继续执行原始程序。
中断事件是由硬件(如时钟、I/O设备)或软件(当程序出错时)所产生的。
二、单片机中断的分类单片机中断分为“外部中断”和“内部中断”。
1. 外部中断:外部中断指的是与单片机相连的设备产生的中断,也可称为硬件中断。
当该设备发出信号时,在中断控制器的协助下,CPU停止正在执行的程序,去执行与该外设相关的服务程序。
在单片机中,常用的外设有:定时器、串行口、A/D转换器、读写存储器等。
当这些外设操作完毕、要求CPU进行操作时,它们就向CPU发出中断请求。
在单片机中,可以通过编程的方式选择或禁止某些外设的中断请求。
2. 内部中断:内部中断,也称为软件中断,是由单片机自身产生的中断。
单片机内部中断又可分为多种类型,如定时器中断、串口中断、A/D中断等。
当一个内部事件发生时,相应的中断标志位被置位,告诉CPU,需要执行相应的服务程序。
三、中断处理程序的编写在单片机中,中断的产生通常会引起CPU执行某个中断服务程序,所以编写好中断服务程序非常重要。
中断服务程序的编写需遵循一些规则和要求:1. 中断服务程序的函数头一般需包含如下内容:void 中断服务函数名(void) interrupt 中断向量号使用寄存器其中,中断向量号由中断发生时硬件产生,告诉CPU所需调用的服务函数。
使用寄存器的目的是为了保存现场,避免中断发生后现场被改变。
2. 中断服务程序中要注意禁止其他中断由于中断是互相独立的,在中断服务程序执行期间,可能会发生其他中断,为了保证程序执行的正确性,必须在进入中断服务程序前关闭所有其他中断。
单片机中断过程范文
![单片机中断过程范文](https://img.taocdn.com/s3/m/1bf385cabdeb19e8b8f67c1cfad6195f312be823.png)
单片机中断过程范文引言:单片机中断是单片机系统中一个非常重要的组成部分,它能够提高单片机系统的实时性和可靠性。
中断是指当一个外部事件需要立即处理时,单片机能够暂停当前正在执行的程序,并跳转到一个特定的中断服务程序中执行相应的处理操作。
本文将详细介绍单片机中断的过程。
一、中断的基本概念1.中断的定义:中断是指在单片机执行程序的过程中,当有一些事件发生时,暂停当前正在执行的程序,转去执行相应的中断服务程序,在处理完中断服务程序之后,再回到原来被中断的程序继续执行。
2.中断的分类:中断可以分为外部中断和内部中断。
外部中断是指单片机通过外部引脚接收到的中断信号触发的中断,比如按键触发中断。
内部中断是指单片机内部的一些模块或条件触发的中断,比如定时器溢出中断。
3.中断的优先级:当多个中断同时发生时,单片机在执行中断服务程序时需要按照一定的优先级进行处理。
较高优先级的中断服务程序可以打断正在执行的低优先级中断服务程序。
通过设置中断优先级能够灵活有效地控制中断的处理顺序,以及防止一些中断被其他中断打断。
二、中断的过程1.中断的触发:中断的触发通常是通过外部中断引脚的电平或边沿变化来触发的。
当触发条件满足时,单片机会检测到中断请求。
2.中断的响应:单片机在检测到中断请求之后,会立即暂停当前正在执行的程序,并将程序计数器(PC)的值保存到堆栈中。
然后,单片机会跳转到相应的中断向量表中找到对应的中断向量,从中断向量中获得中断服务程序的入口地址。
3.中断服务程序的执行:单片机会跳转到中断服务程序的入口地址开始执行中断服务程序。
中断服务程序是提前编写好的代码,用于处理中断事务。
在中断服务程序中,可以进行一些需要立即响应的操作,比如保存寄存器状态、处理中断源、做一些特定的处理等。
4.中断服务程序的退出:当中断服务程序执行完毕后,单片机会将保存在堆栈中的程序计数器(PC)的值恢复,并继续执行被中断的程序。
三、中断的应用举例1.外部中断应用:外部中断常用于处理一些需要立即响应的事件,比如按键触发中断。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
装
备
工
程
学
院
09
级
单
片
机
作
业
学号:0911020214
姓名:文星
单片机中断系统的应用
设计要求:
P0口接8个LED灯依次左移点亮,按INT1的按钮时8个LED灯依次右移点亮,按INT0时,8个LED闪烁5次(INT0优先)。
摘要:
计算机工作过程中,由于系统内、外某种原因发生的随机事件,计算机必须尽快中止正在运性的原程序,转向相应的处理程序为其服务,待处理完毕在返回去执行被中止的源程序,这个过程就是中断。
引起中断的原因火设备称为中断源。
一个计算机系统的中断源会有多个,用来管理这些中断的逻辑称为终端系统。
采用中断的优点如下:
1、分时操作、
中断系统解决了快速CPU与慢速外设、定时/计数器及串行口之间的“定时”矛盾。
例如:在CPU启动定时器之后,就可继续执行主程序,同时定时器也在工作。
当定时器溢出便向CPU 发出中断请求,CPU响应中断(终止正在运行的主程序)转去执行定时器服务程序,中断服务结束后,又返回主程序继续执行,这样CPU就可以命令定时器、串行口以及多个外设同时工作,分别为各中断源提供服务,使CPU高效而有秩序地工作。
2、实时处置
中断系统使CPU能及时处理实时控制系统中许多随机参数和信息。
实时控制现场的各种随机信号,它们在任意时刻均可向CPU发出中断请求,要求CPU给予服务,有了中断系统便可及时地处理这些瞬息变化的现场信息,是CPU具有随机应变和实时处理的能力。
3、故障处理
中断系统还可以使CPU处理系统中出现的故障。
例如,电源的突变、运算溢出、通信出错等。
有了中断系统计算机都可以自行解决,不必人工干预或停机,提高了系统的稳定性和可靠性。
关键字:中断;控制
1、目的意义
了解中断系统的基本原理,熟悉Pruteus的使用,熟悉汇编语言及c语言编程的基本知识,熟悉中
断系统的设计。
2、系统分析
P0口接8个LED灯依次左移点亮,按INT1的按钮时8个LED灯依次右移点亮,按INT0时,8个LED闪烁5次(INT0优先)。
本系统主要有八个LED灯,两个中断开关,和一个单片机组成,完成本系统的功能主要需要有两个终端来实现。
经过分析需要如下原件:
3、设计原理图、
经过分析,画出电路图如下:
图1 中断系统的应用电路图
4、程序设计
(1)、经过分析,画出中断系统的流程如下:
图2 中断系统应用的流程图
(2)汇编语言程序如下:
ORG 0000H ;主程序起始地址设置
AJMP START ;跳到主程序入口
ORG 0003H ;中断矢量地址(K1开关按钮)
AJMP INTR0 ;中断子程序入口
ORG 0013H ;中断矢量地址(K2开关按钮)
AJMP INTR1 ;中断子程序入口
START: SETB EA ;设置总中断
SETB EX0 ;设置中断0
SETB EX1 ;设置中断1
SETB PX0 ;设置中断优先级,中断0优先
MOV TCON,#00H;电平触发
MOV SP,#70H
LP: MOV DPTR,#TABLE ;LED灯开始左移,TABLE表中的地址存入DPTR LP0: MOV A,#00H ;清除累加器
LP1: MOVC A,@A+DPTR;查表
CJNE A,#1BH,LP2;取出的代码不是结束码择进行下一步操作
AJMP LP ;是结束码,则重新进行操作
LP2: MOV P0,A ;将A的值送到P0口,显示
LCALL DELAY ;等待1s
INC DPTR ;数据指针加1,指向下一个码
AJMP LP0 ;返回取码
INTR0: PUSH ACC ;将A压入堆栈暂时保存
PUSH PSW ;将PSW压入堆栈暂时保存
PUSH DPH ;保护断点
PUSH DPL ;保护断点
SETB RS0 ;使用工作寄存器组1
CLR RS1 ;RS1取反
MOV DPTR,#TABLE2;LED灯开始闪烁
INTLP1: MOV A,#00H
MOVC A,@A+DPTR
CJNE A,#1BH,INTLP2
AJMP INTLP3
INTLP2: MOV P0,A
LCALL DELAY
INC DPTR
AJMP INTLP1
INTLP3: POP DPL
POP DPH
POP PSW
POP ACC
RETI
INTR1: PUSH ACC
PUSH PSW
PUSH DPH
PUSH DPL
SETB RS0
SETB RS1
MOV DPTR,#TABLE1
INTL1: MOV A,#00H
MOVC A,@A+DPTR
CJNE A,#1BH,INTL2
AJMP INTL3
INTL2: MOV P0,A
LCALL DELAY
INC DPTR
AJMP INTL1
INTL3: POP DPL
POP DPH
POP PSW
POP ACC
RETI
DELAY: MOV R7,#10
DE1: MOV R6,#200
DE2: MOV R5,#248
DJNZ R5,$
DJNZ R6,DE2
DJNZ R7,DE1
RET
TABLE: DB 0feH,0fdH,0fbH,0f7H
DB 0efH,0dfH,0bfH,07fH;左移流水灯
DB 1BH
RET
TABLE1: DB 07fH,0bfh,0dfH,0efH
DB 0f7H,0fbH,0fdH,0feH;右移流水灯
DB 1BH
RET
TABLE2: DB 0FFH,00H,0FFH,00H,0FFH,00H
DB 0FFH,00H,0FFH,00H,1BH;闪烁5次
RET
END
5、 调试运行结果:
调试运行结果如图所示:按下开始按键:
(1) (2) (3)
(4) (5)
(6)
(7) (8)
按下INT0
(9) (10)
(11)
(12)
(13)
按下INT1时:
(14)(15)(16)(17)(18)(19)(20)(21)
按下开始键LED灯会完成左移动作,在左移过程中按下INT1时会出现右移动作,右移动作完场后会从开始中断的地方继续左移;在右移过程中,按下INT0,会出现闪烁5次的动作,闪烁5次之后会继续右移动作,右移动作完成从中断的位置继续左移动作。
经过调试,设计的系统能够完成所要求的动作,设计成功。
6、收获与存在的问题
本次作业较上次有了较大的进步,对汇编语言有了进一步地掌握,学到了新的知识,了解了什么是中断,中断的原理,中断的方式,以及终断的应用。
存在的问题,自己不能独立的设计程序,需要参考教材来完成程序的设计。
7、目前的收获与疑惑
收获:基本掌握了单片机设计的基本流程,以及汇编语言,c语言的基本使用
存在疑惑:如何自己设计一个单片机系统。
8、期望成绩:A
本次作业系独立完成,对单片机有了进一步的认识。