程式撰寫初期有很多重覆性的工作,因此若先行建立一個共用的範本程式,可以先把一些重覆的內容儲存起來;以後不管做什麼樣的程式都可以套用,就能夠省下不少時間。
以目前的需求來看,這個範本程式需要下列幾項內容:
○ 整體的說明註解
○ 檔頭引入及固定變數宣告
○ 中斷向量表
○ 中斷副程式
○ 堆疊設置
○ 整體的說明註解
○ 檔頭引入及固定變數宣告
○ 中斷向量表
○ 中斷副程式
○ 堆疊設置
- 整體的說明註解:包括專案名稱、適用的單晶片、撰寫日期 ... 等相關資訊,主要是用以表達程式的目的及作用。
;**************************************************************** ; Project : Basic Example Project ; Target MCU : Atmel Atmega8A ; Application Memory : $000 ~ $FFF (4K x 16 bis) ; Date & Time : 2013/7/23, 9:41AM ; Compiler : Atmel AVR Studio 4 ; Designer : Hrean Chang ; Description : Example ;------------------------------------------------------------------------------- ; [Update] ; 2013/7/23 - Initial edition. ;**************************************************************** |
- 檔頭引入及固定變數宣告:檔頭引入與使用的單晶片有關,當中會有相關暫存器、I/O埠位址及旗標的宣告;另外一些與硬體有關的固定變數宣告也在此進行。
.include "m8def.inc" .equ stack_size = 32 .equ system_clock = 16000000 |
- 中斷向量表:其實就是一堆跳越指令,分別跳到對應的副程式上。
.csg .org $000 rjmp BootStart ;=================== Interrupt Vector ================== |
- 中斷副程式
;=================== Interrupt Function Code =================== ExtInterrupt0: reti ExtInterrupt1: reti Timer2Match: reti Timer2Overflow: reti Timer1Event: reti Timer1MatchA: reti Timer1MatchB: reti Timer1Overflow: reti Timer0Overflow: reti SPITransforComplete: reti UART_RX_complete: reti UART_DataEmpty: reti UART_TX_complete: reti ADCcomplete: reti EEPROMready: reti AnalogComparator: reti TWIinterface: reti SPMready: reti |
- 堆疊設置:放在主程式開始的第一件工作,之後才容許中斷使用或做副程式跳躍。
;======================== Main Code ======================= BootStart: ;Initial stack buffer ldi r16, low(stack_area) + stack_size out SPL, r16 ldi r16, high(stack_area) out SPH, r16 ;====================== Stack Segment ====================== .dseg stack_area: .byte stack_size |
沒有留言:
張貼留言