新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 缺少仿真器時avr單片機的開發方法

        缺少仿真器時avr單片機的開發方法

        作者: 時間:2013-12-09 來源:網絡 收藏

        存貯器單片機,不要仿真機也能方便快速地開發程序。具體可以從以下幾方面入手:
        一、盡量使用高級語言開發系統程序 您有沒有在寫匯編程序時,標錯一個標號而浪費您大把時間找錯或跳轉偏移量過大而不得不改動程序結構的經歷。其實您如果使用高級語言開發程序,就不會有這樣的痛苦。 在開發程序時,除了建立一個良好的開發文檔外,使用語言的選擇也很重要。有許多人認為使用匯編寫程序比較精簡,而用高級語言開發會浪費很多程序空間,其實這是一種誤解。對一個有經驗的,而且非常熟悉某種單片機的匯編高手而言,他是能寫出比高級語言更精簡的代碼。而對匯編不是很熟的開發者、或突然更換了一種新的單片機,您能保證一定可以寫出比高級語言更簡練的代碼嗎? 高級語言的優越性是匯編語言不能比的:
        1、程序移植方便
        2、程序的堅固性
        3、對數學運算的支持
        4、條理清晰的結構化編程,程序的可維護性
        5、開發周期短
        現在的高級語言編譯器(如C編譯器)已可以產生代碼效率很高的機器代碼,因此建議大家能用高級語言實現的程序盡可能使用高級語言寫,在對速度和時序要求特嚴的場合可以采用混合編程的方法來解決。
        二、更多的使用軟件模擬仿真環境 現在許多單片機都提供軟件模擬仿真環境,如AVR單片機就可以在ATMEL公司提供的AVR STUDIO開發平臺的模擬仿真環境中進行軟件的模擬調試。BASCOM-AVR還提供了更加人性化和配合外部圖形界面(鍵盤、標準LCD顯示器等)的軟件模擬調試環境。 ATMEL的AVR STUDIO是一個開發AVR單片機的集成開發環境,其支持高級語言和匯編語言的源代碼級軟件模擬調試。在模擬仿真條件下調試算法、程序流程等可以說和硬件仿真機是沒有區別的;而調試延時程序、計算一段程序運行所花的時間等方面,可以說比硬件仿真器更方便,因為許多仿真機(如JTAG ICE)是無法提供程序運行時間等調試參數的。 另外,對I/O端口、定時器、UART、中斷響應等,在AVR STUDIO中均可實現模擬仿真,用戶也可以采用軟件的單步運行、設置斷點等手段,分析內存和查看AVR中所有的硬件資源的數據以及使用情況。 學會使用和以軟件模擬仿真為主、已硬件仿真配合的系統開發調試手段可以大大提高項目的開發效率,縮短開發周期。因為,一旦系統整體設計完成,硬件PCB板的設計和制作同軟件系統的開發可同時進行。當硬件系統板完成后,軟件總體的架構也已經調試完成,既可進行實際的調試階段。
        三、善用目標板上的硬件資源 在許多系統目標板上均有LED、數碼管、RS232等附件和接口,其實利用好這些附件接口,也能實現和完成程序的調試開發。 我們使用仿真器的目的是要觀察單片機內部的狀態和數據,利用這些附件和存貯器多次可擦寫的特點,完全可以觀察到單片機內部的狀態。 AVR單片機是支持ISP的單片機,開發時可以通過下載電纜將其和PC連成一個整體,在程序編譯完后立刻下載到目標MCU中運行。在需要觀察單片機內部狀態時,可以程序的適當位置加入少部分代碼,把MCU的內部狀態和數據通過LED、數碼管等顯示出來。在有RS232通信接口的應用中,可以直接將需要觀察的MCU內部狀態送到PC機,在PC機上用串口調試器等一些超級終端來顯示數據。現在大部分的開發環境本身就提供了超級終端,如ICC、CVAVR、BASC0M-AVR等。 由于單片機采用了支持ISP的Flash技術,因此采用高級語言開發系統程序,更多的以軟件模擬仿真技術,加上使用串口輸出調試數據的開發手段已成為開發單片機和嵌入式系統(如32位ARM的COMMAND調試手段等)的流行和高效的方法。
        四、舉例
        在開發AVR的I2C應用例程時,使用串口輸出調試數據的方法介紹。
        首先初始化UART。可以看出初始化UART只需要很少的幾行代碼,在完成程序調試后將可以將其刪除。如果你的系統程序本身就需要使用串口,那么初始化UART就沒有一行多余的代碼了。
        void uart_init(void)
        {
        UCSRB=(1RXEN)|(1TXEN)|(1RXCIE);
        UBRRL=(fosc/16/(baud+1))%256;
        UBRRH=(fosc/16/(baud+1))/256;
        UCSRC=(1URSEL)|(1UCSZ1)|(1UCSZ0);
        }
        然后我們可以寫一個putchar函數,或直接使用標準輸入輸出庫中的putchar函數。
        void putchar(unsigned char c)
        {
        while (!(UCSRA(1UDRE)));
        UDR=c;
        }
        接下來只要在需要調試的程序部分調用putchar函數就可以將一些需要查看的
        MCU中硬件資源的數據和狀態送PC機顯示了。如要觀察I2C中斷程序中TWSR寄存器的值,只要在I2C中斷程序中插入兩行代碼就可以了:
        #pragma interrupt_handler TWI_ISR:iv_TWI
        void TWI_ISR(void)
        {
        unsigned char temp = TestAck();
        putchar(temp);
        switch (temp);//調試完后,本行改為switch(TestAck()),
        //刪除上面兩行就可以了。
        {
        case SR_SLA_ACK:
        {
        fill_rece();
        TWI_STATE=TWI_RD;
        Twi_ACK();
        Break;
        }
        . . .
        }
        }
        在PC機的超級終端軟件中,設置波特率、數據格式后打開串口就可以觀察TWSR寄存器的狀態值了



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 寿宁县| 连城县| 台湾省| 盐亭县| 邓州市| 临安市| 瓮安县| 巴林左旗| 安达市| 全州县| 鹿泉市| 梁山县| 迭部县| 沙湾县| 常熟市| 泗阳县| 宿迁市| 平定县| 凤台县| 阿拉善左旗| 正定县| 邯郸县| 航空| 鲜城| 西华县| 泰宁县| 喀喇沁旗| 日喀则市| 大新县| 依兰县| 巫溪县| 凉城县| 城固县| 延寿县| 丹寨县| 桦甸市| 广州市| 柳州市| 聂拉木县| 三都| 张北县|