Thông báo

Collapse
No announcement yet.

ADC pic 16f877a + lm35 ....

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • ADC pic 16f877a + lm35 ....

    sau đây là đoạn chương trình tôi viết cho pic 16f877a với lm35 nhưng không hiểu sao ở kết qua hiển thị khi nhiệt độ tăng giảm thì mứt tăng giảm của nó là 64 thay vì 1
    chẳng hạn khi nhiệt độ tăng 32 --> 96 --> 160 --> 224 --> 288...
    làm cách nào để có kết quả 32 --> 33 --->34 --->35 --->36....
    nhờ các bạn chỉ giúp
    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

  • #2
    Đã trả lời cho bạn ở picvietnam.

    Thân,
    Biển học mênh mông, sức người có hạn

    Comment


    • #3
      rất cảm ơn bạn namqn đúng là đoạn chương trình INI_ANALOG bị lỗi .
      tôi đã sửa lại và chạy tốt sau đây là phần đã sửa
      Code:
      INI_ANALOG
      		BSF		STATUS,RP0
      		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
      		BCF		STATUS,RP0
      		MOVLW	B'10000000'	;a/d clock Fosc/32 <7:6> RA0 chanel selected <5:3>
      		MOVWF	ADCON0		;a/d module still off
      		RETURN

      Comment


      • #4
        @phamkhuyen:mình cũng đang làm cái này,bạn có thể gửi tài liệu hướng dẫn thưc hiện giúp được không.Cám ơn rất nhiều

        Comment


        • #5
          xem giup minh doan chuong trinh sau

          mình kết nối LM35 vào AN0, dùng 2 x led 7 đoạn hiển thị, portb nối a --> g, portc chọn led ,theo như mình được biết sau khi chuyển đổi ADC xong, thì trên portb sễ lấy dữ liệu ra là nhị phân từ 0 --> F, vấn đề của mình là chỉ tra bảng được từ 0 -->9 thôi còn từ a -->F thì ko dc, Mong các bạn giúp mình :

          ;================================================= ========
          title "Do nhiet do va hien thi ra LCD.asm"
          processor p16f877a
          include <P16f877a.inc>
          ;_CONFIG_CP_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC&_LVP_OF F

          dem0 equ 0x20
          dem1 equ 0x21
          dem2 equ 0x22
          dem3 equ 0x27
          lenhlcd equ 0x23
          delay12 equ 0x24
          ghidata equ 0x25
          ketqua equ 0x26
          dvi equ 0x50
          chuc equ 0x51
          tam1 equ 0x52

          org 0x0030
          REGAD1 res 1 ;khai bao bien co ten regad1 nam o
          ;dia chi 30h va chiem 1 byte
          org 0x0000
          CLRF STATUS
          MOVLW H'00'
          MOVWF PCLATH
          goto start

          start
          org 0x0010
          ;================================================= ========
          ;khoi tao PORTB la lenh dieu khien lcd
          ;khoi tao PORTC la data
          ;khoi tao ADC
          ;================================================= ========
          BANKSEL TRISB ;CHON NGAN HANG THANH GHI CO CHUA TRISB VA TRISC
          BANKSEL TRISC
          CLRF TRISB ;PORTB LA XUAT
          CLRF TRISC ;PORTC LA XUAT
          BANKSEL PORTB ;CHON NGAN HANG THANH GHI CO CHUA PORTB VA PORTC
          BANKSEL PORTC
          ;================================================= ========
          ;khoi tao ADC
          ;================================================= ========
          movlw b'00000001' ;ADC ngo vao la Analog
          movwf ADCON1

          ;================================================= ========
          ;chuong trinh chinh
          ;================================================= ========

          movlw 0x00
          movwf dem2

          MAIN call donhietdo
          movwf REGAD1 ;chuyen du lieu 10bit thanh 8bit
          movf REGAD1,w
          lcall TABLE
          MOVWF PORTB
          MOVLW 0X02
          MOVWF PORTC
          GOTO MAIN

          ;================================================= ========
          ;chuong trinh con donhietdo
          ;================================================= ========

          donhietdo
          movlw h'01' ;bat nguon cho ADC va chon kenh thu 0
          movwf ADCON0
          del3 decfsz delay12,F
          goto del3
          bsf ADCON0,2 ;bat dau chuyen doi bang cach set bit go/done
          godone btfsc ADCON0,2 ;kiem tra go/done=1 thi nhay toi nhan godone
          goto godone
          movf ADRESL,w ;go/done=0 thi luu ket qua
          return

          TABLE ADDWF PCL,1
          DT 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90
          END

          Comment


          • #6
            Nói tóm lại làm sao hiển thị được từ A --> F trong khi dữ liệu nằm trong 1 byte

            Comment

            Về tác giả

            Collapse

            phamkhuyen Tìm hiểu thêm về phamkhuyen

            Bài viết mới nhất

            Collapse

            Đang tải...
            X