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

 
 
 
Reply to this topicStart new topic
> УСАПП в CVavr, Не пойму где ошибка
*SERG
сообщение Oct 1 2005, 03:35
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



// Chip: ATMEGA8
// Memory Model: MEGA
// Data Stack Size: 512



#include <MEGA8.H>
#include <stdio.h>
#include <string.h>


char temp_inf[]="";//массив посредник
int schet_bait;//счётчик принятых и переданных байт, организуется для записи в массив и выборки из массива
bit bait_0A;// флаг организуется для определения конца пакета


flash char OKEY[]={"OK"};
flash char ATE0[]={"ATE0"};
flash char CMGF[]={"AT+CMGF=0"};
flash char ENTER[]={0X0D,0X0A,''};


//подпрограмма прерывания по приёму байт
interrupt [12] void intrx(void)
{
temp_inf[schet_bait]=UDR;
if (temp_inf[schet_bait]==0x0A)
{
UCSRA=0X00;
UCSRB=0X48;
}
else schet_bait++;
}


//подпрограмма прерывания по передаче байт от контроллера
interrupt [14] void inttx(void)
{
UDR=temp_inf[schet_bait];
if (temp_inf[schet_bait]==0x0A)
{
schet_bait=0;
UCSRA=0X00;
UCSRB=0X90;
}
else schet_bait++;
}




void main (void)

{

// Объявление переменных


start:
//Настроцка регистров упавления
SREG=0b00000000;
OSCCAL=0XFF;

//Настройка УСАППа
UCSRB=0x48;
UCSRC=0x86;

UBRRH=0x00;
UBRRL=0x59;

strcpyf(temp_inf,ATE0);
UCSRA=0x00;
#asm
sei;
#endasm





// передача пакета
per_kontrollera:
strcatf(temp_inf,ENTER);
bait_0A=0;
schet_bait=0;


//вызываем прерывания передачи


ZIKL:
if (strstrf(temp_inf,ATE0))
{
strcpyf(temp_inf,CMGF);
strcatf(temp_inf,ENTER);
schet_bait=0;
UDR='';
}
goto ZIKL;

}

Программа по задумке доложна работать так.
Изначально передаёт в УСАПП содержимое массива CMGF до тех пор пока не будет передан байт 0А. Потом принемает ATE0 до приёма байта 0А и если действительно принято ATE0, то сново передаёт CMGF.
В реале пердаёт содержимое массива CMGF и при посылке ATE0 на контроллер он молчит
Даг вот несколько вопросов
1) С чем это связанно?Где ошибка?
2) Почемуто не генерируется прерывание по передаче при установке програмно бита TXC регистра UCSRA UCSRA.6=1. Пробовал в АВР СТУДИО не генерируется, не переходит на подпрограмму прервания, думал глюк студии. Но и при прошивке контроллера аналогичная ситуация, поэтому генерирую переход на подпрограмму по передаче UDR=''. Даг почему же не переходит на прерывание?

3)Только начал разбираться, может можно какнибудь проще обмениваться посылками
Работаю на CVAVR 1.24.1с, единственная которую смог сломать smile.gif
Go to the top of the page
 
+Quote Post

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

 


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


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