View Single Post
Old 24-07-2009, 05:39 PM   #11
cancel
Nhập môn đệ tử
 
Tham gia ngày: Jul 2008
Bài gửi: 3
:
Dùng ngắt điều khiển bộ ADC 10bit của pic16f877a

tui đã test code này rồi. tui hơi bối rối chổ banksel. Mỗi lần tui viết lệnh cho một thanh ghi phải coi nó thuộc bank nào rất vất vả. Vậy xin hỏi có một nguyên tắc nào để xài cái lệnh banksel không?
;################################################# #########
TITLE "SU DUNG ADC"
PROCESSOR P16F877A
INCLUDE <P16F877A.INC>
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC &_WRT_OFF & _LVP_OFF & _CPD_OFF
;#######################################
;dung Vdd lam Vref
;ket qua 10 bit xuat ra PORTB va
;2 bit cao la RC0, RC1
;lay mau o chan RA0
;khi qua trinh chuyen doi hoan tat thi co ngat duoc bat len
;va bit GO/DONE' duoc tu dong xoa ve 0
;cancel
;######################################
ORG 0x0000
goto MAIN
ORG 0x0004
goto IRS
ORG 0x0005
MAIN
;configure I/O ports
banksel TRISA ;bank1
movlw B'111111'
movwf TRISA
movlw 0x00
movwf TRISB
movlw 0x00
movwf TRISC
movlw TRISC
;configure A/D module

movlw B'10000000' ;luu ket qua ve ben phai hai thanh ghi ADRESH:ADRESL
;chon 8 kenh analog vdd lam Vref
movwf ADCON1
bsf PIE1,ADIE ;cho phep ngat AD; trong bank1

banksel ADCON0 ;bank0
movlw B'01000001' ;clock conversion=Fosc/8
;select AN0
;clear GO/DONE'
;turn on A/D

movwf ADCON0
;configure A/D interrup
;bcf PIR1,ADIF
bsf INTCON,PEIE
bsf INTCON,GIE
;bsf PIE1,ADIE PIE1 o bank1

;wait the required acquisition time; ko cho chuyen doi trong chuong trinh nay

;start convertion: set bit GO/DONE' & ep ngat AD

bsf ADCON0,GO
bsf PIR1,ADIF
;
goto $

IRS
btfss PIR1,ADIF
goto EXIT_ADC_INTERRUP
ADC_INTERRUP
; display the result

movfw ADRESH
movwf PORTC
banksel ADRESL ;bank1
movfw ADRESL
banksel PORTB ;bank0
movwf PORTB

;prepare for the next INTERRUP

bsf ADCON0,GO
bcf PIR1,ADIF
EXIT_ADC_INTERRUP

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