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

 
 
> проблемы с 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
Ответов
impuls-v
сообщение May 10 2006, 21:48
Сообщение #2


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

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



Laksus спасибо большое за проверку и совет.
Проблема была действительно в очень сильной наводке. После того как вчера вечером засунул схемку в экран мусор прекратился, ну и навсякий случай подключил подтягивающий резистор.
По поводу запрета прерываний они у меня тоже запрещены до того момента пока не передастся пакет.
По поводу дребезга думаю просто поставить одновибратор на АГ4, 5.
Так что проблему устранил сам но за помощь все равно большое спасибо.
Go to the top of the page
 
+Quote Post



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

 


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


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