Индикацию так реализовала:
// Таблица изображения чисел и символов (0,1,2,3,4,5,6,7,8,9) для индикатора const unsigned char digit[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
#define f 5 // Частота обновления результата измерения в предварительном программном буфере, гц. #define nsum (200/f) // Количество слогаемых при усреднении результата измерения nsum=Fпрер/f. int data, rez, n, temp, SYM[5];
void __attribute__ ((__interrupt__, no_auto_psv)) _T1Interrupt(void) { _T1IF = 0; if (rez==T1) { // перевод 5-ти значного числа в десятично-символьное число data=data+rez; //data - преобразуемое число, n++; if (n==nsum) { data=data/n; if (data > 99999) data=99999; data=data*10; // умножим число на 10, чтобы вывести один знак после запятой temp=data/10000;
SYM[4]=digit[temp]; data=data-temp*10000; temp=data/1000; SYM[0]=digit[temp]; data=data-temp*1000; temp=data/100; SYM[1]=digit[temp]; data=data-temp*100; temp=data/10; SYM[2]=digit[temp]; data=data-temp*10; temp=data; SYM[3]=digit[temp]; data=0; n=0; } } }
Потом передаю через SPI
void SPI1MasterInit(void) { SPI1STATbits.SPIEN = 0; SPI1CON1 = 0; SPI1STATbits.SPIEN = 0; // отключить интерфейс SPI путем сброса бита SPIEN регистра состояния SPI1STAT SPI1CON1 = 0; // очистить регистр управления интерфейса SPI1
// Используем две сигнальные линии (синхронизации передачи SCK1 и выходных данных SDO1), управляются микроконтроллером SPI1CON1bits.DISSCK = 0; // бит DISSCK регистра управления SPI1CON сброшены SPI1CON1bits.DISSDO = 0; // бит DISSDO регистра управления SPI1CON сброшены SPI1CON1bits.MODE16 = 0; // для 8-битной посылки данных бит MODE16 регистра управления сброшен SPI1CON1bits.MSTEN = 1; // микроконтроллер в режиме «ведущего», устанавливаем бит MSTEN SPI1STATbits.SPIEN = 1; // включаем SPI - интерфейс
}
///// Передача данных на управляемый регистр
void peredacha (void) { // передается строка (массив) символов
char *pSYM = SYM[5]; _SPI1IF = 0; SPI1MasterInit(); while (*pSYM!= 0) { // Для передачи одного байта записываем его в регистр SPI1BUF, микроконтроллер выполняет все циклы синхронизации передачи каждого бита
SPI1BUF = *pSYM++; while (_SPI1IF == 0); _SPI1IF = 0; } SPI1STATbits.SPIEN = 0; // выключаем SPI - интерфейс while(1); }
Как измерить интервал в секундах от начала первого сигнала до начала второго?
Сделаю два обработчика прерываний (сигнал 1 появляется на INT0, сигнал 2 появляется на INT1 ), появляются один за другим.Запуталась...как это реализовать.
Сообщение отредактировал yliya - Nov 28 2012, 18:05
|