请教一个51的减法运算错误

2020-01-16 18:34发布

本帖最后由 wxdn 于 2016-10-11 04:47 编辑

这段子程序是ADC采样,将采样的结果通过运算得到n,xiadao是全局变量unsigned int型,用来修正这个ADC值,上电默认值为0;每次会加10,理论上,如果xiadao的值加到大于n的时候,是无法进去减运算的,可是现在当xiadao的值大于n,一样进去进行减运算,如果将代码中的n和xiadao直接赋值,就不会进去减,真的想不通了,来请教一下高手,这是什么情况?

void XDADC_READ(void)
{       
        unsigned char x,y,BAI,SHI,GE;
        unsigned int n;
        ADC_CONTR = 0Xcf;//启动ADC,180个时钟转换一次,P1.7为采样输入
        while(!(ADC_CONTR&0x10));//等待完成ADC转换       
        x = ADC_RES;        //读出高8位结果
        ADC_CONTR = 0xc0;//清除ADC

        ADC_CONTR = 0Xcf;//启动ADC,180个时钟转换一次,P1.7为采样输入
        while(!(ADC_CONTR&0x10));//等待完成ADC转换       
        y = ADC_RES;        //读出高8位结果
        ADC_CONTR = 0xc0;//清除ADC
        n=x+y;
        if(n>=245&&n<=510)
        {
                n=n-245;
                n=n*0.8;
//                n=100;
//                xiadao=105;
                if(n>=xiadao)
                {
                        n=n-xiadao;
                }
        }
        else
        {
                n=0;
        }
        BAI  = n%1000/100;
        SHI  = n%100/10;
        GE   = n%10%10;
        Display_shuzi(10,BAI,SHI,GE);//写下刀数       
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
takashiki
1楼-- · 2020-01-16 21:40
 精彩回答 2  元偷偷看……
gallle
2楼-- · 2020-01-17 01:05
可是现在当xiadao的值大于n, 您是怎么知道的呢?
wxdn
3楼-- · 2020-01-17 04:54
takashiki 发表于 2016-10-11 06:48
您n=n*0.8是要闹哪样,我不相信您能通过编译,如果您包含了这个文件的话。

这个能够编译通过的,不是这里的问题,已经找到问题了。
wxdn
4楼-- · 2020-01-17 07:54
一夜没有睡觉,等着测试这个程序。
wangpengcheng
5楼-- · 2020-01-17 13:45
本帖最后由 wangpengcheng 于 2016-10-11 08:51 编辑
wxdn 发表于 2016-10-11 07:20
这个能够编译通过的,不是这里的问题,已经找到问题了。


牛啊大哥,用五十一做浮点运算?您那主频是多少M的?有没有模拟过那个浮点大概用多长时间啊?
jyrpxj
6楼-- · 2020-01-17 13:51
 精彩回答 2  元偷偷看……

一周热门 更多>