keil c中p=p是什么意思?

steve_shen 2011-11-30 02:14:06
void main(){
unsigned char p;
unsigned char xdata *ad_adr;
lcd_init();
Lcdplay("X",0);
Lcdplay("Y",8);
Lcdplay("Z",16);
ad_adr = &IN0;
TimeInitial();
while(1){
*ad_adr = 0; p=p; p=p;
while(EOC==0);

IntToStr(ad_action(0)*1.0/255*10,&TempBuffer[0]);
Lcdplay(&TempBuffer[0],1);


}
}
其中p=p是什么意思?
请教!~~~~~
...全文
256 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
steve_shen 2011-12-02
  • 打赏
  • 举报
回复
应该是电压值
如果是200的话
应该是(200/255)*5 这个5是外面限定电压
AnYidan 2011-11-30
  • 打赏
  • 举报
回复
别的不说,你的电流通过 ct, 并在电阻上产生压降,有可能还有 op,之后再 转换成一个 adc 的数值,你知道 这个数值与实际电流的比例关系吗?

ADC0809 是8-bit 的,adc 值从 0 ~ 255, 假设转换结果是 200, 它对应多大电流?
莫名的默默 2011-11-30
  • 打赏
  • 举报
回复
p=p可能会被编译器优化掉,没有了;
很多时候函数的参数没有用,编译器就会告警,这样就不会告警了
柯本 2011-11-30
  • 打赏
  • 举报
回复
不用函数是可以的,但你的程序问题太多了
if((max-IONE)>1 || (max-ITWO)>1 || (max-ITHREE)>1 ) //判断3个数据是否相差大于1
你的IONE,ITWO,ITHREE在哪里定义的,它的值从哪里来?

参考以下程序:


unit IONE,ITWO,ITHREE;
unit max;
while(1)
{
IONE=ADC0809_Get(0)*1.0*10/255;
ITWO=ADC0809_Get(1)*1.0*10/255;
ITHREE=ADC0809_Get(2)*1.0*10/255;

max=MAX(IONE,ITWO,ITHREE);
if((max-IONE)>1 || (max-ITWO)>1 || (max-ITHREE)>1 ) //判断3个数据是否相差大于1
{
IntToStr(ADC0809_Get(0)*1.0*10/255,&TempBuffer[0]);
LCD_Play(&TempBuffer[0],1);
}
else
{
LCD_Play(ErrorFirst,1);
} // 相差大于1,则表示电流不平衡,电机出故障

}

另外 ,估计你的MAX函数是有问题的(一般的MAX只能判两个数的最大值),所以MAX要自己重写

steve_shen 2011-11-30
  • 打赏
  • 举报
回复
我的问题是如果我想在输出之前,做判断,如果读取的3个电流一样,就输出电流,如果不一样,就报错信息,下面的程序能完成不?需要怎么来改
while(1)
{
max=MAX(ADC0809_Get(0)*1.0*10/255,ADC0809_Get(1)*1.0*10/255,ADC0809_Get(2)*1.0*10/255);
if((max-IONE)>1 || (max-ITWO)>1 || (max-ITHREE)>1 ) //判断3个数据是否相差大于1
Flag=1;
else
Flag=0;
if(Flag==0){
IntToStr(ADC0809_Get(0)*1.0*10/255,&TempBuffer[0]);
LCD_Play(&TempBuffer[0],1);
}
else
{
LCD_Play(ErrorFirst,1);
} // 相差大于1,则表示电流不平衡,电机出故障

}
柯本 2011-11-30
  • 打赏
  • 举报
回复
如果是这样
1,查你的ADC0809_Get值是否正确
2.你的MAX实现可能有问题
steve_shen 2011-11-30
  • 打赏
  • 举报
回复
问题是,就这么一段程序,没有达到我要的东西
Flag标志位始终不对。
柯本 2011-11-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 steve_shen 的回复:]
uchar Electric_Current_Judeg()
{
uint IONE,ITWO,ITHREE;
uint max;
uchar Flag=0;
IONE=ADC0809_Get(0)*1.0*10/255;
ITWO=ADC0809_Get(1)*1.0*10/255;
ITHREE=ADC0809_Get(2)*1.0*10/255;
max=MAX(IONE,I……
[/Quote]
如果从ADC0809得到的三个数据差大于1,返回1,否则返回0
柯本 2011-11-30
  • 打赏
  • 举报
回复
p=p; p=p;
延时用的
clleady 2011-11-30
  • 打赏
  • 举报
回复
你把它删除,看看会不会影响你程序的运行,我还真没遇到过。
steve_shen 2011-11-30
  • 打赏
  • 举报
回复
uchar Electric_Current_Judeg()
{
uint IONE,ITWO,ITHREE;
uint max;
uchar Flag=0;
IONE=ADC0809_Get(0)*1.0*10/255;
ITWO=ADC0809_Get(1)*1.0*10/255;
ITHREE=ADC0809_Get(2)*1.0*10/255;
max=MAX(IONE,ITWO,ITHREE);
if((max-IONE)>1 || (max-ITWO)>1 || (max-ITHREE)>1 ) //判断3个数据是否相差大于1
Flag=1; // 相差大于1,则表示电流不平衡,电机出故障

return Flag;
}
得到的会是什么值???
turing-complete 2011-11-30
  • 打赏
  • 举报
回复
可能是怕CPU太闲

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