但
2K x 14字的程序存儲器,
128×8個字節的數據存儲器(RAM)
八級深硬件堆棧<< 堆疊只有8層
麻煩的是使用數據存儲要先切到正確的銀行,光看到這規格是不是就打退堂鼓了呢?
因為手上剛好有這芯片就順手測試一下,就當作是筆記下面練習程式啟動計時1中斷,
(這顆的中斷位置是所有中斷一起共用的,所以進到中斷副程式時要先檢查是哪一個中斷裝置發生中斷)令端口_A每進一次中斷就反向輸出一次
列表P = 16F72; 列表指令來定義處理器
#包括
__config _CP_OFF&_WDT_OFF&_BODEN_OFF&_PWRTE_ON&_XT_OSC
; “__config'指令用於內。asm文件中嵌入的配置數據。
; 下列指令的標籤都位於各自的。增量文件。
; 請參閱相關的數據表上的配置字的更多信息。
; *****變量定義(舉例)
W_TEMP EQU 32H
STATUS_TEMP EQU 31H
FLAG_A EQU 30H
; ****************** *********************
ORG量0x000; 處理器復位向量
轉到開始; 進入程序開始
INT_VECTOR:
ORG量0x004; 中斷向量地址
MOVWF W_TEMP; 節省了電流W寄存器的內容;
MOVF 狀態,W; 移動狀態寄存器為W寄存器
BCF STATUS,RP0; 確保文件寄存器組設置為0
MOVWF STATUS_TEMP; 節省OFF狀態寄存器的內容
; ISR代碼可以去這裡或位於其他位置的子程序調用
BANKSEL PIR1; TMR1IF
BTFSS PIR1,0
GOTO VECTOR_QUIT
BCF PIR1,0; CLR TMR1IF
COMF FLAG_A,0;取FLAG_A的補數
MOVWF FLAG_A
MOVLW B'11110000'; RELOAD TMR1H TMR1L
MOVWF TMR1L
MOVLW B'00000000'
MOVWF TMR1H
VECTOR_QUIT:
BCF STATUS,RP0; 確保文件寄存器組設置為0
MOVF STATUS_TEMP,W; 找回狀態寄存器副本
MOVWF 狀態; 恢復預ISR狀態寄存器的內容
SWAPF W_TEMP,F
SWAPF W_TEMP,W; 恢復預ISR W寄存器的內容
RETFIE; 從中斷返回
開始:
BANKSEL ADCON1; 16F72復位>> PORTA均設定為ADC
MOVLW B'00000111'; PORTA至數字IO
MOVWF ADCON1
BANKSEL TRISA
MOVLW B'00000000'
MOVWF TRISA
MOVWF TRISB
MOVWF TRISC
BANKSEL PORTA
MOVLW 80H
MOVWF PORTC
MOVLW 0
MOVWF 33H
; T1CON = 0B00110101;
BANKSEL T1CON
MOVLW B'00110101'
MOVWF T1CON
; TIMER1為16BIT上數計數器
MOVLW B'11110000'
MOVWF TMR1L; 0X00F0
MOVLW B'00000000'
MOVWF TMR1H
; TMR1IE = 1; / /外設中斷使能
BANKSEL PIE1
MOVLW B'00000001'
MOVWF PIE1
; PEIE = 1 ;/ /使能計時器1中斷
; GIE = 1; / /全域中斷使能
BANKSEL INTCON
MOVLW B'11000000';
MOVWF INTCON
LOOP:
BTFSC FLAG_A,0
GOTO OFF_LED
MOVLW B'00000000';
MOVWF PORTA
GOTO LOOP
OFF_LED:
MOVLW B'11111111';
MOVWF PORTA
GOTO LOOP
沒有留言:
張貼留言