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

 
 
> rx_buffer, как взять данные по определенному адресу
digis14
сообщение Mar 5 2007, 16:37
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 30-09-06
Пользователь №: 20 838



посылаю в uart запрос на получение номера из телефона
приходит так AT+CPBR=1+CPBR: 1,"+79xxxxxxxxx",145,""OK
и помещается в буфер,причем помещается в буфер через раз непонятно почему
работаю с cvavr и proteus
вопрос
как мне проверить что есть плюс в номере, а также длинну и поместить сам номер в переменную ,или
поместить в eeprom чтоб я его мог в нужное время отправить обратно

Сообщение отредактировал digis14 - Mar 5 2007, 16:37
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
digis14
сообщение Mar 7 2007, 22:12
Сообщение #2





Группа: Новичок
Сообщений: 8
Регистрация: 30-09-06
Пользователь №: 20 838



новый вариант и причем работает
Код
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.2 Beta1 Standard
Automatic Program Generator
© Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project :
Version :
Date    : 07.03.2007
Author  : 123                            
Company : 123                            
Comments:


Chip type           : AT90S2313
Clock frequency     : 3,680000 MHz
Memory model        : Tiny
External SRAM size  : 0
Data Stack size     : 32
*****************************************************/
#include <90s2313.h>
#include <delay.h>

#define RXB8 1
#define TXB8 0
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// UART Receiver buffer
#define RX_BUFFER_SIZE 48
char rx_buffer[RX_BUFFER_SIZE];

#if RX_BUFFER_SIZE<256
unsigned char rx_wr_index,rx_rd_index,rx_counter;
#else
unsigned int rx_wr_index,rx_rd_index,rx_counter;
#endif

// This flag is set on UART Receiver buffer overflow
bit rx_buffer_overflow;

// UART Receiver interrupt service routine
interrupt [UART_RXC] void uart_rx_isr(void)
{
char status,data;
status=USR;
data=UDR;
if ((status & (FRAMING_ERROR | DATA_OVERRUN))==0)
   {
   rx_buffer[rx_wr_index]=data;
   if (++rx_wr_index == RX_BUFFER_SIZE) rx_wr_index=0;
   if (++rx_counter == RX_BUFFER_SIZE)
      {
      rx_counter=0;
      rx_buffer_overflow=1;
      };
   };
}

#ifndef _DEBUG_TERMINAL_IO_
// Get a character from the UART Receiver buffer
#define _ALTERNATE_GETCHAR_
#pragma used+
char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
#pragma used-
#endif

// Standard Input/Output functions
#include <stdio.h>

// Declare your global variables here
//=====================================================================
const char szATZ[] = "ATZ\x0d";     //Set to default configuration
const char szATE0[] = "ATE0\x0d";    //Дезактивировать ECHO команды
const char szATCPBS[] = "AT+CPBS=\"SM\"\x0d"; // выбираем записную книжку SIM
const char szATCPBR[] = "AT+CPBR=1\x0d"; // читаем из 1й ячейки SIM
const char szATE1[] = "ATE1\x0d";   // Активизирoвать ECHO команды
const char szATCMGS[] = "AT+CMGS=56\x0d"; // начинаем слать SMS
const char szATSMSStart[] = "0011000B91"; // заголовок СМС

//char arRx[16];
//unsigned char posRx = 0;

char* UART_Recv(char* pnRecv)
{
    *pnRecv = 0;
    return rx_buffer;//arRx;
}

