W
Wang tianwei
Guest
hi, i am izmantojot pic 16f877.un tālāk ir programma.Vai kāds man pastāstīt, kā man vajadzētu zināt, atsaucoties spriegumu, kā tie visi hex numurus.thanks a lot
Parauga programma AdvFamLab
/ / Include nepieciešami header faili šeit
# include <pic1687x.h>
# include <pic.h>
/ / Atzīt globālo mainīgo šeit
gaistošo int on_time_counter, off_time_counter;
gaistošo unsigned char gaismas = 0;
int timer_value = 0xFE;
/ / Atzīt funkciju izmanto programmas, ti,
/ / anulēts initialize_IO_ports (spēkā neesošs)
/ / anulēts initialize_ADC (spēkā neesošs)
/ / int read_ADC_channel (unsigned int)
/ / anulēts initialize_timer1 (INT)
/ / Put ķermeņa visu funkciju
anulēts initialize_IO_ports (spēkā neesošs)
(
/ / set digitālo IO ports kā vienu prasība
TRISA = 0xFF; / / porta kā priekšnodokli
TRISB = 0xFF; / / portB kā priekšnodokli
TRISC = 0x00; / / portC kā produkciju
TRISD = 0x00; / / portD kā produkciju
ADCON1 = 0x82; / / set Porte, digitālo io un porta kā analogās un VDD un VSS; ADC produkcija ir labi-pamatota.
/ / notīrīt izejas ostās, sākumā
PORTD = 0x00; / / notīrīt portD
PORTC = 0x00; / / notīrīt portC
)
anulēts initialize_ADC (spēkā neesošs)
(
/ / Enable ADC
ADON = 1;
/ / set clock avots ADC
ADCS1 = 0;
ADCS0 = 0;
)
int read_ADC_channel (unsigned int channel_number)
(
int vērtību;
SWITCH (channel_number)
(
lieta 0:
/ / set kanālu selektoru
CHS2 = 0;
CHS1 = 0;
CHS0 = 0;
Case 1:
/ / set kanālu selektoru
CHS2 = 0;
CHS1 = 0;
CHS0 = 1;
default:;
)
/ / Sākumlapa AD konversijas
ADGO = 1;
/ / wait pārvēršanas apdare
while (ADGO)
();
/ / lasīt reģistros vērtības
vērtība = (ADRESH <<8) ADRESL;
return (vērtība);
)
anulēts initialize_timer1 (spēkā neesošs)
(
/ / Pēc SFR ir jānosaka, kā norādīts Timer1 nodaļa PIC datu lapas
/ / set prescalar vērtība 1:8
T1CKPS1 = 1;
T1CKPS0 = 1;
T1OSCEN = 1; / / Timer1 lampa ir ieslēgts
/ / set iekšējo pulksteni, ti FOSC/4..eg.20MHz OSC tik clk par TMR1 ir 5MHz vai 200ns per TMR1 skaits
TMR1CS = 0;
GIE = 1; / / globālie pārtraukt ļāva
PEIE = 1; / / perifēro pārtraukt ļāva
TMR1IE = 1; / / Enable timer1 pārtraukt
)
anulēts load_timer1 (int timer_value)
(
TMR1ON = 0; / / izslēgt timer1 pirms iekraušanas vērtības
TMR1IF = 0; / / timer1 flag noskaidroti
TMR1H = (0xFFFF-timer_value)>> 8; / / load timer1 augstas reģistrs
TMR1L = (0xFFFF-timer_value) &0xFF; / / load timer1 zems reģistrs
TMR1ON = 1; / / Enable timer1
)
/ / pārtraukt pakalpojumu ikdienas
anulēts pārtraukt isr0 (spēkā neesošs)
(
if (TMR1IF == 1)
(
/ / Sākumā pārtraukt dienesta ikdienas darbu, papildināšanas taimeris
/ / load_timer1 (timer_value);
TMR1ON = 0; / / izslēgt timer1 pirms iekraušanas vērtības
TMR1IF = 0; / / timer1 flag noskaidroti
TMR1H = (0xFFFF-timer_value)>> 8; / / load timer1 augstas reģistrs
TMR1L = (0xFFFF-timer_value) &0xFF; / / load timer1 zems reģistrs
TMR1ON = 1; / / Enable timer1
if (gaismas == 0) / / if gaisma off
(
off_time_counter ; / / pieaugums off_time_counter
if (off_time_counter == 250) / / if off_time_counter ir sasnieguši nepieciešamo skaitu
(
off_time_counter = 0; / / notīrīt off_time_counter
on_time_counter = 0; / / notīrīt on_time_counter
gaismas = 1; / / set gaismu no jauna
)
)
else if (gaismas == 1) / / if gaismas bija par
(
on_time_counter ; / / pieaugums on_time_counter
if (on_time_counter == 50) / / if on_time_counter ir sasnieguši nepieciešamo skaitu
(
off_time_counter = 0; / / notīrīt off_time_counter
on_time_counter = 0; / / notīrīt on_time_counter
gaismas = 0; / / notīrīt gaismas Off
)
)
)
)
/ / main funkcijas
int main ()
(
/ / Atzīt par galveno funkciju mainīgajiem šeit
int analog_value1;
initialize_IO_ports ();
initialize_ADC ();
initialize_timer1 ();
load_timer1 (timer_value);
/ / nodot infinite loop šeit
while (1)
(
/ / lasīt digitālā ieeja un noteikt produkcija
PORTD = PORTB; / / lasīt portB un izejas to portD.
/ / output, ņemot vērā saskaņā ar mainīgo "liess"
RC0 = 1;
RC1 = 1;
RC2 = 0;
RC3 = vieglā frakcija;
RC4 = 0;
/ / lasīt analogo kanālu un veikalu vērtību mainīgais lielums;
analog_value1 = read_ADC_channel (0);
/ / pārbaude diapazonu vērtības un noteikt vai notīriet RC5 atbilstoši
if ((analog_value1> 0x004F) & & (analog_value1 <0x01FF)) RC5 = 1;
citādi
RC5 = 0;
);
return (1);
)
/ / end of AdvFamLab izlases programma
Parauga programma AdvFamLab
/ / Include nepieciešami header faili šeit
# include <pic1687x.h>
# include <pic.h>
/ / Atzīt globālo mainīgo šeit
gaistošo int on_time_counter, off_time_counter;
gaistošo unsigned char gaismas = 0;
int timer_value = 0xFE;
/ / Atzīt funkciju izmanto programmas, ti,
/ / anulēts initialize_IO_ports (spēkā neesošs)
/ / anulēts initialize_ADC (spēkā neesošs)
/ / int read_ADC_channel (unsigned int)
/ / anulēts initialize_timer1 (INT)
/ / Put ķermeņa visu funkciju
anulēts initialize_IO_ports (spēkā neesošs)
(
/ / set digitālo IO ports kā vienu prasība
TRISA = 0xFF; / / porta kā priekšnodokli
TRISB = 0xFF; / / portB kā priekšnodokli
TRISC = 0x00; / / portC kā produkciju
TRISD = 0x00; / / portD kā produkciju
ADCON1 = 0x82; / / set Porte, digitālo io un porta kā analogās un VDD un VSS; ADC produkcija ir labi-pamatota.
/ / notīrīt izejas ostās, sākumā
PORTD = 0x00; / / notīrīt portD
PORTC = 0x00; / / notīrīt portC
)
anulēts initialize_ADC (spēkā neesošs)
(
/ / Enable ADC
ADON = 1;
/ / set clock avots ADC
ADCS1 = 0;
ADCS0 = 0;
)
int read_ADC_channel (unsigned int channel_number)
(
int vērtību;
SWITCH (channel_number)
(
lieta 0:
/ / set kanālu selektoru
CHS2 = 0;
CHS1 = 0;
CHS0 = 0;
Case 1:
/ / set kanālu selektoru
CHS2 = 0;
CHS1 = 0;
CHS0 = 1;
default:;
)
/ / Sākumlapa AD konversijas
ADGO = 1;
/ / wait pārvēršanas apdare
while (ADGO)
();
/ / lasīt reģistros vērtības
vērtība = (ADRESH <<8) ADRESL;
return (vērtība);
)
anulēts initialize_timer1 (spēkā neesošs)
(
/ / Pēc SFR ir jānosaka, kā norādīts Timer1 nodaļa PIC datu lapas
/ / set prescalar vērtība 1:8
T1CKPS1 = 1;
T1CKPS0 = 1;
T1OSCEN = 1; / / Timer1 lampa ir ieslēgts
/ / set iekšējo pulksteni, ti FOSC/4..eg.20MHz OSC tik clk par TMR1 ir 5MHz vai 200ns per TMR1 skaits
TMR1CS = 0;
GIE = 1; / / globālie pārtraukt ļāva
PEIE = 1; / / perifēro pārtraukt ļāva
TMR1IE = 1; / / Enable timer1 pārtraukt
)
anulēts load_timer1 (int timer_value)
(
TMR1ON = 0; / / izslēgt timer1 pirms iekraušanas vērtības
TMR1IF = 0; / / timer1 flag noskaidroti
TMR1H = (0xFFFF-timer_value)>> 8; / / load timer1 augstas reģistrs
TMR1L = (0xFFFF-timer_value) &0xFF; / / load timer1 zems reģistrs
TMR1ON = 1; / / Enable timer1
)
/ / pārtraukt pakalpojumu ikdienas
anulēts pārtraukt isr0 (spēkā neesošs)
(
if (TMR1IF == 1)
(
/ / Sākumā pārtraukt dienesta ikdienas darbu, papildināšanas taimeris
/ / load_timer1 (timer_value);
TMR1ON = 0; / / izslēgt timer1 pirms iekraušanas vērtības
TMR1IF = 0; / / timer1 flag noskaidroti
TMR1H = (0xFFFF-timer_value)>> 8; / / load timer1 augstas reģistrs
TMR1L = (0xFFFF-timer_value) &0xFF; / / load timer1 zems reģistrs
TMR1ON = 1; / / Enable timer1
if (gaismas == 0) / / if gaisma off
(
off_time_counter ; / / pieaugums off_time_counter
if (off_time_counter == 250) / / if off_time_counter ir sasnieguši nepieciešamo skaitu
(
off_time_counter = 0; / / notīrīt off_time_counter
on_time_counter = 0; / / notīrīt on_time_counter
gaismas = 1; / / set gaismu no jauna
)
)
else if (gaismas == 1) / / if gaismas bija par
(
on_time_counter ; / / pieaugums on_time_counter
if (on_time_counter == 50) / / if on_time_counter ir sasnieguši nepieciešamo skaitu
(
off_time_counter = 0; / / notīrīt off_time_counter
on_time_counter = 0; / / notīrīt on_time_counter
gaismas = 0; / / notīrīt gaismas Off
)
)
)
)
/ / main funkcijas
int main ()
(
/ / Atzīt par galveno funkciju mainīgajiem šeit
int analog_value1;
initialize_IO_ports ();
initialize_ADC ();
initialize_timer1 ();
load_timer1 (timer_value);
/ / nodot infinite loop šeit
while (1)
(
/ / lasīt digitālā ieeja un noteikt produkcija
PORTD = PORTB; / / lasīt portB un izejas to portD.
/ / output, ņemot vērā saskaņā ar mainīgo "liess"
RC0 = 1;
RC1 = 1;
RC2 = 0;
RC3 = vieglā frakcija;
RC4 = 0;
/ / lasīt analogo kanālu un veikalu vērtību mainīgais lielums;
analog_value1 = read_ADC_channel (0);
/ / pārbaude diapazonu vērtības un noteikt vai notīriet RC5 atbilstoši
if ((analog_value1> 0x004F) & & (analog_value1 <0x01FF)) RC5 = 1;
citādi
RC5 = 0;
);
return (1);
)
/ / end of AdvFamLab izlases programma