![]() |
Модераторы: PILOT, ManiaK, Mazzi |
![]() ![]() ![]() |
|
SERGSERG |
|
|||
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 4.5.2005 Репутация: нет Всего: нет |
// 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с, единственная которую смог сломать |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Микроконтроллеры (MCU) и микропроцессоры (MPU)" | |
|
На данный раздел помимо Правил форума распространяются текже следующие правила:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, PILOT, ManiaK, UniBomb, Mazzi. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Микроконтроллеры (MCU) и микропроцессоры (MPU) | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |