Hi, I'm doing temperature meter project.
Main components: 89V51RD2, ADC0804, LM35
I have written below code in assembly language. LCD is working fine. But I'm unable to get correct temperature display. Please check below code and help me finding error asap .
FYI Chip select pin is connected to VCC
Main components: 89V51RD2, ADC0804, LM35
I have written below code in assembly language. LCD is working fine. But I'm unable to get correct temperature display. Please check below code and help me finding error asap .
Rich (BB code):
THRESHOLD EQU 40H
RDT EQU P2.7
WRT EQU P2.6
INTR EQU P2.5
ADC_DATA EQU P0
RS EQU P3.2
RW EQU P3.3
EN EQU P3.4
LCD_DATA EQU P1
LED EQU P2.3
FAN EQU P2.2
BUZZER EQU P2.4
ORG 0000H
MOV SP,#90H
LCALL LCD_INITIALISE
MOV THRESHOLD,#65
MOV P0,#0FFH
MOV P1,#00H
SETB INTR
CLR BUZZER
CLR FAN
CLR LED
LCALL TEMP
MAIN:
CLR BUZZER
CLR FAN
CLR LED
LCALL READ_ADC
MOV R6,A
LCALL CONVERT
LCALL DISPLAY_TEMP
MOV A,R6
CLR C
SUBB A,THRESHOLD
JC FON
JMP MAIN
FON:
LCALL DISPLAY
SETB LED
SETB FAN
SETB BUZZER
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
SETB INTR
SETB RDT
NOP
CLR WRT
NOP
SETB WRT
BACK:
JNB INTR,BACK
CLR RDT
NOP
NOP
NOP
MOV A,ADC_DATA
NOP
SETB RDT
NOP
CLR C
SUBB A,THRESHOLD
JNC FON
CLR BUZZER
CLR FAN
CLR LED
LCALL DELAY
JMP MAIN
LCD_INITIALISE:
MOV A,#38H
LCALL COMM
MOV A,#0CH
LCALL COMM
MOV A,#01H
LCALL COMM
MOV A,#06H
LCALL COMM
MOV A,#84H
LCALL COMM
MOV A,#'W'
LCALL DAT
MOV A,#'E'
LCALL DAT
MOV A,#'L'
LCALL DAT
MOV A,#'C'
LCALL DAT
MOV A,#'O'
LCALL DAT
MOV A,#'M'
LCALL DAT
MOV A,#'E'
LCALL DAT
MOV A,#'!'
LCALL DAT
MOV A,#'!'
LCALL DAT
LCALL DELAY
LCALL DELAY
LCALL DELAY
RET
TEMP:
MOV A,#01H
LCALL COMM
MOV A,#80H
LCALL COMM
MOV A,#'T'
LCALL DAT
MOV A,#'E'
LCALL DAT
MOV A,#'M'
LCALL DAT
MOV A,#'P'
LCALL DAT
MOV A,#'E'
LCALL DAT
MOV A,#'R'
LCALL DAT
MOV A,#'A'
LCALL DAT
MOV A,#'T'
LCALL DAT
MOV A,#'U'
LCALL DAT
MOV A,#'R'
LCALL DAT
MOV A,#'E'
LCALL DAT
RET
READ_ADC:
SETB RDT
NOP
CLR WRT
NOP
SETB WRT
HERE:
JB INTR,HERE
CLR RDT
NOP
NOP
NOP
MOV A,ADC_DATA
NOP
SETB RDT
NOP
RET
CONVERT:
MOV B,#10
DIV AB
MOV R0,B
MOV B,#10
DIV AB
MOV R1,B
MOV A,R1
ORL A,#30H
MOV R4,A
MOV A,R0
ORL A,#30H
MOV R5,A
RET
DISPLAY_TEMP:
MOV A,#8CH
LCALL COMM
MOV A,R4
LCALL DAT
MOV A,R5
LCALL DAT
MOV A,#' '
LCALL DAT
MOV A,#'C'
LCALL DAT
RET
DISPLAY:
MOV A,#01H
LCALL COMM
MOV A,#82H
LCALL COMM
MOV A,#'T'
LCALL DAT
MOV A,#'E'
LCALL DAT
MOV A,#'M'
LCALL DAT
MOV A,#'P'
LCALL DAT
MOV A,#'E'
LCALL DAT
MOV A,#'R'
LCALL DAT
MOV A,#'A'
LCALL DAT
MOV A,#'T'
LCALL DAT
MOV A,#'U'
LCALL DAT
MOV A,#'R'
LCALL DAT
MOV A,#'E'
LCALL DAT
MOV A,#01H
LCALL COMM
MOV A,#82H
LCALL COMM
MOV A,#'E'
LCALL DAT
MOV A,#'X'
LCALL DAT
MOV A,#'C'
LCALL DAT
MOV A,#'E'
LCALL DAT
MOV A,#'E'
LCALL DAT
MOV A,#'D'
LCALL DAT
MOV A,#'E'
LCALL DAT
MOV A,#'D'
LCALL DAT
MOV A,#'!'
LCALL DAT
MOV A,#'!'
LCALL DAT
MOV A,#'!'
LCALL DAT
RET
COMM:
MOV LCD_DATA,A
CLR RS
CLR RW
SETB EN
NOP
CLR EN
LCALL DELAY
RET
DAT:
MOV LCD_DATA,A
SETB RS
CLR RW
SETB EN
NOP
CLR EN
LCALL DELAY
RET
DELAY:
MOV R2,#255
HERE2:
MOV R3,#250
HERE1:
DJNZ R3,HERE1
DJNZ R2,HERE2
RET
END
Last edited: