renwocai 发表于 2012-2-22 15:43:25

有一点郁闷,用595驱动简单的数码管,用汇编能成功,用C却不能成功。 (已解决,低级错误,不

能成功的汇编代码:
http://cache.amobbs.com/bbs_upload782111/files_52/ourdev_721135QN058V.jpg
汇编代码 (原文件名:汇编代码.jpg)
能成功的汇编结果:
http://cache.amobbs.com/bbs_upload782111/files_52/ourdev_721136EHPDHK.jpg
汇编结果 (原文件名:汇编.jpg)

不能成功的C代码:
http://cache.amobbs.com/bbs_upload782111/files_52/ourdev_721137OJILEV.jpg
C代码 (原文件名:C代码.jpg)
C仿真结果:
http://cache.amobbs.com/bbs_upload782111/files_52/ourdev_721138CSBAZ8.jpg
C结果 (原文件名:C.jpg)

工程打包:

打包ourdev_721139R336YF.rar(文件大小:66K) (原文件名:595.rar)


我应该是能理解595的时序的,不然汇编是不能成功的,大家帮我看看C的问题在哪?

renwocai 发表于 2012-2-22 15:51:58

编译器是KEIL UV2
仿真是PROTEUS 7.8

OTD_WIND 发表于 2012-2-22 15:56:50

ds=CY;

是这句的问题吧,你在仿真里看了C的编译后的汇编代码了吗?

godfooker_back 发表于 2012-2-22 17:03:56

楼上加1,应该是c移位时不带进位标志,电脑没有keil,无法编译。楼下继续

godfooker_back 发表于 2012-2-22 17:11:49

改成这样试试

main()
{
        uchar a,M=0xc0;
                for(a=0;a<8;a++);
                {
                        sh=0;
                        ds=bit(M&0x80);                ///       
                        M<<=1;
                        sh=1;
                }       
        st=0;
        st=1;
        while(1);       
}

downtoearth 发表于 2012-2-22 17:48:15

我觉得st = 1 ;时前面应延时一会。

renwocai 发表于 2012-2-23 08:21:25

找到问题,谢谢各位了,我是用反汇编发现FOR语句后面多了一个分号。汗一个。
页: [1]
查看完整版本: 有一点郁闷,用595驱动简单的数码管,用汇编能成功,用C却不能成功。 (已解决,低级错误,不