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: