PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > PIC - Thiết kế và Ứng dụng

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

PIC - Thiết kế và Ứng dụng Ý tưởng cho các sản phẩm sử dụng PIC/dsPIC và các sản phẩm của Microchip

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 09-06-2007, 12:07 PM   #2
phamthanhkhuyen
Đệ tử 1 túi
 
Tham gia ngày: Nov 2006
Bài gửi: 25
:
ADC_18F877A tại sao ...

tôi thử viết đoạn chương trình sau với pic877a không hiểu sao khi đọc kết quả thi nhiệt độ nó tăng với mứt là 64 chẳng hạn:
32 96 160 224 288 chứ nó không tăng theo từng độ 32 33 34 35 36 ...
sau đây là code:

Code:
;***********************************************************************
;CHUONG TRINH DO NHIET DO VOI PIC16F877a+LM35
;***********************************************************************
;Nguoi thuc hien : PHAM THANH KHUYEN
;Ngay thuc hien :	26/05/2007
;FREQUENCY: 20MHz
;OSCILLATOR: XT
;PROCESSOR:	PIC16F877A
;WACHTDOD :	OFF
;DIVECE:LM35
;-----------------------------------------------------------------------
;IC pocessor PIC16f877a voi 5 ngo vao ADC & Vref+ :
		;AN0,AN1,AN2,Vref+,AN4,AN5	ung voi bo 3BIT <PCFG3:PCFG0><1010>
		;RA0,RA1,RA2,RA3  ,RA5,RE0	 la cac chan cua PORT tuong ung
		;ADCON1: <ADFM>=1  lay ket qua 2bit cua ADRESH 8bit cua ADRESL
		;CAM BIEN DUNG LM35
;Ban phim thao tac gom 7 phim nhan
		;	PORTC :	RC5		RC4		RC3		RC2		RC1		RC0
		;	KEYPAD:	COL1	COL0	ROW3	ROW2	ROW1	ROW0
	;ten , ma cong dung 7 phim nhan
		;	PRESET:		010001	vao che do chinh mac dinh chon nhom1(1 cua 5 nhom)
		;	SELECT_L:	010010	qua nhom ben trai ' 1 nhom co 3 led TRAM CHUC DONVI '
		;	SELECT_R:	010100	qua nhom ben phai

		;	LEFT:		100001	qua con so ben trai trong nhom duoc chon
		;	RIGHT:		100010	qua con so ben phai trong nhom duoc chon
		;	INC:		100100	tang gia tri con so dang chon
		;	DEC			101000	giam gia tri con so dang chon
;khoi hien thi :
		;hien thi 5 tri so do nhiet do ung voi 5 ngo vao cua ANx
		;hien thi 5 tri so dat truoc ung voi 5 nhiet do tren
		;khoi hien thi dung : 2 IC74247 cap 2 bo ma hinh | D0.2 D1.2 D2.2 D3.2 , D0.1 D1.1 D2.1 D3.1 |
		;2 IC74LS138 mat noi tiep lam thanh bo dem 15 de SET 15 anot led 7
		;	portD : 		MA HINH 1							MA HINH 2
		;			RD7		RD6		RD5		RD4			RD3		RD2		RD1		RD0
		;			D3.2	D2.2	D1.2	D0.2		D3.1	D2.1	D1.1	D0.1
		
		;	PORTB:	MA CHON CON SO
		;			RB4		RB3		RB2		RB1		RB0
		;			LED9_15	LED1_8	C		B		A
;----------------------------------------------------------------------------

		LIST P=16F877A
		INCLUDE <P16F877A.INC>
		__CONFIG _XT_OSC &_WDT_OFF&_LVP_OFF
;............................................................................

		CBLOCK	0X20
;CAC BIEN CHO CAC CON SO CUA LED HIEN THI
;byte cao la con so cua led hien thi tri so dat truoc
;byte thap la con so cua led hien thi gia tri nhiet do hien thoi
		DIGI_1		;TRAM_nhiet1	
		DIGI_2		;CHUC_nhiet1
		DIGI_3		;DONVI_nhiet1
;
		DIGI_4		;TRAM_nhiet2
		DIGI_5		;CHUC_nhiet2
		DIGI_6		;DONVI_nhiet2
;
		DIGI_7		;TRAM_nhiet3
		DIGI_8		;CHUC_nhiet3
		DIGI_9		;DONVI_nhiet3
