/* alinea 7 */ int main(void) { unsigned char sw_tmp=0; Inic(); Sistema = OFF; PORTA &= 0xF7; // Led OFF while(1) { sw_tmp = PINA & 0x07; // ler switches switch (sw_tmp) { case sw_ON: // se S1 activado if ((Leitura_AD > 461) && (Leitura_AD < 562)) { Sistema = ON; PORTA |= 8; // Led ON } break; case sw_OFF: // se S2 activado if ( (Leitura_AD > 461) && (Leitura_AD < 562)) { Sistema = OFF; PORTA &= 0xF7; // LED OFF } break; case STOP: // se S3 activado OCR2 = 0; // motor OFF Sistema=OFF; PORTA &= 0xF7; // LED OFF } if (Sistema == ON) { if (Fim_Conversao) { Calcula_PWM(); Fim_Conversao = 0; } if (Flag_TX == ON) { Print(); Flag_TX = OFF; } } } }
int main() { double X, Y, Z; double max, N, t1, t2; double owx, owy, owz, c, e; double Fi, Fj, Fk, F1; int i, j, k, mi, mj, mk; int R, fl, fl1, fl2; int it,f, L0, L1; long int osdt; struct timeval tv1, tv2; it = 0; X = 2.0; Y = 2.0; Z = 2.0; e = 0.00001; L0 = 1; L1 = 0; /* Размеры шагов */ hx = X / in; hy = Y / jn; hz = Z / kn; owx = pow(hx,2); owy = pow(hy,2); owz = pow(hz,2); c = 2 / owx + 2 / owy + 2 / owz + a; gettimeofday(&tv1, NULL); /* Инициализация границ пространства */ Inic(); /* Основной итерационный цикл */ do { f = 1; L0 = 1 - L0; L1 = 1 - L1; for (i = 1; i < in; i++) { for (j = 1; j < jn; j++) { for(k = 1; k < kn; k++) { Fi = (F[L0][i+1][j][k] + F[L0][i-1][j][k]) / owx; Fj = (F[L0][i][j+1][k] + F[L0][i][j-1][k]) / owy; Fk = (F[L0][i][j][k+1] + F[L0][i][j][k-1]) / owz; F[L1][i][j][k] = (Fi + Fj + Fk - Ro(i*hx,j*hy,k*hz)) / c; if (fabs(F[L1][i][j][k] - F[L0][i][j][k]) > e) f = 0; } } } it++; } while (!f); gettimeofday(&tv2, NULL); osdt = (tv2.tv_sec - tv1.tv_sec)*1000000 + tv2.tv_usec - tv1.tv_usec; printf("in = %d ; iter = %d ; E = %f ; T = %ld\n", in, it, e, osdt); /* Нахождение максимального расхождения полученного приближенного решения * и точного решения */ max = 0.0; for(i = 1; i < in; i++) { for(j = 1; j < jn; j++) { for(k = 1; k < kn; k++) { if ( (F1 = fabs(F[L1][i][j][k] - Fresh(i*hx,j*hy,k*hz))) > max ) { max = F1; mi = i; mj = j; mk = k; } } } } printf("Max differ = %f\n in point(%d,%d,%d)\n", max, mi, mj, mk); return 0; }