Chạy chữ trên lcd 16bit dùng pic 16f84a

Lê Thành Nhân

Thành Viên PIF
Happ new year!
Em có vấn đề code cho con pic 16f84a nhưng không biết nên post ở đâu cho hợp lý nên xin post ở đây vây.
Tình hình là thức trắng đêm để viết code cho chạy chữ happy new year trên lcd, dùng hợp ngữ để viết nhưng chẳng hiểu sao, viết xong biên dịch lại gặp lỗi mà em sữa hoài không xong nên em xin post lên để nhờ mọi người sữa dùm đoạn code cho em với.
Đoạn code nó như sau :
Code:
;********************************************************
;author : Le Thanh Nhan
;Xuat ky tu len lcd
;source code : Le Duy Phi
;Date : 01-01-2013
list p=16F84A ;set proccesor type
#include p16f84A.inc ;
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
cblock H'0C' ;
      count ; thanh ghi dem cho delay
      character ; bo dem so ky tu xuat ra lcd
endc
; PorA.0 Rs
; PortA.1 Rw
; PortA.2 E
org 00h ; start program at reset vector
Main  ; thiet lap port va lcd
      CALL lcd_Port ; set up ports
      CALL lcd_Init ; set up lcd
;*************************************************************************
      BCF PORTA,1 ; chon lcd o che do write
;*************************************************************************
      MOVLW H'80' ; Xuat du lieu ra dong 1
      CALL LCD_COMMAN
      CLRF Character ; xoa bo dem ky tu
Get_Char_1 movf character,W ; chuyen 1 ky tu ra thanh ghi W
          call TABLE_1 ; dung bang ky tu
          iorlw 00h ; retlw
          btfsc STATUS,Z ; check for end message
          goto MESSAG_2 ; va ket thuc neu xong
          ;
          call LCD_DATA ; neu chua xong dua ky tu ra lcd
          incf Character,F ; cong 1 vao bo dem
          goto Get_Char_1 ;
MESSAG_2  MOVLW H'C0' ; xuat du lieu ra dong 1
          call LCD_COMMAN
          CLRF Chacracter ; xoa bo dem ky tu
Get_Char_2 movf Character,W;dua 1 ky tu ra W
          call TABLE_2 ; dung bang 2
          iorlw 00h ; retlw
          btfsc STATUS,Z ; check for end of messag
          goto end_message ; va ket thuc neu xong
          ;
          call LCD_DATA ; neu chua xong dua ky tu ra lcd
          incf Character,F; cong 1 vao bo dem
          goto Get_Char_2 ; lam lai
;****************************************************************************
end_message goto end_message
;****************************************************************************
TABLE_1 addwf PCL,F ;
        retlw 'H'
        retlw 'A'
        retlw 'P'
        retlw 'P'
        retlw 'Y'
        retlw ' '
        retlw 'N'
        retlw 'E'
        retlw 'W'
        retlw ' '
        retlw 'Y'
        retlw 'E'
        retlw 'A'
        retlw 'R'
        retlw '1'
        retlw '3'
        retlw 0 ;end of message
;********************************************************************************
TABLE_2 addwf PCL,F ;
        retlw 'T'
        retlw 'H'
        retlw 'A'
        retlw 'N'
        retlw 'H'
        retlw ' '
        retlw 'N'
        retlw 'H'
        retlw 'A'
        retlw 'N'
        retlw ' '
        retlw 'K'
        retlw 'U'
        retlw '1'
        retlw '2'
        retlw ' '
        retlw 0 ;end of message 
;**************************************************************************************
LCD_PORT ; SET THE LCD
Enable
      ; line to outputs
      BSF STATUS,RP0 ; CHON BANH THANH GHI 1
      MOVLW B'11111000' ; SET LOWER 3 BIT
      MOVWF TRISA ; DIGITAL
      CLRF TRISB ; SET PORT B
      BCF STATUS,RP0 ; QUAY LAI BANK 1
      ;
      BCF PORTA,2;
      RETURN
;******************************************************************************************
;CHU Y : RS = 0 IS COMMAN RS = 1 IS DATA
;*******************************************************************************************
LCD_Init MOVLW H'38' ;MODE 8 BITS
        CALL LCD_COMMAN
        CALL Delay_5ms;
 
        MOVLW H'0C' ;DISPLAY ON
        CALL LCD_COMMAN
        CALL Delay_5ms
        MOVLW H'06' ;
        CALL LCD_COMMAN
        CALL Delay_5ms ;
        MOVLW H'01' ;
        CALL LCD_COMMAN ;
        RETURN
;***************************************************************************************************
LCD_COMMAN ;
          BSF PORTA,0 ;
          MOVWF PORB ;
          CALL LCD_Enable ;
          RETURN
;*****************************************************************************************************
LCD_DATA ;
          BSF PORTA,0 ;
          MOVWF PORTB ;
          CALL LCD_Enable ;
          RETURN
;****************************************************************************************************
LCD_Enable BSF PORTA,2 ;
          CALL Delay_5ms ;
          BCF PORTA,2 ;
          RETURN ;
;******************************************************************************************************
Delay_5ms CALL DELAY_1MS
          CALL DELAY_1MS
          CALL DELAY_1MS
          CALL DELAY_1MS
          CALL DELAY_1MS
          RETURN
DELAY_1MS
          CLRF COUNT ; 1u
HERE      NOP
          DECFSZ COUNT,1 ; 1u
          GOTO HERE ; 2u
          RETURN ; 2u
End
Mong các anh chị giúp em với.
 

Lê Thành Nhân

Thành Viên PIF
Em viết xong, complie thử mà nó báo lỗi 103 mà em sữa mãi chẳng xong.
Vậy là bó tay thiệt rồi.
 

Lê Thành Nhân

Thành Viên PIF
Máy anh có cài MPlab không?
Cái này anh phải cho chạy thử thì mới biết cụ thể được ạ, em nói sợ không kỹ lắm đâu, đại khái là nó báo sai lỗi cú pháp gì gì đó.
Máy của em vừa gỡ mplab ra rồi nên bây giờ không nhớ rõ lỗi nữa.Có gì để em cài lại.
 

tungbk

Cố Vấn CLB
Staff member
K biết e chép ở đâu mà thấy tên hàm sai hết. Xem lại tên 2 hàm lcd_Portlcd_Init khi gọi và 2 hàm khi định nghĩa LCD_PORT,LCD_Init.
Rồi biến Character cũng chưa define. Nếu e mún viết bằng asm thì nên viết từ đầu k nên lấy code đâu đó rồi ngồi sửa mệt lắm. Tốt nhất chuyển qua code C cho nhanh.
 

Lê Thành Nhân

Thành Viên PIF
Anh tungbk nói đúng lỗi của code này rồi đó, hihi, nó báo lỗi chỗ đó mà em sữa không được, hì
Công nhận code asembly viết dài và khó quá.Thank anh nhiều, chắc cái code này em bỏ qua bên đã.
 
Top