char szSMSRecipientNumber[15] = "555555555555"; // в полном формате
char cp = 0;
char nRecv=0;
char *pBuf;
int main(void)
{
// Declare your local variables here
char e=0;

// Input/Output Ports initialization
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
PORTB=0xFF;
DDRB=0xFF;

// Port D initialization
// Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
// State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
TCCR0=0x00;
TCNT0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer 1 Stopped
// Mode: Normal top=FFFFh
// OC1 output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1H=0x00;
OCR1L=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
GIMSK=0x00;
MCUCR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// UART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// UART Receiver: On
// UART Transmitter: On
// UART Baud rate: 9600
UCR=0x98;
UBRR=0x17;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;

// Global enable interrupts
#asm("sei")
//===================================================================

delay_ms(500);
putsf("ATE0\x0d");  
//delay_ms(100);
//putsf("AT+CPBR=1\x0d");  
delay_ms(500);

//#asm("cli")
//memset(arRx, 0, 32);
//delay_ms(1000);
//#asm("sei")  
putsf("AT+CPBR=1\x0d");
UCR.4=1;
PORTB|=UCR;
delay_ms(2500);
//UCR.4=1;
//========================================================================
        pBuf= UART_Recv(&nRecv);
                delay_ms(50);
        while(pBuf[cp])
        {          
         PORTB.1=0;
            if(pBuf[cp]=='+' && pBuf[cp+1]=='7')//&& pBuf[cp+2]=='9')
            {
                // нашли "+
                PORTB.2=0;
                szSMSRecipientNumber[0] = pBuf[cp]; // 8
                szSMSRecipientNumber[1] = pBuf[cp+1]; // 7
                szSMSRecipientNumber[2] = pBuf[cp+2]; // 2
                szSMSRecipientNumber[3] = pBuf[cp+3]; // 1
                szSMSRecipientNumber[4] = pBuf[cp+4]; // 0
                szSMSRecipientNumber[5] = pBuf[cp+5]; // 9
                szSMSRecipientNumber[6] = pBuf[cp+6]; // 4
                szSMSRecipientNumber[7] = pBuf[cp+7]; // 3
                szSMSRecipientNumber[8] = pBuf[cp+8]; // 6
                szSMSRecipientNumber[9] = pBuf[cp+9]; // 5
                szSMSRecipientNumber[10] = pBuf[cp+10]; // 5
                szSMSRecipientNumber[11] = pBuf[cp+11]; // 5
                //szSMSRecipientNumber[10] = 0x46; // F
                //szSMSRecipientNumber[11] = pBuf[cp+1+11]; // 7
                szSMSRecipientNumber[12] = 0; // EOS
                //DiagOut(0x82);
                 //d--;
                 PORTB.3=0;
                //cp = 241;
                e++;
                break;
                
            }  
            cp++;
            

  
  
          
//=======================================================================
      
    {
      char i=0;
      while (1)    
      {  
      if (i>15)i=0;  //проверка выхода за пределы массива
      putchar(szSMSRecipientNumber[i]);//выводим символ i раз через UART
      i++;
      if(i==15)
      break;      
      };  
    }  
     // while(1){}
    

  
  return;
}


правильно ли я сделал

из char* pBuf = UART_Recv(&nRecv);

char* pBuf ;
pBuf = UART_Recv(&nRecv);

Сообщение отредактировал digis14 - Mar 7 2007, 22:15
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- digis14   rx_buffer   Mar 5 2007, 16:37
- - _Bill   Цитата(digis14 @ Mar 5 2007, 16:37) посыл...   Mar 5 2007, 16:44
- - SasaVitebsk   Вопрос совершенно непонятен. 1) Длину можно посчит...   Mar 5 2007, 16:55
|- - digis14   Цитата(SasaVitebsk @ Mar 5 2007, 16:55) В...   Mar 5 2007, 17:23
- - beer_warrior   Работать с массивом как с операндом позволяет указ...   Mar 5 2007, 17:48
|- - Faradey   я бы на вашем месте смотрел с права на лево... ска...   Mar 5 2007, 19:29
- - digis14   я не так много знаю чтоб реализовать это со слов п...   Mar 5 2007, 19:42
|- - Faradey   вот так тоже можно: Код unsigned char USART0_Rx...   Mar 5 2007, 20:12
|- - Demeny   Цитата(Faradey @ Mar 5 2007, 20:12) вот т...   Mar 6 2007, 11:30
- - digis14   переписал так unsigned char rx_buffer[RX_BUF...   Mar 5 2007, 20:59
- - digis14   RE: rx_buffer   Mar 6 2007, 12:32
|- - Demeny   Цитата(digis14 @ Mar 6 2007, 12:32) да ну...   Mar 6 2007, 14:48
- - digis14   разобраться бы что это char* pBuf = UART_Recv(...   Mar 6 2007, 21:00
|- - Demeny   Цитата(digis14 @ Mar 6 2007, 21:00) ошибк...   Mar 7 2007, 09:50
- - digis14   вот так вот сделал Код#include <90s2313.h...   Mar 7 2007, 14:01


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

 


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


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