在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 序效率大比拼,位翻轉程序

            序效率大比拼,位翻轉程序

            作者: 時間:2012-10-24 來源:網絡 收藏

            在單片機控制程序中,往往會用到,例如點陣的控制,圖形的處理,等。那么,在C語言中如何才能寫出高效率的程序呢?今日在keil的論壇中看到有網友提及這個程序,又在ourdev論壇搜索了一下,將老外寫的,網友寫的,我自己寫的程序做了一個全方位的測試,結果如下所示:

            首先是老外的程序:

            作者:Concepcion Marco Valero

            #include reg52.h>
            unsigned char mr;
            unsigned char invertir_byte (mr) {
            mr = (mr 0x0F) 4 | (mr 0xF0) >> 4;
            mr = (mr 0x33) 2 | (mr 0xCC) >> 2;
            mr = (mr 0x55) 1 | (mr 0xAA) >> 1;
            return (mr);
            }

            void main()
            {
            while(1)
            {
            P1=invertir_byte(0x33);
            }
            }

            Program Size: data=10.0 xdata=0 code=123
            完成位交換需要 121 個時鐘周期。

            ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            第二個程序:我寫的

            #include reg52.h>
            unsigned char mr;

            unsigned char invertir_byte (mr) {
            unsigned char temp;
            if(mr0x80){temp=temp|0x01;}
            if(mr0x40){temp=temp|0x02;}
            if(mr0x20){temp=temp|0x04;}
            if(mr0x10){temp=temp|0x08;}
            if(mr0x08){temp=temp|0x10;}
            if(mr0x04){temp=temp|0x20;}
            if(mr0x02){temp=temp|0x40;}
            if(mr0x01){temp=temp|0x80;}
            return (temp);

            }

            void main()
            {
            while(1)
            {
            P1=invertir_byte(0x33);
            }
            }

            Program Size: data=10.0 xdata=0 code=85
            完成位交換需要 42 個時鐘周期。


            ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■


            第三個程序:還是我寫的

            #include reg52.h>
            unsigned char mr;

            unsigned char invertir_byte (mr) {
            bit tempb;
            unsigned char count,temp;
            for(count=8;count;count--)
            {
            tempb=mr0x01;
            mr>>=1;
            temp=1;
            temp=temp|tempb;
            }
            return (temp);

            }

            void main()
            {
            while(1)
            {
            P1=invertir_byte(0x33);
            }
            }

            Program Size: data=12.1 xdata=0 code=64
            完成位交換需要 175 個時鐘周期

            ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            第三個程序:還是我寫的

            #include reg52.h>
            unsigned char mr;

            unsigned char invertir_byte (mr) {
            bit tempb;
            unsigned char count,temp;
            for(count=8;count;count--)
            {
            tempb=mr0x01;
            mr>>=1;
            temp=1;
            temp=temp|tempb;
            }
            return (temp);

            }

            void main()
            {
            while(1)
            {
            P1=invertir_byte(0x33);
            }
            }

            Program Size: data=12.1 xdata=0 code=64
            完成位交換需要 175 個時鐘周期

            ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            第四個程序:還是我寫的

            #include reg52.h>
            unsigned char bdata temp;
            sbit D0=temp^0;
            sbit D1=temp^1;
            sbit D2=temp^2;
            sbit D3=temp^3;
            sbit D4=temp^4;
            sbit D5=temp^5;
            sbit D6=temp^6;
            sbit D7=temp^7;

            unsigned char invertir_byte (unsigned char mr)
            {
            D7=mr0x01;
            D6=mr0x02;
            D5=mr0x04;
            D4=mr0x08;
            D3=mr0x10;
            D2=mr0x20;
            D1=mr0x40;
            D0=mr0x80;
            return (temp);
            }

            void main()
            {
            while(1)
            {
            P1=invertir_byte(0x33);
            }
            }

            Program Size: data=10.0 xdata=0 code=59
            完成位交換需要 35個時鐘周期

            ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            第五個程序:Jon Ward

            ##include reg52.h>
            unsigned char bdata src;
            sbit S0=src^0;
            sbit S1=src^1;
            sbit S2=src^2;
            sbit S3=src^3;
            sbit S4=src^4;
            sbit S5=src^5;
            sbit S6=src^6;
            sbit S7=src^7;

            unsigned char bdata dst;
            sbit D0=dst^0;
            sbit D1=dst^1;
            sbit D2=dst^2;
            sbit D3=dst^3;
            sbit D4=dst^4;
            sbit D5=dst^5;
            sbit D6=dst^6;
            sbit D7=dst^7;

            unsigned char invertir_byte (unsigned char mr)
            {
            src=mr;
            D0=S7;
            D1=S6;
            D2=S5;
            D3=S4;
            D4=S3;
            D5=S2;
            D6=S1;
            D7=S0;
            return(dst);
            }

            void main()
            {
            while(1)
            {
            P1=invertir_byte(0x33);
            }
            }

            //cost 35 machine cycle

            //Program Size: data=11.0 xdata=0 code=61
            完成位交換需要 35個時鐘周期

            ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            第六個程序:來自Ourdev論壇的網友

            #include reg52.h>
            unsigned char invertir_byte (unsigned char val)
            {
            unsigned char dat_b ,i;
            dat_b=0x00;
            for(i=0;i=7;i++)
            {
            dat_b=dat_b|((val>>i)0x01);
            if(i==7)break;
            dat_b=dat_b1;
            }
            val=dat_b;
            return(val);
            }

            void main()
            {
            while(1)
            {
            P1=invertir_byte(0x33);
            }
            }

            287 cycle

            Program Size: data=9.0 xdata=0 code=57


            完成位交換需要 287個時鐘周期

            ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            第七個程序:來自ourdev論壇的網友

            #include reg52.h>
            unsigned char code tab[16]={0x00,0x08,0x04,0x0c,0x02,0x0a,0x06,0x0e,
            0x01,0x09,0x05,0x0d,0x03,0x0b,0x07,0x0f};
            unsigned char invertir_byte (unsigned char dat)
            {
            dat = tab[(dat 0xf0)>>4] | (tab[dat 0x0f]4);
            return dat;
            }

            void main()
            {
            while(1)
            {
            P1=invertir_byte(0x33);
            }
            }

            //cost 26 machine cycle
            //Program Size: data=9.0 xdata=0 code=63

            完成位交換需要 26 個時鐘周期

            ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

            第八個程序:來自ourdev網友

            #includeAT89X51.H>
            unsigned char byte_bit_swap(unsigned char a)
            {
            a = ((a 0x0F) 4) | ((a 0xF0) >> 4);
            a = ((a 2) 0xcc) | ((a>> 2) 0x33);
            a = ((a 1) 0xaa) | ((a>> 1) 0x55);
            return(a);
            }
            void main(void)
            {
            while(1)
            {
            P1=byte_bit_swap(0x33);
            }
            }

            Program Size: data=9.0 xdata=0 code=66
            完成位交換需要 37 個時鐘周期



            評論


            技術專區(qū)

            關閉