3878|12

83

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

最近遇到一个很郁闷的问题(stc芯片) [复制链接]

我做一个AD转化的实验用c写的和用汇编写的结果不一样,,一直想不明白,,郁闷死
下面是程序:void Delay1ms(uint n)
{
    uint i,j;
    for (j=0;j<=n;j++)
        for (i=0;i<=120;i++)
            ;

}
int Display(uchar Numtime)
{
        uchar gewei,shiwei;
        gewei=Numtime%10;
        shiwei=Numtime/10;
        P2=dispcode[gewei];
        weige=1;
        weishi=0;
        Delay1ms(20);
        P2=dispcode[shiwei];
        weishi=1;
        weige=0;
        Delay1ms(20);
        return 1;
}
void ADC_power_on()
{
        ADC_CONTR|=0x80;//再是延时1ms了
        Delay1ms(1);
}
void Set_P1_0_ASF()
{
        P1ASF|=0x01;//再是短延时了
}
void Set_ADC_Channel_0()
{   uchar i;
        ADC_CONTR=0xe1;//在延时20-200us
        for(i=0;i<=64;i++)//延时100us
                ;
}       
void GET_AD_RESULT()
{
        ADC_RES=0;
        ADC_CONTR|=0x08;
        _nop_();_nop_();_nop_();_nop_();
        while((ADC_CONTR&0x10)==0);
        ADC_CONTR&=0xe7;//到这里转换结束可以取值了
        Get_result=ADC_RES;
}

最新回复

e1改成e0就好了。。。。  详情 回复 发表于 2010-3-25 22:26
点赞 关注

回复
举报

83

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
ADC_Power_On:
     PUSH ACC
     ORL ADC_CONTR,#80H
     nop
     nop
     ACALL Delay1S
     POP ACC
     RET
Set_P1_0_ASF:
     PUSH ACC
     MOV A,#01H                    ;用的是P1.0,
     ORL P1ASF,A
     NOP
     nop
     nop
     POP ACC
     RET
Set_ADC_Channel_0:
                  MOV ADC_CONTR,#ADC_Power_0N_Speed_Channel_0
                  acall delay200us
                  Ret

GET_AD_RESULT:
              PUSH ACC
              MOV ADC_RES,#0
              ORL ADC_CONTR,#00001000B
              NOP
              NOP
              NOP
              NOP
WAIT_AD_FINISHE:
                MOV A,#00010000B
                ANL A,ADC_CONTR
                nop
                nop
                nop
                JZ WAIT_AD_FINISHE
                ANL ADC_CONTR,#11100111B
                nop
                nop
                POP ACC
                RET
这里的延时程序我没有写
 
 

回复

55

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
自己顶,,这问题难道没有人帮我解决。。。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

4
 
下面是程序:void Delay1ms(uint n)
{
uint i,j;
for (j=0;j<=n;j++)
for (i=0;i<=120;i++)
;

}
int Display(uchar Numtime)
{
uchar gewei,shiwei;
gewei=Numtime%10;
shiwei=Numtime/10;
P2=dispcode[gewei];
weige=1;
weishi=0;
Delay1ms(20);
P2=dispcode[shiwei];
weishi=1;
weige=0;
Delay1ms(20);
return 1;
}
void ADC_power_on()
{
ADC_CONTR|=0x80;//再是延时1ms了
Delay1ms(1);
}
void Set_P1_0_ASF()
{
P1ASF|=0x01;//再是短延时了
}
void Set_ADC_Channel_0()
{ uchar i;
ADC_CONTR=0xe1;//在延时20-200us
for(i=0;i<=64;i++)//延时100us
;
}
void GET_AD_RESULT()
{
ADC_RES=0;
ADC_CONTR|=0x08;
_nop_();_nop_();_nop_();_nop_();
while((ADC_CONTR&0x10)==0);
ADC_CONTR&=0xe7;//到这里转换结束可以取值了
Get_result=ADC_RES;
}
从汇编的角度看,你提供的汇编代码是c的直译,唯上面红色标出处没翻。不知你是如何判断两种结果的不同之处。建议将c语言反汇编并和自己的代码作对照。祝顺利~
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

5
 
另外的建议:在编程的角度,你的汇编不是太整齐规范。对于子程序(非中断)而言,可以尽量减少对ACC的进出堆栈,以增加时效性。作参考。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

6
 
这个我明白。我用c写的AD转换失败啊,,用汇编写的是正确的。。
Get_result=ADC_RES;
这个我只是把AD转换的结果拿过来用
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

7
 
Get_result在你提供的程序中并没有出现使用。提供完整代码才能进一步分析。
 
 
 

回复

74

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 anchorite27 的回复:
Get_result在你提供的程序中并没有出现使用。提供完整代码才能进一步分析。


我把它放进二段八段数码管里面动态显示
 
 
 

回复

89

帖子

0

TA的资源

一粒金砂(初级)

9
 
高手看一下,,谢谢了
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

10
 
看看.c编译后的汇编...是不是说有些初入..
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

11
 
这个问题很郁闷啊,,求帮忙
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

12
 
难道真没有人了。。。。。
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

13
 
e1改成e0就好了。。。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表