![]() |
|
Tài trợ cho PIC Vietnam |
MPASM Lập trình bằng hợp ngữ là một việc làm vô cùng vất vả, tuy nhiên, để hiểu và làm việc với vi điều khiển, hợp ngữ trở thành một công cụ khá đắc lực ... |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Jul 2006
Bài gửi: 19
: |
![]() Cac huynh de cho minh hoi chut xiu :
Chuong trinh ben duoi minh viet de hien thi ki tu A len LCD ,nhung khi mo phong no thi khong chay ,minh khong biet sai o cho nao ,cac huynh de kiem tra dum va sua dum cho minh nha ,minh dang lam de tai nen dang can gap .Cam on nhieu! Code:
TITLE "HIEN THI LEN LCD" PROCESSOR P16F876A #INCLUDE <P16F876A.INC> ;CHEN THU VIEN LIEN KET CHO CHUONG TRINH __CONFIG 3F71H ;CAU HINH CAC BIT HE THONG ERRORLEVEL -302 ;BO DI CAC LOI CHON BANK cblock 0X020 LCD_TEMP LCD_TEMP1 DELAY X_DELAY endc LCD_DATA EQU PORTB LCD_DATA_TRIS EQU TRISB LCD_CTRL EQU PORTA ; PORTA control bits LCD_E EQU 2 LCD_RW EQU 1 LCD_RS EQU 0 org 0x000 GOTO START START ;HIEN THI NHIET DO LEN LCD LCDINIT CLRF LCD_CTRL MOVLW 0x01E CALL X_DELAY500 ; 30 * 0.5mS = 15mS MOVLW 0x038 ; 8-bit-interface, 2-lines CALL LCDPUTCMD MOVLW 0x000 ; disp.off, curs.off, no-blink CALL LCDDMODE CALL LCDCLEAR MOVLW 0x004 ; disp.on, curs.off CALL LCDDMODE MOVLW 0x002 ; auto-inc (shift-cursor) CALL LCDEMODE ;MOVLW 0x01E ;CALL X_DELAY500 CALL LCDPUTCHAR RETURN ;************************************************* ********************* LCDBUSY BSF STATUS,RP0 ; bank 1 MOVLW 0x0FF ; Set PORTB for input MOVWF LCD_DATA_TRIS BCF STATUS, RP0 ; bank 0 BCF LCD_CTRL, LCD_RS ; lenh dang duoc viet len LCD BSF LCD_CTRL, LCD_RW ; vdk doc du lieu tu LCD BSF LCD_CTRL, LCD_E ; cho phep giao tiep LCD MOVF LCD_DATA, W ; Read busy flag + DDram address BCF LCD_CTRL, LCD_E ; cam ANDLW 0x80 ; Check Busy flag, High = Busy BTFSS STATUS, Z GOTO LCDBUSY LCDNOTBUSY BCF LCD_CTRL, LCD_RW BSF STATUS, RP0 ; bank 1 MOVLW 0x000 MOVWF LCD_DATA_TRIS ; Set PORTB for output BCF STATUS, RP0 ; bank 0 RETURN ;************************************************* ******************** LCDDMODE ANDLW 0x007 ; Strip upper bits IORLW 0x008 ; Function set CALL LCDPUTCMD RETURN ;************************************************* ********************* LCDCLEAR MOVLW 0x001 CALL LCDPUTCMD RETURN ;************************************************* ******************** LCDEMODE ANDLW 0x003 ; Strip upper bits IORLW 0x004 ; Function set CALL LCDPUTCMD RETURN ;************************************************* ********************* LCDPUTCHAR Movlw 0x080 ;dinh dia chi de xuat A CALL LCDPUTCMD Movlw 'A' movwf LCD_TEMP CALL LCDBUSY ; Wait for LCD to be ready BCF LCD_CTRL, LCD_RW ; vdk viet du lieu len LCD BSF LCD_CTRL, LCD_RS ; du lieu dang duoc viet len LCD BSF LCD_CTRL, LCD_E ; cho phep giao tiep LCD MOVF LCD_TEMP, W MOVWF LCD_DATA ; Send data to LCD BCF LCD_CTRL, LCD_E ; cam giao tiep LCD RETURN ;************************************************* ********************* LCDPUTCMD MOVWF LCD_TEMP ; Command to send is in W CALL LCDBUSY ; Wait for LCD to be ready BCF LCD_CTRL, LCD_RW ; vdk viet du lieu len LCD BCF LCD_CTRL, LCD_RS ; lenh dang duoc viet len LCD BSF LCD_CTRL, LCD_E ; cho phep giao tiep LCD MOVF LCD_TEMP, W MOVWF LCD_DATA ; Send data to LCD BCF LCD_CTRL, LCD_E ; cam giao tiep LCD RETURN ;************************************************* ****************** DELAY500 MOVLW D'165' ; +1 1 cycle MOVWF DELAY ; +2 1 cycle DELAY500_LOOP DECFSZ DELAY, F ; step1 1 cycle GOTO DELAY500_LOOP ; step2 2 cycles DELAY500_END RETURN ; +3 2 cycles ;*********************************** a delay of 'W' * 500mS X_DELAY500 MOVWF X_DELAY ; +1 1 cycle X_DELAY500_LOOP CALL DELAY500 ; step1 wait 500uSec DECFSZ X_DELAY, F ; step2 1 cycle GOTO X_DELAY500_LOOP ; step3 2 cycles X_DELAY500_END RETURN ; +2 2 cycles end hinh mo_phong_LCD duoi day: thay đổi nội dung bởi: namqn, 16-04-2007 lúc 07:00 PM. |
![]() |
![]() |
|
|