Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
版主
|
Pagesel 指令會自動安排其 Program Page 使用時不用管他是否正要跨過 Page,MPASM & MPLINK 會自動管理的。
發表於: 2005/6/20 18:06
|
|||
|
Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
高級會員
|
有ICE或ICD2嘛?在中斷裡停下來 , 用單步跑一跑 , 就知道從那裡開始跑掉了 , 問題要試了才找得出來啊 ! 光看程式 , 有時侯會漏掉 ,
尤其注意從PAGE1裡產生的中斷 , 或離開中斷後的CALL或GOTO的位址對不對 ,
發表於: 2005/6/13 16:36
|
|||
|
Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
新會員
|
版主這應該是push&pop
我原先就有如下 MOVWF W_BUF ;┐ MOVF STATUS,W ;│ CLRF STATUS ;│ MOVWF STATUS_BUF ; > 作PUSH動作 MOVF PCLATH,W ;│ MOVWF PCLATH_BUF ;│ CLRF PCLATH ;┘ . . CALL CH_BANK0 ; MOVF PCLATH_BUF,W ;┐ MOVWF PCLATH ;│ MOVF STATUS_BUF,W ; > 作POP動作 MOVWF STATUS ;│ MOVF W_BUF,W ;┘ RETFIE 我也有改成如版主所講的如下 MOVWF W_BUF MOVF STATUS,W BCF STATUS,RP0 MOVWF STATUS_BUF MOVF PCLATH,W MOVWF PCLATH_BUF . . . BCF STATUS,RP0 MOVF PCLATH_BUF,W MOVWF PCLATH MOVF STATUS_BUF,W SWAPF W_BUF,F SWAPF W_BUF,W RETFIE 但結果還是不行 是不是還有哪裡我沒有設到的 但原先程式只使用到page0時所有功能都是正常的 先在連一開機的顯示畫面都沒有 天阿....版主你一定要救救我...
發表於: 2005/6/10 14:38
|
|||
|
Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
版主
|
你在中斷裡有沒有把人家的 PAGE 改掉了呢? 底下程式可加入中斷裡以確保 PAGE 的工作正常。
ORG 0x004 ; interrupt vector location
發表於: 2005/6/10 11:21
|
|||
|
Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
新會員
|
版主還是不行ㄋ
會不會跟我的中斷有關係 我在page0中,有一個顯示掃描中斷 必須每0.25秒去處理一次中斷副程式 我真的找不出任何原因 在程式未跨頁前都是正常運作 因為功能上增加以致程式跨頁 結果竟會如此 版主麻煩你囉 如有必要我也可以將我的整支程式給你看
發表於: 2005/6/10 9:17
|
|||
|
Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
版主
|
直接用就可以了不用去定義它。
可以參考右邊教育訓練裡的MPASM 講義裡面有使用說明。
發表於: 2005/6/9 22:49
|
|||
|
Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
新會員
|
版主你好
我知道有這虛指令 但我沒用過 不知是不是要先定義這巨集 還是要怎用可否請版主教一下 或是有技術文件可查 ......萬分的感謝
發表於: 2005/6/9 22:36
|
|||
|
Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
版主
|
切換 PAGE 改用MPASM 所提供的切換MARCO "PAGESEL"這樣比較好用。
pagesel Sub_ISR goto Sub_ISR or call Sub_ISR
發表於: 2005/6/9 17:23
|
|||
|
Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
新會員
|
版主你好:
我有做切回的動作但狀況還是一樣 以下是在page0下呼叫page1的程式段: . . R_EEPROM: ;讀取EEPROM中紀錄值 MOVLW H'0000' ;讀出00H位址之資料 MOV A,#ADDRESS BSF PCLATH,3 ;換PAGE1 CALL READ_93C46 ; BCF PCLATH,3 ;換PAGE0 MOVLW H'005D' ;判斷是否有被記錄93 . . 以下是我page1的程式碼: ;******************************************** ;*********** 查表程式段 ;******************************************** ORG 0X800 ;定義第一頁程式段位址 TABLE_7SET: ;七段顯示器顯示值 ADDWF PCL,F ; W對應值 RETLW B'00000011' ;0 0 RETLW B'10011111' ;1 1 RETLW B'00100101' ;2 2 RETLW B'00001101' ;3 3 RETLW B'10011001' ;4 4 RETLW B'01001001' ;5 5 RETLW B'11000001' ;6 6 RETLW B'00011111' ;7 7 RETLW B'00000001' ;8 8 RETLW B'00011001' ;9 9 RETLW B'00000010' ;0. A RETLW B'10011110' ;1. B RETLW B'00100100' ;2. C RETLW B'00001100' ;3. D RETLW B'10011000' ;4. E RETLW B'01001000' ;5. F RETLW B'11000000' ;6. 10 RETLW B'00011110' ;7. 11 RETLW B'00000000' ;8. 12 RETLW B'00011000' ;9. 13 RETLW B'01110001' ;F 14 RETLW B'00010001' ;A 15 RETLW B'11110101' ;r 16 RETLW B'10000011' ;V 17 RETLW B'00110001' ;P 18 RETLW B'11111111' ; 19 RETLW B'01100001' ;E 1A RETLW B'11101111' ;_ 1B RETLW B'10100001' ;K 1C RETLW B'00010011' ;N 1D RETLW B'10010001' ;H 1E RETLW B'11100011' ;L 1F RETLW B'11000111' ;u 20 RETLW B'11100001' ;t 21 RETLW B'11000101' ;o 22 RETLW B'10000101' ;d 23 RETLW B'11111101' ;- 24 ;******************************************** ;** 程式名稱 : 93C46.ASM ** ;** 程式功能 : PIC 對 93C46 之副程式 ** ;** 程式語言 : PIC16F73 ASSEMBLY ** ;******************************************** READ_93C46: ;讀取指定位址的內容 IORLW H'0080' ;給OP CODE ANDLW H'00BF' ;取指定位址 MOVWF ADDRES_93C46 ;將OP CODE & ;ADDRESS取出 CALL COMMAND ; BCF PORTC,7 ;清除DI CALL SK_PULSE ; CALL SK_PULSE ; CALL RDBYTE ; MOVWF DATAH_93C46 ;W給高位元暫存器 CALL RDBYTE ; MOVWF DATAL_93C46 ;將 W 給低位元暫存器 CALL CLR_CS ; 這四個副程式 CALL SK_PULSE ;都在page1 CALL SETB_CS ; CALL SK_PULSE ; RETURN ; ;----------副程式-------------------------------; RDBYTE: BSF PORTC,7 ;讀取1BYTE RLF DATA_93C46_TMP,F ; MOVLW D'08' ; MOVWF EEPROM_T1; BCF PCLATH,3 ;換 ;PAGE0****940608 CALL CH_BANK1 ; BSF PCLATH,3 ;換 ;PAGE1****940608 BSF PORTC,7 ;規劃 PORTC,7 為輸入腳 BCF PCLATH,3 ;換 ;PAGE0****940608 CALL CH_BANK0 ; BSF PCLATH,3 ;換 ;PAGE1****940608 RDB1: BCF PORTC,6 ; BTFSC PORTC,7 ; GOTO $+3 BCF STATUS,C ; GOTO $+2 BSF STATUS,C ; RLF DATA_93C46_TMP,F ; NOP ; BSF PORTC,6 ; NOP ; DECFSZ EPROM_T1,1;結果為0跳過下一行 GOTO RDB1 ; NOP ; MOVF DATA_93C46_TMP,W; BCF PCLATH,3 ;換 ;PAGE0****940608 CALL CH_BANK1; BSF PCLATH,3 ;換PAGE1****940608 BCF PORTC,7 ;規劃 PORTC,7 為輸出腳 BCF PCLATH,3;換PAGE0****940608 CALL CH_BANK0; BSF PCLATH,3;換PAGE1****940608 RETURN ; . . . . . END
發表於: 2005/6/9 17:03
|
|||
|