• slider image 442
  • slider image 483
  • slider image 484
  • slider image 485
  • slider image 486
  • slider image 487
:::

論壇索引


Board index » All Posts (kelvin_655)




Re: 是不是程式記憶體換頁的問題
#1
新會員
新會員


感謝版主的提示和執導...

我會用這顆ic是因為之前同事專案用到,庫存還很多用不到所以就拿來當練習用!! 簡單說就是不用花錢啦 !!

發表於: 2005/8/25 13:06
頂部


是不是程式記憶體換頁的問題
#2
新會員
新會員


各位先進們討教了...

我寫了一個密碼的程式,因為使用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
頂部


Re: 我的BANK怎麼了?
#3
新會員
新會員


不好意思!!
我已經在之前的討論內容早找到解答....如下


Re: 16F628 與 16F628A
MPASM 的提示有三種 :

1. Error : 程式有嚴重的錯誤導致 MPASM 無法翻譯,這時一定要找出錯誤出來

2. Warning : 程式被檢測出重要的錯誤,可能導致程式執行上的錯誤,最好將錯誤找出來修正

3. Message : 只是訊息的通知,確定你已經按規定設定了即可。

發表於: 2005/8/24 0:16
頂部


我的BANK怎麼了?
#4
新會員
新會員



各位先進們討教了:

以下是我程式我再編譯後出現這樣的一段訊息:
"Message[302] D:\PIC PROGRAM\L-RMOVE.ASM 11 : Register in operand not in bank 0. Ensure that bank bits are correct. "

但是我的BANK並沒有切錯啊 !!傷腦筋!!



; 2005 08/05 LED 左右移 測試ok

LIST P=16C622
include "P16C622.inc"

COUNTER EQU 20H
ORG 0X00
MAIN
CLRF PORTB
BSF STATUS,RP0 ;置第1檔頁
CLRF TRISB ;設PORTB 為輸出
BCF STATUS,RP0 ;置第0檔頁
MOVLW b'00000111'
MOVWF CMCON ; 設porta為數位輸入
BSF PORTB,0 ;輸出第0位元"1"
BCF STATUS,C ;設定轉入為"0"
;=========================================

initial
CALL scan
LL2
CALL DELAY
RLF PORTB,F
DECFSZ COUNTER ,F
GOTO LL2
CALL scan
RRR
CALL DELAY
RRF PORTB,F
DECFSZ COUNTER,F
GOTO RRR
GOTO initial
;===============================
scan
MOVLW 03H
MOVWF COUNTER
RETURN
;===============================
DELAY
MOVLW 0xFF
MOVWF 22H
CLRF 23H
DEL2
DECFSZ 23H,F
GOTO DEL2
DECFSZ 22H,F
GOTO DEL2
RETURN

END

發表於: 2005/8/23 23:57
頂部


weak pull-ups
#5
新會員
新會員


前輩們好:
請教一個問題,我看了一些前輩們對weak pull-up的解釋但一點不是很了解,他是一個可以由內部控制的提升電阻,那當我Enable Weak Pull-ups他的電位應該是low ,還是hi 呢!!

他應該是hi提升,還是low 提升??


發表於: 2004/12/10 14:04
頂部


Re: 我的port A為什麼沒辦法輸出啊 !!
#6
新會員
新會員


感謝大大的指點....


我真是學藝不精啊 !!

發表於: 2004/8/25 19:03
頂部


我的port A為什麼沒辦法輸出啊 !!
#7
新會員
新會員


各位前輩請教一下,我要燒錄到pic16c622,用MPLAB IDE V6.61 編譯完後再做組譯並沒有錯誤訊息,但是用 SIM模擬所有的位止寫入都沒有問題但是到了要寫入輸出那一行就是沒有反應,能幫幫我看看拿裡錯了一直搞不定!!以下是我的程式:

LIST P=16C622
include "P16C622.inc"
; "PORT A OUT 好站就是好站!!"
STATUS equ 3H ;STATUS 檔
PORT_A equ 5 ;接口A檔
TRIS_A equ 5 ;接口A流向控制檔
F equ 1
c equ 0
COUNT equ 20h
W equ 0
ORG 0 ;程式在通電後執行(起址 0000)

GOTO START

DELAY ;以下為一廷遲工作程式,目的是把
MOVLW 02H ;發光二極管亮一段人眼看到時間 ******
MOVWF 21H ;存入用戶隨用暫存檔

DLY1 MOVLW 05H ;存 ffh 入wf工作檔 INSIND ********
MOVWF 22H ;存入用戶隨用暫存檔 f0E
DLY2 DECFSZ 22H,1 ;檔0E = 檔0E - 1,如零略下句
GOTO DLY2 ;跳去 DLY2 (到零這句不執行)
DECFSZ 21H,1 ;檔0f = 檔0f - 1,如零略下句
GOTO DLY1 ;跳去 DLY1 (到零這句不執行)
GOTO SHOW ;跳去循環執行LOOP


START CLRF PORT_A
BSF STATUS,5 ;置第1檔頁
MOVLW B'00000000' ;將WF存入0000000b
MOVWF TRIS_A ;定接口A全部作輸出線
BCF STATUS,5 ;置回第0頁
MOVLW B'00000001'
MOVWF COUNT

LOOP MOVF COUNT,W ;循環程式開始,提暫存檔至wf
MOVWF PORT_A ;把提出資料存入接口A(顯示)
GOTO DELAY
SHOW RLF COUNT,F ;左轉count檔
GOTO LOOP

END

發表於: 2004/8/21 9:36
頂部






:::

Microchip連結

https://www.facebook.com/microchiptechnologytaiwan/
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=13
https://mu.microchip.com/page/tmu
http://elearning.microchip.com.tw/modules/tad_link/index.php?cate_sn=1
https://page.microchip.com/APAC-PrefCenters-TW.html
http://www.microchip.com/
http://www.microchip.com/treelink
http://www.microchipdirect.com/
http://www.microchip.com.cn/newcommunity/index.php?m=Video&a=index&id=103
http://www.microchip.com.tw/modules/tad_uploader/index.php?of_cat_sn=2
http://www.microchip.com.tw/Data_CD/eLearning/index.html
http://www.microchip.com.tw/RTC/RTC_DVD/
https://www.microchip.com/development-tools/
https://www.youtube.com/user/MicrochipTechnology
[ more... ]

教育訓練中心

!開發工具購買
辦法說明 [業界客戶] [教育單位]
----------------------------------
!校園樣品申請
辦法說明 [教師資格] [學生資格]
----------------------------------