phamthanhkhuyen
29-07-2007, 01:35 AM
Đây là đoạn chương trình con nằm trong chương trình ngắt Timer0 ;pic6f877a
;phần khai báo biến
CBLOCK 0X20
;DIGIx : là các con số BCD nén
DIGI1 ;4 BIT CAO =NHIETmax_DONVI 4 BIT THẤP=NHIETdoduoc_DONVI
DIGI2 ;4 BIT CAO =NHIETmax_CHUC 4 BIT THẤP=NHIETdoduoc_CHUC
DIGI3 ;4 BIT CAO =NHIETmax_TRAM 4 BIT THẤP=NHIETdoduoc_TRAM
.......
ENDC
........
;chương trình so sánh khi Nhiệt đo được < Nhiệt max --->on_relay
;khi : Nhiệt đo được >= Nhiệt max --->off_relay
;XAC DINH VI TRI LED TRAM
MOVLW 0X22
MOVWF FSR
SO_SANH
;XAC DINH POINT_OFF TRAM: ;NHIETmax DUOC THIET LAP DO THAO TAC BAN PHIM
MOVLW B'11110000' ;NHIETmax : NAM TRONG 4 BIT CAO
ANDWF INDF, W ;NHIETdoduoc: NAM TRONG 4 BIT THAP
MOVWF POINT_ONOFF ;POINT_ONOFF = NHIETmax
SWAPF POINT_ONOFF, F
;LUU Y :NEU POINT_ONOFF=15 THI XOA
;POINT_ONOFF=<9:0> chỉ =15 khi tắt sự hiển thị
POINT_ONOFF=0
MOVLW 0X0F
XORWF POINT_ONOFF, W
BTFSC STATUS, Z
CLRF POINT_ONOFF
MOVLW B'00001111'
ANDWF INDF, W ;NHIETdoduoc = 4 BIT THAP
SUBWF POINT_ONOFF, W ;POINT_ONOFF - NHIETdoduoc
BTFSS STATUS, C
GOTO OFF_RELAY ;C=0 POINT_ONOFF < NHIETdoduoc
;C=1 POINT_ONOFF >= NHIETdoduoc
BTFSS STATUS, Z ;NEU : NHIETdoduoc = POINT_ONOFF THI Z=1
GOTO ON_RELAY ;POINT_ONOFF > NHIETdoduoc
;THOAT RA TIEP TUC XET LED CAP DUOI
DECF FSR, F
;XAC DINH POINT_OFF CHUC : ;NHIETmax DUOC THIET LAP DO THAO TAC BAN PHIM
MOVLW B'11110000' ;NHIETmax : NAM TRONG 4 BIT CAO
ANDWF INDF, W ;NHIETdoduoc: NAM TRONG 4 BIT THAP
MOVWF POINT_ONOFF ;POINT_ONOFF = NHIETmax
SWAPF POINT_ONOFF, F
;LUU Y :NEU POINT_ONOFF=15 THI XOA--> POINT_ONOFF=0
MOVLW 0X0F
XORWF POINT_ONOFF, W
BTFSC STATUS, Z
CLRF POINT_ONOFF
MOVLW B'00001111'
ANDWF INDF, W ;NHIETdoduoc = 4 BIT THAP
SUBWF POINT_ONOFF, W ;POINT_ONOFF - NHIETdoduoc
BTFSS STATUS, C
GOTO OFF_RELAY ;C=0 POINT_ONOFF < NHIETdoduoc
;C=1 POINT_ONOFF >= NHIETdoduoc
BTFSS STATUS, Z ;NEU : NHIETdoduoc = POINT_ONOFF THI Z=1
GOTO ON_RELAY ;POINT_ONOFF > NHIETdoduoc
;THOAT RA TIEP TUC XET LED CAP DUOI
DECF FSR, F
;XAC DINH POINT_OFF DONVI : ;NHIETmax DUOC THIET LAP DO THAO TAC BAN PHIM
MOVLW B'11110000' ;NHIETmax : NAM TRONG 4 BIT CAO
ANDWF INDF, W ;NHIETdoduoc: NAM TRONG 4 BIT THAP
MOVWF POINT_ONOFF ;POINT_ONOFF = NHIETmax
SWAPF POINT_ONOFF, F
;LUU Y :NEU POINT_ONOFF=15 THI XOA POINT_ONOFF=0
MOVLW 0X0F
XORWF POINT_ONOFF, W
BTFSC STATUS, Z
CLRF POINT_ONOFF
MOVLW B'00001111'
ANDWF INDF, W ;NHIETdoduoc = 4 BIT THAP
SUBWF POINT_ONOFF, W ;POINT_ONOFF - NHIETdoduoc
BTFSS STATUS, C
GOTO OFF_RELAY ;C=0 POINT_ONOFF < NHIETdoduoc
;C=1 POINT_ONOFF >= NHIETdoduoc
BTFSS STATUS, Z ;NEU : NHIETdoduoc = POINT_ONOFF THI Z=1
GOTO ON_RELAY ;POINT_ONOFF > NHIETdoduoc
;THOAT RA TIEP TUC XET LED CAP DUOI
;---------------------------------------
ON_RELAY
....
GOTO EXIT_RELAY
OFF_RELAY
....
EXIT_RELAY RETURN
;phần khai báo biến
CBLOCK 0X20
;DIGIx : là các con số BCD nén
DIGI1 ;4 BIT CAO =NHIETmax_DONVI 4 BIT THẤP=NHIETdoduoc_DONVI
DIGI2 ;4 BIT CAO =NHIETmax_CHUC 4 BIT THẤP=NHIETdoduoc_CHUC
DIGI3 ;4 BIT CAO =NHIETmax_TRAM 4 BIT THẤP=NHIETdoduoc_TRAM
.......
ENDC
........
;chương trình so sánh khi Nhiệt đo được < Nhiệt max --->on_relay
;khi : Nhiệt đo được >= Nhiệt max --->off_relay
;XAC DINH VI TRI LED TRAM
MOVLW 0X22
MOVWF FSR
SO_SANH
;XAC DINH POINT_OFF TRAM: ;NHIETmax DUOC THIET LAP DO THAO TAC BAN PHIM
MOVLW B'11110000' ;NHIETmax : NAM TRONG 4 BIT CAO
ANDWF INDF, W ;NHIETdoduoc: NAM TRONG 4 BIT THAP
MOVWF POINT_ONOFF ;POINT_ONOFF = NHIETmax
SWAPF POINT_ONOFF, F
;LUU Y :NEU POINT_ONOFF=15 THI XOA
;POINT_ONOFF=<9:0> chỉ =15 khi tắt sự hiển thị
POINT_ONOFF=0
MOVLW 0X0F
XORWF POINT_ONOFF, W
BTFSC STATUS, Z
CLRF POINT_ONOFF
MOVLW B'00001111'
ANDWF INDF, W ;NHIETdoduoc = 4 BIT THAP
SUBWF POINT_ONOFF, W ;POINT_ONOFF - NHIETdoduoc
BTFSS STATUS, C
GOTO OFF_RELAY ;C=0 POINT_ONOFF < NHIETdoduoc
;C=1 POINT_ONOFF >= NHIETdoduoc
BTFSS STATUS, Z ;NEU : NHIETdoduoc = POINT_ONOFF THI Z=1
GOTO ON_RELAY ;POINT_ONOFF > NHIETdoduoc
;THOAT RA TIEP TUC XET LED CAP DUOI
DECF FSR, F
;XAC DINH POINT_OFF CHUC : ;NHIETmax DUOC THIET LAP DO THAO TAC BAN PHIM
MOVLW B'11110000' ;NHIETmax : NAM TRONG 4 BIT CAO
ANDWF INDF, W ;NHIETdoduoc: NAM TRONG 4 BIT THAP
MOVWF POINT_ONOFF ;POINT_ONOFF = NHIETmax
SWAPF POINT_ONOFF, F
;LUU Y :NEU POINT_ONOFF=15 THI XOA--> POINT_ONOFF=0
MOVLW 0X0F
XORWF POINT_ONOFF, W
BTFSC STATUS, Z
CLRF POINT_ONOFF
MOVLW B'00001111'
ANDWF INDF, W ;NHIETdoduoc = 4 BIT THAP
SUBWF POINT_ONOFF, W ;POINT_ONOFF - NHIETdoduoc
BTFSS STATUS, C
GOTO OFF_RELAY ;C=0 POINT_ONOFF < NHIETdoduoc
;C=1 POINT_ONOFF >= NHIETdoduoc
BTFSS STATUS, Z ;NEU : NHIETdoduoc = POINT_ONOFF THI Z=1
GOTO ON_RELAY ;POINT_ONOFF > NHIETdoduoc
;THOAT RA TIEP TUC XET LED CAP DUOI
DECF FSR, F
;XAC DINH POINT_OFF DONVI : ;NHIETmax DUOC THIET LAP DO THAO TAC BAN PHIM
MOVLW B'11110000' ;NHIETmax : NAM TRONG 4 BIT CAO
ANDWF INDF, W ;NHIETdoduoc: NAM TRONG 4 BIT THAP
MOVWF POINT_ONOFF ;POINT_ONOFF = NHIETmax
SWAPF POINT_ONOFF, F
;LUU Y :NEU POINT_ONOFF=15 THI XOA POINT_ONOFF=0
MOVLW 0X0F
XORWF POINT_ONOFF, W
BTFSC STATUS, Z
CLRF POINT_ONOFF
MOVLW B'00001111'
ANDWF INDF, W ;NHIETdoduoc = 4 BIT THAP
SUBWF POINT_ONOFF, W ;POINT_ONOFF - NHIETdoduoc
BTFSS STATUS, C
GOTO OFF_RELAY ;C=0 POINT_ONOFF < NHIETdoduoc
;C=1 POINT_ONOFF >= NHIETdoduoc
BTFSS STATUS, Z ;NEU : NHIETdoduoc = POINT_ONOFF THI Z=1
GOTO ON_RELAY ;POINT_ONOFF > NHIETdoduoc
;THOAT RA TIEP TUC XET LED CAP DUOI
;---------------------------------------
ON_RELAY
....
GOTO EXIT_RELAY
OFF_RELAY
....
EXIT_RELAY RETURN