调试后的程序代码:#includereg51.hsfrx=0xb0;voiddelay(void)for(i=0;i250;i++)for(j=0;j250;j++)voidmain(void)x=0x7e;delay();x =0xbd ;delay();x=0xdb;delay();x=0xe7;delay();x=0xdb;delay();x=0xbd;delay();x=0x7e;delay();实验总结No. An实验比较成功,给了我很大的信心。 从一开始我就觉得神奇的流水灯居然是这样工作的。 我也知道课前预习的重要性。 只要你课前准备充分,做好作业,就能做好实验。 另外,通过这次实验,我学会了如何使用仿真软件Protues和编程软件Keil,并能够很好地绘制电路图并加载程序完成实验所需的功能。 马神工学院实验报告名称:XX****:微控制器原理与应用学院(系):计算机科学与技术专业/年级:2010级计算机科学与技术实验2:中断实验实验目的:通过P3.2, P3.3引脚的电平控制实现外部中断处理,从而控制输出口P1。 实验原理图 实验参考电路图如下: 参考实验程序 // 使用外部中断0的中断方式进行数据采集和处理 #includereg51.h //包含51单片机寄存器定义的头文件 sbitS=P3^2; 该位定义为P3.2, /*****功能函数:主函数*********/voidmain(void)EA =1;//开启总中断 EX0=1; //允许使用外部中断 IT0=1;//选择负跳变触发外部中断 P1=0xff;while(1)//死循环,防止程序跑飞/******** ******************功能:外部中断T0的中断服务程序******************** */voidint0(void)中断//外部中断0的中断号为0P1=~P1;//每次产生中断请求,P1就取反。
实验思维题:根据指南提供的原理图,自行设计一个外部中断实验。 要求:不同的中断处理程序可以输出不同的响应效果。 实验电路图: 实验代码:#includereg51.h#includeintrins.hvoiddelay()unsignedintfor( i=0;i250;i++)for(j=0;j250;j++)voidmain(void)unsignedintP1=0xfe;while(1)EA =1;//允许总中断 EX0=1;//允许外部中断0 IT0 =0;//选择外部中断0为边沿触发方式 EX1=1;//允许外部中断1 IT1=0;//选择外部中断1为边沿触发方式 PX0=0;//外部中断0为低优先级 PX1=1;//外部中断1为高优先级 delay();P1=_crol_(P1,1);voidint0(void)interruptP1= 0xaa;delay();voidint1(void)interrupt 五、实验总结 本实验为中断实验。 首先,我检查了中断的类型和各种类型代码。 主要包括:外部中断0、定时器/定时器T0、外部中断1、定时器/定时器T1、串口中断。 他们的优先级是从高到低。 因此,我使用P3.2和P3.3端口分别控制外部中断0和外部中断1,并将外部中断1的优先级设置为1(高优先级),从而达到实验要求:两个外部中断使用它们全部; 实验可以反映不同中断优先级的中断源的对应情况; 不同的中断处理程序可以输出不同的响应效果。
马神工学院 实验报告名称:XX 课程名称:单片机原理与应用 学院(系):计算机科学与技术 专业/年级:2010 计算机科学与技术 实验三:定时器/计数器实验 实验目的 通过使用定时器T0中断用于控制P2.0引脚LED灯的闪烁。 闪烁时间要求为2S。 实验示意图如下。 实验参考电路图如下(注意,下图中只有D1等在闪烁,如果1点亮,参考实验程序 // 使用定时器T0中断实现长期定时。单片机晶振振荡器周期为12MHZ,机器周期为1us #includereg51.h包含头文件51单片机寄存器定义 sbitD1=P2^0; //定义D1位为P2.0脚 unsignedcharCountor;//设置全局变量为存储定时器T0中断次数/*****************功能:主函数****/voidmain(void)EA=1;//开启总中断ET0= 1;//定时器T0中断使能 TMOD=0x01;//使用定时器T0模式 2TH0=(65536-50000)/256;//定时器T0位赋值初始值 TL0=(65536-50000)%256;//赋值给定时器T0位初值TR0=1;//启动定时器T0Countor=0;开始累加中断次数 while(1)//无限循环等待中断/******** **函数功能:定时器T0********的中断服务程序/voidTime0(void)interruptCountor++;//中断次数加1if(Countor==20)//如果总次数达到20,则定时器full 1sD1=~D1;//逐位取反操作,将P2.0引脚的输出电平取反 Countor=0;//设置CountorTH0=(65536-50000)/256;//将定时器T0位分配给初始值TL0=(65536-50000)%256; //定时器T0实验题:修改程序,使用定时器T1的中断方式控制P2.0和P2.1引脚的LED灯闪烁10次,周期分别为200ms和800ms。 调试后的程序代码:#includereg51.h sbit D1=P2^0; sbit D2=P2^1; 无符号字符Countor1; 无符号字符Countor2; 无效主(){ EA=1; ET1=1; TMOD=0x10; TH1 =(65536-50000)/256; TL1=(65536-50000)%256; TR1=1; 计数器1=0; 计数器2=0; while(1) voidTime1() 中断 Countor1++;Countor2++; if(Countor1==2) { D1=~D1; 计数器1=0; D2=~D2;计数器2=0; TH1=(65536-50000)/256;TL1=(65536-50000)%256; 实验总结 本实验为定时器/计数器实验,利用定时器T0的中断来控制P2.0引脚的LED灯闪烁,闪烁时间为2S,即亮1S。
一开始我用的是定时器表达式TH1=(65536-15536)/256; TL1=(65536-15536)%256; 并通过示波器发现LED闪烁周期没有达到预期的效果。 经过反复计算,终于找到了正确的表达式 TH1=(65536-50000)/256; TL1=(65536-50000)%256; 被发现。 确切的周期是50ms。 计数20次的精确周期是1s。 用示波器检查后,达到实验标准。 预期结果。 12马神工学院实验报告名称:XX课程名称:单片机原理与应用学院(系):计算机科学与技术专业/年级:2010级计算机科学与技术实验四:串口实验实验目的:本实验需要单片机U1通过其串口TXD向单片机U2发送数据,单片机U2通过RXD接收U1发送的数据。实验原理图。 单片机发送数据的实验参考电路图如(1)所示: 单片机接收数据的实验参考电路图如(2)所示: 13、参考实验程序 // 单片机发送数据#includereg51.h // 包含微控制器寄存器的头文件是无符号字符代码 Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F}; //流水灯控制代码,此数组定义为全局变量/********函数功能:向PC发送一个字节的数据**************** / void Send(unsigned char dat) SBUF=dat;while(TI==0) /******** ********函数功能:延时约150ms******** ********************/void 延迟(void) unsignedchar for (m=0;m200;m++)for(n=0;n250;n++) /** **************功能:主函数************ ****/void main(void) unsignedchar TMOD=0x20;//TMOD=0010 0000B,定时器T1工作在模式2 SCON=0x40; //SCON=0100 0000B,串口工作模式1 PCON=0x00; // PCON=0000 0000B,波特率9600 TH1=0xfd; //按规定给定时器T1赋初值TL1=0xfd; //按照规定给定时器T1赋初值TR1=1; //启动定时器T1 while (1) Send(Tab[i]);//发送数据i delay(); //每150ms发送一次数据