11.03.2020, 21:39
|
|
Гражданин KAZUS.RU
Регистрация: 10.06.2010
Сообщений: 598
Сказал спасибо: 222
Сказали Спасибо 234 раз(а) в 154 сообщении(ях)
|
Re: Proteus общие вопросы
Сообщение от Ganinoff
|
если даже в таком виде не включаются глобальные.
|
все у тебя включается, у тебя тупо отсутствует обработчик прерывания , от слова ВООБЩЕ , открывай мануал на XC8 и читай как описывается функция прерывания
|
|
|
|
12.03.2020, 00:35
|
|
Частый гость
Регистрация: 10.11.2019
Сообщений: 10
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Proteus общие вопросы
Сообщение от DmitriyVDN
|
все у тебя включается, у тебя тупо отсутствует обработчик прерывания
|
Спасибо, уже разобрался.
Согласен, в приведенном примере он отсутствует. Но в примере по первой ссылке еще как присутствует. Нужно было его обозвать по другому для этого компилятора.
Стал отзываться при одном из нижеследующих именований.
Код:
|
interrupt void isr_lo(void)
interrupt void isr_hi(void)
void interrupt isr(void)
void interrupt my_isr(void) |
Еще раз спасибо DmitriyVDN и Мануалу.
|
|
|
|
23.03.2020, 15:28
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: Proteus общие вопросы
Вопрос по script для выдачи в UART. При выдаче в UART в конце каждой строки дублируется последний символ. Не могу найти ошибку. Может кто-то работал с подобными script'ами и может что-то посоветовать.
|
|
|
|
23.03.2020, 16:34
|
|
Почётный гражданин KAZUS.RU
Регистрация: 30.09.2006
Сообщений: 1,560
Сказал спасибо: 158
Сказали Спасибо 661 раз(а) в 431 сообщении(ях)
|
Re: Proteus общие вопросы
Сообщение от pifa
|
Не могу найти ошибку.
|
RETURN потерялся
Код:
|
OUTSTRING:
FOR i=1 TO LEN(s)
d = ASC(SUBSTR(s,i))
GOSUB OUTCHAR
NEXT i
RETURN |
|
|
|
|
24.03.2020, 14:00
|
|
Гражданин KAZUS.RU
Регистрация: 26.12.2005
Сообщений: 596
Сказал спасибо: 24
Сказали Спасибо 68 раз(а) в 45 сообщении(ях)
|
Re: Proteus общие вопросы
Сообщение от Ara41
|
RETURN потерялся
|
Именно оно. Большое спасибо.
|
|
|
|
26.03.2020, 08:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,832
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Proteus общие вопросы
Всем привет ! Народ помогите разобраться . Мега 8 простенькая программа , по приходу импульса на внешнее прерывание выдает на три пина порта В импульсы со сдвигом. Никак не отловлю глюк, почему импульсы на выходе иногда получаются двойной длины. Посмотрите , может у меня протеус глючит ? Что то никак не пойму, отладку пошаговую делал , такое впечатление, что по выходу из прерывания программа возвращается не туда, откуда был вход. Адрес стека что ли сносит ? Проект прилагаю.
__________________
Да здравствует Разум,да сгинет Маразм!
Последний раз редактировалось E_C_C; 26.03.2020 в 09:38.
|
|
|
|
26.03.2020, 17:10
|
|
Гражданин KAZUS.RU
Регистрация: 17.06.2008
Адрес: Украина
Сообщений: 723
Сказал спасибо: 363
Сказали Спасибо 803 раз(а) в 377 сообщении(ях)
|
Re: Proteus общие вопросы
Сообщение от E_C_C
|
Проект прилагаю.
|
E_C_C, а исходник(и)?
|
|
|
|
27.03.2020, 07:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,832
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Proteus общие вопросы
j-Roger, пардон , вот они-
Код:
|
#include ‹mega8.h›
unsigned int time_count;
unsigned int delay_A,delay_B,delay_C,length_A,length_B,length_C ;
unsigned char flag1,flag2,flag3,flag4,flag5,flag6,flag7;
unsigned int delay_time=20;
unsigned int length_pulse=50;
// External Interrupt 1 service routine // прерывание по синхре
interrupt [EXT_INT1] void ext_int1_isr(void)
{
#asm("wdr")
flag1=1;
flag2=1;
flag3=1;
flag4=1;
flag5=1;
flag6=1;
flag7=1;
time_count=0;
}
// Timer2 10mks
interrupt [TIM2_COMP] void timer2_comp_isr(void)
{
#asm("wdr")
if((time_count‹1000)&&(flag7))
{
time_count++;
};
}
void main(void)
{
PORTB=0x00;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x0A;
TCNT2=0x00;
OCR2=0x0A;
GICR|=0x80;
MCUCR=0x0C;
GIFR=0x80;
TIMSK=0x80;
SPCR=0x00;
TWCR=0x00;
WDTCR=0x1E;
WDTCR=0x0E;
#asm("sei")
delay_A = delay_time;
length_A = length_pulse+delay_time;
delay_B = delay_time+333;
length_B = length_pulse+delay_time+333;
delay_C = delay_time+666;
length_C = length_pulse+delay_time+666;
while (1)
{
#asm("wdr")
if(( time_count›=delay_A)&&(flag1)) // выдыдим импульс 1
{
PORTB.3=1;
flag1=0;
};
if(( time_count›=length_A)&&(flag2))
{
PORTB.3=0;
flag2=0;
};
if(( time_count›=delay_B)&&(flag3)) // выдыдим импульс 2
{
PORTB.1=1;
flag3=0;
};
if((time_count›=length_B)&&(flag4))
{
PORTB.1=0;
flag4=0;
};
if((time_count›=delay_C)&&(flag5)) // выдыдим импульс 3
{
PORTB.4=1;
flag5=0;
};
if((time_count›=length_C)&&(flag6))
{
PORTB.4=0;
flag6=0;
flag7=0;
};
};
} |
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
27.03.2020, 16:56
|
|
Гражданин KAZUS.RU
Регистрация: 10.06.2010
Сообщений: 598
Сказал спасибо: 222
Сказали Спасибо 234 раз(а) в 154 сообщении(ях)
|
Re: Proteus общие вопросы
Сообщение от E_C_C
|
пардон , вот они-
|
КМК это из-за установки флагов и сброса счетчика при синхронизации.
к примеру выполнилась проверка на delay_B вывод PORTB.1=1, прилетела синхронизация сбросился счетчик , порт остался в 1 пока счетчик не досчитает до length_B
или нет?
|
|
|
|
27.03.2020, 18:28
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,832
Сказал спасибо: 742
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: Proteus общие вопросы
Синхронизация идет с частотой 100гц , т.е через 10 мсек, первый импульс должен сгенерироваться через 20 микросекунд , следующий через 3333мкс + 20 и третий через 6666мкс+ 20. ширина импульса 50 мкс. До следующего синхроимпульса ещё 3000мкс .Не должно быть пересечений , но они есть. Заметил , что от того как я объявляю переменные - char, integer , unsigned integer , или делаю их volatile integer , картина выходных импульсов меняется . Это вообще за гранью моего понимания. Такое впечатление , что происходят колизии в памяти программ .Иногда в пошаговой отладке я вижу, что происходит выход из прерывания по INT 1 , но часть флагов не выставлена в единицу , или наоборот флаги все в 1, но time_count не обнулился .
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 09:58.
|
|