;****************************************************** ;* ADC_INT.ASM ;* PORTA RA0接腳類比輸入,經ADC轉換後,PORTC輸出 ;* (利用ADC中斷) ;****************************************************** list p=16F877 #include ; VAL_US equ .5 ; 25us delay 給定初值 count equ 0x20 ; 25us delay 變數位址 ; ;****** 程式開始 ********************* org 0x00 ; reset vector nop ; Reserve for MPLAB-ICD goto initial org 0x04 goto isr_adc initial: banksel TRISC ; Select to bank1 clrf TRISC ; PORTC = Output banksel PORTC ; Select to bank0 clrf PORTC ; Clear PORTC banksel ADCON1 ; Step1 Start clrf ADCON1 banksel ADCON0 ; movlw 0x41 movwf ADCON0 ; Step1 End banksel PIE1 ; Step2 Start bsf PIE1,ADIE bsf INTCON,GIE bsf INTCON,PEIE; Step2 END call delay_25us ; Step3 擷取時間(第一次) banksel ADCON0 bsf ADCON0,GO ; Step4 叫ADC開始轉換(第一次) start: nop goto start isr_adc: banksel ADRESH ; Step6 Start movf ADRESH,W movwf PORTC call delay_25us ; Step3 擷取時間 banksel ADCON0 bsf ADCON0,GO ; Step4 叫ADC開始轉換 bcf PIR1,ADIF retfie ;-------delay subroutine----------- delay_25us: movlw VAL_US movwf count dec_loop nop decfsz count,f goto dec_loop return end