当前位置:首页 > 单片机课程设计-频率相位表
(5) 测试12319Hz:
5.2 实物测试结果: (1)测试5Hz:
(2)测试590Hz:
6、性能分析:
由以上性能指标测试可知:
6.1仿真结果分析:利用计数法所设计的本系统的测试范围大概在1Hz~10Hz,当输入较低频率的方波信号时,精确度较高;然而随着输入的方波信号的频率逐渐增大,精确度逐渐下降。误差也随之增大。 6.2 实物结果分析:
由以上实物所测试的数据来看,实物在频率较高时,存在比较的误差;在频率较低时,误差较小,但是仍然存在,无法做到十分精确的测量,比较遗憾。 误差分析:
(1) 由于软件程序是用高级语言C写的,其延时指令精确度比不上汇编语言,所以,
在定时器定时的时候,出现误差;
(2) 由于整个设计所依靠的基本上是MCS-51单片机的定时器和中断,几乎不借助例
如计数器等扩展部件,所以其处理速度所限制;
(3) 在实物测试时候发现,实物误差较大,可能存在的原因是单片机以异或门芯片
74LS86在传输方波信号时,中间产生一定时间误差。而由于实物制作工艺问题, 电路板存在较大干扰噪声,影响测量结果。
附录一:设计源程序 #include
const unsigned char table1[]={\ const unsigned char table2[]={\
unsigned char temp[]={0x30,0x30,0x30,0x30,0x30,0x2e,0x30,0x30}; unsigned char temp2[]={0x30,0x30,0x30,0x2e,0x30,0x30};
float t1,t2,fre,ph; unsigned int m,n; unsigned int n1,f,p; unsigned int m1;
unsigned int x=0,y=0;
/*******定时器T0的中断服务程序**计算方波1周期******/ void time0()interrupt 1 //记得T0的中断号是1 {
x++; //方波一计数中溢出的个数 //TH0=255; //TL0=246; }
/*******定时器T0的中断服务程序*计算方波2周期*******/ void time1()interrupt 3 {
y++; //定时器0溢出次数
// TH1=255; // TL1=246; }
/***********外部中断0-方波1 中断服务程序***********/ void wai0()interrupt 0 {
m=x; x=0;
m1=TH0*256+TL0;
//if(m1>65526)m1=m1-65526; TH0=0; TL0=0; }
/***********外部中断1-方波2 中断服务程序**************/ void wai1()interrupt 2 {
n=y; //定时器1溢出次数保存 y=0;
n1=TH1*256+TL1; TH1=0; TL1=0; }
void main(void) {
inis_lcd(); //液晶初始化 P3=0xff; //输出初始化
TMOD=0x99; // 利用门控位,gate=1时,定时器T0、T1的启动依靠TR0、TR1和外部中断的高电平
//其中T0\\T1工作于方式1,65536计数 TH0=0;
TL0=0; //加一计数器 TH1=0; //5us TL1=0;
TR0=1; //单方面启动定时器,等到外部中断高电平 TR1=1;
EX0=1; //开外部中断 EX1=1;
ET0=1; //开定时器中断 ET1=1;
EA=1; //总中断开
IT0=1; //两个外部中断的触发方式设置为由高到低的负跳变触发 IT1=1;
display(0x80,table1,4); display(0x8d,&table1[4],2); display(0xc0,table2,3); write_com(0xc9);
write_data(0x22); //度数符号\
while(1) {
t1=m*65536+m1;
fre=1000000/(2*t1); //计算频率 f=fre*100; temp[7]=f+48;
temp[6]=(f/10)+48; // temp[6]=0x2e;
共分享92篇相关文档