// 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