实验五 外部中断应用实验
- 格式:doc
- 大小:261.50 KB
- 文档页数:9
单片机原理实验报告实验题目外部中断实验一、实验目的1.掌握用外部中断方式实现控制的方法。
2.掌握中断优先级的使用方法。
3. 掌握用Proteus实现单片机系统仿真的方法。
二、实验预备知识外部中断信号由P3.2(P3.3)管脚输入,当中断触发方式控制位ITO(IT1)为1时,CPU 在每个机器周期的S5P2采样P3.2(P3.3)管脚,如果连续两次采样,前一次采样为高电平,后一次采样为低电平,则认为有中断申请,随即使中断标志位IE0(IE1)置1,向CPU申请中断,直到该中断被CPU响应。
当定时器以计数方式工作,计数初值为满量程,在计数输入端T0(T1)输入负跳变信号时,计数器将加1并产生溢出,随即使溢出标志位TF0(TF1)置1,向CPU申请中断,直到该中断被CPU响应。
三、实验内容P1口做输出口,接八只发光二极管,利用手控单脉冲信号作为外部中断信号,编写控制程序,使八只发光二极管按一定的规律循环点亮。
1.程序1: 从外部中断0请求输入端(P3.2)输入脉冲信号2.程序2: 从定时器0的外部输入端(P3.4)输入脉冲信号四、实验参考电路P1口接发光二极管的阴极,P1口的管脚输出低电平时对应的发光二极管点亮,实验电路图如图4-1所示。
图4-1 外部中断实验电路五、实验参考程序ORG 0003HAJMP INT00 ORG 0013H AJMP INT11 ORG 0050H MAIN:SETB EASETB EX0SETB EX1SETB PX1SETB IT0SETB IT1MOV A,#0FEH LP1:MOV P1,ALCALL DELAY RL ASJMP LP1ORG 0100H INT00:PUSH ACCMOV A,#0FCH MOV R1,#7 LP2:MOV P1,A LCALL DELAY RL ADJNZ R1,LP2 POP ACCRETIORG 0150H INT11:PUSH ACCMOV A,#3FH MOV R2,#7 LP3:MOV P1,ALCALL DELAY RR ADJNZ R2,LP3 POP ACCRETIORG 0200H DELAY:MOV R3,#20 L1:MOV R7,#200 L2:MOV R6,#123 NOPL3:DJNZ R6,L3 DJNZ R7,L2 DJNZ R3,L1 RETEND六、实验分析与总结。
外部中断应用实验设计性试验2012年11月28日星期三第三四节课一、实验目的1、掌握中断系统外部中断源的使用方法。
2、掌握延时程序的编程及使用方法。
3、掌握Proteus软件与Keil软件的使用方法。
4、掌握单片机系统的硬件和软件设计方法。
二、设计要求1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。
2、在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。
三、电路原理图四、实验程序流程框图和程序清单及实验结果/********************实验五外部中断应用实验要求:(1)在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。
(2)在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。
**********************/ORG 0000HSTART: LJMP MAINORG 0003HLJMP EXINT0ORG 0013HLJMP EXINT1ORG 000BHLJMP TTC0ORG 0100HMAIN: MOV SP, #2FH ;堆栈指针初始化MOV IE, #10000111B;EA - - ES ET1 EX1 ET0 EX0MOV TMOD, #01H ;设置定时器T/C0为工作方式1MOV TH0, #9EH ;设置定时器T0的计数初值为25msMOV TL0, #58HSETB IT0 ;设置外部中断0为脉冲触发SETB IT1 ;设置外部中断1为脉冲触发HERE: LJMP HERE ;等待中断/*定时器T0中断服务程序*/ORG 0200HTTC0: CPL P1.2MOV TH0, #9EHMOV TL0,#58HRETI/*外部中断0开定时器服务程序*/ORG0300H EXINT0:SETB TR0RETI/*外部中断1关定时器服务程序*/ORG0400H EXINT1:CLR TR0RETIEND//C 语言编程// #include "reg52.h" sbit P1_2=P1^2;void main(){ SP=0x2f; IE=0x87; TMOD=0x01;//设置定时器T/C0 TH0=(65536-25000)/256; //设置定时器T0的计数初值为25ms TL0=(65536-25000)%256; IT0=1; //设置外部中断0为脉冲触发 IT1=1;//设置外部中断1为脉冲触发do { } while(1);}/**定时器T0中断服务子程序**/ void timer0() interrupt 1{P1_2=!P1_2;TH0=(65536-25000)/256;TL0=(65536-25000)%256;}/**外部中断0中断服务子程序**/ void EXINT0() interrupt 0 {TR0=1;}/**外部中断1中断服务子程序**/ void EXINT1() interrupt 2 {TR0=0;}五、实验总结通过本次试验,我掌握了定时器/计数器定时功能的使用方法,能够利用定时器/计数器以查询、中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数。
外部中断实验报告外部中断实验报告引言:外部中断是计算机系统中的一种重要机制,它可以响应外部事件并中断正在执行的程序。
本实验旨在通过设计和实现一个外部中断的示例,加深对外部中断的理解和应用。
实验目的:1. 理解外部中断的概念和原理;2. 掌握外部中断的编程方法;3. 设计和实现一个基于外部中断的应用。
实验设备和材料:1. 一台支持外部中断的计算机;2. 开发板或模块,用于外部中断的触发。
实验过程:1. 硬件连接:将开发板或模块与计算机连接,并确保连接正确和稳定。
2. 编写中断处理函数:在编程环境中,编写一个中断处理函数,用于处理外部中断触发时的操作。
可以根据实际需求,设计适当的处理逻辑。
3. 配置中断触发条件:根据实验要求,配置外部中断触发的条件。
可以通过设置开关、按键或其他外部信号来触发中断。
4. 编写主程序:编写一个主程序,用于初始化外部中断和执行其他操作。
在主程序中,需要配置外部中断的相关寄存器和中断向量表。
5. 运行实验:将程序下载到计算机中,并运行实验。
通过触发外部中断条件,观察中断处理函数的执行情况。
实验结果与分析:在实验中,我们成功实现了一个基于外部中断的应用。
当外部中断触发条件满足时,中断处理函数被调用,并执行相应的操作。
通过实验观察和分析,我们可以得出以下结论:1. 外部中断可以在计算机系统中实现对外部事件的及时响应,提高系统的实时性和可靠性。
2. 外部中断的触发条件可以灵活配置,可以通过外部设备或信号的变化来触发中断。
3. 中断处理函数的执行时间相对较短,可以在不影响主程序正常运行的情况下完成相应的操作。
4. 外部中断的应用范围广泛,可以用于实现各种实时控制、通信和交互功能。
实验总结:通过本次实验,我们深入了解了外部中断的原理和应用,并成功设计和实现了一个基于外部中断的应用。
外部中断作为计算机系统中的重要机制,具有重要的意义和应用价值。
在今后的学习和实践中,我们应进一步探索和应用外部中断,为计算机系统的性能和功能提供更多的可能性。
实验5外部中断实验说明文档外部中断硬件说明GPIO硬件说明STM32开发板引出了电路长的所有IO口,电路如下图 1 引出的IO口STM32的IO口可以通过软件配置为以下的8种模式(1)GPIO _Mode_AIN 模拟输入(2)GPIO_Mode_IN_FLOATING 浮空输入(3)GPIO_Mode_IPD 下拉输入(4)GPIO_Mode_IPU 上拉输入(5)GPIO_Mode_Out_OD开漏输出(6)GPIO_Mode_Out_PP 推挽输出(7)GPIO_Mode_AF_OD 复用开漏输出(8) GPIO_Mode_AF_PP复用开漏输出STM32的每个IO端口都有7个寄存器来控制,他们分别是:2个32位的端口,配置寄存器CRL和CRH;一个16位的复用寄存器BRR;2个32位的数据寄存器IDR和ODR;1个32位的锁存寄存器LCKR;详细资料可以参见<<STM32中文参考资料>>.LED硬件说明STM32 开发板上的两个LED:LED0 和LED1.如下图:图2 LED 与STM32 连接原理图STM32中硬件电路将PB5管脚与LED0灯连接,而另一LED灯LED1则是连接在PE5.由电路可知,两个LED都是通过灌电流的方式来加电压,所以应将相应的GPIO口配置为输出方式,通过合理的控制其连接的GPIO口的输出电压(置高置低)就能控制灯的闪烁(关于GPIO配置操作请详见GPIO固件库说明文档).BEEP硬件说明STM32 开发板上的一个BEEP.如下图:图1 BEEP与STM32 连接原理图STM32中硬件电路将PB8管脚与BEEP连接,电路中用到NPN三极管(s8050)来驱动蜂鸣器,三极管主要的功能是放大电流,让电路有足够的电流来驱动蜂鸣器.当PB.8输出高电平时,蜂鸣器开始发声,当PB.8输出低电平时,蜂鸣器停止发声.KEY硬件说明STM32 开发板上的4个按钮(WK_UP,KEY0,KEY1,KEY2)如下图:图1 KEY与STM32 连接原理图STM32中硬件电路将PE4与KEY0连接在按钮按下时电路接地为低电平, PE3与KEY1连接在按钮按下时电路接地为低电平, PE2与KEY2连接在按钮按下时电路接地为低电平, PA0与WK_UP连接在按钮按下时电路接地为高电平,由电路可知,本实验通过WK_UP在芯片内部拉低输入模式下检测高电平时控制键蜂鸣器的开关按键KEY0检测为低时候控制LEDO和LED1同时开关,按键KEY1控制LED1的开关,按键KEY2控制LED0的开关,有关配置GPIO口 (关于GPIO配置操作请详见GPIO固件库说明文档).EXTI说明STM32开发板有19个外部中断,在外部的IO口上有16个外部中断,分别如下图 1 GPIO口与外部中断映射图STM32的IO端对应16个外部中断,GPIOx.0- GPIOx.15其中(x=A,B,C,D,E,F)分别对应中断线,每个中断线最多对应七个IO口,而中断线每次只能连接到一个IO口上去,可在软件中去配置STM32上的每个IO口可以自由编程,需要以32位的字访问外部中断软件说明实验中用到了GPIO固件库函数和LED固件库的函数的总和,在引用MCU中的头文件后用到的GPIO函数以及LED函数如下GPIO中的库函数1)使能总线时钟void GpioRccEnable(GPIO_TypeDef* GPIOx);2)配置管脚为输入输出模式void GpioConfig(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,GPIOMode_TypeDef mode,GPIOSpeed_TypeDef speed );3)设置某一端口为输入输出模式void GpioSet(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin,GPIOMode_TypeDef mode,GPIOSpeed_TypeDef speed );4)设置输入模式并初始化void GpioSetInMode(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin );5)设置输出模式并初始化void GpioSetOutMode(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,char init_value);6)管脚的输出的值void GpioSetOutValue(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin, char init_value);7)读取某一管脚的状态unsigned char GpioInReadPinStatus(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);LED中的库函数如下:1)初始化函数void LedInit(char led, char led_init_status);2)指定LED灯亮void LedOn(char led);3)灭掉指定的LED灯void LedOff(char led);BEEP中的库函数如下://功能: 初始化LEEP,并配置初始状态void BeepInit(char beep_init_status);//功能: 选定BEEP为开状态void BeepOn(void);//功能: 选定BEEP为关状态void BeepOff(void);按键中的库函数如下://IO初始化void KeyInit(void);//按键扫描函数u8 KeyScan(void);EXTI库函数如下:// 功能:使能外部时钟中断函数void ExtiRccEnable(uint32_t RCC_APB2Periph);// 功能:配置外部中断参数void ExtiConfig(uint32_t line,EXTIMode_TypeDef mode,EXTITrigger_TypeDef trigger,FunctionalState linecmd); // 功能:外部中断初始化void ExtiInit(void);外部中断应用简述实验中通过外部中断服务函数来检测按键是否按下来控制蜂鸣器和LED灯的亮灭,实验程序如下#include "common.h"int main()Init(); //总初始化while(1)printf("\n外部中断实验\r\n");delay_ms(1000);。
下面是赠送的几篇网络励志文章需要的便宜可以好好阅读下,不需要的朋友可以下载后编辑删除!!谢谢!!出路出路,走出去才有路“出路出路,走出去才有路。
”这是我妈常说的一句话,每当我面临困难及有畏难情绪的时候,我妈就用这句话来鼓励我。
一定有很多人想说:“这还在北京混个什么劲儿啊!”但他每天都乐呵呵的,就算把快递送错了也乐呵呵的。
某天,他突然递给我一堆其他公司的快递单跟我说:“我开了家快递公司,你看得上我就用我家的吧。
”我有点惊愕,有一种“哎呦喂,张老板好,今天还能三蹦子顺我吗”的感慨。
之后我却很少见他来,我以为是他孩子出生了休假去了。
再然后,我就只能见到单子见不到他了。
某天,我问起他们公司的快递员,小伙子说老板去上海了,在上海开了家新公司。
我很杞人忧天地问他:“那上海的市场不激烈吗?新快递怎么驻足啊!”小伙子嘿嘿一笑说:“我们老板肯定有办法呗!他都过去好几个月了,据说干得很不错呢!”“那老婆孩子呢?孩子不是刚生还很小吗?”“过去了,一起去上海了!”那个瞬间,我回头看了一眼办公室里坐着的各种愁眉苦脸的同事,并且举起手机黑屏幕照了一下我自己的脸,一股“人生已经如此的艰难,有些事情就不要拆穿”的气息冉冉升起。
并不是说都跳槽出去开公司才厉害,在公司瞪着眼睛看屏幕就是没发展,我是想说,只有勇气才能让自己作出改变。
《拒绝平庸》里有一句话:很多时候我们为什么嫉妒别人的成功?正是因为知道做成一件事不容易又不愿意去做,然后又对自己的懒惰和无能产生愤怒,只能靠嫉妒和诋毁来平衡。
其实走出去不一定非要走到什么地方去,而是更强调改变自己不满意的现状。
有人问我那你常说要坚持,天天跑出去怎么坚持?其实要坚持的是一种信仰,而不是一个地方,如果你觉得一个地方让你活得特别难受,工作得特别憋屈,除了吐槽和压抑没别的想法,那就要考虑走出去。
就像歌词里说的:“梦想失败了,那就换一个梦想。
”不能说外面都是大好前程,但肯定你会认识新的人,有新的机会,甚至改头换面重新做人。
PIO外部中断实验报告“SOPC技术综合设计实践”实验报告实验题号 : 实验五项目名称 :PIO外部中断实验系班 : 计科师范系11(1)学号 :姓名 :实验日期 : 20xx年4月2日指导老师:一、实验目的(1)熟悉中断服务程序的编写和注册方法。
(2)熟悉程序的调试方法,重点熟悉中断服务程序的调试方法。
(3)熟悉NiosII处理外部中断的方法。
二、实验内容1.外部中断信号由按键提供,然后将中断事件反映到对应的LED。
2.利用边沿捕获寄存器读取按键值,编写中断服务程序将读到的键值输出到LED。
即:按键F1按下,对应的LED0点亮。
三、实验原理当跳转到异常处理地址后,处理器开始执行一段由HAL插入的代码,判断中断源和中断优先级,然后再转跳到用户的中断服务子程序(ISR)中。
即发生异常后,异常处理除ISR外的所有工作都由HAL系统库代码替换用户完成。
为了将中断服务子程序的信息告知HAL,用户需要完成ISR的登记工作。
向HAL登记ISR的工作可以分为以下两步:(1)编写void isr_name(void *context,alt_u32 id)函数(2)调用alt_irq_register(alt_u32 id,void *context,void(*isr)(void*,alt_u32))函数,向HAL登记ISR。
四、SOPC的整个设计流程(附:截取主要的设计图)1. 基于实验3硬件系统(注意:将button_pio改为8位, input),修改后,重新generate。
3.编译后,下载.SOF文件4.在IDE平台上,新建一个.C文件,写入程序#include <stdio.h> #include "system.h"#include "altera_avalon_pio_regs.h" #include "alt_types.h" #include "sys/alt_irq.h"#include "priv/alt_busy_sleep.h"#define LEDCON 0xff //#define KEYCON 0xff //alt_u32 done = 0; // 信号量:通知外部中断事件发生/************************************************************** ****** * 功能:键按下事件中断服务子程序,当键按下时,通过done 标志* 告知外界*************************************************************** *****/ static void KeyDown_interrupts(void* context, alt_u32 id) {/* 清中断捕获寄存器 */IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0);/* 通知外部有中断事件发生 */done++;}/************************************************************** ****** * 功能:初始化LED_PIO为输出,KEY为输入,开中断,清边沿捕获寄存器*************************************************************** *****/ void InitPIO(void){/* 初始化LED_PIO为输出,KEY为输入 */IOWR_ALTERA_AVALON_PIO_DIRECTION(PIO_BASE,LEDCON);IOWR_ALTERA_AVALON_PIO_DIRECTION(BUTTON_PIO_BAS E, 0x00);IOWR_ALTERA_AVALON_PIO_IRQ_MASK(BUTTON_PIO_BASE, 0xff);/* 开KEY的中断 *//*请同学们自己完成*/IOWR_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE, 0x00);/* 清边沿捕获寄存器 */alt_irq_register(BUTTON_PIO_IRQ,NULL,KeyDown_interrupts );/* 注册中断服务子程序 *//*请同学们自己完成*/}/************************************************************** ****** * 功能:等待按键中断,并输出控制相应的LED。
外部中断实验报告外部中断实验报告一、引言外部中断是计算机系统中的一种重要的中断方式,它可以使得计算机在执行某个任务的过程中,根据外部设备的信号来暂停当前任务,转而去处理其他紧急事件。
本实验旨在通过对外部中断的实验,深入了解外部中断的原理和应用。
二、实验目的1. 理解外部中断的概念和原理;2. 学会使用外部中断来处理外部设备的信号;3. 掌握外部中断的编程方法。
三、实验装置和材料1. 计算机硬件平台:使用一台支持外部中断的计算机;2. 软件平台:使用汇编语言进行编程。
四、实验步骤1. 连接外部设备:将外部设备(如键盘、鼠标等)与计算机相连接,确保外部设备可以正常工作;2. 编写中断处理程序:使用汇编语言编写中断处理程序,以响应外部设备的信号;3. 设置中断向量表:将中断处理程序的入口地址存放在中断向量表中,以便系统在接收到外部设备信号时能够正确地跳转到中断处理程序;4. 运行程序并测试:运行程序,触发外部设备的信号,观察中断处理程序是否能够正确执行。
五、实验结果与分析在实验中,我们成功地编写了一个外部中断处理程序,并将其入口地址存放在中断向量表中。
当我们触发外部设备的信号时,系统能够正确地跳转到中断处理程序,并执行相应的操作。
通过这个实验,我们深入了解了外部中断的原理和应用。
六、实验总结通过本次实验,我们对外部中断有了更深入的了解。
外部中断作为计算机系统中的一种重要中断方式,可以使计算机在执行某个任务的过程中,根据外部设备的信号来暂停当前任务,转而去处理其他紧急事件。
在实际应用中,外部中断广泛应用于各种设备的控制和通信系统中,提高了计算机系统的效率和可靠性。
七、实验心得通过本次实验,我深刻认识到了外部中断在计算机系统中的重要性。
在实验中,我不仅学会了编写中断处理程序,还了解了中断向量表的作用。
这次实验让我对计算机系统的工作原理有了更深入的了解,也提高了我的编程能力。
我相信这次实验对我的学习和将来的工作都有很大的帮助。
实验5-外部中断外部中断是指由CPU外部发出的中断请求,例如外部设备的输入/输出请求或定时器中断。
在此实验中,我们将学习如何使用ATmega16的外部中断功能。
硬件连接:- 将按钮连接到MCU的外部中断引脚(INT0或INT1)- 将LED连接到MCU的输出引脚软件实现:1. 配置外部中断在ATmega16中,外部中断引脚被分为INT0和INT1,可以使用MCU的寄存器来配置它们。
下面是一些相关的寄存器:- MCUCR:MCU控制寄存器,用于设置外部中断引脚的触发方式(如下降沿、上升沿、逻辑电平等)。
- GICR:全局中断控制寄存器,用于启用/禁用外部中断。
下面是一些示例代码来配置INT0为下降沿触发:```c// 设置INT0引脚的触发方式为下降沿MCUCR |= (1 << ISC01);MCUCR &= ~(1 << ISC00);// 启用INT0中断GICR |= (1 << INT0);```2. 实现中断服务程序中断服务程序(ISR)是在响应中断时自动调用的函数。
在此实验中,我们将为INT0编写一个简单的ISR,使连接到MCU的LED闪烁。
```c#include <avr/io.h>#include <avr/interrupt.h>#define LED PB0#define BUTTON PD2// INT0中断服务程序ISR(INT0_vect){PORTB ^= (1 << LED); // 翻转LED状态}// 启用全局中断sei();while (1){// 延时一段时间for (volatile uint16_t i = 0; i < 10000; i++);}}```在ISR中,我们将LED引脚的状态翻转,以使其闪烁。
注意,ISR应该尽可能地短,以便快速地响应中断请求。
3. 测试实验现在将MCU连接到计算机,并上传上述代码。
实验5中断技术实验报告一、实验目的本实验旨在使学生理解中断技术的概念和工作原理,掌握中断处理流程,学会编写中断服务程序,并通过实际操作加深对中断技术在计算机系统中应用的认识。
二、实验环境1. 实验设备:个人计算机一台,配置有相应的操作系统和开发环境。
2. 软件工具:编程软件,如Visual Studio、GCC等。
3. 开发板或模拟环境:若使用硬件开发板,需具备中断功能;若使用软件模拟,需安装相应的模拟软件。
三、实验原理中断技术是计算机系统中的一种处理机制,允许外部设备或内部事件在程序执行过程中请求CPU的注意,以响应紧急任务或处理特殊事件。
中断处理通常包括以下几个步骤:- 中断请求:外部设备或内部事件发出中断信号。
- 中断识别:CPU识别中断源。
- 中断响应:CPU暂停当前任务,保存当前状态。
- 中断服务:执行中断服务程序,处理中断请求。
- 中断返回:恢复CPU状态,继续执行被中断的任务。
四、实验内容1. 编写一个中断服务程序,该程序在接收到中断信号时执行。
2. 配置中断向量表,将中断服务程序与中断号关联。
3. 模拟中断事件,测试中断服务程序的响应。
4. 分析中断服务程序的执行结果,验证中断处理流程。
五、实验步骤1. 打开编程软件,创建一个新的项目。
2. 编写中断服务程序,定义中断处理函数。
3. 在程序中配置中断向量表,将中断号与中断服务程序关联。
4. 编写主程序,模拟中断事件的发生。
5. 编译程序,生成可执行文件。
6. 运行程序,观察中断服务程序的执行情况。
7. 根据实验结果,分析中断处理流程的正确性。
六、实验结果在实验过程中,成功编写了中断服务程序,并配置了中断向量表。
通过模拟中断事件,程序能够正确响应中断请求,并执行中断服务程序。
实验结果显示,中断处理流程符合预期,中断服务程序能够及时响应并处理中断事件。
七、实验总结通过本次实验,加深了对中断技术的理解,掌握了中断服务程序的编写和中断向量的配置方法。
一、实验目的1、学习外部中断技术的基本使用方法。
2、学习中断处理程序的编程方法。
二、实验环境1、Lab6000通用微控制器实验系统。
2、计算机,W A VE 集成调试软件。
三、实验项目用单次脉冲申请中断,在中断处理程序中对输出信号进行反转控制直流电机转、停。
四、涉及内容中断服务程序的关键是:1、保护进入中断时的状态,并在退出中断之前恢复进入时的状态。
2、必须在中断程序中设定是否允许中断重入,即设置EXO位。
3、选择相应的中断源,并设置中断屏蔽寄存器的相应位。
本实验使用了INTO中断。
一般中断程序进入时应保护PSW,ACC以及中断程序使用但非其专用的寄存器。
本实验的中断程序保护了PSW寄存器并且在退出前恢复了这个寄存器。
另外中断程序中涉及到关键数据的设置时应关中断,即设置时不允许重入。
本实验中没有涉及这种情况。
INTO(P3.2)接单次脉冲发生器。
P1.0接继电器,以查看信号反转。
主程序框图外部中断子程序框图五、实验步骤、记录和结果实验电路连线1、汇编语言操作步骤如下:(1)创建一个项目目录:shiyan51。
(2)如实验一的七.2,修改编译器为汇编语言编译器。
(3)执行“新建文件”命令,在开发环境程序窗口中按汇编语言格式输入汇编语言源程序。
将程序文件名取为shiyan51.asm保存到目录“shiyan51”。
Output equ P1.0OutBuf equ 0ljmp Startorg 3Interrupt0:push PSW ; 保护现场cpl OutBuf ; 取反LED连线连接孔1 连接孔21 继电器——输入P1.02 INT0单脉冲——3 继电器——公共端+5V4 继电器——常闭L05 继电器——常开L36 继电器——常开直流电机——至D/A开始设置初始状态设置中断控制寄存器中断允许中断入口保护现场状态位取反状态位输出恢复现场mov c, OutBufmov Output, cpop PSW ; 恢复现场retiStart:setb OutBufmov TCON, #01h ; 外部中断0下降沿触发mov IE, #81h ; 打开外部中断允许位(EX0)及总中断允许位(EA)ljmp $end(4)在“文件”下拉菜单中,执行“新建项目”命令,建立新项目。
外部中断实验的实验原理小伙伴们!今天咱们来唠唠外部中断实验的原理,这可超级有趣呢!咱先得知道啥是中断。
你可以把中断想象成一个突然插队的家伙。
就好比你正在好好地排队买冰淇淋呢,突然有个小朋友急急忙忙地跑过来,说他有特别紧急的事情,要先买。
这在计算机的世界里,就是中断啦。
外部中断呢,就是这个插队的信号是从计算机外面来的。
比如说,你按下了一个按键,这个按键就像那个着急的小朋友,它给计算机发送了一个信号,说“我这儿有事儿,你先停下手里正在做的事儿,来处理我这个事儿”。
那这个外部中断是怎么被计算机知道的呢?这里就涉及到硬件电路啦。
计算机有专门的引脚来接收这些外部的中断信号。
这些引脚就像一个个小耳朵,在那等着外面的信号传来。
当你按下按键或者外部有其他能产生中断的事件发生的时候,就会有一个电信号的变化。
比如说,从高电平变成低电平,或者反过来。
这个电信号的变化就像一阵小风吹进了计算机的小耳朵里,告诉它有情况啦。
计算机收到这个中断信号之后呢,它可不能就这么手忙脚乱地开始处理呀。
它得有一套规矩。
就像在商店里,虽然小朋友可以插队,但是也得按照一定的流程来。
计算机内部有一个中断向量表,这个表就像是一个超级指南。
它告诉计算机,这个中断来了,你应该去哪个地方找处理这个中断的程序呢。
比如说,你按了某个特定的按键产生的中断,那计算机就会根据这个中断向量表的指示,找到对应的处理程序。
这个处理程序可就像是专门为这个插队的事情准备的解决方案。
比如说这个按键是控制一个小灯的开关的。
那这个处理程序可能就是改变小灯的状态,原来是亮的就把它弄灭,原来是灭的就把它点亮。
这个处理程序执行完了之后呢,计算机就又可以回到它之前正在做的事情啦,就好像小朋友买完冰淇淋走了,大家又继续好好排队买自己的东西一样。
而且呀,外部中断还有不同的优先级呢。
这就像插队也分紧急程度一样。
有些外部中断可能特别重要,比如说火灾报警器传来的信号,那这个就得优先处理,计算机就得先放下其他所有的事情去处理这个紧急的中断。
一、实验目的1. 理解中断的概念和作用。
2. 掌握中断的实现方法。
3. 学习中断优先级的设置。
4. 掌握中断服务程序的设计。
二、实验环境1. 实验平台:计算机实验室2. 实验设备:计算机、实验箱、示波器、万用表等3. 实验软件:C语言编程软件三、实验原理1. 中断:中断是指计算机在执行程序的过程中,由于某个事件的发生而暂时停止当前程序的执行,转而执行处理该事件的程序。
中断事件可以是硬件设备请求服务,也可以是软件程序请求处理。
2. 中断优先级:中断优先级是指多个中断同时发生时,系统优先处理哪个中断。
中断优先级设置合理可以保证系统稳定运行。
3. 中断服务程序:中断服务程序是指处理中断事件的程序,它通常由中断向量表中的中断处理函数组成。
四、实验步骤1. 设计实验程序,实现外中断功能。
2. 编写中断服务程序,处理中断事件。
3. 设置中断优先级。
4. 编译、下载程序到实验设备。
5. 进行实验,观察实验现象。
五、实验内容1. 实现外中断功能(1)编写中断初始化程序,配置中断控制器,设置中断向量表。
(2)编写中断服务程序,处理中断事件。
(3)编写主程序,触发中断事件。
2. 设置中断优先级(1)根据实验需求,设置中断优先级。
(2)编写中断优先级控制程序,实现中断优先级设置。
3. 编译、下载程序(1)使用C语言编程软件编译实验程序。
(2)将编译后的程序下载到实验设备。
4. 进行实验(1)打开实验设备,启动实验程序。
(2)观察实验现象,验证中断功能、中断优先级设置等。
六、实验结果与分析1. 实验结果实验成功实现了外中断功能,中断服务程序能够正确处理中断事件。
中断优先级设置合理,系统运行稳定。
2. 实验分析(1)中断初始化程序正确配置了中断控制器,设置了中断向量表,为中断服务程序的执行提供了基础。
(2)中断服务程序能够正确处理中断事件,保证了系统的正常运行。
(3)中断优先级设置合理,确保了关键中断事件能够优先得到处理。
一、实验目的1. 理解单片机外部中断的概念和工作原理。
2. 掌握MCS-51单片机外部中断的编程方法。
3. 通过实验验证外部中断在实际应用中的效果。
二、实验环境1. 实验设备:MCS-51单片机实验板、按键、LED灯、面包板、连接线等。
2. 开发环境:Keil uVision5软件。
三、实验原理外部中断是单片机的一个重要功能,用于响应外部事件。
当外部事件发生时,CPU可以暂停当前程序,转而执行中断服务程序,处理外部事件。
MCS-51单片机有两个外部中断源,即INT0和INT1。
四、实验内容1. 硬件连接将按键连接到单片机的INT0或INT1引脚,LED灯连接到单片机的某个I/O口。
具体连接方式如下:- 将按键的一端连接到单片机的INT0或INT1引脚,另一端连接到地。
- 将LED灯的正极连接到单片机的某个I/O口,负极连接到地。
2. 程序设计(1)初始化单片机```cvoid main() {EA = 1; // 开启总中断EX0 = 1; // 开启INT0中断IT0 = 1; // 设置INT0为下降沿触发P1 = 0xFF; // 初始化P1口为高电平,关闭LED灯 while(1) {// 主循环}}```(2)编写中断服务程序```cvoid ext0_isr() interrupt 0 {P1 = 0x00; // 点亮LED灯delay(500); // 延时0.5秒P1 = 0xFF; // 熄灭LED灯}```(3)编写延时函数```cvoid delay(unsigned int ms) {unsigned int i, j;for(i = 0; i < ms; i++)for(j = 0; j < 123; j++);}```3. 实验步骤1. 编写程序,并使用Keil uVision5软件进行编译和烧录。
2. 将程序烧录到单片机中,并连接好硬件电路。
3. 按下按键,观察LED灯是否闪烁。
外部中断实验实验报告外部中断实验实验报告引言外部中断是计算机系统中一种常见的中断方式,可以在程序执行过程中接收外部信号并及时中断当前任务进行处理。
本实验旨在通过搭建外部中断实验电路,了解外部中断的原理和应用,并通过实际操作验证其正确性和可行性。
实验目的1. 了解外部中断的原理和工作方式;2. 掌握外部中断的搭建方法和步骤;3. 验证外部中断的正确性和可行性。
实验器材1. 电脑;2. Arduino开发板;3. 按键开关;4. 连接线。
实验步骤1. 将Arduino开发板与电脑通过USB数据线连接,并打开Arduino开发环境;2. 在Arduino开发环境中,编写一个简单的程序,用于接收外部中断信号;3. 将按键开关的引脚与Arduino开发板的数字引脚相连,确保按键开关可以通过Arduino开发板进行控制;4. 将按键开关的另一端连接到Arduino开发板上的中断引脚(如INT0或INT1);5. 上传程序到Arduino开发板,并确保程序正常运行;6. 按下按键开关,观察程序是否能够正确接收并处理外部中断信号;7. 重复步骤6,多次测试外部中断的可靠性和稳定性。
实验结果经过多次测试和观察,实验结果表明外部中断能够正常工作并正确接收外部中断信号。
当按下按键开关时,程序能够及时中断当前任务,并执行相应的中断处理程序。
实验结果与理论预期相符。
实验分析外部中断是计算机系统中一种重要的中断方式,广泛应用于各种实时控制系统和交互式设备中。
通过本次实验,我们深入了解了外部中断的原理和工作方式,并通过实际操作验证了其正确性和可行性。
在实验过程中,我们使用Arduino开发板搭建了一个简单的外部中断实验电路,并编写了相应的程序进行测试。
通过按下按键开关,我们成功触发了外部中断信号,并观察到程序能够及时中断当前任务,并执行相应的中断处理程序。
这表明外部中断能够在实际应用中起到及时响应外部信号的作用,提高了系统的实时性和可靠性。
实验五、外部中断控制数码管显示实验一、实验目的(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、利用外部中断,控制音乐的播放。
实验五外部中断实验实验五外部中断实验一、实验目的1.掌握中断技术,学会对外部中断的处理方法;2.掌握中断对程序流程的控制,理解DSP对中断的响应时序。
二、实验设备计算机,CCS 2.0版软件,DSP仿真器,Exp4实验箱三、实验源程序#include "DspRegDefine.h" //VC5402 寄存器定义#define UCHAR unsigned char#define UINT16 unsigned int#define UINT32 unsigned long#define TRUE 1#define FALSE 0UINT16 show = 0x00aa;void cpu_init(void);void Delay(UINT16 numbers);void xint2_init(void);interrupt void ExtInt2();void cpu_init(void){asm(" nop ");asm(" nop ");asm(" nop ");*(unsigned int*)CLKMD=0x0;while(((*(unsigned int*)CLKMD)&01)!=0);*(unsigned int*)CLKMD=0x07ff;*(unsigned int*)PMST=0x3FF2;*(unsigned int*)SWCR=0x0001;*(unsigned int*)BSCR=0xf800;asm(" ssbx intm "); *(unsigned int*)IFR=0xffff; asm(" nop ");asm(" nop ");asm(" nop ");}void Delay(UINT16 numbers){UINT16 i,j;for(i=0;i<4000;i++)for(j=0;j<numbers;j++);< p="">}void xint2_init() //外部中断2初始化子程序{*(unsigned int*)IMR=0x0004; //使能int2中断asm(" rsbx INTM"); //开总中断}interrupt void ExtInt2() //中断2中断子程序{show=(~show)&0x00ff; //显示值取反return;}void main(){cpu_init(); //初始化CPUxint2_init(); //外部中断2初始化for(;;){asm(" nop ");port8001 = show;asm(" nop ");}}四、实验说明LF2407 DSP的INT2中断为低电平沿触发。
实验名称: 五、外部中断控制实验 日期: 见自己实验数据 得分: 同组人: 不填 指导教师: 马惠兰 一、实验目的1. 进一步熟悉TD-NMC 单片机实验系统的结构和实验方法。
2. 熟练掌握Keil uvision3单片机仿真软件硬件仿真操作方法和步骤。
3. 学习和掌握外部中断源控制程序的编程和调试方法。
4. 通过实验验证外部中断源之间的中断优先级关系及其正确性。
二、实验设备PC 机一台,TD-NMC 单片机实验系统一套 三、实验内容51单片机的外部中断0与脉冲单元的KK1ˉ连接,外部中断1与脉冲单元的KK2ˉ连接。
当响应外部中断0时,LED 指示灯D7D6点亮并顺次向右移动7次;当响应外部中断1时,LED 指示灯D0点亮并顺次向左移动8次。
编程设计外部中断的混合控制。
四、实验原理51单片机有5个中断源,这5个中断源之间的硬件优先权是固定的。
每个中断源可以设置高、低两个中断优先级。
通过改变中断源的优先级可以设置中断源之间的响应顺序。
其中的两个外部中断源,分别是外部中断0 0INT 和外部中断1 1INT ,通过单片机的P3.2引脚和P3.3引脚输入中断请求信号。
0INT 的硬件优先权比1INT 的高,当0INT 和1INT 同时发出中断请求时,先响应0INT 的中断请求,后响应1INT 的中断请求;为了使1INT 的中断请求先得到响应或能够打断0INT 的中断处理,实验中又重新设置1INT 的中断优先级为高,即PX1=1,0INT 的中断优先级为低,即PX0=0。
外部中断有两种触发方式:电平触发方式和边沿触发方式,本实验采用边沿触发。
实验电路连接如图1所示,P1口各位输出与8个LED 灯(D0~D7)相连,0INT 与脉冲单元的KK1ˉ连接,1INT 与脉冲单元的KK2ˉ连接,通过按下KK1ˉ和KK2ˉ产生0INT 和1INT 的中断请求。
响应不同的外部中断时,发光管的状态不同。
根据优先级关系设置实验数据记录表格。
实验五外部中断实验实验五、外部中断实验实验五:外部中断实验一、实验目的1.掌握向量中断控制器(vic)的设置;2.掌控外部中断插槽功能设置及外部中断的工作模式设置;3.介绍中断服务函数的撰写。
4.熟悉lpc2000系列arm7微控制器的gpio控制。
二、实验设备硬件:pc机一台、easyarm2103开发板一套软件:windows98/xp/2000系统,ads1.2集成开发环境三、实验内容设置p0.16低电平引爆外部中断0,短接jp3的p0.16端口,当按键key1按下后,p0.16输出低电平引爆外部中断,rowled,观测led现象。
四、实验复习建议仔细阅读《easyarm2103》手册第4章的内容,熟悉gipo的设置。
仔细阅读《easyarm2103》第3章的内容,了解ads1.2集成开发环境、lpc2200专用工程模板、easyjtag仿真器的应用。
五、实验步骤1.启动ads1.2,采用armexecutableimageforlpc2103工程模板创建一个工程vicdef_c。
2.在工程的user的main.c中编写实验程序,然后调试。
4.选用debuginram生成目标,然后编译连接工程。
5.将easyarm2103开发板上的jp3的p0.16端口短接。
6.选择【project】->【debug】,启动axd进行jtag仿真调试。
7.在中断服务程序中设置断点,全速运行程序,观察现象。
8.单步/全速运行程序,观察程序是否正确运行。
9.编写程序,同时实现按键掌控流水灯,4个led灯轮流照亮。
当按键按下并抬起时,led1暗,1秒后led2暗直至4个灯全亮,之后全部点燃,再次循环。
当再次按下按键时暂停流水灯表明,并全部点燃。
七、实验参照程序程序清单p0.16低电平触发外部中断0#include\#defineled1<<17/******************************************************************************函数名称:eint0irq**功能叙述:外部中断0服务程序**入口参数:并无**出口参数:并无****************************************************************************/v oid__irqeint0irq(void){if((io0pin&(1<<17))==0){io0set=1<<17;/*熄灭发光二极管*/}else{io0clr=1<<17;/*照亮发光二极管*/}while((io0pin&(1<<16))==0);/*等待按键松开*/extint=0x01;/*清中断标志*/vicvectaddr=0x00;/*通知vic中断处理结束*/}/***************************************************************************** ***函数名称:main**功能描述:p0.16低电平触发外部中断主函数**入口参数:无**出口参数:无****************************************************************************** /intmain(void){pinsel1=pinsel1&(~0x03);pinsel1=pinsel1|0x01;/*设置p0.16为外部中断0管脚*/pinsel1=pinsel1&(~(0x03<<2));/*设置p0.17为gpio功能*/io0dir=led;/*设置p0.17为输入*/io0set=led;/*设置输入为高电平*/irqenable();/*irq中断CX600X*/extmode=0x00;/*设置外部中断为低电平引爆*/vicintselect=0<<14;/*挑选eint0为fiq中断*/vicvectcntl0=0x20|14;/*将外部中断0分配给向量中断0*/vicvectaddr0=(uint32)eint0irq;/*设置中断服务程序地址*/vicintenable=1<<14;/*CX600Xeint0中断*/extint=0x01;/*去除eint0中断标志*/while(1);return0;}3.4.8思考1.中断服务函数为什么必须采用__irq润色?(提示信息:irq中断时微控制器转换至了irq模式,所以中断回到须要同时恢复正常cpsr寄存器,比如说采用“subspc,r14,#4”)2.在vic中,如何禁止某一个中断?假设系统使用了几个irq中断,如何一次全部禁止所有中断?。
外部中断应用实验
设计性试验
2012年11月28日星期三第三四节课
一、实验目的
1、掌握中断系统外部中断源的使用方法。
2、掌握延时程序的编程及使用方法。
3、掌握Proteus软件与Keil软件的使用方法。
4、掌握单片机系统的硬件和软件设计方法。
二、设计要求
1、用Proteus软件画出电路原理图,在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。
2、在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。
三、电路原理图
四、实验程序流程框图和程序清单及实验结果
/********************
实验五外部中断应用实验
要求:(1)在单片机的P1.0口线上接按键K0 ,作为外部中断源0使用,用于开启波形,在单片机的 P1.1口线上接按键K1,作为外部中断源1使用,用于关闭波形。
(2)在单片机的P1.2口线上产生周期50mS的连续方波,在P1.2口线上接示波器观察波形。
**********************/
ORG 0000H
START: LJMP MAIN
ORG 0003H
LJMP EXINT0
ORG 0013H
LJMP EXINT1
ORG 000BH
LJMP TTC0
ORG 0100H
MAIN: MOV SP, #2FH ;堆栈指针初始化
MOV IE, #10000111B;EA - - ES ET1 EX1 ET0 EX0
MOV TMOD, #01H ;设置定时器T/C0为工作方式1
MOV TH0, #9EH ;设置定时器T0的计数初值为25ms
MOV TL0, #58H
SETB IT0 ;设置外部中断0为脉冲触发
SETB IT1 ;设置外部中断1为脉冲触发
HERE: LJMP HERE ;等待中断
/*定时器T0中断服务程序*/
ORG 0200H
TTC0: CPL P1.2
MOV TH0, #9EH
MOV TL0,
#58H
RETI
/*外部中断0开定时器服务程序*/
ORG
0300H EXINT0:SETB TR0
RETI
/*外部中断1关定时器服务程序*/
ORG
0400H EXINT1:CLR TR0
RETI
END
//C 语言编程// #include "reg52.h" sbit P1_2=P1^2;
void main()
{ SP=0x2f; IE=0x87; TMOD=0x01;
//设置定时器T/C0 TH0=(65536-25000)/256; //设置定时器T0的计数初值为25ms TL0=(65536-25000)%256; IT0=1; //设置外部中断0为脉冲触发 IT1=1;
//设置外部中断1为脉冲触发
do { } while(1);
}
/**定时器T0中断服务子程序**/ void timer0() interrupt 1
{
P1_2=!P1_2;
TH0=(65536-25000)/256;
TL0=(65536-25000)%256;
}
/**外部中断0中断服务子程序**/ void EXINT0() interrupt 0 {
TR0=1;
}
/**外部中断1中断服务子程序**/ void EXINT1() interrupt 2 {
TR0=0;
}
五、实验总结
通过本次试验,我掌握了定时器/计数器定时功能的使用方法,能够利用定时器/计数器以查询、中断方式工作,设定计数功能,对外部连续周期性脉冲信号进行计数。
同时掌握了单片机系统的硬件和软件设计方法。
六、思考题
1、在P1.2口线上产生周期为100mS,占空比为2:5的连续矩形波,要求只采用按键K0来控制其开启和关闭。
ORG 0000H
START: LJMP MAIN
ORG 0003H
LJMP EXINT0
ORG 000BH
LJMP TTC0
ORG 001BH
LJMP TTC1
ORG 0100H
MAIN: MOV SP, #2FH ;堆栈指针初始化
MOV IE, #10001011B;EA - - ES ET1 EX1 ET0 EX0
MOV TMOD, #11H ;设置定时器T/C0为工作方式1
MOV TH0, #63H ;设置定时器T0的计数初值为40ms
MOV TL0, #0C0H
MOV TH1, #15H ;设置定时器T0的计数初值为60ms
MOV TL1, #0A0H
SETB IT0 ;设置外部中断为脉冲触发方式
MOV IP, #00000001B;设置外部中断0为高优先级,其余为低优先级
CLR A
HERE: LJMP HERE ;等待中断
/*定时器T0定时40ms 中断服务程序*/
ORG
0200H TTC0: CPL P1.2
;输出取反
MOV TH0, #63H ;重装计数初值 MOV TL0, #0C0H CLR TR0 ;关闭定时器T0 SETB TR1 ;开启定时器T1
RETI
;中断返回
/*定时器T1定时60ms 中断服务程序*/
ORG
0300H TTC1: CPL P1.2
;输出取反
MOV TH1, #15H ;重装计数初值 MOV TL1, #0A0H CLR TR1 ;关闭定时器T1 SETB TR0 ;开启定时器T0
RETI
;中断返回
/*外部中断0中断服务程序*/
ORG
0400H EXINT0:JNZ LOOP ; SETB P1.2
;输出置高电平 SETB TR0 ;关闭定时器T0
INC A
;累加器A 加1
LJMP
LOOP1 LOOP: CLR TR0 ;关闭定时器T0 CLR TR1 ;关闭定时器T1
CLR
A ;累加器A 清零 LOOP1: RETI
;中断返回
END
//C语言编程//
#include "reg52.h"
sbit P1_2=P1^2;
void main()
{ SP=0x2F;
IE=0x8B;
TMOD=0x11; //设置定时器T/C0为工作方式1
TH0=(65536-40000)/256;
TL0=(65536-40000)%256;
TH1=(65536-60000)/256;
TL1=(65536-60000)%256;
IT0=1; //设置外部中断为脉冲触发方式
IP=0x01; //设置外部中断0为高优先级,其余为低优先级do
{ }
while(1);
}
/**定时器T0定时40ms中断服务程序**/
void timer0() interrupt 1
{ P1_2=!P1_2;
TR0=0;
TR1=1;
TH0=(65536-40000)/256;
TL0=(65536-40000)%256;
}
/**定时器T1中断服务程序**/
void timer1() interrupt 3
{ P1_2=!P1_2;
TR1=0;
TR0=1;
TH1=(65536-60000)/256; TL1=(65536-60000)%256; }
/**外部中断0服务程序**/ void EXINT0() interrupt 0 { if(TR0==0&&TR1==0)
{ P1_2=1;
TR0=1;
TR1=0;
}
else
{ TR0=0;
TR1=0;
}
}。