File
tempt.asm
PHP Code:
;**********************************************************************
; *
; Filename: DS1307.asm *
; Date: 28-10-2005 *
; File Version: V1.0 *
; *
; Author: MAFD_47A *
; Company: BACHKHOA *
; *
; *
;**********************************************************************
; *
; Files required: Ket noi PIC16f88 voi DS1821 hien thi len LCD *
; *
; *
; *
;**********************************************************************
; *
; Notes: EN noi voi chan 7 *
; RS noi voi chan 6 *
; RW noi voi chan 3 *
; Data noi tu 3,2,1,0 (portA) voi D7,D6,D5,D4 cua LCD *
; Su dung thach anh 4MH *
; Noi DQ cua DS1821 voi chan RA$ cua VDK *
; *
;**********************************************************************
; *
; Upgrade: *
; *
;**********************************************************************
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
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
MODE EQU 0x75
R0 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'0007'
RS EQU H'0006'
RW EQU H'0003'
P7 EQU H'0007'
START_RAM EQU 0x60
I2C EQU 0x00
PORT_DAT EQU PORTA
TRIS_DAT EQU TRISA
PORT_CON EQU PORTB
TRIS_CON EQU TRISB
DQ EQU 0x04
cblock 0x20
IOBYTE
TMP0 ; Address 0x23
COUNT ; Keep track of bits
PICMSB ; Store the MSB
PICLSB ; Store the LSB
PDBYTE ; Presence Detect Pulse
VITRI ; Dung de luu bien cua vi tri con tro trong LCD
S100 ; Gia tri hang 100
S10 ; Gia tri hang chuc
S1 ; Gia tri hang don vi
endc
ORG 0x0000
goto MAIN
ORG 0x0004
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
;==============================================================================
;==============================================================================
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
include <1W_16F6X.inc>
MAIN
BANKSEL ANSEL
CLRF ANSEL
BANKSEL PORTA
CALL INIT_LCD
;====================================================================
WRITE_SENTENCE 0x03,GOTOLINE1,MYDATA,WRITE_TEXT,VITRI
CALL INIT_TEMP
MOVLW 0x08
MOVWF VITRI
AGAIN CALL DELAY255
CALL DELAY255
CALL DELAY255
CALL DELAY255
CALL GET_TEMP
INCF IOBYTE,F
CALL WRITE_TEMP
GOTO AGAIN
;====================================================================
MYDATA ADDWF PCL,F
RETLW 'T'
RETLW 'E'
RETLW 'M'
RETLW 'P'
RETLW ':'
RETLW ' '
RETLW 0x00
INIT_TEMP
CALL OW_RESET
MOVLW 0x01
CALL DSTXBYTE
MOVLW .40
CALL DSTXBYTE
CALL OW_RESET
MOVLW 0x02
CALL DSTXBYTE
MOVLW .10
CALL DSTXBYTE
CALL OW_RESET
MOVLW 0x0C
CALL DSTXBYTE
MOVLW B'01000000'
CALL DSTXBYTE
CALL OW_RESET
MOVLW 0xEE
CALL DSTXBYTE
RETURN
GET_TEMP
CALL OW_RESET
MOVLW 0xAA
CALL DSTXBYTE
CALL DSRXBYTE ; GIA TRI NHIET DO DA DUOC LUU VAO IOBYTE
RETURN
WRITE_TEMP
MOVF IOBYTE,W
CALL CONVERT_BCD
MOVF R2,W ; Luu cac gia tri r2,r1,r0 vao cac bien s100,s10,s1
MOVWF S100
MOVF R1,W
MOVWF S10
MOVF R0,W
MOVWF S1
MOVF VITRI,W
CALL GOTOLINE1
MOVF S100,W
ADDLW 0x00
BTFSC STATUS,Z
MOVLW 0xE0
ADDLW 0x30
CALL WRITE_TEXT
MOVF S10,W
ADDLW 0x30
CALL WRITE_TEXT
MOVF S1,W
ADDLW 0x30
CALL WRITE_TEXT
RETLW 0x00
CONVERT_BCD ; In W, out: R2,R1,R0 ( hang tram chu, don vi )
MOVWF ACC ; Luu vao trong ACC lam thanh ghi dem
CLRF R0 ; Xoa cac thanh ghi de luu RA DANG gia tri out
CLRF R1
CLRF R2
MOVLW .100
BCD_100 ; Voi so hang chuc
INCF R2,F
SUBWF ACC,F
BTFSC STATUS,C
GOTO BCD_100
DECF R2,F
ADDWF ACC,F
MOVLW .10
BCD_10 ; Voi so hang chuc
INCF R1,F
SUBWF ACC,F
BTFSC STATUS,C
GOTO BCD_10
DECF R1,F
ADDWF ACC,W
MOVWF R0
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
END
( Module ve LCD cac ban tham khao o tren bai viet ve DS1307 )
Việc mổ sẻ các chương trình con ở trên sẽ mất rất nhiều thời gian, chắc tôi ko đủ sức làm được. Thắc mắc chỗ nào mọi người cứ post lên chúng ta cùng giải quyết
Còn một điều nữa chương trình này là bản V1.0 tức là bản đầu tiên, tôi chưa chú trọng đến giao diện hay việc tối ưu code chương trình, Mục đích của các bản V1.0 ở đây là làm sao chay được mà thôi. Với chương trình này các bạn hoàn toàn có thể nâng cấp chỉnh sửa nó lên
Have a good time