Вроде все сделал по даташиту.
Спойлер
Код: Выделить всё
//начало объявления переменных и констант--------------------------------------------------------------------------------------------
volatile unsigned char cCountTransl; // для получения 100 Гц из 500
volatile unsigned char count_r; // счетчик 4-х циклов индикации за 1 прерывание
volatile unsigned short int Indik; // вывод на индикацию
volatile unsigned char Zaderj; // переменная для работы задержки
//----------
volatile struct strBIT //объявление структуры strBIT типа volatile
{
unsigned bZaderj:1; // бит на защелку 1 - срабатывание, 0 - нет.
unsigned bBIT1:1; // бит на защелку 1 - срабатывание, 0 - нет.
unsigned bBIT2:1; // бит на защелку 1 - срабатывание, 0 - нет.
unsigned bBIT3:1; // бит на защелку 1 - срабатывание, 0 - нет.
}strBIT;
......
if(Zaderj > 0){Zaderj--;} // ППОП, частота 500 Герц
----------
// функции, используемые в файле - oбъявления
void fnInit(void) // настройка портов и таймеров
{
//ADCON1 = 0b111; // 0b111 - отключение АЦП
ADCON1 = 0b100; //
TRISA = 0b01011; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
TRISB = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
TRISC = 0b00000000; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
RBPU = 1; // подтягивающие R (0-вкл, 1-выкл) бит регистра OPTION
//PORTA = 0;
PORTB = 0b11111111;
PORTC = 0b11110000;
//----------
GIE = 1; // разрешены все немаскированные прерывания
PEIE = 1; // разрешены все немаскированные прерывания от переферийных модулей
void nastrAD (void) // срабатывание АЦП
{
//unsigned int varAD = 0; //
ADCON0 = 0; // запрет AD-преобразования.
TRISA = 0b111111; // (0/1 - выход/вход, нумерация битов в регистре справо-налево)
PCFG0 = 0; PCFG1 = 0; PCFG2 = 0; // (ADCON1) настройка порта А как аналог, Vref = Vdd (опорное = питанию)
ADCS0 = 0; ADCS1 = 0; // тактовый сигнал Fosc/2
CHS0 = 0; CHS1 = 0; CHS2 = 0; // (ADCON0) выбор первого канала (2 вывод)
ADON = 1; // включить модуль A/D
ADIF = 0; // чтобы после конвертирования МК поставил 1, регистр PIR1
ADIE = 1; // разрешить прерывание от A/D, регистр PIE1
if (strBIT.bBIT1==1)
{
Zaderj = 250; // задаем время зарядки CHOLD
strBIT.bBIT1 = 0; // защелкиваем до следующего преобразования
//strBIT.bZaderj=1; // запускаем задержку
}
while((Zaderj>0)&&(strBIT.bBIT1 == 0)){} // ждем время зарядки CHOLD
ADCON0 = 1; // начало AD-преобразования.
while(ADCON0 == 1){}// ждем конца AD-преобразования.
ADRES = Indik; // вывод результата AD-преобразования на индикацию
strBIT.bBIT1 = 1; // разрешить зарядку CHOLD
}
//----------
void main ()
{
fnInit(); // настройка портов и таймеров
TMR1ON = 1; // запуск динамической индикации
//ADON = 1;
Indik = 0;
for(;;)
{
nastrAD();
fnIntToStr(Indik); // вывод на индикацию
}
}
Как были нули, так и стоят.