;
		DIGI_10		;TRAM_nhiet4
		DIGI_11		;CHUC_nhiet4
		DIGI_12		;DONVI_nhiet4
;
		DIGI_13		;TRAM_nhiet5
		DIGI_14		;CHUC_nhiet5
		DIGI_15		;DONVI_nhiet5
;
		CHANEL			;BIEN LUU TRI SO CHANEL :	.0	.1	.2	.3	.4	
		CHANEL_ACTION	;BIEN CHANEL HOAT DONG	:	.0	.1	.2	.4	.5
		CHANEL_TEMP
		ACQUI_TIME	;BIEN VE THOI GIAN CHO A/D
		
;CAC BIEN LUU
		FSR_SAVE
		W_SAVE
		S_SAVE
;CAC BIEN CUA PHEP CHUYEN BCD
		R0
		R1
		R2
		L_BYTE
		H_BYTE
		COUNT
		TEMP
;CAC BIEN CHO HIEN THI
		LED_SET
		MAHINH
		COUNT1
		COUNT2		
;CAC BIEN KEYPAD

		ENDC
;................................................................
;CAC HANG SO
;
START_RAM0	EQU	0X20	;dia chi ram bat dau tren BANK0
END_RAM0	EQU	0X50	;dia chi ram ket thuc tren BANK0
LED1_8		EQU	3		;RB3	LAY SO DEM TU 1 TO 8
LED9_15		EQU	4		;RB4	LAY SO DEM TU 9 TO 15


;.................................................................
;CHUONG TRINH BAT DAU TU DAY
		ORG 0
		GOTO	START
		ORG	4
;		GOTO	ISR


;CHUONG TRINH CHINH TAI DAY
START
;thiet lap ban dau

		CALL	CLEAR_RAM
		CALL	INI_PORT
		CALL	INI_ANALOG

;chuong trinh chinh

MAIN	CALL	READ_ANALOG
		CALL	B2_BCD
		CALL	SAVE_RESULT
;
		INCF	CHANEL,F
		INCF	CHANEL_ACTION,F
		MOVLW	.5
		SUBWF	CHANEL,W
		BTFSC	STATUS,Z
		CLRF	CHANEL
		CLRF	CHANEL_ACTION
;
		MOVLW	.100
		MOVWF	COUNT2
HT_LAI	CALL	HIENTHI
		DECFSZ	COUNT2,F
		GOTO	HT_LAI	

		GOTO	MAIN


;CAC CHUONG TRINH  CON
;----------------------------------------------------------------
CLEAR_RAM
		MOVLW	START_RAM0
		MOVWF	FSR
NEXT	CLRF	INDF
		INCF	FSR,F
		MOVLW	END_RAM0
		SUBWF	FSR,W
		BTFSS	STATUS,Z
		GOTO	NEXT
		RETURN
;----------------------------------------------------------------
INI_PORT
		BCF		STATUS,RP1
		BSF		STATUS,RP0
		MOVLW	B'00101111'
		MOVWF	TRISA
		MOVLW	B'00000001'
		MOVWF	TRISE
		CLRF	TRISB
		CLRF	TRISD
		MOVLW	B'00001111'
		MOVWF	TRISC
		BCF		STATUS,RP0
		CLRF	PORTA	
		CLRF	PORTB
		CLRF	PORTC
		CLRF	PORTD
		CLRF	PORTE
		RETURN
;-------------------------------------------------------------------
INI_ANALOG
		MOVLW	B'10001010'	;result Right justified PCFG<3:0>=<1010>
		MOVWF	ADCON1		;AN7:D AN6:D AN5:A AN4:A AN3:Vref+ AN2:A AN1:A AN0:A
		MOVLW	B'10000000'	;a/d clock Fosc/32 <7:6> RA0 chanel selected <5:3>
		MOVWF	ADCON0		;a/d module still off
		RETURN
;----------------------------------------------------------------
READ_ANALOG
		MOVF	CHANEL_ACTION,W
		MOVWF	CHANEL_TEMP
		MOVLW	.3
		SUBWF	CHANEL_ACTION,W
		BTFSS	STATUS,Z
		GOTO	KHAC3
		MOVLW	.4
		MOVWF	CHANEL_ACTION
