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

論壇索引


Board index » All Posts (BCJN)




Re: CODE、ORG的差別
#1
新會員
新會員


謝謝指導,我把程式修改如下:
;============PAGE0
RESET_VECTOR ORG 0X0000
NOP
GOTO START

INT_VECTOR ORG 0X0004
PAGESEL INTERRUPT
GOTO INTERRUPT

ORG 0X0010


START: ;MAIN POGRAM


;============PAGE1

PAGE1_SECT ORG 0X0800

SUBROUTINE0


RETURN

SUBROUTINE1


RETURN


;============PAGE2

PAGE2_SECT ORG 0X1000

SUBROUTINE_0


RETURN

SUBROUTINE_1


RETURN


END
修改後,每個PAGE的程式,都有按照初值的設定位置開始。但是為什麼用CODE定義就是不行,還是想請教各位。
謝謝

發表於: 2008/6/10 11:40
頂部


CODE、ORG的差別
#2
新會員
新會員


各位前輩好,我有問題想請教各位。
我用的PIC型號是:PIC16F887
我有問題想請教各位:
因為我寫的程式比較大,所以會有跨頁的問題,因此
會在寫程式先定義每個PAGE的起始位置。而我目前會用到三個PAGE。我的主程式是寫在PAGE0,而其它的PAGE是寫副程式。以下是我寫程式定義每個PAGE的方式:
;============PAGE0
RESET_VECTOR CODE 0X000
NOP
GOTO START

INT_VECTOR CODE 0X004
PAGESEL INTERRUPT
GOTO INTERRUPT
MAIN CODE

START: ;MAIN POGRAM


;============PAGE1

PAGE1_SECT CODE 0X0800

SUBROUTINE0


RETURN

SUBROUTINE1


RETURN


;============PAGE2

PAGE2_SECT CODE 0X1000

SUBROUTINE_0


RETURN

SUBROUTINE_1


RETURN


END

我的問題是,在程式用兩到個PAGE時,寫在PAGE0的主程式在從0000開始,而寫在PAGE1的副程式會從0800開始。而當我程式用到三個PAGE後,寫在寫在PAGE1的副程式還是從0800開始。但原本在PAGE0的主程式不是從0000而是從定義在PAGE2的副程式之後。例如:PAGE2的副程式是由1000~10F0
則原本在PAGE0的主程式則是由10F1開始。請問這是什麼問題。還有想在請教一個問題是,我看書上寫的程式,程式的開始者是用ORG 00H,沒有用COED 00H,但是我用CODE也可以寫,所用我想請教這兩個的差別在那。麻煩各位前輩指道。謝謝。




發表於: 2008/6/9 17:16
頂部


Re: EEPROM 寫入問題
#3
新會員
新會員


各位前輩,我有個EEPROM 寫入問題想請教:
我用的PIC型號:PIC16F887
以下是PIC16F的範例:
=======================
LIST P=16f877
#INCLUDE <P16f877.INC>
;
;- RAM LOCATIONS------
;
; Reserve RAM location 0x70 for ICD
;
Data_EE_Addr equ 0X71
Data_EE_Data equ 0X72

;--------VECTORS------------

org 0x0
nop
goto START

;-------PROGRAM--------------

org 0X20
START
call INIT


========================

我改寫的:
LIST P=16f887
#INCLUDE <P16f887.INC>
;
;- RAM LOCATIONS------
;
; Reserve RAM location 0x70 for ICD
;
UDATA
Data_EE_Addr RES 1
Data_EE_Data RES 1
;--------VECTORS------------

org 0x0
nop
goto START

;-------PROGRAM--------------

org 0X20
START
call INIT



========================
我是用範例改寫程式,但是無法成功寫入EEPROM。
但是用範例程就可以。我有想過,是不是Data_EE_Addr
Data_EE_Data設定的問題,因為我的程式是把Data_EE_Addr 、Data_EE_Data給他RAM位置,
而範例程式是定值給Data_EE_Addr 、Data_EE_Data。
還有一個問題想再請教的是,為何要在START前還要在加
ORG 0X20
不能只接在 ORG 0X00 下接直作程式WORK嗎?

發表於: 2008/6/6 11:37
頂部


EEPROM 寫入問題
#4
新會員
新會員


