Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-дек-18 04:30

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: 2016-май-11 12:19 
Не в сети

Зарегистрирован: 2016-апр-18 13:47
Сообщения: 3
Имеется следующая задача: с помощью генератора подается частота и необходимо подсчитать период импульса и вывести на цифровую индикацию. Подскажите пожалуйста алгоритм создания программы (пошаговый если не сложно), а лучше всего код с комментами. Заранее всем благодарен. С Уважением Proffessor


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2016-май-12 14:31 
Не в сети

Зарегистрирован: 2016-апр-18 13:47
Сообщения: 3
Ребят делаю захват от внутреннего генератора. Считаю период до 9. Ниже код. В чем может быть ошибка, почему не запускается программа?
#include <VE2_CC.h>
#include "int17xxx.h"
#pragma origin 0x8


uns16 time_counter; // ïåðåìåííàÿ çàõâàò çíà÷åíèÿ ïåðèîäà
uns16 Period;// íåîáõîäèìûé ïåðèîä

interrupt iServer(void)
{
multi_interrupt_entry_and_save

PERIPHERAL_service:
if(CA1IF)
{

Period=time_counter;
time_counter = 0;
CA1IF = 0;
}
TMR0_service:
// save on demand: PRODL,PRODH,TBLPTRH,TBLPTRL,FSR0,FSR1
/* process Timer 0 interrupt */
// T0IF is automatically cleared when the CPU vectors to 0x10
// restore on demand: PRODL,PRODH,TBLPTRH,TBLPTRL,FSR0,FSR1
T0CKI_service:
INT_service:
interrupt_exit_and_restore
}
/******************/

void delay ()
{
int32 i;
for(i = 0;i < 50000; ++i)
;
}

void segment (uns16 i, int j)
{
switch (i)
{
case 0: {PORTC = 0b00111111;delay();}
break; // 0
case 1: PORTC = 0b00000110;break; // 1
case 2: PORTC = 0b01011011;break; // 2
case 3: PORTC = 0b01001111;break; // 3
case 4: PORTC = 0b01100110;break; // 4
case 5: PORTC = 0b01101101;break; // 5
case 6: PORTC = 0b01111101;break; // 6
case 7: PORTC = 0b00000111;break; // 7
case 8: PORTC = 0b01111111;break; // 8
}
switch (j)
{
case 0: PORTD = 0b10000000;break; // 1
case 1: PORTD = 0b01000000;break; // 2
case 2: PORTD = 0b00100000;break; // 3
case 3: PORTD = 0b00010000;break; // 4
case 4: PORTD = 0b00001000;break; // 5
case 5: PORTD = 0b00000100;break; // 6
case 6: PORTD = 0b00000010;break; // 7
case 7: PORTD = 0b00000001;break; // 8
}
}



void main(void)
{
GLINTD = 0; // áèò ãëîáàëüíîãî ðàçðåøåíèÿ ïðåðûâàíèé

INTSTA = 0b00001000;// íàñòðîèë - ðàçðåøèë âñå ïåðèôèéíûå ïðåîáðàçîâàíèÿ;

PIE1 = 0b01000100; // íàñòðîèë - ðàçðåøèë ïðåðûâàíèÿ îò çàõâàòà 1 è òàéìåðà 3

PIR1 = 0b01000100; // íàñòðîèë - ïðîèçîøåë çàõâàò 1 è ïðîèçîøëî ïåðåïîëíåíèå òàéìåðà 3

TMR3CS = 0; // èñòî÷íèê âíóòðåííèé òàêòîâûé ñèãíàë FC/4;

TCON2 = 0b01001100; // íàñòðîèë - âêëþ÷èë òàéìåð 3, àêòèâèðîâàë çàõâàò 1; ?

// çàõâàò íà ïåðåäíåì ôðîíòå
CA1ED0 = 1;
CA1ED1 = 0;



// íàñòðîèë ïîðòû êàê âûõîäû
DDRC = 0;
DDRD = 0;

time_counter = 0;
int i; // ïåðåìåííàÿ äëÿ ñ÷åò÷èêà;

i = 0;



while (1)
{
if(Period > 0 && Period < 9)
{segment (Period,i);
delay ();
++i;}

else
Period = 0;



}}
Заранее благодарен!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB