失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 《单片机》实验——实验2 MCS-51外部中断控制实验

《单片机》实验——实验2 MCS-51外部中断控制实验

时间:2022-04-29 21:40:14

相关推荐

《单片机》实验——实验2 MCS-51外部中断控制实验

一、实验目的

掌握中断控制原理;

掌握中断处理程序的编程方法。

二、知识要点

(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外部中断控制实验》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。