Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

собственно если это надо то вот полный текст прожки

Отправлено удка 09 апреля 2008 г. 18:53
В ответ на: Заменить на что-нить подходящее из conio.h Типа комбинации из kbhit и getch отправлено Сидоргек 09 апреля 2008 г. 18:44

#include <bios.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <math.h>

#define START 0x80
#define RDY 0x80
#define ERR0 0x40
#define F0 25000.0 // Board freq. in KHz (50000/2)


int freq_meas (char clk, char period, char channel);
unsigned int BA;

void main ()
{
float acur,f[10000],favg,sigm,maxs,maxac;
unsigned int i,dlt,mdlt=0,min,freq,N=10;
unsigned long num=0;
char ChannelNum=0;
int clk=1,prd=1;

clrscr();
_setcursortype(_NOCURSOR);

printf ("DI32-5 Код Схемы:\"D00\" FASTWEL,1999\n");
// -- Определить Базовый адрес ----
for (BA=0x110;BA<0x400;BA+=0x10)
if ((inportb(BA+14)=='D')&&(inportb(BA+15)==0)) break;
if (BA==0x400) {printf("Код Схемы\"D00\"не загружен !");return;}
else printf("Базовый адрес модуля DI32-5 определен:%Xh\n",BA);

gotoxy(20,21);cprintf("[Left],[Right] ... изменить канал измерения");
gotoxy(20,22);cprintf("[PgUp],[PgDown] ... изменить частоту заполнения");
gotoxy(20,23);cprintf("[Up],[Down] ... изменить число периодов");
gotoxy(20,24);cprintf("[Home],[End] ... изменить число усреднений");
gotoxy(20,25);cprintf("[ESC] ... для выхода");

for (;;num++){
err: min=0xFFFF;dlt=0;maxs=0;maxac=0;
if ( kbhit()) {
i=bioskey(0);
if (i== 0x11B) {
textcolor (LIGHTGRAY);
_setcursortype(_NORMALCURSOR); return ;
}
mdlt=0;num=0;
if (i== 0x4700) {if((N*=10)>10000) N=10;}
if (i== 0x4F00) {if((N/=10)<10) N=10000;}
if (i== 0x4900) {if(++clk==256) clk=1;}
if (i== 0x5100) {if(--clk==0) clk=255;}
if (i== 0x4800) {if(++prd==256) prd=1;}
if (i== 0x5000) {if(--prd==0) prd=255;}
if (i== 0x4B00) {if(--ChannelNum<0) ChannelNum=31;}
if (i== 0x4D00) {if(++ChannelNum>31) ChannelNum=0;}
}
// outp (BA1+2,avg);outp (BA1+5,avg);outp (BA2+2,avg);outp (BA2+5,avg);

textcolor (WHITE);
gotoxy(10,5); cprintf(" Канал: %-2d " ,ChannelNum);
gotoxy(10,6); cprintf("Период частоты заполнения, мкс: %3.2f" ,(clk+1)*0.04);
gotoxy(10,7); cprintf("Число периодов входной частоты: %-3d",prd);
gotoxy(10,8); cprintf(" Число усреднений: %-5u",N);
gotoxy(10,9); cprintf(" Номер измерения: %-6lu",num);
textcolor (LIGHTGRAY);

for (i=0,favg=0;i<N;i++) {
if ((freq=freq_meas(clk,prd,ChannelNum)) == 0){
gotoxy(41,11);cprintf(" ");
gotoxy(41,13);cprintf(" ");
gotoxy(41,14);cprintf(" ");
gotoxy(41,16);cprintf(" ");
gotoxy(41,17);cprintf(" ");
gotoxy(41,18);cprintf(" ");
gotoxy(41,19);cprintf(" ");
textcolor (LIGHTRED); gotoxy(10,4); cprintf("Ошибка измерения... ");
goto err;
}
f[i]= (F0*(float)prd)/(float)(freq)/(clk+1);
favg+=f[i];
min=(freq<min)?freq:min;
dlt=(int)(freq-min>dlt)?(int)(freq-min):dlt;
mdlt=(dlt>mdlt)?dlt:mdlt;
gotoxy(10,16);cprintf(" Значение счетчика: %-5u",freq);
textcolor (LIGHTGRAY);
gotoxy(10,17);cprintf(" Минимальное значение счетчика: %-5u",min);
gotoxy(1,18); cprintf(" Отклонение от мин. значения счетчика: %-5u",
dlt);
gotoxy(1,19); cprintf(" Максимальный разброс значений счетчика: %-5u",
mdlt);
}
favg=favg/(float)(N);
sigm=0;
for (i=0; i<N; i++) sigm += ((favg-f[i])*(favg-f[i]));
sigm=sigm/(N-1);
sigm =(float)sqrt(sigm);
maxs=(sigm>maxs)?sigm:maxs;
acur=100*3*sigm/favg;
maxac=(acur>maxac)?acur:maxac;
textcolor (GREEN);
gotoxy(10,11); cprintf(" Усредненная частота,KHz: %-9.4f",favg);
gotoxy(10,13); textcolor (WHITE);
cprintf (" Отклонение от среднего,KHz: %-9.4f",sigm);
gotoxy(10,14); cprintf(" Точность,%%: %-9.4f",acur);
gotoxy(10,4); cprintf(" ");
}
}

int freq_meas (char clk, char period, char channel)
{
unsigned int i,d;

outportb (BA+5,0); // Время антидребезга по всем входам 50 ns
outportb (BA+8,period);
outportb (BA+9,clk);
outportb (BA+7,START|channel);
while (!((i=inportb(BA+7))&RDY));
if (i&ERR0) return 0;
d=inport(BA+10);
return d;
}


Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 89:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru