Sao không có cao thủ đại hiệp nào biết vậy ta?
Có anh em cao thủ nào biết xin chỉ giúp em với, em có đoạn chương trình ASM sau viết cho 8051 chỉ dùng để chuyển đổi giá trị trong LS BYTE (BYTE 0) và MS BYTE (BYTE 1) trong thanh ghi nhiệt độ trong con ds18s20. Nhưng đi kiếm ds18s20 không có, nên phải dùng ds18b20 mà con này đo nhiệt độ tốt hơn con s20, nhưng chuyển đối giá trị nhiệt độ thì khó hơn. Vì giá trị nhiệt độ còn được ghi thêm trong cả ba bit 8,9,10 trong MS BYTE, không như con ds18s20 chỉ được ghi trong LS BYTE. Để xác định dấu '+' hay '-' thì dễ rồi, nhưng để chuyển đổi phẩn thập phân, phần đơn vị, phần hàng chục thì em không làm được. Ví dụ nhiệt độ mà ds18s20 đo được là +27 độ, nó sẽ ghi vào Byte0= 36 hex và Byte1= 00 hex thì khi thế giá trị byte0 và byte1 vào đoạn chương trình thi ta thu được kết quả là +27 độ. Nhưng đối với ds18b20 là khác hoàn toàn: +27 độ thì tương ứng nó sẽ ghi vào Byte0= B0 hex và Byte1= 01 hex thì khi thế giá trị byte0 và byte1 vào đoạn chương trình thi ta thu được kết quả là -40 độ. Chỉ cần thông qua được chỗ này là coi như xong mạch đo nhiệt độ, mong anh em nào biết chỉ giáo dùm nha, cám ơn rất nhiều..!
;************************************************* ********************************************
;* DECODE_T: chuyen doi gia tri trong BYTE0 va BYTE1 thanh nhiet do tuong ung.
;*
;*
;************************************************* ********************************************
DECODE_T:
;1. xu ly dau
MOV A, BYTE1 ;BYTE1=0, nhiet do duong.
JZ DUONG ;nhay den DUONG neu A=0
AM: MOV DAU,#'-' ;khi nhiet do am, lay bu -2
MOV A, BYTE0
CPL A
INC A
JMP DC_EXT1
DUONG: MOV DAU,#'+'
MOV A, BYTE0
DC_EXT1: NOP
;2. xu ly phan thap phan
CLR C
RRC A ; bit thap phan vao CY
JC TPLE ; nhay den TPLE neu bit thap phan la 1
MOV TPHAN,#0
JMP DC_EXT2
TPLE: MOV TPHAN,#5
DC_EXT2: NOP
;3. xu ly phan nguyen (dang nam trong ACC)
MOV B, #10D
DIV AB
MOV DONVI, B
MOV B,#10D
DIV AB
MOV CHUC, B
MOV TRAM, A
RET
Có anh em cao thủ nào biết xin chỉ giúp em với, em có đoạn chương trình ASM sau viết cho 8051 chỉ dùng để chuyển đổi giá trị trong LS BYTE (BYTE 0) và MS BYTE (BYTE 1) trong thanh ghi nhiệt độ trong con ds18s20. Nhưng đi kiếm ds18s20 không có, nên phải dùng ds18b20 mà con này đo nhiệt độ tốt hơn con s20, nhưng chuyển đối giá trị nhiệt độ thì khó hơn. Vì giá trị nhiệt độ còn được ghi thêm trong cả ba bit 8,9,10 trong MS BYTE, không như con ds18s20 chỉ được ghi trong LS BYTE. Để xác định dấu '+' hay '-' thì dễ rồi, nhưng để chuyển đổi phẩn thập phân, phần đơn vị, phần hàng chục thì em không làm được. Ví dụ nhiệt độ mà ds18s20 đo được là +27 độ, nó sẽ ghi vào Byte0= 36 hex và Byte1= 00 hex thì khi thế giá trị byte0 và byte1 vào đoạn chương trình thi ta thu được kết quả là +27 độ. Nhưng đối với ds18b20 là khác hoàn toàn: +27 độ thì tương ứng nó sẽ ghi vào Byte0= B0 hex và Byte1= 01 hex thì khi thế giá trị byte0 và byte1 vào đoạn chương trình thi ta thu được kết quả là -40 độ. Chỉ cần thông qua được chỗ này là coi như xong mạch đo nhiệt độ, mong anh em nào biết chỉ giáo dùm nha, cám ơn rất nhiều..!
;************************************************* ********************************************
;* DECODE_T: chuyen doi gia tri trong BYTE0 va BYTE1 thanh nhiet do tuong ung.
;*
;*
;************************************************* ********************************************
DECODE_T:
;1. xu ly dau
MOV A, BYTE1 ;BYTE1=0, nhiet do duong.
JZ DUONG ;nhay den DUONG neu A=0
AM: MOV DAU,#'-' ;khi nhiet do am, lay bu -2
MOV A, BYTE0
CPL A
INC A
JMP DC_EXT1
DUONG: MOV DAU,#'+'
MOV A, BYTE0
DC_EXT1: NOP
;2. xu ly phan thap phan
CLR C
RRC A ; bit thap phan vao CY
JC TPLE ; nhay den TPLE neu bit thap phan la 1
MOV TPHAN,#0
JMP DC_EXT2
TPLE: MOV TPHAN,#5
DC_EXT2: NOP
;3. xu ly phan nguyen (dang nam trong ACC)
MOV B, #10D
DIV AB
MOV DONVI, B
MOV B,#10D
DIV AB
MOV CHUC, B
MOV TRAM, A
RET
Comment