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


Browsing this Thread:   1 Anonymous Users






Re: LCD的 bug
#3
版主
版主


查看用戶資訊
找不到程式的起始點,而且妳的程式裡還少了 Reset 的設定,把它加進去吧!


;**********************************************************************
RESET_VECTOR      CODE    0x000           processor reset vector
           movlw  high  start        
load upper byte of 'start' label
            movwf  PCLATH             
initialize PCLATH
            
goto   start              go to beginning of program


發表於: 2005/6/3 17:03
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


Re: LCD的 bug
#2
版主
版主


查看用戶資訊
這是 Linker 所產生的錯誤,你有兩個方式解決它:

1. 在程式 0x0004 的地方只擺一個 "goto ISR_Routine" 的指令,因為 0x0000 - 0x0004 在 LKR 檔裡是保護區。

2. 修改 LKR 檔
// Sample linker command file for 16F873
// $Id: 16f873a.lkr,v 1.3 2002/11/07 23:16:07 sealep Exp $

LIBPATH .

CODEPAGE NAME=vectors START=0x0 END=0xFF PROTECTED
CODEPAGE NAME=page0 START=0x100 END=0x7FF

發表於: 2005/6/3 16:55
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部


LCD的 bug
#1
中級會員
中級會員


查看用戶資訊
大家好 我使用的PIC為16F873A Demoboard為
PICDEM 2 PLUS 燒錄器為ICD2
對於LCO顯示方面有問題一直解決不了 請問問題出在哪 謝謝
我的error如下:
Error - section 'D_LCD_DATA' can not fit the absolute section. Section 'D_LCD_DATA' start=0x00000020, length=0x00000004
Errors : 1

程式如下:
list         p=16F873A
    
#include    P16F873A.inc


#define    LCD_D4        PORTB, 0    ; LCD data bits
#define    LCD_D5        PORTB, 1
#define    LCD_D6        PORTB, 2
#define    LCD_D7        PORTB, 3

#define    LCD_D4_DIR    TRISB, 0    ; LCD data bits
#define    LCD_D5_DIR    TRISB, 1
#define    LCD_D6_DIR    TRISB, 2
#define    LCD_D7_DIR    TRISB, 3

#define    LCD_E        PORTA, 1    ; LCD E clock
#define    LCD_RW        PORTA, 2    ; LCD read/write line
#define    LCD_RS        PORTA, 3    ; LCD register select line

#define    LCD_E_DIR    TRISA, 1    
#define    LCD_RW_DIR    TRISA, 2    
#define    LCD_RS_DIR    TRISA, 3    

#define    LCD_INS        0    
#define    LCD_DATA    1

D_LCD_DATA    UDATA 0x20
COUNTER        res    1
delay        res    1
temp_wr        res    1
temp_rd        res    1

    
GLOBAL    temp_wr

PROG1    CODE


;***************************************************************************
    
LCDLine_1
    banksel    temp_wr
    movlw    0x80
    movwf    temp_wr
    call    i_write
    
return
    GLOBAL    
LCDLine_1

LCDLine_2
    banksel    temp_wr
    movlw    0xC0
    movwf    temp_wr
    call    i_write
    
return
    GLOBAL    
LCDLine_2
    
d_write                      
    call    LCDBusy
    bsf        STATUS
C    
    call    LCDWrite
    banksel    TXREG            
;move data into TXREG 
    movwf    TXREG
    banksel    TXSTA
    btfss    TXSTA
,TRMT        
    
goto    $-1
    banksel    PORTA    
    
return
    GLOBAL    
d_write
    
i_write                    
    call    LCDBusy
    bcf    STATUS
C
    call    LCDWrite
    
return
     GLOBAL    
i_write

rlcd    macro    MYREGISTER
 
IF MYREGISTER == 1
    bsf        STATUS
C
    call    LCDRead
 
ELSE
    
bcf        STATUSC
    call    LCDRead
 
ENDIF
    
endm
;****************************************************************************




; *******************************************************************
LCDInit
    clrf    PORTA
    
    banksel    TRISA            
    bcf        LCD_E_DIR
    bcf        LCD_RW_DIR
    bcf        LCD_RS_DIR
    
    movlw    
b'00001110'
    
banksel    ADCON1
    movwf    ADCON1    

    movlw    0xff            
    banksel    COUNTER
    movwf    COUNTER
    movlw    0xFF
    banksel    delay
    movwf    delay
    call    DelayXCycles
    decfsz    COUNTER
F
    
goto    $-3
    
    movlw    
b'00110000'        
    
movwf    temp_wr
    bcf    STATUS
,C
    call    LCDWriteNibble

    movlw    0xff            
    movwf    COUNTER
    movlw    0xFF
    movwf    delay
    call    DelayXCycles
    decfsz    COUNTER
F
    
goto    $-3

    movlw    
b'00110000'        
    
movwf    temp_wr
    bcf    STATUS
,C
    call    LCDWriteNibble

    movlw    0xFF            
    movwf    delay
    call    DelayXCycles
                        
    movlw    
b'0011000'        
    
movwf    temp_wr
    bcf    STATUS
,C
    call    LCDWriteNibble

        
    movlw    0xFF            
    movwf    delay
    call    DelayXCycles


    movlw    
b'00100000'        
    
movwf    temp_wr
    bcf    STATUS
,C
    call    LCDWriteNibble

    call    LCDBusy            
