#include #include #pragma config FOSC = HS // Oscillator Selection bits #pragma config WDTE = OFF // Watchdog Timer Enable bit #pragma config PWRTE = OFF // Power-up Timer Enable bit #pragma config CP = OFF // FLASH Program Memory Code Protection bit #pragma config BOREN = OFF // Brown-out Reset Enable bit #define LENGTH 8 unsigned int sum = 0; // Suma liczb 8-bitowych, zapisana w zmiennej 16-bitowej unsigned char rest = 0; unsigned int result = 0; unsigned int read[LENGTH] = {}; unsigned char isFull = 0; unsigned char index = 0; void readData(void); void processData(void); void resetIndex(void); void isReadFull(void); void config_ad(void); void ad_go(void); void oblicz(void); void print_results(void); void main(void) { config_ad(); while(1) { // g?ówna p?tla programu ad_go(); readData(); isReadFull(); resetIndex(); processData(); } return; } void readData(void) { while(ADCON0bits.GO) { read[index] = ADRES; index++; } } void processData(void) { if(isFull) { oblicz(); print_results(); isFull = 0; } } void resetIndex(void) { if(index == LENGTH - 1) { index = 0; } } void isReadFull(void) { if(!isFull && index == LENGTH - 1) { isFull = 1; } } void config_ad(void) { ADCON0 = 0; ADCON1bits.PCFG = 0b100; ADCON0bits.ADON = 1; } void ad_go(void) { ADCON0bits.GO = 1; } void oblicz(void) { sum = 0; for(int i = 0; i < LENGTH; i++) { sum += read[i]; } result = sum / LENGTH; rest = sum % LENGTH; } void print_results(void) { printf("result: %u", result); printf("rest: %u", rest); }