|
include #define VOLTAGE_SET 116 data union{ data union{ void INT0_ISR (void) interrupt 0 { } temp.w += phase; XBR1 = 0x04; OSCXCN = 0x67; REF0CN = 0x03; PCA0MD = 0x02; while (1)
E-mail:
info@telesys.ru
#include
unsigned int w;
unsigned char b[2];
}period;
unsigned int w;
unsigned char b[2];
}temp;
sbit Pout0 = P0^2;
sbit Pout1 = P0^6;
unsigned long accumulator = 0;
unsigned int phase = 0;
unsigned int int_dec = 0;
unsigned char voltage = 0;
IE0 = 0;
EX0 = 0;
Pout0 = 0;
Pout1 = 0;
CR = 0;
period.b[1] = PCA0L;
period.b[0] = PCA0H;
period.w /= 2;
PCA0CPL0 = period.b[1];
PCA0CPH0 = period.b[0];
PCA0CPM0 = 0x49;
temp.w = phase;
PCA0CPL1 = temp.b[1];
PCA0CPH1 = temp.b[0];
PCA0CPM1 = 0x49;
PCA0L = 0;
PCA0H = 0;
CR = 1;
EX0 = 1;
void PCA_ISR (void) interrupt 9 {
if (CCF0)
{
CCF0 = 0;
Pout0 = 0;
Pout1 = 0;
CR = 0;
temp.b[1] = PCA0L;
temp.b[0] = PCA0H;
PCA0CPL1 = temp.b[1];
PCA0CPH1 = temp.b[0];
PCA0CPM1 = 0x49;
voltage = accumulator /int_dec ;
accumulator = 0;
int_dec = 0;
CR = 1;
PCA0CPM0 = 0;
}
if (CCF1)
{
CCF1 = 0;
Pout0 = 1;
Pout1 = 1;
PCA0CPM1 = 0;
}
if(CF)
{
CF = 0;
CR = 0;
PCA0L = 0;
PCA0H = 0;
}
}
void ADC0_ISR (void) interrupt 15 {
ADCINT = 0;
accumulator += ADC0H;
++int_dec;
ADBUSY = 1;
}
void main (void)
{
data unsigned int n;
WDTCN = 0xDE;
WDTCN = 0xAD;
XBR2 = 0x40;
PRT0CF = 0x44;
for (n = 0; n < 255; n++) ;
while ( (OSCXCN & 0x80) == 0 );
OSCICN = 0x88;
AMX0SL = 0x01;
AMX0CF = 0x00;
ADC0CF = 0x60;
ADC0CN = 0x91;
EX0 = 1;
IT0 = 1;
EIE1 = 0x08;
EIE2 = 0x02;
CR = 1;
EA = 1;
{
if ((voltage > VOLTAGE_SET) && (phase < 65535))
++phase;
if ((voltage < VOLTAGE_SET) && (phase > 1))
--phase;
}
}
Ответы