em đang làm 1 cái mạch đo nhiệt độ bằng 8051 em mô phỏng thì chạy nhưng làm mạch thật lại ko chạy mới tức chứ, nhiệt độ cứ hiển thị 95, nhiệt độ gì mà 95 => có mà thành người nướng
đây là mạch:
con đây là code:
#include <sfr51.inc>
ORG 000H
RD_ADC BIT P3.0
WR_ADC BIT P3.1
INTR BIT P3.2
#define LED1 P0
#define LED2 P2
#define ADC P1
LJMP BEGIN
BEGIN:
CLR WR_ADC ; Yêu cầu ADC chuyển đổi
SETB WR_ADC
WAIT:
JB INTR,WAIT ; Đợi ADC chuyển đổi(ADC chưyển đổi
; xong thì INTR=0)
CLR RD_ADC ;Yêu cầu ADC đọc dữ liệu từ thanh ghi
;của nó ra các đầu ra dữ liệu
SETB RD_ADC ;Chuẩn bị cho lần chuyển đổi tiếp theo
; của ADC
MOV A,ADC ; Đọc dữ liệu từ ADC vào thanh ghi A của
; VĐK
MOV B,#10
DIV AB ;Chia thanh ghi A cho thanh ghi B, thương chứa
;trong thanh ghi A, số dư chứa trong thanh ghi B
LCALL CHUYENMA ;Chuyển mã chữ số hàng chục
MOV LED1,A
MOV A,B
LCALL CHUYENMA ; chuyển mã chữ số hang đơn vị
MOV LED2,A
LCALL DELAY1S ;gọi hàm trễ để tạo thời gian trễ giữa hai lần
; hiển thị
SJMP BEGIN
DELAY1S:
MOV R1,#10
LOOP1:
MOV R2,#100
LOOP2:
MOV R3, #100
LOOP3:
NOP
NOP
NOP
NOP
DJNZ R3,LOOP3
DJNZ R2,LOOP2
DJNZ R1,LOOP1
RET
CHUYENMA: ; Hàm chuyển mã hiển thị
CJNE A,#00H,SO1
MOV A,#C0H
SJMP EXIT
SO1:
CJNE A,#01H,SO2
MOV A,#F9H
SJMP EXIT
SO2:
CJNE A,#02H,SO3
MOV A,#A4H
SJMP EXIT
SO3:
CJNE A,#03H,SO4
MOV A,#B0H
SJMP EXIT
SO4:
CJNE A,#04H,SO5
MOV A,#99H
SJMP EXIT
SO5:
CJNE A,#05H,SO6
MOV A,#92H
SJMP EXIT
SO6:
CJNE A,#06H,SO7
MOV A,#82H
SJMP EXIT
SO7:
CJNE A,#07H,SO8
MOV A,#F8H
SJMP EXIT
SO8:
CJNE A,#08H,SO9
MOV A,#80H
SJMP EXIT
SO9:
MOV A,#10H
EXIT:
RET
END.
đây là mạch:
con đây là code:
#include <sfr51.inc>
ORG 000H
RD_ADC BIT P3.0
WR_ADC BIT P3.1
INTR BIT P3.2
#define LED1 P0
#define LED2 P2
#define ADC P1
LJMP BEGIN
BEGIN:
CLR WR_ADC ; Yêu cầu ADC chuyển đổi
SETB WR_ADC
WAIT:
JB INTR,WAIT ; Đợi ADC chuyển đổi(ADC chưyển đổi
; xong thì INTR=0)
CLR RD_ADC ;Yêu cầu ADC đọc dữ liệu từ thanh ghi
;của nó ra các đầu ra dữ liệu
SETB RD_ADC ;Chuẩn bị cho lần chuyển đổi tiếp theo
; của ADC
MOV A,ADC ; Đọc dữ liệu từ ADC vào thanh ghi A của
; VĐK
MOV B,#10
DIV AB ;Chia thanh ghi A cho thanh ghi B, thương chứa
;trong thanh ghi A, số dư chứa trong thanh ghi B
LCALL CHUYENMA ;Chuyển mã chữ số hàng chục
MOV LED1,A
MOV A,B
LCALL CHUYENMA ; chuyển mã chữ số hang đơn vị
MOV LED2,A
LCALL DELAY1S ;gọi hàm trễ để tạo thời gian trễ giữa hai lần
; hiển thị
SJMP BEGIN
DELAY1S:
MOV R1,#10
LOOP1:
MOV R2,#100
LOOP2:
MOV R3, #100
LOOP3:
NOP
NOP
NOP
NOP
DJNZ R3,LOOP3
DJNZ R2,LOOP2
DJNZ R1,LOOP1
RET
CHUYENMA: ; Hàm chuyển mã hiển thị
CJNE A,#00H,SO1
MOV A,#C0H
SJMP EXIT
SO1:
CJNE A,#01H,SO2
MOV A,#F9H
SJMP EXIT
SO2:
CJNE A,#02H,SO3
MOV A,#A4H
SJMP EXIT
SO3:
CJNE A,#03H,SO4
MOV A,#B0H
SJMP EXIT
SO4:
CJNE A,#04H,SO5
MOV A,#99H
SJMP EXIT
SO5:
CJNE A,#05H,SO6
MOV A,#92H
SJMP EXIT
SO6:
CJNE A,#06H,SO7
MOV A,#82H
SJMP EXIT
SO7:
CJNE A,#07H,SO8
MOV A,#F8H
SJMP EXIT
SO8:
CJNE A,#08H,SO9
MOV A,#80H
SJMP EXIT
SO9:
MOV A,#10H
EXIT:
RET
END.
Comment