Nhập môn đệ tử
Tham gia ngày: Oct 2009
Bài gửi: 2
:
|
giúp em chuơng trình cảm biến LM35 này với
em có đề tài dùng cảm biến dùng pic 16f877a và cảm biến nhiệt độ lm35 đo nhiệt độ hiển thị ra lcd nhưng viết bang mpasm ngôn ngữ này viết phức tạp quá(viết bằng C còn đỡ). em đang bị bí chuơng trình viết ra nhưng khi mô phỏng nó không chạy. không biết nó sai chỗ nào mong các huynh xem dùm em với
billion thanks
Code:
;==========================================================================
; Ten chuong trinh :Mach do nhiet do dung cam bien LM35 hien thi LCD
; Mo ta phan cung : Dung PIC16F628A - thach anh 20MHz
; :cam bien nhiet LM35 mac vao kenh AN0 cua port0
; :LCD giao tiep 8 bit.
; :RS, RW, E mac vao 3 chan RD5, RD6 RD7
;==========================================================================
TITLE "Mach Do Nhiet Dung Cam Bien LM35 Hien Thi LCD.asm"
PROCESSOR P16F877A
INCLUDE <P16F877A.inc>
__CONFIG _CP_OFF & _PWRTE_ON & _XT_OSC &_WDT_OFF & _HS_OSC & _BODEN_OFF & _LVP_OFF & _CPD_OFF
;==========================================================================
CBLOCK 0x020
TRAM
CHUC
DVI
SOBICHIA
SOCHIA
SODU
THUONG
KQCD
ADC
COUNT1
COUNT2
COUNT3
COUNT4
TICH
SONHAN1
SONHAN2
A
ENDC
;===========================================================================
ORG 0x0000
GOTO START
ORG 0x0005
START
BANKSEL TRISA
CLRF TRISB
CLRF TRISD
MOVLW H'FF'
MOVWF TRISA ;portA nhan du lieu ADC
CLRF ADCON1
MOVLW B'11001000'
MOVWF ADCON1
BANKSEL ADCON0
BSF ADCON0, 0 ;bat nguon cho ADC hoat dong
BSF ADCON0, 7 ;chon kenh AN0
BCF ADCON0, 5
BCF ADCON0, 4
BCF ADCON0, 3
CALL KTLCD
CALL DONG1
MAIN
CALL TRANFER_ADC
CALL DELAY40MS
CALL DONG2
CALL DELAY40MS
GOTO MAIN
;===========================================================================
;cac chuong trinh con
;===========================================================================
;--------------------------------------------------------------------------
;chuong trinh con chuyen doi ADC
;--------------------------------------------------------------------------
TRANFER_ADC
CALL DELAY12MS
CALL TRAN ;goi chuong trinh con chuyen doi ADC
MOVF ADRESL, 0
MOVWF KQCD
CALL HEXTOASCII ;giai ma ket qua chuyen doi
RETURN
;--------------------------------------------------------------------------
;chuong trinh con ADC
;--------------------------------------------------------------------------
TRAN
BSF ADCON0, 2 ;set bit go/done cho phep chuyen doi
KT BTFSC ADCON0, 2 ;kiem tra chuyen doi xong chua, chua ve lam tiep
GOTO KT
RETURN
;---------------------------------------------------------------------------
;chuong trinh con chuyen ma hex sang MA LCD
;---------------------------------------------------------------------------
HEXTOASCII
BANKSEL KQCD
MOVF KQCD, 0 ;nhiet do = ADC *100/ 51
MOVWF SONHAN1
MOVLW D'100'
MOVWF SONHAN2
CALL MUL
MOVF TICH, 0
MOVWF SOBICHIA
MOVLW D'51'
MOVWF SOCHIA
CALL DIVITE
MOVF THUONG, 0
MOVWF KQCD
MOVLW D'55'
SUBWF KQCD, 0 ;so sanh ket qua voi 55
BTFSS STATUS, 0 ;so sanh voi co c
GOTO NHIETAM ;co C=0, tuc phep toan co kq <0
GOTO NHIETDUONG ;co C=1, tuc phep toan co kq >0
NHIETAM ;giai ma nhiet do am tu -55 den -1 do C
MOVLW D'45'
MOVWF TRAM ;ma asscii cua dau '-'
MOVF KQCD, 0
SUBLW D'55'
MOVWF SOBICHIA
MOVLW D'10'
MOVWF SOCHIA
CALL DIVITE
MOVF SODU, 0
ADDLW 0x30
MOVWF DVI
MOVF THUONG, 0
ADDLW 0x30
MOVWF CHUC
MOVF CHUC, 0 ;kiem tra hang chuc de xoa so 0 vo nghia
XORLW D'48' ;so sanh voi so 0
BTFSS STATUS, Z
GOTO EXIT ;thoat chuong trinh con neu chuc khac 0
MOVLW D'32' ;neu chuc la 0 thi hien thi khoang trang
MOVWF CHUC
GOTO EXIT
NHIETDUONG
MOVWF SOBICHIA ;sobichia = kqcd - 55
MOVLW D'10'
MOVWF SOCHIA
CALL DIVITE
MOVF SODU, 0
ADDLW 0x30
MOVWF DVI
MOVF THUONG, 0
CALL DIVITE
MOVF SODU, 0
ADDLW D'30'
MOVWF CHUC
MOVF THUONG, 0
ADDLW D'30'
MOVWF TRAM
MOVF TRAM, 0 ;kiem tra hang tram de xoa so 0 vo nghia
XORLW D'48' ;so sanh voi so 0
BTFSS STATUS, Z
GOTO EXIT ;thoat chuong trinh con neu tram khac 0
MOVLW D'32' ;neu tram la 0 thi hien thi khoang trang
MOVWF TRAM
MOVF CHUC, 0 ;kiem tra hang chuc de xoa so 0 vo nghia
XORLW D'48' ;so sanh voi so 0
BTFSS STATUS, Z
GOTO EXIT ;thoat chuong trinh con neu chuc khac 0
MOVLW D'32' ;neu chuc la 0 thi hien thi khoang trang
MOVWF CHUC
GOTO EXIT
EXIT
RETURN
;----------------------------------------------------------------------
;chuong trinh con divide
;----------------------------------------------------------------------
DIVITE
CLRF THUONG
X MOVF SOCHIA, 0
SUBWF SOBICHIA,1 ;W=sodu-sochia, c=1 neu kq>=0 va nguoc lai
BTFSC STATUS, C ;bo qua lenh ke neu c=1, kq duong
GOTO EXIT1 ;thoat khoi chuong trinh con neu kq am
INCF THUONG, 1 ;tang thuong so len 1
MOVF SOBICHIA,0
MOVWF SODU
GOTO X
EXIT1
RETURN
;----------------------------------------------------------------------
;chuong trinh con MUL
;----------------------------------------------------------------------
MUL
CLRF TICH
Y MOVF SONHAN1, 0
ADDWF SONHAN1, 0
MOVWF TICH
DECFSZ SONHAN2, 1
GOTO Y
RETURN
;----------------------------------------------------------------------
;chuong trinh con khoi tao LCD
;----------------------------------------------------------------------
KTLCD
MOVLW 0x38 ;Set 8 bit mode, hien thi 2 hang, kieu ki tu 5x8
MOVWF A
CALL GHIMADK
CALL DELAY40MS
MOVWF A
CALL GHIMADK
CALL DELAY40MS
MOVLW 0X0C
MOVWF A
CALL GHIMADK
CALL DELAY40MS
MOVLW 0X01
MOVWF A
CALL GHIMADK
CALL DELAY40MS
RETURN
GHIMADK
MOVF A,0
MOVWF PORTB
BCF PORTD,0
BCF PORTD,1
BSF PORTD,2
BCF PORTD,2
RETURN
;-----------------------------------------------------------------------
;chuong trinh con hien thi chu dong 1
;-----------------------------------------------------------------------
DONG1
MOVLW 0x80
MOVWF A
CALL GHIMADK
CALL DELAY
CLRF COUNT4
LABEL3
MOVF COUNT4, 0
CALL TABLE2
MOVWF A
CALL GHIDL
CALL DELAY
INCF COUNT4,0
XORLW D'20'
BTFSC STATUS, Z
GOTO EX1
INCF COUNT4,1
GOTO LABEL3
EX1 RETURN
;-----------------------------------------------------------------------
;chuong trinh con ghi nhiet do ra dong 2
;-----------------------------------------------------------------------
DONG2
MOVLW 0xC1 ;ve dau dong thu hai
MOVWF A
CALL GHIMADK
CALL DELAY
L1 MOVF TRAM, 0
MOVWF A
CALL GHIDL
CALL DELAY
MOVF CHUC, 0
MOVWF A
CALL GHIDL
CALL DELAY
MOVF DVI, 0
MOVWF A
CALL GHIDL
CALL DELAY
CLRF COUNT4
LABEL2
MOVF COUNT4, 0
CALL TABLE1
MOVWF A
CALL GHIDL
CALL DELAY40MS
INCF COUNT4, 1
MOVF COUNT4, 0
XORLW D'5'
BTFSS STATUS, Z
GOTO LABEL2
RETURN
;-----------------------------------------------------------------------
;bang ma ki tu cua tabel
;-----------------------------------------------------------------------
TABLE1
ADDWF PCL, 1
DT " DO C"
TABLE2
ADDWF PCL, 1
DT "NHIET DO DO DUOC LA:"
;-----------------------------------------------------------------------
;chuong trinh con ghi ki tu ra LCD
;-----------------------------------------------------------------------
GHIDL
MOVF A,0
MOVWF PORTB
BSF PORTD,0
BCF PORTD,1
BSF PORTD,2
BCF PORTD,2
RETURN
;------------------------------------------------------------------------
;cac chuong trinh con delay
;------------------------------------------------------------------------
DELAY100MS
MOVLW D'100' ;delay 100mS
GOTO D0
DELAY40MS
MOVLW D'50' ;delay 50mS
GOTO D0
DELAY12MS
MOVLW D'12'
GOTO D0
DELAY
MOVLW 0x05 ;delay 5.000 ms (4 MHz clock)
D0
MOVWF COUNT1
D1
MOVLW d'199' ;delay 1mS
MOVWF COUNT2
MOVLW 0x01
MOVWF COUNT3
DELAY_0
DECFSZ COUNT2, 1
GOTO $+2
DECFSZ COUNT3, 1
GOTO DELAY_0
DECFSZ COUNT1, 1
GOTO D1
RETURN
END
đây là mạch mô phỏng proteus
huynh nào xem em sai chỗ nào chi dùm em với. em mới tìm hiểu về pic thôi nên gà lắm. mong các huynh giúp dùm em. chân thành cảm ơn
thay đổi nội dung bởi: phamminhtuan, 12-10-2009 lúc 10:19 AM.
Lý do: Định dạng code
|