#INCLUDE "p16f887.inc"
; config 0xE0F7
CONFIG _CONFIG1, _FOSC_EXTRC_CLKOUT & _WDTE_OFF & _PWRTE_OFF & _MCLRE_ON & _CP_OFF & _CPD_OFF & _BOREN_OFF & _IESO_OFF & _FCMEN_OFF & _LVP_OFF
; CONFIG2
; config 0xFFFF
CONFIG _CONFIG2, _BOR4V_BOR40V & _WRT_OFF
; -khai bao
bien -cblock 0x20
nhietdo tam0
dem
adc_value
adc
bat
den
so
dv
hc
tram
tam
d0
d1
d2 d3 endc
ORG 0x00 ;
goto start ;
;************************************************************************************
; -bat dau chuong trinh o day - start
;cai dat ngo vao ngo ra
banksel TRISB ; chon bank chua thanh ghi TRISB
clrf TRISB ; PortB la output
movlw B'00000001'
movwf TRISA ; chan RA0 input
clrf TRISD
banksel PORTA
clrf PORTA
clrf PORTB
clrf PORTD
; chon loai ngo vao AI hay DI
banksel ANSEL ; chon bank chua thanh ghi ANSEL
movlw B'00000001' ; AN0 la analog
movwf ANSEL ; tat cac cac kenh con lai
clrf ANSELH ; la digital
banksel PORTB
; -khai bao chuyen doi
banksel ADCON1 ; chon bank chua thanh ghi ADCON1
movlw 0x80
movwf ADCON1
banksel ADCON0 ; chon bank chua ADCON0
movlw B'10000001' ; tan so xung doi Fosc/32,
movwf ADCON0 ; RA0 duoc su cho chuyen doi
; chuyen doi AD duoc bat/cho phep
; -chuong trinh
chinh -main
call docADC; cap nhat gia tri moi, tach so cho hien thi
call check_alarm ; kiem tra nhiet do cho phep va bat/tat canh bao (den, coi bao) call tachso
call hienthi ;chuong trinh co nhien thi nhiet do ra led 7 doan
call Delay2s
Trang 2exit_main
goto main
; -;=====================================================================================
; -cac chuong trinh con -hienthi; chuong trinh con hien thi nhiet do LED7 doan: XY0C
clrf PORTD
movfw hc ; hien thi hang chuc
call bangma
movwf PORTD
bcf PORTB,4 ; bat led hang chuc
call delay
bsf PORTB,4 ; tat led hang chuc
movfw dv ; hien thi hang don vi
movwf PORTD
bcf PORTB,5 ;bat led hang don vi
call delay
bsf PORTB,5 ;bat led hang don vi
movlw 0x9C ; hien thi ki hieu do "0"
movwf PORTD
bcf PORTB,6 ;bat led do
call delay
bsf PORTB,6 ; tat led
movlw 0xC6 ; hien thi chu "C"
movwf PORTD
bcf PORTB,7 ;bat led hang
call delay
bsf PORTB,7 ;bat led hang
call delay
return
; -chuong trinh2: doc adc : tra ve gia tri : "adc_tam"
-docADC ; doc gia tri adc va luu vao bien adc_value
nop
bsf ADCON0,1 ; batdau chuyen doi adc
btfsc ADCON0,1 ; chuyen doi xong ?
goto $-1 ; chua xong ==1,kiem tra lai
banksel TRISB ; chon bank1
movf ADRESL,0 ; byte thap la ket qua
; copied to W
banksel PORTB ; chon bank2
movwf adc_value ; luu ket qua vao bien : adc_value
bcf STATUS,C
rrf adc_value,0 ; w = adc_value/2 = nhiet do
bcf STATUS,C
movwf so ; so = w
movlw d'1' ; cai phan la ta tru di 1 cho hien
subwf so,1 ; thi dung thoi
return
tachso ; tach nhiet do thanh 2 so BCD de hien thi LED 7 doan
clrf dv
clrf hc
tru
movlw d'10'
subwf so,f
btfsc STATUS,C
goto sai0
goto dung0
sai0 incf hc,f
goto tru
Trang 3dung0
movlw d'10'
addwf so,w
movwf dv
return
; -chuong trinh 1: ham kiem tra va bao
chay -check_alarm ; kiem tra nhiet do cho phep va bat/tat canh bao (den, coi bao)
; banksel PORTB
movf adc_value,0 ; gan w = adc_value
sublw d'82' ; w = w-70
btfsc STATUS,C ; c == 0 ?
goto tatbd ; c = 1 : w < 82 hay nhiet do < 35oC goto batbd ; c = 0 : w > 82 hay nhiet do lon hon 35oC tatbd bcf PORTB,0
bsf PORTB,1
goto exit_check
batbd bsf PORTB,0
bcf PORTB,1
exit_check
return
; -chuong trinh 4:
delay -Delay
movlw 0x09
movwf d0
Delay_0
decfsz d0, f
goto Delay_0
return
; -Delay2s
movlw 0x5A
movwf d1
movlw 0xCD
movwf d2
movlw 0x16
movwf d3
Delay_2
decfsz d1, f
goto $+2
decfsz d2, f
goto $+2
decfsz d3, f
goto Delay_0
nop
return
bangma
addwf PCL,f
retlw 0xc0
retlw 0xf9
retlw 0xa4
retlw 0xb0
retlw 0x99
retlw 0x92
retlw 0x82
retlw 0xf8
retlw 0x80
retlw 0x90
end