一、实验目的
掌握中断控制原理;
掌握中断处理程序的编程方法。
二、知识要点
(1)8051内部有5个中断源,其中两个为外部中断源/INT0、/INT1,两个定时器T0、T1的溢出请求中断,1个片内串行口发送或接收中断源TI和RI。
(2)8051的5个中断源的优先次序已由硬件结构决定,由高到低顺序:
/INT0→T0→/INT1→T1→RI或TI
(3)C51编译器支持51单片机的中断服务程序。用C语言编写中断服务函数的格式为:
函数类型 函数名(形式参数列表)[interrupt n][using m]
其中,interrupt后面的n是中断编号,取值范围为0~4。using中的m表示使用的工作寄存器组号(如不声明,取默认值第0组)
三、实验步骤与要求
使用Proteus画出电路原理图。
使用Keil C51编写源程序,编译,生成Hex文件。
运行程序,观察并分析实验结果。
写实验报告。
四、实验内容
(1)利用外中断/INT0和/INT1控制P1口所接8位LED。无中断时,灯全亮,当外中断0响应时,灯左移亮;当外中断1响应时,灯右移亮。
#include<reg51.h>char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void delay(unsigned int time);key() interrupt 0{char i;for(i=0;i<=7;i++){P1=led[i];delay(200);}P1=0x00;}key1() interrupt 2{char j;for(j=7;j>=0;j--){P1=led[j];delay(200);}P1=0x00;}void main(){IT0=1;IT1=1;EX0=1;EX1=1;EA=1;while(1){P1=0x00;}}void delay(unsigned int time){unsigned int j=0;for(;time>0;time--)for(j=0;j<125;j++);}
(2)以下两小题中,二选一
(2-1)利用外中断/INT1,统计中断次数,并将统计结果送P1口的8位LED显示。
#include<reg51.h>char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};void delay(unsigned int time);int num=0;key1() interrupt 2{num++;P1=~num;}void main(){IT0=1;IT1=1;EX0=1;EX1=1;EA=1;while(1){}}void delay(unsigned int time){unsigned int j=0;for(;time>0;time--)for(j=0;j<125;j++);}
(2-2)利用外中断/INT1,统计中断次数,利用数码管实时显示次数。
#include<reg51.h>int num=0;void delay(unsigned int time);char DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};key()interrupt 2 {num++;P1=DSY_CODE[num];delay(200);if(num==9)num=-1;}void main(){IT0=1;IT1=1;EX0=1;EX1=1;EA=1;P1=DSY_CODE[num];while(1){}}void delay(unsigned int time){unsigned int j=0;for(;time>0;time--)for(j=0;j<125;j++);}
如果觉得《《单片机》实验——实验2 MCS-51外部中断控制实验》对你有帮助,请点赞、收藏,并留下你的观点哦!