KHAC3	MOVF	CHANEL_ACTION,W
		MOVWF	CHANEL_TEMP
		BCF		STATUS,C
		RLF		CHANEL_TEMP,F
		RLF		CHANEL_TEMP,F
		RLF		CHANEL_TEMP,F
		MOVLW	B'11000000'
		ANDWF	ADCON0,F
		MOVF	CHANEL_TEMP,W
		IORWF	ADCON0,F
		BSF		ADCON0,ADON
		MOVLW	.70
		MOVWF	ACQUI_TIME
ACQUILOOP	DECFSZ	ACQUI_TIME,F
		GOTO	ACQUILOOP
		BSF		ADCON0,GO
CONVERTLOOP	BTFSC	ADCON0,GO
		GOTO	CONVERTLOOP
		BSF		STATUS,RP0	;selected bank1
		MOVF	ADRESL,W
		BCF		STATUS,RP0
		MOVWF	L_BYTE
		MOVF	ADRESH,W
		MOVWF	H_BYTE
;
		BCF		ADCON0,ADON
		BCF		ADCON0,GO	
		RETURN		
;----------------------------------------------------------------
SAVE_RESULT
		MOVFW	FSR
		MOVWF	FSR_SAVE
		MOVF	CHANEL,W
		ADDWF	CHANEL,W
		ADDWF	CHANEL,W
		ADDWF	CHANEL,W
		ADDLW	0X20
		MOVWF	FSR
		MOVFW	R1
		ANDLW	B'00001111'
		MOVWF	INDF
		INCF	FSR,F
		MOVFW	R2
		ANDLW	B'11110000'
		MOVWF	INDF
		SWAPF	INDF,F
		INCF	FSR,F
		MOVFW	R2
		ANDLW	B'00001111'
		MOVWF	INDF
		MOVFW	FSR_SAVE
		MOVWF	FSR
		RETURN				
;----------------------------------------------------------------
;CHUONG TRINH HIEN THI
HIENTHI	CLRF	LED_SET
		BSF		LED_SET,LED1_8	; DAT LED_SET=8
		MOVFW	FSR
		MOVWF	FSR_SAVE
		MOVLW	0X20
		MOVWF	FSR		;FSR DANG LAY DIA CHI DIGI1
HT0		MOVF	INDF,W
		MOVWF	PORTD
		MOVF	LED_SET,W
		MOVWF	PORTB
		CALL	DELAY
		CLRF	PORTB
		CLRF	PORTD
		INCF	FSR,F
		INCF	LED_SET,F
		MOVLW	.23		;LED_SET TANG TU 8 TOI 22 = 14 LAN SE DUNG LAI
		SUBWF	LED_SET,W
		BTFSS	STATUS,Z
		GOTO	HT0
		MOVFW	FSR_SAVE
		MOVWF	FSR
		RETLW	0
;----------------------------------------------------------------
DELAY		MOVLW	.255
			MOVWF	COUNT1
LAPLAI		DECFSZ	COUNT1,F
			GOTO	LAPLAI
			RETURN
;--------------------------------------------------------------------------
;	CHUONG TRINH : B2_BCD
;chuyen so nhi phan 2 byte   sang nhi phan BCD
;so 2 byte : 		H_BYTE L_BYTE
;con so BCD : 	R0 R1 R2
;	LUU Y: sau qua trinh chuyen doi tri so cua L_BYTE va H_BYTE bi thay doi
;--------------------------------------------------------------------------
B2_BCD  bcf     STATUS,0                ; clear the carry bit
		movlw   .16
		movwf   COUNT
		clrf    R0
		clrf    R1
		clrf    R2
loop16  rlf     L_BYTE, f
		rlf     H_BYTE, f
		rlf     R2, f
		rlf     R1, f
		rlf     R0, f
;
		decfsz  COUNT, f                ; routine for bcd conversion
		goto    adjDEC
		retlw  0
;
adjDEC  movlw   R2
		movwf   FSR
		call    adjBCD                    ; no bank switching, always 
;                                         ; indirect access for RAM
		movlw   R1
		movwf  FSR
		call    adjBCD
;
		movlw   R0
		movwf   FSR
		call    adjBCD
;
		goto    loop16
;
adjBCD	movlw   3
		addwf   INDF,W
		movwf   TEMP
		btfsc   TEMP,3          ; test if result > 7
		movwf   INDF
		movlw   30
		addwf   INDF,W
		movwf   TEMP
		btfsc   TEMP,7          ; test if result > 7
		movwf   INDF               ; save as MSD
		retlw   0



		END
phamthanhkhuyen vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 04:12 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam