|
Вот проект,алгоритм (правда это стабилизатор для снегохода - бортовая сеть - 12В должна быть ) работает ( пусть не соответствует структурному и ANSI стилю) он режет и прибавляет относительно "что б пусто было 218 коду", но АЦП (промолчу :-((() ,да работаю с Kit 8051F010, так, что все в живую. При отсутствии напряжения на входах АЦП - он дает
8000 код (выравнивание влево)- чепуха, так АЦП не работает, окромя как несоответствии документации на серию 8051F000 и файла 8051F000.h регистра ADLIST (выравнивания), больше ошибки найти немогу - 3 дня бьюсь
С уважением, глубоким Дима !!!
#include #define VOLTAGE 255 data unsigned long Rezult; sbit Pout0 = P0^2; data unsigned int k; void INT0_ISR(void) interrupt 0{ PCA0L = 0; void PCA0_ISR (void) interrupt 9 { if (CCF4) } void ADC0_ISR (void) interrupt 15 { ADCINT = 0; }
E-mail:
info@telesys.ru
#include
#define STEP 10
data unsigned int Usr;
data unsigned int Vref;
data unsigned int period;
data unsigned int temp;
sbit Pout1 = P0^6;
IE0 = 0;
EX0 = 0;
CR = 0;
Pout0 = 0;
Pout1 = 0;
period = (PCA0H << 8) | PCA0L;
period /= 2;
Usr = Rezult / k;
if (Usr < VOLTAGE )
Vref -= STEP;
if (Usr > VOLTAGE)
Vref += STEP;
Rezult = 0;k = 0;
temp = Vref;
PCA0CPL3 = (0xff & temp);
PCA0CPH3 = (0xff & (temp >> 8));
PCA0CPM3 = 0x49;
PCA0CPL2 = (0xff & period);
PCA0CPH2 = (0xff & (period >> 8));
PCA0CPM2 = 0x49;
PCA0H = 0;
CR = 1;
EX0 = 1;
}
if (CCF3)
{
CCF3 = 0;
Pout0 = 1;
Pout1 = 1;
PCA0CPM3 = 0;
}
if (CCF2)
{
CCF2 = 0;
Pout0 = 0;
Pout1 = 0;
CR = 0;
Usr = Rezult / k;
if (Usr < VOLTAGE )
Vref -= STEP;
if (Usr > VOLTAGE)
Vref += STEP;
Rezult = 0;k = 0;
temp = Vref + ((PCA0H << 8) | PCA0L);
PCA0CPL4 = (0xff & temp);
PCA0CPH4 = (0xff & (temp >> 8));
PCA0CPM4 = 0x49;
CR = 1;
PCA0CPM2 = 0;
}
{
CCF4 = 0;
Pout0 = 1;
Pout1 = 1;
PCA0CPM4 = 0;
}
if (CF)
{
CF = 0;
CR = 0;
PCA0H = 0;
PCA0L = 0;
}
Rezult += ADC0H;
ADC0L = 0;
k++;
ADBUSY = 1;
}
void main (void)
{
Pout0 = 0;
Pout1 = 0;
WDTCN = 0xDE;
WDTCN = 0xAD;
XBR1 = 0x04;
XBR2 = 0x40;
PRT0CF = 0x44;
OSCICN = 0x07;
//АЦП пошло
REF0CN = 0x03;
AMX0CF = 0x01;
AMX0SL = 0x00;
ADC0CF = 0x80;
ADC0CN = 0xD0;
EIE1 = 0x08;
EIE2 = 0x02;
EIP2 = 0x02;
EX0 = 1;
IT0 = 1;
period = 0;
temp = 0;
Rezult = 0L;
Usr = 0;
k = 0;
Vref = 1;
CR = 1;
EA = 1;
while(1)
{
continue ;
}
Ответы