новый вариант и причем работает
Код
/*****************************************************
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