[an error occurred while processing this directive]
|
ATMega8515 должна дружить с телефоном C45 по шнурку.
(Весь текст тестовой программы ниже.)
Прием по прерыванию в буфер, передача напрямую.
Так вот телефон категорически не отзывается на ATZ, нет даже эха на первый символ А (подслушиваю через тройник, только RX, на СОМ компа).
Если между Mega и телефоном включить компьютер как повторитель- COM1 принял COM2 передал и обратно, то все работает. Программа в компьютере принимает пакет до \r а потом его выдает в другой порт.
В шнурках все перепроверено.
И самое веселое - эта-же програмка, прошитая в AT90S2313 (соотв. изменена инициализация) работает на ура с телефоном.
Где у меня лыжи не едут ????
/*********************************************
Chip type : ATmega8515
Program type : Application
Clock frequency : 4,000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 128
*********************************************/
#include #define RXB8 1 #define FRAMING_ERROR (1< // USART Receiver interrupt service routine #ifndef _DEBUG_TERMINAL_IO_ // Standard Input/Output functions // Timer 0 overflow interrupt service routine //} // Declare your global variables here void main(void) // Input/Output Ports initialization // External Interrupt(s) initialization // Timer(s)/Counter(s) Interrupt(s) initialization // USART initialization // Analog Comparator initialization // Global enable interrupts while (1) };
E-mail:
info@telesys.ru
#include
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#define RX_BUFFER_SIZE 8
char rx_buffer[RX_BUFFER_SIZE];
unsigned char rx_wr_index,rx_rd_index,rx_counter;
// This flag is set on USART Receiver buffer overflow
bit rx_buffer_overflow;
#pragma savereg-
interrupt [USART_RXC] void uart_rx_isr(void)
{
char status,data;
#asm
push r26
push r27
push r30
push r31
in r26,sreg
push r26
#endasm
status=UCSRA;
data=UDR;
if ((status & (FRAMING_ERROR | PARITY_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;
};
};
#asm
pop r26
out sreg,r26
pop r31
pop r30
pop r27
pop r26
#endasm
}
#pragma savereg+
// Get a character from the USART 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
#include
//interrupt [TIM0_OVF] void timer0_ovf_isr(void)
//{
// Place your code here
char chOK[7];
{
// Declare your local variables here
PORTA=0xFF;
DDRA=0xFF;
// Port B initialization
PORTB=0x00;
DDRB=0x00;
// Port C initialization
PORTC=0x00;
DDRC=0xFF;
// Port D initialization
PORTD=0x00;
DDRD=0x00;
// Port E initialization
PORTE=0x00;
DDRE=0x00;
// Timer/Counter 0 initialization
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
MCUCR=0x00;
EMCUCR=0x00;
TIMSK=0x00;
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud rate: 19200
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x0C;
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
// Analog Comparator Output: Off
ACSR=0x80;
#asm("sei")
{
// Place your code here
putsf("\rATZ\r");
gets(chOK,7);
while (strcmpf(chOK,"OK\r")!=0) gets(chOK,7);
putsf("ATE0\r");
gets(chOK,7);
while (strcmpf(chOK,"OK\r")!=0) gets(chOK,7);
putsf("AT+CPBS=\"SM\"\r");
gets(chOK,7);
while (strcmpf(chOK,"OK\r")!=0) gets(chOK,7);
putsf("AT+CPBR=1,8\r");
gets(chOK,7);
while (strcmpf(chOK,"OK\r")!=0) gets(chOK,7);
while (1)
{}
}
Ответы