реклама на сайте
подробности

 
 
> проблемы с AVR, глюк AVR или ?
impuls-v
сообщение May 8 2006, 07:03
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 15-01-06
Пользователь №: 13 190



Кто может помогите с одной проблемой.
Написал небольшую программу, и сталкнулся с такой проблемой нужно по прерыванию от внешего входа INT1 отправить пакет по rs232 в комп. Однако вместо одного пакета программа зацикливается на прерывании INT1 и шлет заданный пакет постоянно. Хотя даже прерывание по входу и небыло.

Если кто может зашейте данную программу в контроллер и проверьте, может быть контроллер с глюком, потому что прерывание по внешнему входу использовал много раз и все было нормально.
Ниже приведена часть моей программы из нее удалено все лишнее.

Код
#include <mega8535.h>
// частота кристалла [Гц]
#define xtal 16000000
// глобальные переменные
unsigned char dd1, mm, tm, hh, date, transmit, F1;
                                              
void main(void)
{
DDRB=0x00; //порт B как вход
PORTB=0xff;
MCUCR|=0x3C; // прерывание INT1 по переднему фронту
// инициализация UART  
UBRRL=0x67; //скорость 9600 бит/с
UCSRB|=0x98;  //разреш прерыв по приему и прием и передачу.
UCSRC|=0x86; // 8-ми битовый кадр          
#asm("sei");  // разрешение глобальных прерываний (установка бита 07 SREG)
GIFR=0x00;
GICR=0x80;  //прерывание по внешнему входу INT0        
dd1=0xCF;
mm=0xD1;
tm=0xD2;
hh=0xD3;
while (1);      
}    

interrupt [EXT_INT1] void INT1(void)
{
UCSRB|=0x20;  //разреш прерыв по опустош UDR
transmit=-1;
  date=PINB;  //читаю данне с порта
  UDR=0xCC;     //  отпровляю синхрослово - начало пакета
}
    
interrupt [USART_DRE] void DRE(void)
{
transmit++;
if (transmit==0) UDR=dd1;
if (transmit==1) UDR=mm;
if (transmit==2) UDR=tm;
if (transmit==3) UDR=hh;
if (transmit==4) { UDR=date; // отпровляю байт данных
transmit=-1; // сбрасываю счетчик байт
UCSRB&=0xdf;} // запрещаю прерывание по опустошению UDR
}


Вот такой пакет должен получится :"CC CF D1 D2 D3 FC"
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
haker_fox
сообщение May 10 2006, 02:02
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата([banned] @ May 9 2006, 22:03) *
Цитата(haker_fox @ May 8 2006, 11:59) *

при записи во "флаговые" регистры числа 0, соответствующие разряды регистра устанавливаются в 1, поэтому и возникает прерывание.


вам и правда не стоит пользоваться визадом - а то еще ченить придумаете

только ДШ НО ВНИМАТЕЛЬНО !


Да, здесь я действительно ошибься. Даташита не было под рукой.

Цитата(impuls-v @ May 10 2006, 06:07) *
Люди я конечно благодарен за подсказки, но всеже меня интересует другое.
У кого есть возможность прошейте в контроллер и посмотрите что выдает в комп.
Потомучто у меня сложилось впечатление что это или контроллер с глюком или это наводки НО ТАКИЕ БОЛЬШИЕ что срабатывает прерывание, что то маловероятно.


Вы пробывали прогнать программу в AVRStudio, ну или в VMlab'е? Какие результаты?


--------------------
Выбор.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 21:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.01361 секунд с 7
ELECTRONIX ©2004-2016