PIC 16 F877A với ds1307 code asm. hiển thị lcd

aphu69

Học sinh phổ thông
#11
SAO e làm giống a mà k được vậy...mà còn i2c tên là gì vậy ạ..e dùng proteus 8.1 mà k có con này....e cảm ơn!!
 

aphu69

Học sinh phổ thông
#15
E cảm ơn...hi!! nhưng mà lúc làm mạch thật thì minh thay i2c debug bằng linh kien gi vậy anh...!!
 

TENTEN98

Học sinh phổ thông
#17
ngồi chờ xem W.cup, nghịch ngợm code asm với đồng hồ thời gian thực. thấy kết quả mô phỏng cũng ok. up lên cho vui, hi vọng sẽ giúp được các bạn làm bài tập về asm (giáo viên có vẻ hay bắt lập trình theo ngôn ngữ này). Mình code không tốt lắm, nhưng viết ra để hiểu hơn về I2c

kết quả mô phỏng
Xem đính kèm 36230



code
Mã:
processor P16F877A
#include <p16f877a.inc>
; dinh nghia cac thanh ghi su dung
    E EQU 0
    RS EQU 1
    RW EQU 2
    SECOND EQU 0X20
    SECOND1 EQU 0X21
    COUNT1 EQU 0X22
    COUNTA equ 0X23
    COUNTB EQU 0X24
    MINUT EQU 0X25
    MINUT1 EQU 0X26
    GIO EQU 0X27
    GIO1 EQU 0X28
    THU EQU 0X29
    NGAY EQU 0X2A
    NGAY1 EQU 0X2B
    THANG EQU 0X2C
    THANG1 EQU 0X2D
    NAM EQU 0X2E
    NAM1 EQU 0X2F  
; bat dau chuong trinh
    ORG     0x0000
    GOTO    START
START
    CALL    INIT_PIC             ;KHOI TAO PIC
    CALL    INIT_LCD            ;KHOI TAO CHO LCD
  
    GOTO LOOP  
INIT_PIC                        ; KHOI TAO PIC
    BANKSEL PORTB
    CLRF PORTB
    CLRF PORTD
    BANKSEL    TRISB
    MOVLW    0X00
    MOVWF    TRISB
    MOVLW    0X00
    MOVWF    TRISD  
                                ; KHOI TAO I2C     
    BANKSEL SSPCON              ; chon MSSP che do MASTER MODE
    MOVLW   B'00101000'         ; Thiet lap MSSP cho chan PORTC o che do I2C; clk = 1/[4*(SSPADD+1)], bit 5=1, cho phep SSP
    MOVWF   SSPCON               ; SSPEN, SSPM BITS

    BANKSEL SSPSTAT              ;Thiet lap che do chuan cua toc do baud ( SMP= 1:bit 7- slew rate bi cam )
    MOVLW   B'10000000'          ; Toc do chuan la 100Kb
    MOVWF   SSPSTAT   

    BANKSEL SSPADD                ; Thiet lap toc do duong truyen
    MOVLW   0x28                 ; Tinh toan gia tri cho thiet lap toc do;
    MOVWF   SSPADD              ; 4/[44]gan bang 100 KHz                        
    RETLW 0
LOOP                            ; vong lap thu du lieu va hien thi
    BANKSEL PORTB               ;DUA CON TRO lcd VE DAU HANG1
    BCF PORTB,RS
    MOVLW 0X80
    MOVWF PORTD
    BSF PORTB,E
    BCF PORTB,E
    CALL WAITLCD
    BSF PORTB,RS
    CALL XULY
    CALL CHUYEN_DOI
    CALL HIENTHI
    CALL NACK_DATA
    BANKSEL SSPCON2             ; GUI DIEU KIEN STAT
    BSF SSPCON2,PEN
    CALL WAITMSSP               ; GUI XONG THI CHO DIEU KIEN STOP HOAN THANH
    GOTO LOOP
SEND
    BANKSEL SSPBUF
    MOVWF SSPBUF                ; XUNG SCL BAT DAU HOAT DONG
    CALL WAITMSSP
    CALL CHECK
    RETLW 0
CHECK
    BANKSEL SSPCON2
    BTFSC SSPCON2,ACKSTAT
    GOTO FAILT
    RETLW 0
RECEIVE
    BANKSEL SSPCON2
    BSF SSPCON2,RCEN
    CALL WAITMSSP
    RETLW 0
WAITMSSP
    BANKSEL PIR1   
    BTFSS  PIR1,SSPIF
    GOTO    $-1   
    BCF  PIR1,SSPIF
    RETLW  0
GET_DATA
    BANKSEL SSPBUF
    MOVF SSPBUF,W               ; DUA DU LIEU VAO THANH GHI W
    BANKSEL PORTB
    RETURN
INIT_LCD
    BANKSEL PORTB
    BCF PORTB,RS                                                 ; Tham chi?u ghi l?nh
    MOVLW 0X38                                                   ; t? mã c?u hình hi?n th?
    MOVWF PORTD                                                 ; xu?t ra c?ng D,
    BSF PORTB,E                                                
     BCF PORTB,E
     CALL WAITLCD                                             
    MOVLW 0X01                                                   ; xóa màn hình
    MOVWF PORTD
    BSF PORTB,E
    BCF PORTB,E
    CALL WAITLCD

    MOVLW 0X0C                                              
    MOVWF PORTD
    BSF PORTB,E
    BCF PORTB,E
    CALL WAITLCD
    RETLW 0                        ; KET THUC KHOI TAO LCD

HIEN_THI_LCD
    BANKSEL PORTB
    BSF PORTB,RS
    MOVWF PORTD
    BSF PORTB,E
    BCF PORTB,E
    CALL WAITLCD
    RETURN
ACK_DATA
    BANKSEL SSPCON2
    BCF  SSPCON2,ACKDT  ; tru?ng h?p này là không mu?n xác nh?n
    BSF  SSPCON2,ACKEN
    CALL WAITMSSP
    BANKSEL PORTB
    RETLW 0
NACK_DATA
    BANKSEL SSPCON2
    BSF  SSPCON2,ACKDT  ; tru?ng h?p này là không mu?n xác nh?n
    BSF  SSPCON2,ACKEN
    CALL WAITMSSP
    BANKSEL PORTB
    RETLW 0
FAILT
    BANKSEL PORTB
    MOVLW #'F'
    CALL HIEN_THI_LCD
    GOTO $
WAITLCD                            ; chuong trình con d?i LCD                         
    MOVLW d'5'
    MOVWF COUNT1
D2
    MOVLW 0XC7
    MOVWF COUNTA
    MOVLW 0X01
    MOVWF COUNTB
DELAY1
    DECFSZ COUNTA,1
    GOTO $+ 2
    DECFSZ COUNTB,1
    GOTO DELAY1
    DECFSZ COUNT1
    GOTO D2
    RETLW 0
CHUYEN_DOI
    MOVLW D'48'
    ADDWF SECOND,1
    ADDWF SECOND1,1
    ADDWF MINUT,1
    ADDWF MINUT1,1
    ADDWF GIO,1
    ADDWF GIO1,1
    ADDWF NGAY1,1
    ADDWF NGAY,1
    ADDWF THANG,1
    ADDWF THANG1,1
    ADDWF NAM,1
    ADDWF NAM1,1
    RETURN
HIENTHI
    MOVLW #'T'
    CALL HIEN_THI_LCD
    MOVLW #'i'
    CALL HIEN_THI_LCD
    MOVLW #'m'
    CALL HIEN_THI_LCD
    MOVLW #'e'
    CALL HIEN_THI_LCD
    MOVLW #':'
    CALL HIEN_THI_LCD
    MOVLW #' '
    CALL HIEN_THI_LCD
    MOVF GIO,W
    CALL HIEN_THI_LCD
    MOVF GIO1,W
    CALL HIEN_THI_LCD
    MOVLW #':'
    CALL HIEN_THI_LCD
    MOVF MINUT,W
    CALL HIEN_THI_LCD
    MOVF MINUT1,W
    CALL HIEN_THI_LCD
    MOVLW #':'
    CALL HIEN_THI_LCD
    MOVF SECOND,W
    CALL HIEN_THI_LCD
    MOVF SECOND1,W
    CALL HIEN_THI_LCD

    BCF PORTB,RS               ; THAM CHIEU LENH LEN lcd
    MOVLW 0XC0
    MOVWF PORTD
    BSF PORTB,E
    BCF PORTB,E
    CALL WAITLCD
    BSF PORTB,RS               ; THAM CHIEU DU LIEU LEN LCD
    MOVLW #'D'
    CALL HIEN_THI_LCD
    MOVLW #'a'
    CALL HIEN_THI_LCD
    MOVLW #'t'
    CALL HIEN_THI_LCD
    MOVLW #'e'
    CALL HIEN_THI_LCD
    MOVLW #':'
    CALL HIEN_THI_LCD
    MOVLW #' '
    CALL HIEN_THI_LCD
  
    MOVF NGAY,W
    CALL HIEN_THI_LCD
    MOVF NGAY1,W
    CALL HIEN_THI_LCD
    MOVLW #':'
    CALL HIEN_THI_LCD
  
    MOVF THANG,W
    CALL HIEN_THI_LCD
    MOVF THANG1,W
    CALL HIEN_THI_LCD
    MOVLW #':'
    CALL HIEN_THI_LCD
    MOVF NAM,W
    CALL HIEN_THI_LCD
    MOVF NAM1,W
    CALL HIEN_THI_LCD
    RETURN
XULY
    BANKSEL SSPCON2             ;GUI DK START
    BSF SSPCON2,SEN
    CALL WAITMSSP               ; GUI XONG THI CHO DIEU KIEN START HOAN THANH
                                                          
    MOVLW B'11010000'           ; GUI DIA CHI SLAVE
    CALL SEND                   ; GOI CHUONG TRINH CON GUI BYTE
    MOVLW 0X00                  ; GOI DIA CHI NGAN NHO 00H, TUC LA GHI VAO CON TRO DU LIEU CUA DS1307
    CALL SEND                    ; GOI CHUONG TRINH CON GUI BYTE
  
    BANKSEL SSPCON2
    BSF SSPCON2,RSEN
    CALL WAITMSSP
    MOVLW B'11010001'           ; GUI DIA CHI SLAVE; YEU CAU DOC TU SLAVE
    CALL SEND

    CALL RECEIVE                 ; NHAN DU LIEU SECOND VA XU LY DU LIEU SECOND
    CALL GET_DATA
    MOVWF SECOND
    CALL ACK_DATA
    MOVLW 0X0F
    ANDWF SECOND,W
    MOVWF SECOND1
    SWAPF SECOND,1
    MOVLW 0X0F
    ANDWF SECOND,1

                             
    CALL RECEIVE                   ; NHAN VA XU LY DU LIEU HANG PHUT
    CALL GET_DATA
    MOVWF MINUT
    CALL ACK_DATA
    MOVLW 0X0F
    ANDWF MINUT,W
    MOVWF MINUT1
    SWAPF MINUT,1
    MOVLW 0X0F
    ANDWF MINUT,1                ; XU LY XONG DU LIEU HANG PHUT

    CALL RECEIVE                 ; NHAN VA XU LY DU LIEU HANG GIO
    CALL GET_DATA
    MOVWF GIO  
    CALL ACK_DATA
    MOVLW 0X0F
    ANDWF GIO,W
    MOVWF GIO1
    SWAPF GIO,1
    MOVLW 0X0F
    ANDWF GIO,1                  ; XU LY XONG DU LIEU HANG GIO

    CALL RECEIVE                 ; NHAN VA XU LY DU LIEU THU
    CALL GET_DATA
    MOVWF THU                    ; KHONG HIEN THI NHUNG VAN LAY
    CALL ACK_DATA
             
  
    CALL RECEIVE                 ; NHAN VA XU LY DU LIEU NGAY
    CALL GET_DATA
    MOVWF NGAY  
    CALL ACK_DATA
    MOVLW 0X0F
    ANDWF NGAY,W
    MOVWF NGAY1
    SWAPF NGAY,1
    MOVLW 0X0F
    ANDWF NGAY,1                ; XU LY XONG DU LIEU NGAY

    CALL RECEIVE                 ; NHAN VA XU LY DU LIEU THANG
    CALL GET_DATA
    MOVWF THANG  
    CALL ACK_DATA
    MOVLW 0X0F
    ANDWF THANG,W
    MOVWF THANG1
    SWAPF THANG,1
    MOVLW 0X0F
    ANDWF THANG,1                ; XU LY XONG DU LIEU THANG

    CALL RECEIVE                 ; NHAN VA XU LY DU LIEU THANG
    CALL GET_DATA
    MOVWF NAM  
    MOVLW 0X0F
    ANDWF NAM,W
    MOVWF NAM1
    SWAPF NAM,1
    MOVLW 0X0F
    ANDWF NAM,1                ; XU LY XONG DU LIEU THANG
    RETURN

    END
hi vọng mọi người đừng ném gạch
sao em chạy thì giây nó đếm chậm thế ạ...
 

Quảng cáo Google