各位前輩,我有個EEPROM 寫入問題想請教:<br />我用的PIC型號:PIC16F887<br />以下是PIC16F的範例:<br />=======================<br />LIST P=16f877<br /> #INCLUDE <P16f877.INC> <br />;<br />;- RAM LOCATIONS------<br />;<br />; Reserve RAM location 0x70 for ICD<br />;<br />Data_EE_Addr equ 0X71<br />Data_EE_Data equ 0X72<br /><br />;--------VECTORS------------<br /><br /> org 0x0 <br /> nop<br /> goto START<br /><br />;-------PROGRAM--------------<br /> <br /> org 0X20<br />START<br /> call INIT<br />:<br />:<br />========================<br /><br />我改寫的:<br />LIST P=16f887<br /> #INCLUDE <P16f887.INC> <br />;<br />;- RAM LOCATIONS------<br />;<br />; Reserve RAM location 0x70 for ICD<br />;<br />UDATA<br />Data_EE_Addr RES 1<br />Data_EE_Data RES 1<br />;--------VECTORS------------<br /><br /> org 0x0 <br /> nop<br /> goto START<br /><br />;-------PROGRAM--------------<br /> <br /> org 0X20<br />START<br /> call INIT<br />:<br />:<br /><br />========================<br />我是用範例改寫程式,但是無法成功寫入EEPROM。<br />但是用範例程就可以。我有想過,是不是Data_EE_Addr <br /> Data_EE_Data設定的問題,因為我的程式是把Data_EE_Addr 、Data_EE_Data給他RAM位置,<br />而範例程式是定值給Data_EE_Addr 、Data_EE_Data。<br />還有一個問題想再請教的是,為何要在START前還要在加<br />ORG 0X20<br />不能只接在 ORG 0X00 下接直作程式WORK嗎?

發表於: 2008/6/6 11:34
頂部


Re: INTERRUPT-ON-CHANGE問題
#5
新會員
新會員


謝謝Ryang的指導。因為我想單純作INTERRUPT ON CHANGE的測試所以我才在中斷副程式中加了 DIM_CD Delay ,如果有其它好的方法請指導一下。同時我也找出DELAY 20 多秒才回主程的原因,是因為主程式中的DELAY副程式和中斷的DELAY副程式共用,造成DELAY副程式中某個數又從0開始計數。同時我把我的中斷副程式貼出來請各位前輩指導一下:
INTERRUPT:

CALL BED BTFSS PORTB,2
GOTO CLR_RBINTF
:
:

CLR_RBINTF:
BANKSEL PORTB
MOVF PORTB,F
BCF INTCON,RBIF
RETFIE
這個主要是參考MICROCHIP AN566
再作修改,其中BED是DELAY副程式,因為我是用BUTTON作INTERRUPT ON CHANGE 所以我想須讓BUTTON等一段時間,等到電位狀態真正改變才去作 BTFSS PORTB,2判別的動作 。不知這個想法對不對,如果不對想再請教各位輩,那裡須再修改。謝謝各位前輩指導。

發表於: 2008/4/24 20:40
頂部


Re: INTERRUPT-ON-CHANGE問題
#6
新會員
新會員


感謝Ryang指導。我加了這個指令動作。我現在又出現問題了,現在可執行中斷副程式了,但是執行中斷後再回到主程式會DELAY 20多秒,請問這是那裡出了問題。我所寫的測試程式的主要動作為:主程式中有兩個LED,各閃五次互換。而執行中斷時會另一個LED閃五次。以下是我修改後的程式,其中我只貼主程式及中斷副程式部份:
MAIN2:      
            
CLRF    RB2IP
            INCF    ONEIDX
            
            MOVLW    H
'05'
            
SUBWF    ONEIDX,W
            BTFSS    STATUS
,Z
            
GOTO    MAIN_LOOP
            CLRF    ONEIDX
MAIN3
:        
            
INCF    ONEIDX
            MOVLW    H
'05'
            
SUBWF    ONEIDX,W
            BTFSS    STATUS
,Z
            
GOTO    MAIN_LOOP1
            CLRF    ONEIDX
            
GOTO        MAIN2    
            
MAIN_LOOP
:
            
BSF        PORTD,1
            CALL    DIM_CD
            BCF        PORTD
,1
            CALL    DIM_CD
            
GOTO    MAIN2

MAIN_LOOP1
:
            
BSF        PORTD,2
            CALL    DIM_CD
            BCF        PORTD
,2
            CALL    DIM_CD
            
GOTO    MAIN3


INTERRUPT
:
            
MOVWF    W_TEMP
            SWAPF    STATUS
,W
            MOVWF    STATUS_TEMP
            BTFSC    PORTB
,2
            
GOTO    IT_LOOPEND
IT_LOOP
:            
            
INCF    RB2IP
            MOVLW    H
'05'
            
