{ if(key==0) { delay(); if(key==0) { if(i!=10) { P2=tab[i]; i++;} else {i=0; P2=tab[i]; i++;}}}}} 四.结果分析
听了老师的讲解和对实验原理图的理解,此次实验进行很顺利。
实验四.中断实验
一. 设计题目
1、利用外部中断控制灯亮 2、利用外部中断控制数码管亮0-9
二. 实验原理:
当CPU 正在执行程序时,单片机外部或内部发生了某一件事情,请求CPU迅速去处理,
于是CPU暂时中止当前的工作,转到中断服务处理程序处理所发生的事件,处理完该事件后再回到原被中断的地方,继续做原来的工作,CPU处理事件的过程,称为CPU的中断服务。 在MCS-51单片机中,用户(设计者)用3个特殊功能寄存器对中断进行管理。
三. 软件设计:
1、程序流程图 2、源代码:
<1> //外部中断控制灯亮: #include
led=1;
IT0=0;//低电平有效 EA=1; //中断总开关
EX0=1; //外部中断INT0 ,P3^2
}
void deng() interrupt 0 //外部中断0 ,方式0 {
led=0; }
<2> //外部中断控制数码管亮0-9 #include
unsigned char code tab[10]={0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90}; //定义数码管是显示0~9 unsigned char i; unsigned int j; void main() { EA=1; //中断总开关打开 IT0=0; //定义中断是低电平有效 EX0=1; //允许中断IT0有效 P2=0xc0; //开始数码管显示0 while(1); }
void EX_INT0() interrupt 0 //选择方式0 { for(j=0;j<25000;j++); //消抖 if(i<9) //判断是否超过显示tab内定义的10个数 { i++ ; P2=tab[i]; //显示下一个数 for(j=0;j<25000;j++); //延时 }
else {i=0 ; //如果i大于9,定义i=0,使显示再次进入tab P2=0xc0; } }
四实验结果分析:
实验时由于没有设置消抖,数码管显示数字异常,通过添加一个延时程序,数字正常显示。
实验五 定时器实验
一. 设计题目
用定时器0工作方式1控制两个LED以不同周期闪烁,
说明:设计一个LED以200MS为周期闪烁,另一个LED以800MS为周期闪烁。设计定时
器0每50MS产生一次中断,由2个变量分别对这中断次数计数,其中一个变量计数
2次,即100MS,控制LE亮灭,另一个变量计数8次,即400MS,控制LED亮灭。
二. 实验原理
51单片机有两个定时/计数器,分别称为T0和T1,它们功能完全相同,可作为定时器或计数器使用。其核心是一个16位加1计数器,它们由两个8位寄存器组成,其中THX为高8位,TLX为低8位(X=0或1,0表示定时/计数器T0,1表示定时/计数器T1