أريد استقبال قيمتين Analoge من على PortA,1 و PortA,2 وتحويلهما إلى قيم رقمية ولكن أريد عند دخول أي قيمة يحدث Interrupt وقد فكرت في هذا الكود :
;**************** Program Start *********************** org 0 ;Reset Vector goto init org 4 ;Interrupt Vector goto int ;**************** Initial Process ********************* init BCF STATUS, RP0; (bank0) BCF STATUS, RP1; CLRF PORTA; CLRF PORTB; CLRF PORTC; CLRF PORTD; BSF STATUS, RP0; (bank1) MOVLW 0x03; (port A0,1 analoge input) MOVWF TRISA; MOVLW 0x00; (port B digital output) MOVWF TRISB; MOVLW 0x00; (port C digital output) MOVWF TRISC; MOVLW 0x00; (port D digital output) MOVWF TRISD; BCF STATUS, RP0; (bank0) MOVLW 0x32; (Store 50 in registers 21h, 22h, 23h) MOVWF 21h; MOVWF 22h; MOVWF 23h; MOVLW 0x81; MOVWF ADCON0; BSF STATUS, RP0; (bank1) MOVLW 0x8E; MOVWF ADCON1; MOVLW b'00000001'; (CCP2IE=Enable) MOVLW PIE2; (Set PIE2 register) BCF STATUS, RP0; (Change to Bank0) MOVLW b'11000000'; (GIE=ON PEIE=ON) MOVWF INTCON; (Set INTCON register) WAIT GOTO $; INT CLRF PIR2; (clear interrupt flage) BTFSC ADCON0, 2; (check the end of conversation) GOTO $-1; MOVF 21h,0; BSF STATUS, RP0; SUBWF ADRESL,0; BTFSC W, 7; BCF STATUS, RP0; BSF PORTB, 1; BCF PORTB, 0; BCF PORTB, 1; BSF STATUS, RP0; MOVF ADRESL, 0; BCF STATUS, RP0; MOVWF 21h; هنا المفروض ال Interrupt الثاني لأخذ القيمة التماثلية الثانية BSF ADCON0,3; BTFSC ADCON0, 2; GOTO $-1; MOVF ADRESL, 0; BCF STATUS, RP0; SUBLW 0x32; BTFSC W, 7; CALL STEPPER1; CALL STEPPER2; BCF PIR1, ADIE; STEPPER1: MOVF 22h, 0; BSF STATUS, RP0; SUBWF ADRESL, 0; BCF STATUS, RP0; BTFSC W, 7; BSF PORTC, 1; BSF PORTC, 0; BCF PORTC, 0; BCF PORTC, 1; BSF STATUS, RP0; MOVF ADRESL, 0; BCF STATUS, RP0; MOVWF 22h; RETERN; STEPPER2: MOVF 23h, 0; BSF STATUS, RP0; SUBWF ADRESL, 0; BCF STATUS, RP0; BTFSC W, 7; BSF PORTD, 1; BSF PORTD, 0; BCF PORTD, 0; BCF PORTD, 1; BSF STATUS, RP0; MOVF ADRESL, 0; BCF STATUS, RP0; MOVWF 22h; RETERN;
ولكني أشعر أن الجزء الخاص بال A/D به أخطاء فأرجو المساعدة