View Single Post
Old 29-07-2007, 01:35 AM   #1
phamthanhkhuyen
Đệ tử 1 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 25
:
TẠI SAO doạn chương trình này không thể viết gọn lại

Đây là đoạn chương trình con nằm trong chương trình ngắt Timer0 ;pic6f877a




Code:
;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

thay đổi nội dung bởi: phamthanhkhuyen, 29-07-2007 lúc 01:47 AM.
phamthanhkhuyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn