⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 temperture.asm

📁 Temperture DS18B20 Assembly
💻 ASM
📖 第 1 页 / 共 2 页
字号:
; ---------------------------------------------------------------------------
; Program: 	" DS18B20"

; Mo ta phan cung:	AT89S52         Crystal 11.0592 MHz
;					
; ---------------------------------------------------------------------------
; Chu thich:
;				BAI TAP LON VI XU LY
; -----------------------------------------------------------------------------
; =======================================================================
; Cac khai bao ban dau
; Cac chan va cong
LCD_DATA        EQU     P0
LCD_E           BIT     P1.2
LCD_RW          BIT     P1.1
LCD_RS          BIT     P1.0
DQ              BIT     P1.3
MODE            BIT     P3.2
UP              BIT     P2.4
DOWN            BIT     P2.5
GREEN_LED	BIT	P3.4
RED_LED		BIT	P3.5

; Cac bien
T_CHUC          EQU     30H
T_DVI           EQU     31H
T_LOW           EQU     32H
T_HIGH          EQU     33H
TH_USER         EQU     34H
TL_USER         EQU     35H
CONFIG          EQU     36H
RESERVED1       EQU     37H
RESERVED2       EQU     38H
RESERVED3       EQU     39H
CRC             EQU     3AH
TEMP1		EQU	3BH
TEMP2		EQU	3CH
TEMP3		EQU	45H
TEMP4		EQU	46H

TEST1		EQU	20H
TEST2		EQU	21H
; Cac bit kiem tra trang thai he thong ( nam o thanh ghi 20h)
DS1		BIT	00H
DS2		BIT	01H
DS3		BIT	02H
DS4		BIT	03H
DS5		BIT	08H
DS6		BIT	09H
DS7		BIT	0AH
DS8		BIT	0BH
BLINK		BIT	10H
;=========================================================================
; Phan than chuong trinh
        ORG     00H
        LJMP    MAIN
	ORG	03H
	LJMP	INT0ISR
        ORG     40H
MAIN:   
        MOV     SP,#80H                ; dua con tro Stack toi vi tri 5Fh
        SETB    EX0                     ; cho phep ngat ngoai 0
        SETB    IT0                     ; ngat theo suon xuong
        SETB    EA                      ; cho phep ngat toan cuc
        SETB	BLINK

        LCALL   LCD_INIT                ; khoi tao LCD
        LCALL   DS_INIT                 ; khoi tao DS18B20
  	MOV	TEMP2,#20   
  	MOV	TEMP1,#20   
MAIN_LOOP:
	CPL	BLINK
	LCALL	CONVERT_DS1		
	LCALL	CONVERT_DS2	
	LCALL	CONVERT_DS3
	LCALL	CONVERT_DS4

	LCALL	DISPLAY	
        LJMP    MAIN_LOOP

;==========================================================================
; CAC HAM SU DUNG TRONG CHUONG TRINH
; Ham cua LCD

; Khoi tao LCD
LCD_INIT:
        MOV     A,#38H        ;init. LCD 2 do`ng, ma tra^.n 5x7 
        LCALL   CSTROBE 
        MOV     A,#0EH        ;LCD on, cursor on
        LCALL   CSTROBE
        MOV     A,#01H        ;clear LCD
        LCALL   CSTROBE
        MOV     A,#06H        ;cursor di.ch pha?i
        LCALL   CSTROBE 
        MOV     A,#80H
        LCALL   CSTROBE
        MOV     DPTR,#MESSAGE1  ; Hien thi dong chu " T1:" o dong 1
        LCALL   SEND2LCD
        MOV	A,#088H
        LCALL	CSTROBE
        MOV	DPTR,#MESSAGE4	; hien thi dong chu " T2:" o dong 2
        LCALL	SEND2LCD
        MOV	A,#0C0H
        LCALL	CSTROBE
        MOV	DPTR,#MESSAGE5	; hien thi dong chu " T3:" o dung 3
        LCALL	SEND2LCD
        MOV	A,#0C8H
        LCALL	CSTROBE
        MOV	DPTR,#MESSAGE6	; hien thi dong chu " T4:" o dung 4
        LCALL	SEND2LCD
   
        RET

; Gui 1 lenh vao LCD
CSTROBE:                      ;command strobe
        ACALL   READY         ;is LCD ready?
        MOV     LCD_DATA,A          ;xua^'t ma~ le^.nh
        CLR     LCD_RS            ;RS=0: le^.nh
        CLR     LCD_RW            ;R/W=0 -> ghi ra LCD
        SETB    LCD_E             ;E=1 -> ta.o ca.nh xuo^'ng
        CLR     LCD_E             ;E=0 ,cho^'t
        RET

; Gui 1 ki tu vao LCD
DSTROBE:                      ;data strobe
        ACALL   READY         ;is LCD ready?
        MOV     LCD_DATA,A    ;xua^'t du+~ lie^.u  
        SETB    LCD_RS        ;RS=1 for data
        CLR     LCD_RW        ;R/W=0 to write to LCD
        SETB    LCD_E         ;E=1 -> tao canh xuong
        CLR     LCD_E         ;E=0, cho^'t 
        RET

; kie^?m tra co+` BF
READY:  SETB    LCD_DATA.7          ;LCD_DATA.7: input
        CLR     LCD_RS            ;RS=0: thanh ghi le^.nh
        SETB    LCD_RW            ;R/W=1: ddo.c
BACK:   CLR     LCD_E             ;E=0 -> ta.o ca.nh le^n
        SETB    LCD_E             ;E=1  
        JB      LCD_DATA.7,BACK     ;cho+` busy flag=0
        RET
        
SEND2LCD:                       ; gui 1 chuoi ki tu den LCD
        CLR     A
        MOVC    A,@A+DPTR
        JZ      EXIT_SEND
        LCALL   DSTROBE
        INC     DPTR
        SJMP    SEND2LCD
EXIT_SEND:
        RET        
;------------------------------------------------------------------------
; Cac ham dung voi DS18B20
OW_RESET:                       ; tao xung reset
        CLR     DQ              ; chan DQ xuong thap bat dau reset
        MOV     R0,#240         ; tre 480us
        DJNZ    R0,$
        SETB    DQ              ; DQ len cao tro lai
        MOV     R0,#35
        DJNZ    R0,$           ; tre 70us
	MOV	C,DQ		; Doc du lieu tu chan DQ
        MOV     R0,#240
        DJNZ    R0,$            ; tre 480us
        SETB	DQ
        RET


READ_BIT:                       ; doc tung bit o chan DQ, ket qua C=DQ
        CLR     DQ              ; chan DQ xuong thap bat dau timeslot
        NOP
        SETB    DQ              ; chan DQ len cao de doc du lieu
        NOP
        NOP
        NOP
        NOP
        NOP
        MOV     C,DQ
        MOV     R0,#27          ; tre khoang 60us de het timeslot
        DJNZ    R0,$
        SETB    DQ
        RET
        
WRITE_BIT:                      ; ghi tung bit ra DQ, du lieu lay tu co C
        CLR     DQ              ; DQ xuong thap bat dau timeslot
        NOP
        NOP
        MOV     DQ,C
EXIT_WRITEBIT:
        MOV     R0,#30          ; tre khoang 60us
        DJNZ    R0,$
        SETB    DQ
        RET

READ_BYTE:                      ; doc 1 byte tu duong truyen, KQ luu vao thanh ghi A
        MOV     R1,#8           ; vong lap 8 lan
READ_LOOP:
        LCALL   READ_BIT        ; doc tung bit
        RRC     A               ; dich phai dua tung bit vao thanh ghi A
        DJNZ    R1,READ_LOOP    ; lap 8 lan du 1 byte
        RET

WRITE_BYTE:                     ; ghi 1 byte len duong truyen, DL lay tu thanh ghi A
        MOV     R1,#8           ; vong lap 8 lan
WRITE_LOOP:
        RRC     A               ; dich phai tung bit vao co C
        LCALL   WRITE_BIT       ; dua ra chan DQ
        DJNZ    R1,WRITE_LOOP   ; lap 8 lan
        RET

DS_INIT:			; Khoi tao cac IC DS18B20
	LCALL	MATCH_DS1	; truy cap IC DS18B20, doc cac gia tri TH,TL
        MOV     A,#0BEH   	
        LCALL   WRITE_BYTE	; read scratchpad
        LCALL   READ_BYTE
        MOV     T_LOW,A         ; doc LSB
        LCALL   READ_BYTE
        MOV     T_HIGH,A        ; doc MSB
        LCALL   READ_BYTE	
        MOV     TH_USER,A	; doc TH_USER
        LCALL   READ_BYTE
        MOV     TL_USER,A	; doc TL_USER;
        LCALL   OW_RESET        ; reset pulse
        
; ghi gia tri TH,TL vua doc va thanh ghi config vao ca 3 IC DS18B20
	LCALL	MATCH_DS1
	MOV	A,#4EH		; write Scratchpad
	LCALL	WRITE_BYTE
	MOV	A,TH_USER	
	LCALL	WRITE_BYTE	
	MOV	A,TL_USER	
	LCALL	WRITE_BYTE
	MOV	A,#00H		
	LCALL	WRITE_BYTE        

	LCALL	MATCH_DS1
	MOV	A,#48H		; copy scratchpad
	LCALL	DELAY10MS
	
	RET 	
CONVERT_DS1:			; doc gia tri nhiet do DS18B20 thu1 ( ma 28E5A8C6000000E1H - 0549C23-318AB)
			; ket qua luu vao bien TEMP1
	LCALL	MATCH_DS1	; truy cap vao DS18B20 thuq1
	MOV	A,#44h	
	LCALL	WRITE_BYTE	; convertT
	
	LCALL	DELAY100MS	; tre 100ms de convert	
	
	LCALL	OW_RESET	; reset pulse
	MOV	A,#55H		; match ROM
	LCALL	WRITE_BYTE
	
	LCALL	MATCH_DS1	; truy cap vao DS18B20 thu 1
	LCALL	CONVERT
	MOV	TEMP1,A 	; chuyen gia tri do duoc vao thanh ghi TEMP1
	
	RET
	
CONVERT_DS2:			; doc gia tri nhiet do DS18B20 thu2 ( ma 288077BF000000C3H-0539C2+020AE);
				; ket qua luu vao bien TEMP1
	LCALL	MATCH_DS2	; truy cap vao DS18B20 thu2
	MOV	A,#44h	
	LCALL	WRITE_BYTE	; convertT
	
	LCALL	DELAY100MS	; tre 100ms de convert	
	
	LCALL	MATCH_DS2
	LCALL	CONVERT
	MOV	TEMP2,A 	; chuyen gia tri do duoc vao thanh ghi TEMP1
	
	RET

CONVERT_DS3:			; doc gia tri nhiet do DS18B20 thu3 ( ma 28706B3100000020H-0132R0628AG);
				; ket qua luu vao bien TEMP3
	LCALL	MATCH_DS3	; truy cap vao DS18B20 thu 3
	MOV	A,#44h	
	LCALL	WRITE_BYTE	; convertT
	
	LCALL	DELAY100MS	; tre 100ms de convert	
	
	LCALL	MATCH_DS3	; truy cap vao DS18B20 thu 3
	LCALL	CONVERT
	MOV	TEMP3,A 	; chuyen gia tri do duoc vao thanh ghi TEMP1
		
	RET

CONVERT_DS4:			; doc gia tri nhiet do DS18B20 thu4 ( ma 28A47131000000F9H-0132B6628AG);
				; ket qua luu vao bien TEMP4
	LCALL	MATCH_DS4	; truy cap vao DS18B20 thu 4
	MOV	A,#44h	
	LCALL	WRITE_BYTE	; convertT
	
	LCALL	DELAY100MS	; tre 100ms de convert	
	
	LCALL	MATCH_DS4	; truy cap vao DS18B20 thu 4
	LCALL	CONVERT
	MOV	TEMP4,A 	; chuyen gia tri do duoc vao thanh ghi TEMP1
	
	RET	

MATCH_DS1:
	LCALL	OW_RESET
	MOV	A,#55H		; match ROM
	LCALL	WRITE_BYTE
	
	MOV	A,#28h		; Family code
	LCALL	WRITE_BYTE
	MOV	A,#0E5H
	LCALL	WRITE_BYTE
	MOV	A,#0A8H
	LCALL	WRITE_BYTE
	MOV	A,#0C6H
	LCALL	WRITE_BYTE
	MOV	A,#00H   
	LCALL	WRITE_BYTE
	MOV	A,#00H
	LCALL	WRITE_BYTE
	MOV	A,#00H; serial code
	LCALL	WRITE_BYTE
	MOV	A,#0E1H
	LCALL	WRITE_BYTE	; CRC check	
	RET
MATCH_DS2:
	LCALL	OW_RESET
	MOV	A,#55H		; match ROM
	LCALL	WRITE_BYTE
	
	MOV	A,#28h		; Family code
	LCALL	WRITE_BYTE
	MOV	A,#80H
	LCALL	WRITE_BYTE
	MOV	A,#77H
	LCALL	WRITE_BYTE
	MOV	A,#0BFH
	LCALL	WRITE_BYTE
	MOV	A,#00H   
	LCALL	WRITE_BYTE
	MOV	A,#00H
	LCALL	WRITE_BYTE
	MOV	A,#00H; serial code
	LCALL	WRITE_BYTE
	MOV	A,#0C3H
	LCALL	WRITE_BYTE	; CRC check
	RET	

MATCH_DS3:
	LCALL	OW_RESET
	MOV	A,#55H		; match ROM
	LCALL	WRITE_BYTE
	
	MOV	A,#28h		; Family code
	LCALL	WRITE_BYTE
	MOV	A,#70H
	LCALL	WRITE_BYTE
	MOV	A,#6BH
	LCALL	WRITE_BYTE
	MOV	A,#31H
	LCALL	WRITE_BYTE
	MOV	A,#00H   
	LCALL	WRITE_BYTE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -