| Proteus, KiCAD и другие ECAD Разработчик так или иначе сталкивается с системами автоматизированного проектирования. Данный раздел - по САПР. |
Подскажите микросхему памяти
21.02.2011, 20:46
|
|
|
Прописка
Регистрация: 16.11.2010
Сообщений: 196
Сказал спасибо: 20
Сказали Спасибо 42 раз(а) в 42 сообщении(ях)
|
Re: Подскажите микросхему памяти
Да поглядел Samples по прерываниям там ничего такого чтобы разобраться
|
|
|
|
21.02.2011, 21:13
|
|
|
Прописка
Регистрация: 16.11.2010
Сообщений: 196
Сказал спасибо: 20
Сказали Спасибо 42 раз(а) в 42 сообщении(ях)
|
Re: Подскажите микросхему памяти
Насколько я понял, когда я инициализировал прерывания - разрешил, то если на RB0 приходит высокий уровень должна выполнится функция interrupt my_isr()? или нет?
Примеры ну ож очень лаконичные...
|
|
|
|
21.02.2011, 21:19
|
|
|
Гражданин KAZUS.RUN
Регистрация: 17.08.2008
Сообщений: 770
Сказал спасибо: 52
Сказали Спасибо 450 раз(а) в 202 сообщении(ях)
|
Re: Подскажите микросхему памяти
Справочник по среднему семейству микроконтроллеров PICmicro
http://www.microchip.ru/lit/?mid=1x0
Отличия будут, как и ошибки, но общий принцип понять можно. Лучше DataSheet смотреть.
|
|
|
|
21.02.2011, 21:39
|
|
|
Прописка
Регистрация: 16.11.2010
Сообщений: 196
Сказал спасибо: 20
Сказали Спасибо 42 раз(а) в 42 сообщении(ях)
|
Re: Подскажите микросхему памяти
Решил просто попробовать отловить прерывание при поступлении на RB0 единички и проинвертировать порт D.
|
PHP код:
|
void init(void)
{
INT0IE = 1;
RBIE = 1;
INTEDG0 = 1;
GIE = 1;
ADCON1=0x0F;
TRISA=0;
TRISD=0;
TRISB=0xFF;
}
void interrupt()
{
if(RBIF)
{
PORTD=~PORTD;
RBIF=0;
}
}
void main(void)
{
init();
PORTD = 5;
while(1)
{
}
}
|
Чего еще не учел?
Последний раз редактировалось george carpenter; 21.02.2011 в 21:56.
|
|
|
|
21.02.2011, 21:50
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Подскажите микросхему памяти
Ну вот, прерывание сгенерировали. В отладчике в пошаговом режиме в обработчик вход есть? Если да, то в обработчике принимайте 1й бит, отключайте прерывание и переходите в процедуру, которая будет принимать всё остальное.
Кстати интересно, а что будет, если объявить битовый массив?
|
|
|
|
21.02.2011, 21:55
|
|
|
Прописка
Регистрация: 16.11.2010
Сообщений: 196
Сказал спасибо: 20
Сказали Спасибо 42 раз(а) в 42 сообщении(ях)
|
Re: Подскажите микросхему памяти
Стоп, стоп! Тот кусок что выше так и не сработал. Порт D не проинтвертировался  ну то есть прерывание не правильно обрабатывается. что не так сделал?
|
|
|
|
21.02.2011, 22:01
|
|
|
Гражданин KAZUS.RUN
Регистрация: 17.08.2008
Сообщений: 770
Сказал спасибо: 52
Сказали Спасибо 450 раз(а) в 202 сообщении(ях)
|
Re: Подскажите микросхему памяти
Сообщение от george carpenter
|
|
*PORTD=~PORTD;
|
Не люблю такие вещи. Чтение и тут-же запись. Лучше число писать.
|
|
|
|
21.02.2011, 22:04
|
|
|
Прописка
Регистрация: 16.11.2010
Сообщений: 196
Сказал спасибо: 20
Сказали Спасибо 42 раз(а) в 42 сообщении(ях)
|
Re: Подскажите микросхему памяти
Ну допустим сделал так PORTD=8; и всё равно ноль реакции.
|
|
|
|
21.02.2011, 22:14
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
|
Re: Подскажите микросхему памяти
Попробуйте так
|
Код:
|
void init(void)
{
TRISA=0;
TRISD=0;
TRISB=0xFF;
INTEDG0 = 1;
INT0IE = 1;
GIE = 1;
// PEIE = 1;//Возможно придётся включить
}
void interrupt()
{
if(INT0IF)
{
PORTD=~PORTD;
INT0IE = 0;
}
}
void main(void)
{
init();
PORTD = 5;
while(1)
{
}
} |
|
|
|
|
21.02.2011, 22:16
|
|
|
Гражданин KAZUS.RUN
Регистрация: 17.08.2008
Сообщений: 770
Сказал спасибо: 52
Сказали Спасибо 450 раз(а) в 202 сообщении(ях)
|
Re: Подскажите микросхему памяти
А конфиг какой? Проект надо выкладывать.
void interrupt IntFun(void) - что-такое должно быть.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:53.
|
|