传统51单片机的性能 点击:1074 | 回复:5



猎隼

    
  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2007-03-21 08:43:00
楼主
我设计了一个51单片机的实时通讯系统,通过通讯口将PLC的数据传入51单片机内,经过转化后,通过单片机的I/O口,将所收到的数值发送到三位数码显示管上,以实时的显示数值.
但在程序完成后发现,实时性不强,单片机有点力不从心的感觉,数码管闪烁得特别厉害,想问一下各位,AT80S51这种单片机的能力是不是达不到我想要求的效果?



imgg

  • 精华:7帖
  • 求助:1帖
  • 帖子:98帖 | 1694回
  • 年度积分:0
  • 历史总积分:5386
  • 注册:2002年4月03日
发表于:2007-03-21 09:03:00
1楼
很可能是程序的问题.

周公

  • 精华:10帖
  • 求助:0帖
  • 帖子:119帖 | 5549回
  • 年度积分:0
  • 历史总积分:6446
  • 注册:2002年11月26日
发表于:2007-03-21 13:39:00
2楼
应该是AT89S51。80系列没有 S (在线编程的)的。
是程序的问题。把扫描频率增加到40次/秒以上就不会闪烁了。

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2007-03-22 08:35:00
3楼
我设计的时候是让显示刷新率达到40以上了,但是在模拟执行的时候却发现CPU的使用达到100%了,因为我的程序是每隔一段时间便会接收来自PLC的数据,接收完的字符串经转换变成长整型数据,然后再动态的逐位显示,我的CPU的工作过程就是这些,代码也不长,却搞不懂为什么CPU的使用率竞会这么高?

周公

  • 精华:10帖
  • 求助:0帖
  • 帖子:119帖 | 5549回
  • 年度积分:0
  • 历史总积分:6446
  • 注册:2002年11月26日
发表于:2007-03-22 09:46:00
4楼
除非需要运算,来自PLC的数据的字符串可以转为字节型或者字型数据,尽量不要转换变成长整型数据,这样处理速度可以快些。
串口的操作过程可以设置成中断方式,不影响正常流程。
还可在函数输出输入等转换点设置口的状态翻转,用示波器监视流程占用时间。

猎隼

  • 精华:1帖
  • 求助:1帖
  • 帖子:151帖 | 1661回
  • 年度积分:0
  • 历史总积分:8983
  • 注册:2005年9月28日
发表于:2007-03-22 10:10:00
5楼
我要取的数值为0至359,即一个圆的一周中的角度值,用整型数值好像不够.
这是我最初的设计方案,如果有兴趣的话运行一下,给我指点指点,谢谢了.
#include<at89x51.h>
#include<stdio.h>
char IND[4];
char Num[]={0x01,0x79,0x12,0x30,0x68,0x24,0x04,0x61,0x7f,0x60};
char Add[]={0xfe,0xfd,0xfb};
int switchIND(int x);
int i,j;
void delay10ms(unsigned char time);
void main()
{
SCON=0X50;
TMOD=0X20;
TCON=0X40;
TH1=0xfd;
TI=1;
TR1=1;
while(1)
{
if(RI==1)
{
scanf("%S",&IND);
}
for(i=0;i<3;i++)
{
P2=Add[i];
P1=Num[switchIND(i)];
delay10ms(2);
P1=0xFF;
}
}
}
void delay10ms(unsigned char time)
{
unsigned char a,b,c;
for(a=0;a<=time;a++)
for(b=0;b<=10;b++)
  for(c=0;c<=120;c++);
}
int switchIND(int x)
{
int X;
switch(IND[x])
{
case '0':
X=0;
break;
case '1':
X=1;
break;
case '2':
X=2;
break;
case '3':
X=3;
break;
case '4':
X=4;
break;
case '5':
X=5;
break;
case '6':
X=6;
break;
case '7':
X=7;
break;
case '8':
X=8;
break;
case '9':
X=9;
break;
}
return X;
}

热门招聘
相关主题

官方公众号

智造工程师