AlHakim 0 25 сентября, 2007 Опубликовано 25 сентября, 2007 · Жалоба не удается запустить модуль захвата CCP2. А вот CCP1 можно, но нужен второй, как быть где непонимание ?? компилятор HI-Tech 9.5PL3 __CONFIG(1,IESODIS & FCMDIS & ECCLKO & XT); //HS/HSPLL-HS with PLL enabled // #define ECCLKO 0xF4FF // EC, RA6=CLKOUT __CONFIG(2,BORDIS & PWRTEN & WDTDIS);// & WDTEN & WDTPS128); //BORDIS __CONFIG(3,CCP2RB3 & PBDIGITAL & LPT1DIS & MCLREN); __CONFIG(4,XINSTEN & STVREN & DEBUGDIS & LVPDIS); __CONFIG(5,CP0 & CP1 & CP2 & CP3); //__CONFIG(6,WP0 & WP1 & WP2 & WP3 & WPB & WPC); //__CONFIG(7,TRU); volatile unsigned char str1[10]; volatile near unsigned char EventFlags,EventFlags2, EventFlags3; // // переменные датчика температуры // unsigned int new_cap, old_cap, OldTemp; unsigned char IndexTemp = 0; float ArrayTemp[8]; //массив значений с термодатчика для усреднения скользящим средним void main(void) { InitPeripherial(); while(1){} } void interrupt low_priority LOW_ISR(void) { unsigned char TmpByte,TmpByte1; float TempSensor; // // прерывание по SPI (обслуживание АЦП) // #if (_TempSensorUseCCP2_ == 1) if(CCP2IE && CCP2IF){ asm("btg latd,1"); new_cap = CCPR2; TMR3 = 0; CCP2IF = 0; //cсбрасываем флаг возникновения завхвата CCP2CON ^= 0x01; //захват по каждому переднему/заднему фронту 0x05/0x04 if (CCP2M0){ //после принятия паузы вычисляем температуру #else if(CCP1IE && CCP1IF){ new_cap = CCPR1; TMR3 = 0; CCP1IF = 0; //cсбрасываем флаг возникновения завхвата CCP1CON ^= 0x01; //захват по каждому переднему/заднему фронту 0x05/0x04 if (CCP1M0){ //после принятия паузы вычисляем температуру #endif asm("btg latd,2"); TempSensor = 400*(unsigned long)new_cap; // T=(235-(400*T1/T2)); TempSensor/= old_cap; TempSensor = 235.0 - TempSensor; ArrayTemp[IndexTemp] = TempSensor; IndexTemp = ++IndexTemp & 0x07; // EventFlags3 |= fRxCaptureTermo; } else // после принятия импульса old_cap = new_cap; // store this capture value } } void InitPeripherial(void) { ////////////////////////////////////////////////////////////////////////// // Настройка регистров для задание режима работы (послед по мануалу :)) ////////////////////////////////////////////////////////////////////////// // OSCCON = 0x70; //Настройка рабочего генератора процессора с частотой 8 МГц с выходом Fosc/4 на RA6 INTCON = 0; ADCON1 = 0x0F; //All PORTB pin - is digital (PB3..PB0) #if (_TempSensorUseCCP2_ == 1) //CCP1 используем для датчика тепературы TRISA = 0x09; TRISB = 0x0F; TRISC = 0xD7; TRISD = 0x00; TRISE = 0x00; #else TRISA = 0x09; TRISB = 0x0F; TRISC = 0xD3; TRISD = 0x00; TRISE = 0x00; #endif PORTA = 0xFF; PORTB = 0x00; PORTC = 0x90; PORTD = 0x00; PORTE = 0xFF; LATA = 0xFF; LATB = 0x00; LATC = 0x90; LATD = 0x00; LATE = 0xFF; //---- Initialise ADC ---- //выравнивание Result-а по левому. краю, (не запол. млад. разряды ADRESL) и режим 0xb - три аналоговых вх. AI0..AI3) ADCON0 = 0x00; //-- Reset to defaults fosc/32 AN0 ADCON1 = 0x1B; //VCFG0 | PCFG3 | PCFG1 | PCFG0; //RA1 и RA3 - аналоговый, RA3 - REF // ADCON2 = 0x08; //ADFM | ACQT1 | ACQT0; //время заряда кондера 6Tad Tconv = Fos/2 ADCON2 = 0x3E; ADIE=0; // not interrupt driven ADON=0; //-- Turn ADC ON INTCON2 = 0x00; INTCON3 = 0x00; //запретили прерывания по вх. Int 1,2 PIR1 = 0x00; //флаги периферийных прерываний. PIR2 = 0x00; //флаги периферийных прерываний. #if (_TempSensorUseCCP2_ == 1) //CCP2 используем для датчика тепературы PIE1 = 0x60; //разрешения периферийных прерываний. //b.7 PSPIE : Parallel Slave Port Read/Write Interrupt Enable bit(1) //b.6 ADIE : A/D Converter Interrupt Enable bit //b.5 RCIE : Разрешение прерывания от приемника USART //b.4 TXIE : Разрешение прерывания от передатчика USART //b.3 SSPIF : Флаг прерываний от модуля MSSP //b.2 CCP1IE: CCP1 Interrupt Enable bit //b.1 TMR2IE: Разрешение прерывания по переполнению таймера TMR2 //b.0 TMR1IE: Разрешение прерывания по переполнению таймера TMR1 PIE2 = 0x01; //разрешения периферийных прерываний. //b.7 OSCFIE: Oscillator Fail Interrupt Enable bit //b.6 CMIE : Comparator Interrupt Enable bit //b.5 Reserved 0 //b.4 EEIE: Data EEPROM/Flash Write Operation Interrupt Enable bit //b.3 BCLIE: Bus Collision Interrupt Enable bit //b.2 2 HLVDIE: High/Low-Voltage Detect Interrupt Enable bit //b.1 TMR3IE: TMR3 Overflow Interrupt Enable bit //b.0 CCP2IE: CCP2 Interrupt Enable bit #else PIE1 = 0x64; //разрешения периферийных прерываний. PIE2 = 0x00; //разрешения периферийных прерываний. #endif IPR1 = 0x20; //приоритета периферийных прерываний. //b.7 PSPIP : Parallel Slave Port Read/Write Interrupt Priority bit(1) //b.6 ADIP : A/D Converter Interrupt Priority bit //b.5 RCIP : Выбор приоритета прерывания от приемника USART //b.4 TXIP : Выбор приоритета прерывания от передатчика USART //b.3 SSPIP : Выбор приоритета прерывания от модуля MSSP //b.2 CCP1IP: CCP1 Interrupt Priority bit //b.1 TMR2IP: Выбор приоритета прерывания TMR2 (низкий) //b.0 TMR1IP: Выбор приоритета прерывания TMR1 (высший) IPR2 = 0x00; //приоритета периферийных прерываний. //b.7 OSCFIP: Oscillator Fail Interrupt Priority bit //b.6 CMIP : Comparator Interrupt Priority bit //b.5 Reserved 0 //b.4 EEIP : Data EEPROM/Flash Write Operation Interrupt Priority bit //b.3 BCLIP : Bus Collision Interrupt Priority bit //b.2 HLVDIP: High/Low-Voltage Detect Interrupt Priority bit //b.1 TMR3IP: TMR3 Overflow Interrupt Priority bit //b.0 CCP2IP: CCP2 Interrupt Priority bit RCON = 0x80; //b.7 IPEN : приоритетная система прерываний включена // TMR1 - обладает высшим приоритетом // // Настраиваем модуль захвата ССP2 для работ ы с темп. датчиком TMP04 // #if (_TempSensorUseCCP2_ == 1) //CCP1 используем для датчика тепературы CCP2CON = 0x05; //захват по каждому переднему фронту //0100 = захвата по каждому заднему фронту сигнала //0101 = захват по каждому переднему фронту сигнала //0110 = захват по каждому 4-му переднему фронту сигнала #else //0111 = захват по каждому 16-му переднему фронту сигнала CCP1CON = 0x05; #endif T3CCP2 = 1; //Fos/4, модуль используется для модулей CCP1 и CCP2 TMR3 = 0; //таймерный тик по ... мкс TMR3ON = 1; // и включили таймер 3 INTCON = 0xC0; //allow interrupts !!!!! вкл. INT0IE } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться