View Single Post
Old 09-10-2005, 04:51 PM   #12
mafd_47a
Đệ tử 3 túi
 
Tham gia ngày: Sep 2005
Bài gửi: 54
:
Hi everybody, sau một thời gian vật lộn với con 16f88 cuối cùng mình cũng thành công với bản đầu tay, nay muốn chia sẻ cho tất cả mọi người

Đây là chương trình hiển thị LCD dung 16f88, trong chương trình có sử dụng kỹ thuật bảng , dung thạch anh 4M , dung 4 chân data ( trong đó D7=>D4 của LCD nối với Port7=>Port4 của F88) và các chân EN, RS, RW của LCD được nối với port2,1,0 của F88). Các bạn có thể tham khảo kiến thức cơ bản của LCD ở

http://www.dientuvietnam.net/board/s...1&page=1&pp=10


PHP Code:
;**********************************************************************
;                                                                     *
;    
Filename:        LCD.asm                                           *
;    
Date:          25-9-2005                                         *
;    
File Version:  V1_1                                              *
;                                                                     *
;    
Author:        MAFD_47A                                          *
;    
Company:       BACHKHOA                                          *
;                                                                     *
;                                                                     *
;**********************************************************************
;                                                                     *
;    
Files requiredConvert 8051 Assembler to PIC                    *
;                    
Chi dung Rom de hien thi ra ngoai                *
;                    
Ky thuat bang                                    *
;                                                                     *
;**********************************************************************
;                                                                     *
;    
Notes:    EN noi voi chan 2 PORTA                                     *
;              
RS noi voi chan 1 PORTA                                     *
;              
RW noi voi chan 0 PORTA                                      *
;              
Data noi tu 7,6,5,4 voi D7,D6,D5,D4 cua LCD            *
;                                                                     *
;**********************************************************************

    list      
p=16f88           ; list directive to define processor
    
#include <p16F88.inc>        ; processor specific variable definitions

    
errorlevel  -302              suppress message 302 from list file  _WRT_ENABLE_OFF

    __CONFIG    _CONFIG1
_CP_OFF _CCP1_RB0 _DEBUG_OFF _CPD_OFF _LVP_OFF _BODEN_OFF _MCLR_OFF _PWRTE_ON _WDT_OFF _HS_OSC   
    __CONFIG    _CONFIG2
_IESO_OFF _FCMEN_OFF




;***** VARIABLE DEFINITIONS
w_temp        EQU     0x71        
variable used for context saving 
status_temp   EQU     0x72        
variable used for context saving
pclath_temp   EQU     0x73          
variable used for context saving
ACC           EQU     0x74
RO            EQU     0x78
R1            EQU     0x79
R2            EQU     0x7A
R3            EQU     0x7B
R4            EQU     0x7C
R5            EQU     0x7D
R6            EQU     0x7E
R7            EQU     0x7F
EN            EQU     H
'0002'
RS            EQU     H'0001'
RW            EQU     H'0000'
P7            EQU     H'0007'



;**********************************************************************
        
ORG     0x000             processor reset vector
        
goto    main              go to beginning of program
    

        ORG     0x004             
interrupt vector location
        movwf   w_temp            
save off current W register contents
        movf    STATUS
,w          move STATUS register into W register
        movwf    status_temp       
save off contents of STATUS register
        movf    PCLATH
,W          move PCLATH register into W register
        movwf    pclath_temp       
save off contents of PCLATH register

isr code can go here or be located as a call subroutine elsewhere


        movf    pclath_temp
,w     retrieve copy of PCLATH register
        movwf    PCLATH            
restore pre-isr PCLATH register contents
        movf    status_temp
,w     retrieve copy of STATUS register
        movwf    STATUS            
restore pre-isr STATUS register contents
        swapf   w_temp
,f
        swapf   w_temp
,w          restore pre-isr W register contents
        retfie                    
; return from interrupt

main        
        BANKSEL ANSEL
        MOVLW   0x00
        MOVWF   ANSEL
        CALL    INIT_LCD
        CALL    CLEAR_LCD
        MOVLW   0x00
        MOVWF   R1
AGAIN1   MOVF    R1
,W
        CALL    TABLE
        ADDLW   0x00
        BTFSC   STATUS
,Z
        
GOTO    NEXT
        CALL    WRITE_TEXT
        INCF    R1
,F
        
GOTO    AGAIN1
NEXT    
        MOVLW   0x02
        CALL    GOTOLINE2
        MOVLW   0x00
        MOVWF   R1
