新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于單片機的模擬開關時序設計與仿真

        基于單片機的模擬開關時序設計與仿真

        作者: 時間:2013-02-16 來源:網絡 收藏

        對開關S1與S2的電荷注入效應。由圖3可知S2關斷時間晚于S3,S1關斷時間晚于S2。S2斷開時的電荷注入效應引起V1點較小的波形失真,關閉S1,盡管有S2的電荷注入效應,但V1被置為輸入電壓Vin,因此,被測電容Cx上的電壓不受S2的電荷注入效應影響;S1斷開時的注入電荷,會沿著已閉合的開關S2流向地,S1不會對被測電容Cx產生影響。所以,S1和S2對輸出基本不產生影響。
         對開關S4與S5的電荷注入效應。S4與S5在斷開時,產生的電荷注入效應會使A2和A3的輸出波形有微小失真,但相對于輸出值較小,可以忽略,而且A4采用差動式結構輸入會使S4與S5的電荷注入效應相互抵消,故S4與S5的電荷注入效應不會對最終的輸出Vo產生影響。
        由以上分析可知,通過合理設計模擬開關控制時序,解決了其關斷時引入的電荷注入效應。
        3 實現開關時序的相關軟件
        3.1 Keil C51簡介
         Keil是德國Keil公司開發的編譯器。Keil C51是目前最流行的51開發工具,現在Keil公司的編譯器有支持經典80C51和80C51派生產品的版本。新版本mu;Vision2把μVision1用的模擬調試器dScope與集成開發環境無縫地結合起來,界面更友好,使用更方便,支持的品質更多。對于使用C語言進行單片機開發的用戶,Keil C51已成為必備的開發工具。
        Keil C51軟件是眾多單片機應用開發的優秀軟件之一,Keil C51提供了一個集成開發環境IDE(Intergrated Development Environment)?滋Vision,包括C51編譯器、宏匯編、連接器、庫管理和一個功能強大的仿真調試器,支持匯編、PLM語言和C語言的程序設計,界面友好,易學易用。在開發應用軟件的過程中,編輯、編譯、匯編、連接、調試等各階段都集成在一個環境中,先用編輯器編寫程序,再調用編譯器進行編譯,連接后即可直接運行[5,6]。
        本軟件采用Keil C51進行開發,程序可讀性強。
        3.2 Proteus簡介
        Proteus嵌入式系統仿真與開發平臺是由英國Labcenter Electronics公司開發的,是目前世界上最先進、最完整的嵌入式系統設計與仿真平臺,是目前唯一能夠對各種微處理器進行實時仿真、調試與測試的EDA工具。Proteus除了具有和其他EDA工具一樣的原理布圖、PCB自動或人工布線及電路仿真的功能外,最大的特點在于其電路仿真是互動的,針對微處理器的應用還可以直接在基于原理圖的虛擬原型上編程,真正實現了沒有硬件目標原形的情況下對系統的調試、測試、驗證,并實現軟件源碼級的實時調試,如有顯示及輸出,還能看到運行后輸入輸出的效果,配合系統配置的虛擬儀器如示波器、邏輯分析儀等,建立了一個完備的電子設計開發環境。Proteus產品系列可以對基于微控制器的設計連同所有的外圍電子器件儀器仿真,用戶甚至可以實時采用諸如LED/LCD、鍵盤、RS232終端等動態外設模型來對設計進行交互仿真。
        Proteus是一款電路分析與實物仿真軟件,運行于Windows操作系統上,具有實驗資源豐富、實驗周期短、硬件投入少、實驗過程損耗小、與實際設計接近程度大等特點[7-9]。
        4 開關時序的設計與仿真
        開關時序設計原理圖如圖4所示,圖中采用80C51芯片,其中管腳XTAL1、XTAL2接時鐘控制器,RST端上電,5個輸出管腳P1.0~P1.4分別控制開關S1、S2、S3、S4和S5,電源VCC為+5 V的直流電源。

        4.1 程序設計
        在Keil平臺進行如圖5所示的程序編譯。
        程序代碼如下:
        #includelt;reg51.h>
        #define uchar unsigned char
        #define uint unsigned int
        sbit s1=P1^0; //控制開關1
        sbit s2=P1^1; //控制開關2
        sbit s3=P1^2; //控制開關3
        sbit s4=P1^3; //控制開關4
        sbit s5=P1^4; //控制開關5
        bit flag,flag1,flag2,flag3;
        uchar ds,ds1,ds2,ds3;
        uint jishi;
        void Initialization() //初始化函數
        {
        EA=1;
        ET0=1;
        TMOD=0X02; //定時器工作方式為2
        TH0=0x06; //定時250 ?滋s
        TL0=0x06;
        TR0=1;
        s1=0;
        s2=1;
        s3=1;
        s4=1;
        s5=1;
        flag1=1;flag2=0;flag3=0;
        }
        void inte() interrupt 1 using 3 //1s中斷處理函數
        {
          if(++jishi==40) //時間間隔4000×250 ?滋s=1 s
        {
        jishi=0;
        if(flag1){ds1++;}
        if(flag2){ds2++;}
        if(flag3){ds3++;}
        }
        }
        void main ()
        {
        Initialization();
        while(1)
        {
           if(flag1)
        {
        if(ds1==4){s3=0;}
        if(ds1==11){s5=0;}
        if(ds1==12){s2=0;}
        if(ds1==13){s1=1;}
        if(ds1==20){s4=0;flag1=0;flag2=1;}
        }
          if(flag2)
        {
        if(ds2==1){s3=1;}
        if(ds2==2){s5=1;}
        if(ds2==9){s2=1;}
        if(ds2==10){s1=0;}
        if(ds2==17){s4=1;flag2=0;flag3=1;ds2=0;}
        }
           if(flag3)
        {
        if(ds3==7){s3=0;}
        if(ds3==14){s5=0;}
        if(ds3==15){s2=0;}
        if(ds3==16){s1=1;}
        if(ds3==23){s4=0;flag2=1;flag3=0;ds3=0;}
        }
        }
          }



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 莆田市| 北碚区| 长治市| 高安市| 江西省| 和顺县| 新蔡县| 盈江县| 黄山市| 定南县| 炎陵县| 仙桃市| 临高县| 龙山县| 海门市| 武乡县| 两当县| 贵定县| 庆云县| 五大连池市| 枝江市| 蓬莱市| 高雄市| 江津市| 朝阳县| 岚皋县| 庆安县| 巫山县| 皮山县| 合肥市| 普宁市| 阿克| 苏尼特左旗| 石景山区| 保康县| 年辖:市辖区| 鹤山市| 海丰县| 同仁县| 施秉县| 双牌县|