;Busy?
                
    
movlw    b'00101000'        
    
movwf    temp_wr
    call    i_write

    movlw    
b'00001101'        
    
movwf    temp_wr
    call    i_write
            
    movlw    
b'00000001'        
    
movwf    temp_wr
    call    i_write

    movlw    
b'00000110'        
    
movwf    temp_wr
    call    i_write    

    movlw    
b'10000000'        ;DDRAM addresss 0000
    movwf    temp_wr
    call    i_write

    movlw    
b'00000010'        ;return home
    movwf    temp_wr
    call    i_write


    
return

    GLOBAL    
LCDInit    
; *******************************************************************








;****************************************************************************
;     
_    ______________________________
RS  _>--<______________________________
;     _____
RW       _____________________________
;                  __________________
E   ____________/                  ___
;     _____________                ______
DB  _____________>--------------<______
;
LCDWriteNibble
    btfss    STATUS
C        Set the register select
    bcf        LCD_RS
    btfsc    STATUS
C    
    bsf        LCD_RS

    bcf        LCD_RW            
Set write mode

    banksel    TRISB
    movlw    
b'00000000'
    
movwf    TRISB
    bcf        LCD_D4_DIR        
Set data bits to outputs
    bcf        LCD_D5_DIR
    bcf        LCD_D6_DIR
    bcf        LCD_D7_DIR

    NOP                
Small delay
    NOP

    banksel    PORTA
    bsf        LCD_E            
Setup to clock data
    
    btfss    temp_wr
7            Set high nibble
    bcf        LCD_D7    
    btfsc    temp_wr
7
    bsf        LCD_D7
    btfss    temp_wr
6
    bcf        LCD_D6    
    btfsc    temp_wr
6
    bsf        LCD_D6
    btfss    temp_wr
5
    bcf        LCD_D5    
    btfsc    temp_wr
5
    bsf        LCD_D5
    btfss    temp_wr
4
    bcf        LCD_D4
    btfsc    temp_wr
4
    bsf        LCD_D4    

    NOP
    NOP

    bcf        LCD_E            
Send the data

    
return
; *******************************************************************





; *******************************************************************
LCDWrite
;    call    LCDBusy
    call    LCDWriteNibble
    BANKSEL    temp_wr
    swapf    temp_wr
f
    call    LCDWriteNibble
    banksel    temp_wr
    swapf    temp_wr
,f

    
return

    GLOBAL    
LCDWrite
; *******************************************************************





; *******************************************************************
;     
_____    _____________________________________________________
RS  _____>--<_____________________________________________________
;               ____________________________________________________
RW  _________/
;                  
____________________      ____________________
E   ____________/                    ____/                    __
;     _________________                __________                ___
DB  _________________>--------------<__________>--------------<___
;
LCDRead
    banksel    TRISB
    bsf    LCD_D4_DIR        
Set data bits to inputs
    bsf    LCD_D5_DIR
    bsf    LCD_D6_DIR
    bsf    LCD_D7_DIR        

    BANKSEL    PORTA
    btfss    STATUS
C        Set the register select
    bcf        LCD_RS
    btfsc    STATUS
C    
    bsf        LCD_RS

    bsf        LCD_RW            
;Read 1

    NOP
    NOP            

    bsf        LCD_E            
Setup to clock data

    NOP
    NOP
    NOP
    NOP

    btfss    LCD_D7            
Get high nibble
    bcf        temp_rd
7
    btfsc    LCD_D7
    bsf        temp_rd
7
    btfss    LCD_D6            
    bcf        temp_rd
6
    btfsc    LCD_D6
    bsf        temp_rd
6
    btfss    LCD_D5            
    bcf        temp_rd
5
    btfsc    LCD_D5
    bsf        temp_rd
5
    btfss    LCD_D4            
    bcf        temp_rd
4
    btfsc    LCD_D4
    bsf        temp_rd
4

    bcf        LCD_E            
Finished reading the data

    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP

    bsf        LCD_E            
Setup to clock data

    NOP
    NOP

    btfss    LCD_D7            
Get low nibble
    bcf        temp_rd
3
    btfsc    LCD_D7
    bsf        temp_rd
3
    btfss    LCD_D6            
    bcf        temp_rd
2
    btfsc    LCD_D6
    bsf        temp_rd
2
    btfss    LCD_D5            
    bcf        temp_rd
1
    btfsc    LCD_D5
    bsf        temp_rd
1
    btfss    LCD_D4            
    bcf        temp_rd
0
    btfsc    LCD_D4
    bsf        temp_rd
0

    bcf        LCD_E            
Finished reading the data

FinRd
    
return
; *******************************************************************






; *******************************************************************
LCDBusy
                    
Check BF
    rlcd    LCD_INS
    btfsc    temp_rd
7
    
goto    LCDBusy
    
return

    GLOBAL    
LCDBusy
; *******************************************************************






; *******************************************************************
DelayXCycles
    decfsz    delay
F
    
goto    DelayXCycles
    
return
; *******************************************************************
    

    
END


發表於: 2005/6/2 22:07
Twitter Facebook Google Plus Linkedin Del.icio.us Digg Reddit Mr. Wong 頂部







You can view topic.
不可以 發起新主題
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.
You cannot use topic type.
You cannot use HTML syntax.
You cannot use signature.
You cannot create PDF files.
You cannot get print page.

[進階搜尋]


:::

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

教育訓練中心

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