Re: 是不是程式記憶體換頁的問題
|
||||
---|---|---|---|---|
新會員
|
感謝版主的提示和執導...
我會用這顆ic是因為之前同事專案用到,庫存還很多用不到所以就拿來當練習用!! 簡單說就是不用花錢啦 !!
發表於: 2005/8/25 13:06
|
|||
|
是不是程式記憶體換頁的問題
|
||||
---|---|---|---|---|
新會員
|
各位先進們討教了...
我寫了一個密碼的程式,因為使用OTP IC,為了結省IC能重複使用, 將原本燒過的程式部分用NOP 蓋掉 來燒錄新的程式,程式短一點狀況下重複使用都正常,但是當程式覆蓋到260行時燒出來的動作就出現問題,檢查發現當我執行到327行時有一個查表的動作,如果當工作站存器內容是"1"加上程式計數器當時的位置應該是跳到329行,但是他卻跳到了48行,我看了PLC的位置是他跳的位置沒錯...可使卻不是我想要他跳的位置...是不是程式記憶體換頁的問題,我該怎麼做能?? 再請教一個問題,16C622有2K的程式記憶體位置,但他卻只有兩個BANK可以切換,這樣怎麼夠2K切換呢? 不好意思...初學 一堆狀況...麻煩各位了!! ; 2005 08/14 密碼比較 LIST P=16C622 include "P16C622.inc" KEY1 EQU 20H KEY2 EQU 21H KEY3 EQU 22H KEY4 EQU 23H password EQU 30H password2 EQU 31H COUN1 EQU 25H ;密碼順位 COUN2 EQU 26H ;比對密碼順位 BTU_DELY EQU 2DH ;調整等待按鍵多久沒按後清除參數 READ1 EQU 27H ORG 0X00 NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP ;==================================== ;初值設定 ;==================================== CLRF PORTA CLRF PORTB BSF STATUS,RP0 ;置第1檔頁 MOVLW 0x00 ; RA4-RA0 暫為輸出,可以改變 MOVWF TRISA ;暫存器內容模擬輸入狀態 CLRF TRISB ;設PORTB 為輸出 BCF STATUS,RP0 ;置第0檔頁 MOVLW B'00000111' ; 設為數位輸入 MOVWF CMCON GOTO MAIN ;================================ ; 6秒延遲 ;================================ DELAY CLRF 2BH CLRF 2CH MOVLW 0FH MOVWF BTU_DELY DEL2 GOTO READ ;檢查輸入 DEL2_2_1 DECFSZ 2BH,F GOTO DEL2 DECFSZ 2CH,F GOTO DEL2_2_1 DECFSZ BTU_DELY,F GOTO DEL2_2_1 RETURN ;======================================= ; ;=============================================== MAIN CLRF COUN1 CLRF KEY1 ;清除輸入密碼= CLRF KEY2 ; = CLRF KEY3 ; = CLRF KEY4 ; <==== CLRF COUN2 ; 密碼比對次數計數 CALL DELAY ;呼叫六秒延遲 GOTO MAIN ;六秒到,沒有按鍵,重置狀態等待輸入按鍵 ;======================================== ; 密碼讀入 ;======================================== READ BTFSS PORTA,4 GOTO DEL2_2_1 ;沒有按鍵回到BTU_DELAY 6秒延遲 MOVF PORTA,W ; 先存入READ1暫存器= MOVWF READ1 ; <======= BCF READ1,4 ;清除按鍵檢測位元 VT ;============ keyEnter ;比對密碼是否為"井"鍵 MOVF READ1,W XORLW 0x0C ;比對是否為"井"鍵 BTFSC STATUS,Z ;輸入不是"井" 跳去存輸入密碼 GOTO EnterOk ;比對密碼 BTFSC COUN1,2 ;檢查四個密碼是否已經輸入, GOTO READ ;以輸入四個密碼,等待"井"號 ;================================== MOVF COUN1,W INCF COUN1,F ; 輸入次數加一 ADDWF PCL,F ;程式累加器 + WF GOTO KEYIN1 ;跳到對應的位置存入 GOTO KEYIN2 ; GOTO KEYIN3 ; GOTO KEYIN4 ; ;GOTO keyEnter ; 跳到比對密碼 KEYIN1 MOVF READ1,W MOVWF KEY1 CALL DELAY_2 GOTO READ KEYIN2 MOVF READ1,W MOVWF KEY2 CALL DELAY_2 GOTO READ KEYIN3 MOVF READ1,W MOVWF KEY3 CALL DELAY_2 GOTO READ KEYIN4 MOVF READ1,W MOVWF KEY4 CALL DELAY_2 GOTO READ ;========================================= ; 組合輸入的密碼為兩個byte ;======================================= EnterOk ;是"井"跳去組合密碼 SWAPF KEY1,W ADDWF KEY2,W MOVWF password SWAPF KEY3,W ADDWF KEY4,W MOVWF password2 ;============================ ; codecompare ;============================ codecompare MOVF COUN2,W ;比對產品組計數 CALL CodCoun1 ;跳到對應的產品密碼組別 XORWF password,W BTFSC STATUS,Z GOTO NEXTCODE ;RETURN 第一組密碼比對正確則跳去比對第二組 ERRORCODE INCF COUN2,F ;不是第一產品密碼,加一,比對下一個 GOTO codecompare NEXTCODE MOVF KEY2,W ;將第二組密碼與輸入的第二組密碼比對 XORWF password2,W BTFSS STATUS,Z GOTO ERRORCODE ;第二組密碼與輸入錯誤,比對下一個產品密碼 CLRF PORTB INCF COUN2,W MOVWF PORTB GOTO MAIN CodCoun1 ;跳到對應的產品密碼 ADDWF PCL,F ;程式累加器 + WF GOTO codes1 GOTO codes2 GOTO codes3 GOTO MAIN ;三組內建密碼比對都錯誤表示輸入碼錯誤,跳回重新數入 ;======================================== ; 密碼 ;======================================== codes1 MOVLW 094H ;鐵捲門2 MOVWF KEY2 ;將密碼先移到KEY2,等待做比對 RETLW 066H ;鐵捲門1 codes2 MOVLW 092H ;汽車2 MOVWF KEY2 RETLW 063H ;汽車1 codes3 MOVLW 055H ;冷氣2 MOVWF KEY2 RETLW 060H ;冷氣1 ;================================= ; 200mS 延遲 ;================================= DELAY_2 BTFSC PORTA,4 ;等待按鍵放掉 GOTO $-1 RETURN END
發表於: 2005/8/24 8:06
|
|||
|