我正在做项目。我想从 gsm 发送短信到手机。我使用 avr 编译器在 atmega16L 控制器中编写了 gsm 调制解调器的 AT 命令。但是有一个问题它不发送短信。请帮我。我的代码在这里。
#include <avr/io.h>
#define F_CPU 4000000UL
#include<stdlib.h>
#include<stdio.h>
#include<avr/io.h>
#include<util/delay.h>
#define USART_BAUDRATE 4800
#define BAUD_PRESCALE ((F_CPU / (USART_BAUDRATE * 16UL)) - 1)
#define LCD_Data PORTB
#define LCD_Control PORTD
#define en PD5
#define rw PD6
#define rs PD7
void LCD_cmd(unsigned char cmd);
void LCD_init();
void LCD_write(unsigned char data);
void lcd_data1(char *string);
void LCD_goto(unsigned char y, unsigned char x);
void usart_send(unsigned char ch);
void usart_init();
unsigned int usart_getch()
unsigned char value,value0,i,j, longi_value[15]={"ok"};
unsigned char text[]={"AT+CMGF=1\r"},numcmd[]={"AT+CMGS=\"03349565360\"\r"}, ctrlz=0x1A ;
void usart_init()
{
UCSRB|= (1 << RXEN) | (1 << TXEN); // Turn on the transmission and reception circuitry
UCSRC|= (1<<URSEL)|(1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes
UBRRL = BAUD_PRESCALE;
UBRRH =(BAUD_PRESCALE >> 8);
UCSRC = UCSRC & 0b11110111; //stop bit
}
unsigned int usart_getch()
{
while (!(UCSRA & (1 << RXC)));
return(UDR); // return the byte
}
void usart_send(unsigned char ch)
{
while(!(UCSRA&(1<<UDRE)));
UDR=ch;
}
int main(void)
{
DDRD=0b11100000; // control port of LCD
DDRB=0xff;
DDRA = 0x00;
DDRC=0xff;
int i = 1;
LCD_init(); //initialization of LCD
lcd_data1("GPS & GSM SYSTEM ");
_delay_ms(1000);
usart_init();
LCD_cmd(0x01);
lcd_data1(" GSM SYSTEM ");// initialization of USART
value=text[0];
for(i=0;value!='\0';i++)
{
value=text[i];
usart_send(value);
_delay_ms(100);
}
_delay_ms(500);
lcd_data1("1");
value=numcmd[0];
for(i=0;value!='\0';i++)
{
value=numcmd[i];
usart_send(value);
_delay_ms(100);
}
_delay_ms(500);
lcd_data1("2");
_delay_ms(1000);
usart_send('k');
usart_send(0x1A);
lcd_data1("3");
LCD_cmd(0x01);
_delay_ms(500);
lcd_data1("send");
// SMS send after this
while(1);
}