SUBWF    RB2IP,W
            BTFSS    STATUS
,Z
            
GOTO    IT_LOOP1
            CLRF    RB2IP
            
            
IT_LOOPEND
:        
            
SWAPF    STATUS_TEMP,W
            MOVWF    STATUS
            SWAPF    W_TEMP
,F
            SWAPF    W_TEMP
,W
            
            BANKSEL    PORTB
            MOVF    PORTB
,W
            
            BCF    INTCON
,RBIF
            RETFIE
IT_LOOP1
:
            
CALL    DIM_CD
            BSF    PORTD
,0
            CALL    DIM_CD
            BCF    PORTD
,0
            
GOTO    IT_LOOP

發表於: 2008/4/23 19:59
頂部


Re: INTERRUPT-ON-CHANGE問題
#7
新會員
新會員


謝謝yiming指導,我試過了。在DEBUGGER MODE 用 按 animate 是無法進入 中斷,但是用run就可以進入中斷。
但是我現在又出現問題了,當我執行完中斷後會delay 20 多秒才回到主程式,同時我能確定是有回到主程式中斷點。我想再請教各位前輩。謝謝。

發表於: 2008/4/23 14:53
頂部


Re: INTERRUPT-ON-CHANGE問題
#8
新會員
新會員


謝謝slipknot的指導,但是還是不行,所以我把我的測試貼上來

以下我所寫的測試程:
#INCLUDE P16F887.INC
INT_VAR UDATA_SHR
D1 RES 1
D2 RES 1
D3 RES 1
NUM RES 1
NUMIDX RES 1
ONEIDX RES 1
TENIDX RES 1
RB2IP RES 1
RB3IP RES 1
W_TEMP RES 1
STATUS_TEMP RES 1
PORTD_TEMP RES 1




RESET_VECTOR CODE 0X000 NOP
GOTO START

INT_VECTOR CODE
0X004 GOTO INTERRUPT
MAIN CODE





START:

;==================INITIALIZING PORTB

BANKSEL ANSELH
CLRF ANSELH
BANKSEL CM2CON1
CLRF CM2CON1
;BANKSEL WPUB
;CLRF WPUB
BANKSEL IOCB
MOVLW B'00000100'
MOVWF IOCB
BANKSEL TRISB
MOVLW B'11111111'
MOVWF TRISB
;BANKSEL PORTB
;CLRF PORTB

;=Setting up System-CLock to be 31KHz

BANKSEL OSCCON
MOVLW B'01110001' MOVWF OSCCON


;======PORTD(OUT)
BSF STATUS,RP0
CLRF TRISD
MOVLW H'00'
MOVWF PORTD

;======MAIN PROGRAM

BANKSEL OPTION_REG
MOVLW B'00000000'
MOVWF OPTION_REG
BANKSEL INTCON
MOVLW B'10001000'
MOVWF INTCON
MAIN:
BCF PORTD,0
BSF PORTD,0
GOTO MAIN


INTERRUPT:
MOVWF W_TEMP
SWAPF STATUS,W
MOVWF STATUS_TEMP

IT_LOOP:
BCF RTD,1
BSF PORTD,1

SWAPF STATUS_TEMP,W
MOVWF STATUS
SWAPF W_TEMP,F
SWAPF W_TEMP,W
BCF INTCON,RBIF
RETFIE

END
我想請問是否還有那些沒有設定到謝謝。

發表於: 2008/4/22 18:07
頂部


Re: INTERRUPT-ON-CHANGE問題
#9
新會員
新會員


謝謝slipknot的指導。
因為,我需要2 個外部中斷源,所以用PORTB 的INTERRUPT ON CHANGE PIN 。我有試著設定ICOB(INTERRUPT ON CHANGE PIN )及RBIE、GIE,但是情況還是一樣,不知是那裡出錯了,還請各位指導。謝謝。

發表於: 2008/4/22 12:23
頂部


INTERRUPT-ON-CHANGE問題
#10
新會員
新會員


各位前輩好,我是MICROCHIP的初學者,我想請教各位前輩一些問:我所使用的PIC型號是16F887,我正在學習如用使用外部中斷,所以我試著用PORTB其中某個腳位作INTERRUPT-ON-CHANGE,但是就是無法執行中斷副程式,我試著用ICD2 DEBUGGER 看REGISTER的變化,其中INTCON=0XDD,因此我認為中的RBIF有產生,理論上是要執行中斷副程式,但是就沒有執行。所以想請教大家。謝謝。

發表於: 2008/4/21 20:21
頂部






:::

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... ]

教育訓練中心

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