AGAIN2   MOVF    R1
,W
        CALL    THUY
        ADDLW   0x00
        BTFSC   STATUS
,Z
        
GOTO    NEXT1
        CALL    WRITE_TEXT
        INCF    R1
,F
        
GOTO    AGAIN2

NEXT1        
        
GOTO    $


TABLE   ADDWF   PCL,F
        RETLW   
'H'
        
RETLW   'E'
        
RETLW   'L'
        
RETLW   'L'
        
RETLW   '0'
        
RETLW   ' '
        
RETLW   'W'
        
RETLW   'O'
        
RETLW   'R'
        
RETLW   'L'
        
RETLW   'D'
        
RETLW   0x00

THUY    ADDWF   PCL
,F
        RETLW   
'T'
        
RETLW   'H'
        
RETLW   'U'
        
RETLW   'Y'
        
RETLW   0x00
        
WRITE_2_NIBBLES
        MOVWF   ACC
        BANKSEL TRISB
        MOVLW   
B'00001111'       Chon data lam dau ra
        ANDWF   TRISB
,F
        BANKSEL PORTB
        MOVLW   0xF0
        IORWF   PORTB
,F
        MOVF    ACC
,W
        IORLW   0x0F
        ANDWF   PORTB
,F           Dua 4 bit cao ra PortB
        BSF     PORTA
,EN
        NOP
        BCF     PORTA
,EN
        MOVLW   0xF0
        IORWF   PORTB
,F
        SWAPF   ACC
,W
        IORLW   0x0F
        ANDWF   PORTB
,F           Dua 4 bit cao ra PortB
        BSF     PORTA
,EN
        NOP
        BCF     PORTA
,EN
        
RETURN


        
INIT_LCD
        CALL    DELAY100
        BANKSEL TRISA
        MOVLW   
B'00000'
        
MOVWF   TRISB
        MOVWF   TRISA
        BANKSEL PORTA    
        BCF     PORTA
,RS
        BCF     PORTA
,RW
        BCF     PORTA
,EN
        BSF     PORTA
,EN
        MOVLW   0x28
        MOVWF   PORTB
        BCF     PORTA
,EN
        CALL    DELAY5
        MOVLW   0x28
        CALL    WRITE_2_NIBBLES   
Write A as two separate nibbles to LCD
        CALL    DELAY5
        MOVLW   0x0E
        CALL    WRITE_2_NIBBLES
        CALL    DELAY5
        MOVLW   0x06
        CALL    WRITE_2_NIBBLES
        CALL    DELAY5
        
RETURN

CLEAR_LCD
        BCF     PORTA
,RS
        MOVLW   0x01
        CALL    WRITE_2_NIBBLES
        CALL    DELAY5
        
RETURN

WRITE_TEXT
        BSF    PORTA
,RS
        CALL   WRITE_2_NIBBLES
        CALL   DELAY5
        
RETURN  

GOTOLINE1
        BCF    PORTA
,RS
        ADDLW  0x80
        CALL   WRITE_2_NIBBLES
        CALL   DELAY5
        
RETURN 

GOTOLINE2
        BCF    PORTA
,RS
        ADDLW  0xC0
        CALL   WRITE_2_NIBBLES
        CALL   DELAY5
        
RETURN 




DELAY255    movlw    0xff        ;delay 255 mS
        
goto    D0
DELAY100    movlw    d
'100'        ;delay 100mS
        
goto    D0
DELAY50        movlw    d
'50'        ;delay 50mS
        
goto    D0
DELAY20        movlw    d
'20'        ;delay 20mS
        
goto    D0
DELAY5        movlw    0x05        
;delay 5.000 ms (4 MHz clock)
D0        movwf    R2
D1        movlw    0xC7            
;delay 1mS
        movwf    R3
        movlw    0x01
        movwf    R4
Delay_0
        decfsz    R3
f
        
goto    $+2
        decfsz    R4
f
        
goto    Delay_0

        decfsz    R2    
,f
        
goto    D1
        retlw    0x00
            
remaining code goes here



initialize eeprom locations

        ORG    0x2100
        DE    0x00
0x010x020x03


        END                       
directive 'end of program'


( em ko the nao dinh kem duoc file ?????? )
Rất mong chương trình này giúp đỡ được một phần nào cho các bạn

Nếu bạn nào thác mắc vấn đề về chương trình này thì hãy mở một luông mới để thảo luận về vấn đề này nhé


thay đổi nội dung bởi: mafd_47a, 09-10-2005 lúc 04:58 PM.
mafd_47a vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn