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

The Kid

Kỹ sư
#1
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
upload_2014-7-8_22-23-52.png




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
 

Coffee-Bean

Mechatronics
#2
The Kid chịu khó ghê nhỉ, viết hẳn một đoạn chương trình ASM có mô phỏng hẳn hoi... nhưng vẫn chưa tới giờ bóng lăn mà... chịu khó giải thích thêm vai trò con I2C trong mạch được không...
 

The Kid

Kỹ sư
#6
có vẻ như thế thật bác ạ. em cũng thấy một số link cũng bảo vậy
 

thaotrung

Học sinh phổ thông
#7
nếu có nút nhấn để điều chỉnh thời gian ngày tháng năm gì đó thì ta phải code như thế nào ạ, em mới học về assembly nên chưa hiểu nhiều,nhất là phần nút nhấn. hiện giờ em có làm đồ án liên quan tới phần này nhưng mà phần nút nhấn vẫn chưa có, mong mọi người có thể giúp đỡ. xin cảm ơn!!!
 

The Kid

Kỹ sư
#8
ặc, code này mình viết giải trí thôi. cũng lâu rồi mình không dùng ASM nữa vì Mikro C đủ giải quyết hết công việc rồi. trừ khi mình phải dùng thời gian thực và tăng tốc chương trình thui. Giờ đọc lại mình còn chả hiểu gì luôn ấy
 

The Kid

Kỹ sư
#9
còn về thuật toán thì về phần hẹn giờ bạn có thể thực hiện như thế này
lập đoạn chương trình con phục vụ ngắt cho việc đặt giờ, cái này có thể dùng ngắt RB. sau đó sử dụng chương trình quét 3 phím để hẹn giờ, phút và giây. lưu 3 giá trị này vào 3 thanh ghi đặt giờ, phút, giây
sau khi quét phím xong, kết thúc chương trình con phục vụ ngắt RB, chương trình chính tiếp tục đọc giá trị từ DS1307, sau đó cứ kiểm tra xem giá trị thu được từ DS1307 với 3 thanh ghi đặt giờ, phút, giây đã bằng nhau hay chưa. nếu bằng thì bật lệnh phát chuông báo. :)
 

thaotrung

Học sinh phổ thông
#10
để em xem lại ! cảm ơn anh :D, ý em không phải là muốn hẹn giờ mà chỉ là muốn điều chỉnh thời gian lại ấy,dạng như là đồng hồ điện tử casio cũ ấy, nhấp nháy rồi điều chỉnh
đây là code asm của em dựa theo code ban đầu của anh nhưng có thêm nút nhấn điều chỉnh thời gian,code này chưa chạy được,mong mọi người xem giúp với ạ !!!
#include <p16f877a.inc>
; dinh nghia cac thanh ghi su dung
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _WRT_OFF & _LVP_OFF & _CPD_OFF
E EQU 0
RS EQU 1
RW EQU 2
CBLOCK 0X20
SECOND
SECOND1
COUNT1
COUNTA
COUNTB
MINUT
MINUT1
GIO
GIO1
THU
NGAY
NGAY1
THANG
THANG1
NAM
NAM1
W_TEMP
STATUS_TEMP
MODE
ENDC
; bat dau chuong trinh
ORG 0x0000
GOTO START
; bat dau chuong trinh ngat
ORG 0X0004
GOTO NGAT_TIMER0
; chuong trinh chinh chay tai day
ORG 0X0005
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 B'11110000'
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
;MOI BI CAT
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 CHIEU MA HIEN THI
MOVLW 0X38 ; CHO LCD HIEN THI 2 DONG
MOVWF PORTD ; XUAT RA CONG 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 ; KHONG NHAN XUNG
BSF SSPCON2,ACKEN ;CHO PHEP XUNG XUAT HIEN O 2 PIN SDA VA SCL KHI KET THUC NHAN DU LIEU
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
LOOP ; vong lap thu du lieu va hien thi
BANKSEL OPTION_REG
MOVLW B'00000110'
MOVWF OPTION_REG
BANKSEL TMR0
MOVLW D'100'
MOVWF TMR0
BANKSEL INTCON
BSF INTCON,5
BSF INTCON,7
BSF INTCON,3
BANKSEL PORTB
BCF PORTB,RS ; RS=0 GHI LENH
MOVLW 0X80 ;DUA CON TRO lcd VE DAU HANG1
MOVWF PORTD
BSF PORTB,E ;CHOT GIA TRI
BCF PORTB,E ;CHOT GIA TRI
CALL WAITLCD
BSF PORTB,RS ;GHI KI TU
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

NGAT_TIMER0
MOVWF W_TEMP
SWAPF STATUS,0
MOVWF STATUS_TEMP

BCF INTCON,2
GOTO THOAT_NGAT
NGAT_RB
CALL HIENTHI
BTFSS PORTB,4
GOTO LOOP1
GOTO B5
B5
BTFSS PORTB,5
GOTO LOOP2
GOTO B6
B6
BTFSS PORTB,6
GOTO LOOP3
GOTO NGAT_RB
LOOP1
BTFSC PORTB,4
GOTO UP_MODE
GOTO LOOP1
LOOP2
BTFSC PORTB,5
GOTO UP_TIME
GOTO LOOP2
LOOP3
BTFSC PORTB,6
GOTO DOWN_TIME
GOTO LOOP3
UP_MODE
UP_MODE
INCF MODE,1
MOVLW D'5'
XORWF MODE,0
BTFSC STATUS,Z
CLRF MODE
GOTO START
UP_TIME
MOVLW HIGH (SET_UP_1)
MOVWF PCLATH
MOVF MODE,0
GOTO SET_UP_1
DOWN_TIME
MOVLW HIGH (SET_UP_2)
MOVWF PCLATH
MOVF MODE,0
GOTO SET_UP_2
SET_UP_1
ADDWF PCL,F
GOTO NGAT_RB
GOTO UP_HOUR
GOTO UP_MIN
GOTO UP_DATE
GOTO UP_MONTH
SET_UP_2
ADDWF PCL,F
GOTO NGAT_RB
GOTO DOWN_HOUR
GOTO DOWN_MIN
GOTO DOWN_DATE
GOTO DOWN_MONTH
UP_HOUR
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0X87
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
CLRF W
INCF GIO1,1
MOVLW D'10'
XORWF GIO1,0
BTFSC STATUS,Z
GOTO TIEP_GIO
MOVF GIO1,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
TIEP_GIO
CLRF GIO1
MOVF GIO1,W
CALL HIEN_THI_LCD
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0X86
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
INCF GIO,1
CLRF W
MOVLW D'3'
XORWF GIO,0
BTFSC STATUS,Z
CLRF GIO
MOVF GIO,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
UP_MIN
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0X8A
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
CLRF W
INCF MINUT1,1
MOVLW D'10'
XORWF MINUT1,0
BTFSC STATUS,Z
GOTO TIEP_PHUT
MOVF MINUT1,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
TIEP_PHUT
CLRF MINUT1
MOVF MINUT1,W
CALL HIEN_THI_LCD
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0X89
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
INCF MINUT,1
CLRF W
MOVLW D'7'
XORWF MINUT,0
BTFSC STATUS,Z
CLRF MINUT
MOVF MINUT,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
UP_DATE
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0XC7
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
CLRF W
INCF NGAY1,1
MOVLW D'10'
XORWF NGAY1,0
BTFSC STATUS,Z
GOTO TIEP_NGAY
MOVF NGAY1,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
TIEP_NGAY
CLRF NGAY1
MOVF NGAY1,W
CALL HIEN_THI_LCD
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0XC6
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
INCF NGAY,1
CLRF W
MOVLW D'4'
XORWF NGAY,0
BTFSC STATUS,Z
CLRF NGAY
MOVF NGAY,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
UP_MONTH
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0XCA
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
CLRF W
INCF THANG1,1
MOVLW D'10'
XORWF THANG1,0
BTFSC STATUS,Z
GOTO TIEP_THANG
MOVF THANG1,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
TIEP_THANG
CLRF THANG1
MOVF THANG1,W
CALL HIEN_THI_LCD
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0XC9
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
INCF THANG,1
CLRF W
MOVLW D'2'
XORWF THANG,0
BTFSC STATUS,Z
CLRF THANG
MOVF THANG,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
DOWN_HOUR
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0X87
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
CLRF W
DECF GIO1,1
MOVLW D'0'
XORWF GIO1,0
BTFSC STATUS,Z
GOTO TIEP_GIO1
MOVF GIO1,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
TIEP_GIO1
CLRF GIO1
MOVF GIO1,W
CALL HIEN_THI_LCD
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0X86
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
DECF GIO,1
CLRF W
MOVLW D'0'
XORWF GIO,0
BTFSC STATUS,Z
CLRF GIO
MOVF GIO,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
DOWN_MIN
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0X8A
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
CLRF W
DECF MINUT1,1
MOVLW D'0'
XORWF MINUT1,0
BTFSC STATUS,Z
GOTO TIEP_GIO1
MOVF MINUT1,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
TIEP_PHUT1
CLRF MINUT1
MOVF MINUT1,W
CALL HIEN_THI_LCD
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0X89
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
DECF MINUT,1
CLRF W
MOVLW D'0'
XORWF MINUT,0
BTFSC STATUS,Z
CLRF MINUT
MOVF MINUT,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
DOWN_DATE
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0XC7
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
CLRF W
DECF NGAY1,1
MOVLW D'0'
XORWF NGAY1,0
BTFSC STATUS,Z
GOTO TIEP_NGAY1
MOVF NGAY1,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
TIEP_NGAY1
CLRF NGAY1
MOVF NGAY1,W
CALL HIEN_THI_LCD
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0XC6
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
DECF NGAY,1
CLRF W
MOVLW D'0'
XORWF NGAY,0
BTFSC STATUS,Z
CLRF NGAY
MOVF NGAY,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
DOWN_MONTH
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0XCA
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
CLRF W
DECF THANG1,1
MOVLW D'0'
XORWF THANG1,0
BTFSC STATUS,Z
GOTO TIEP_GIO1
MOVF THANG1,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
TIEP_THANG1
CLRF THANG1
MOVF THANG1,W
CALL HIEN_THI_LCD
BCF PORTB,RS ; THAM CHIEU LENH LEN lcd
MOVLW 0XC9
MOVWF PORTD
BSF PORTB,E
BCF PORTB,E
CALL WAITLCD
BSF PORTB,RS
DECF THANG,1
CLRF W
MOVLW D'0'
XORWF THANG,0
BTFSC STATUS,Z
CLRF THANG
MOVF GIO,W
CALL HIEN_THI_LCD
GOTO NGAT_RB
THOAT_NGAT
SWAPF STATUS_TEMP,0
MOVWF STATUS
SWAPF W_TEMP,1
SWAPF W_TEMP,0
RETFIE

END
upload_2016-4-21_0-21-45.png
 
Sửa lần cuối:

Quảng cáo Google