Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
新會員
|
版主還是不行ㄋ
會不會跟我的中斷有關係 我在page0中,有一個顯示掃描中斷 必須每0.25秒去處理一次中斷副程式 我真的找不出任何原因 在程式未跨頁前都是正常運作 因為功能上增加以致程式跨頁 結果竟會如此 版主麻煩你囉 如有必要我也可以將我的整支程式給你看
發表於: 2005/6/10 9:17
|
|||
|
Re: PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
新會員
|
版主你好
我知道有這虛指令 但我沒用過 不知是不是要先定義這巨集 還是要怎用可否請版主教一下 或是有技術文件可查 ......萬分的感謝
發表於: 2005/6/9 22:36
|
|||
|
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
|
|||
|
PIC16F73 程式記憶體頁的切換問題
|
||||
---|---|---|---|---|
新會員
|
我原先只用到page0但因功能上的增加
使的程式記憶體需寫到page1 但彼此間都有資料的互傳 原先在page0上功能都正常 線將某些副程式移到page1後程式就不正常 我移過去的是93c46的讀寫副程式 我呼叫的方式如下 BSF PCLATH,3 ;換PAGE1 CALL EWEN_93C46 ;致能93C46抹除/寫入功能 . . 副程式尾端有 RETURN 我一直找不出到底哪邊有問題,請客方高手幫忙解答
發表於: 2005/6/8 17:31
|
|||
|
關於PWM的精度
|
||||
---|---|---|---|---|
新會員
|
各位先進大家好:
我目前使用PIC16F73作PWM輸出 我的輸出頻率是可調的 目前於40KHz頻率作上下調整,但每一階的調整精度0.4KHz 我使用的石英震盪器是16M的,就算我換成20M的震盪器也只能將經度降到3.多K,我的理想精度是0.2K如能到0.1K是更好的不知各位先進能否給我提供方法,看我設定上是否需要更改或是換PIC的哪一系列晶片也可以,但是要能相容我現在寫好的程式,而且日後我還需要做到80KHz以上的機種,精度上是我所必須的,期望各位大大能提供我有效的方法在此先感謝各位大大!!
發表於: 2005/3/27 1:44
|
|||
|
請教各位先進PIC16F873問題!!
|
||||
---|---|---|---|---|
新會員
|
PIC16F873這顆晶片怎麼好像都沒有人使用,是不是它本身就有問題或不穩定的現象。
承我之前發表的問題,皆將各位先進提供之方法試過,但問題仍未解決,程式方面我也用模擬軟體模擬過ok後才將程式燒到晶片中,如真是晶片有不穩定現象可否請各位先進告知騎晶片問題,並煩請建議較穩定之晶片,以供小弟解決目前工作上的問題。
發表於: 2004/11/8 14:24
|
|||
|
請問PIC16F873的RESET及PORTB不正常問題!!
|
||||
---|---|---|---|---|
新會員
|
感謝各位高手提供之方法,但小弟已經逐一測試過,所欲之問題並未排除,實感困擾故小弟在此將詳細之測試規格張貼出來,請各方高手提供排出之方法,謝謝!!
晶片編號:PIC16F873-20/SP 石英晶體:16MHz搭配電容15PF 重置電路:目前使用4.7k配0.1uF經兩次反向器(74HC14)將信號準為穩定 規劃方式:PORT B為四顆七段顯示器顯示值 PORT A之A4A5經74HC138解碼為四顆七段之掃描線 燒錄碼(CONFIG WORD):H'3BBA'(B'11101110111010') 測試程式: LIST P=16f873,R=DEC ;設定單晶片型態 INCLUDE "c:\mplab\P16F873.INC" ;宣告標頭檔 DEL_CNT1 EQU H'0020' ;延時暫存器 DEL_CNT2 EQU H'0021' ;延時暫存器 DEL_CNT3 EQU H'0022' ;延時暫存器 SCAN EQU H'0023' ; RL EQU H'0024' RLCNT EQU H'0025' ;************************************************ ;*********** 程式起點 ***************** ;************************************************ ORG H'0000' ; BCF STATUS,RP0 ;選擇BANK0 BCF STATUS,RP1 ;選擇BANK0 GOTO START ; ;************************************************ ;*********** 主程式 ***************** ;************************************************ START: ; CALL PIC_INIT ;PIC初始化 MOVLW B'00110000' ; MOVWF SCAN ; KS: MOVLW D'8' MOVWF RLCNT MOVLW B'11111110' ; BSF STATUS,C KL: MOVWF RL MOVWF PORTB ; CALL DELAY ; RLF RL,1 MOVF RL,0 DECFSZ RLCNT,1 ; GOTO KL ; GOTO CHSCN CHSCN: MOVF SCAN,0 ; MOVWF PORTA ; MOVLW B'00010000' ; SUBWF SCAN,1 ; BTFSC STATUS,Z ;┘檢查Z(1執行下一行指令,0跳過下一行指令) GOTO R_SCAN ; CLRWDT ; GOTO KS ; R_SCAN: MOVF SCAN,0 ; MOVWF PORTA ; MOVLW B'00110000' ; MOVWF SCAN ; GOTO KS ; ;************************************************ ;*********** 晶片初始化 ***************** ;************************************************ PIC_INIT: ;PIC初始化 ;@@@@@@@@@@@@@@@ BANK1 @@@@@@@@@@@@@@@@ BSF STATUS,RP0 ;選擇BANK1 BCF STATUS,RP1 ;選擇BANK1 MOVLW B'11001011' ;規劃PROTA MOVWF TRISA ; MOVLW B'00000000' ;規劃PROTB MOVWF TRISB ; ;MOVLW B'00001001' ;規劃PROTC ;MOVWF TRISC ; ;@@@@@@@@@@@@@@@ BANK0 @@@@@@@@@@@@@@@@ BCF STATUS,RP0 ;選擇BANK0 BCF STATUS,RP1 ;選擇BANK0 MOVLW B'00000100' ; MOVWF PORTA ;給PROTA初值 MOVLW B'11111111' ; MOVWF PORTB ;給PROTB初值 ;MOVLW B'00100100' ; ;MOVWF PORTC ;給PROTC初值 RETURN ; ;************************************************ ;*********** 延時(0.25秒)副程式 ************ ;************************************************ DELAY: ; MOVLW H'0004' ;作4次..改成0010則作16次及作1秒 MOVWF DEL_CNT1 ; DELAY1: MOVLW H'00FA' ;作250次 MOVWF DEL_CNT2 ; DELAY2: MOVLW H'00FA' ;作250次 MOVWF DEL_CNT3 ; DELAY3: NOP ;┐ NOP ;│五個指令,每個指令週期=1/(20M/4)=0.2u秒 NOP ; >5x0.2u=1u秒 NOP ;│16x250x250x1u=1秒 DECFSZ DEL_CNT3,1 ;┘ GOTO DELAY3 ; DECFSZ DEL_CNT2,1 ; GOTO DELAY2 ; DECFSZ DEL_CNT1,1 ; GOTO DELAY1 ; RETURN ; END
發表於: 2004/11/1 15:05
|
|||
|
請問PIC16F873的RESET及PORTB不正常問題!!
|
||||
---|---|---|---|---|
新會員
|
感謝minusone你的回應
對於你的回應我有以下疑點可否煩請你在替我解決- ●在程式方面我以確認沒有問題,而且也有模擬過程是的動作。 並且以作以最簡單的動作"hi→延時0.5秒→lo"這樣的動作循 環;這樣在程式上應該不會有什麼問題,而且也避開所謂的 Read-Modify-Write現象;而我也再PORTB上接了提升電阻 ,那還有哪邊的問題造成開電源無法開始運作跟PORTB的 RB6&RB7沒有我所需求的動作輸出ㄋ 感謝你!
發表於: 2004/10/28 8:34
|
|||
|
請問PIC16F873的RESET及PORTB不正常問題!!
|
||||
---|---|---|---|---|
新會員
|
◎我使用的是PIC16F873晶片
※WDT、PWRT、BOR都disable了。 ●RESET問題: 在第一腳接一47K電阻至VCC,於送電後卻無法運作,需再 新送電源1~2次方可使晶片動作。 改用RC電路作重置電路,則須重置數次方可使晶片運作。 ●PORTB不正常問題: 我的程式動作是在晶片運作後由PORTB輸出HI、LO交替的 信號,但在晶片運作後RB6&RB7一直保持HI信號輸出。 煩請各方高手幫我解惑~~感謝!!
發表於: 2004/10/27 11:18
|
|||
|