《单片机原理与应用》实验报告实验3:简单频繁计姓名院系计算机应用学号任课教师谭家兴指导教师谭家兴评阅教师谭家兴实验地点电子实验室实验时间2010年6月17日星期四实验目的:单片计算机即单片微型计算机。(Single-ChipMicrocomputer),是集CPU,RAM,ROM,定时,计数和多种接口于一体的微控制器。他体积小,成本低,功能强,广泛应用于智能产品和工业自动化上。而51单片机是各单片机中最为典型和最有代表性的一种。这次课程设计通过对它的学习,应用,从而达到学习、设计、开发软、硬的能力。实验要求:设计一个频率计,输入某个频率的信号.能用单片机检测出这个信号的频率.也就是统计一秒钟内收到多少个脉冲..实验原理:通过信号发生器产生一个信号.通过单片机3.5端口(外部中断0)接收.把外部中断0设置成下降沿触发方式.统计收到的脉冲个数,把定时计数器0设置成方式1(13位定时器).通过一个按钮启动定时器0和外部中断0,定时器开始计时.外部中断0开始计数,一秒钟后用数码管显示中断收到的脉冲个数实验过程中遇到的问题以及如何解决的?实验中由于信号发生器产生的信号电压过低,外部中断端口未能识别收到的脉冲数,后来提高电压后正常接收数码管显示的时候.未能正常显示数的各个位,经过反复调试还是显示出来了仿真软件显示效果:一秒钟后按下按钮后显示的结果:流程图:源代码:#includereg52.h//头文件端口声明#defineucharunsignedchar//变量宏定义#defineuintunsignedintunsignedcharcodetable1[]={//共阳极0~f数码管编码0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};//共阴极的数码管0~f的段编码是这样的:unsignedcharcodetable2[]={//共阴极0~f数码管编码0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//4~70x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};uintcount=0;//定义脉冲计数变量sbitK1=P1^0;sbitK2=P1^7;voiddelay(uchary)//延时子程序{ucharx;while(y--)for(x=110;x0;x--);}display(count)//显示子程序{ucharwan,qian,bai,shi,ge,i=2;//将要显示的数分解成各位wan=count/10000;qian=count%10000/1000;bai=count%1000/100;shi=count%100/10;ge=count%10;P2=0x7f;P0=table2[ge];//送个位数delay(i);P2=0xbf;P0=table2[shi];//送十位数delay(i);P2=0xdf;P0=table2[bai];delay(i);P2=0xef;P0=table2[qian];delay(i);P2=0xf7;P0=table2[wan];delay(i);}voidmain(){IE=0x8a;//开总中断和T0,T1TMOD=0x51;//设置中断工作方式TH0=(65536-50000)/256;TL0=(65536-50000)%256;while(1){if(K1==0){delay(11);if(K1==0){count=0;TR0=TR1=1;//当按键按下时启动T0和T1}}display(count);}}voidt0()interrupt1//定时计数器T0子程序{ucharK;TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(++K==20){TR1=TR0=K=0;//关两个中断count=TH1*256+TL1;//当到一秒后,计下T1收到的脉冲个数TH1=TL1=0;//T1清零}}本次实验的体会(结论)做实验首先要把实验原理设计出来,按实验原理来写程序.不能一开始就开始写程序做实验需要很大的耐心,在无法得到正确结果的时候不能放弃,要反复调试以找到问题所在,加以更正.评阅教师特殊评语:评阅教师:日期: