微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 各位前辈急求各位帮忙,感激不尽。急急急。。

各位前辈急求各位帮忙,感激不尽。急急急。。

时间:10-02 整理:3721RD 点击:
小弟用ATmega16L控制GPRS模块发送短信,GPRS的波特率为9600,程序已经编译通过,但电路板上测试时,就是发不出消息。急求各位大虾帮忙,小弟感激不尽!
#include "iom16v.h"
#include "macros.h"
#include "SHUIPING.H"
#define BAUD 9600                                 
#define FXTAL 12000000
#pragma interrupt_handler USART_Received_Ir:12
unsigned char a,b;
unsigned char TX_Buffer;                        
unsigned char RX_Buffer;                     
unsigned char TX_Flag;         
unsigned char RX_Flag;                  
//串口IO初始化函数
void USART_IO_Init()
{
  DDRD|=BIT(PD1);                             //PD1:TX为输出状态
}
//串口初始化函数
void USART_Init()
{
  unsigned int Temp;
  USART_IO_Init();           
  UCSRA=0x00;      
  UCSRB=0x00;      
  UCSRC|=BIT(URSEL)|BIT(UCSZ1)|BIT(UCSZ0);
  Temp=(FXTAL/BAUD/16)-1;               
  UBRRH=((Temp>>8)&0x00ff);           
  UBRRL=(Temp&0x00ff);
  UCSRB|=BIT(TXEN)|BIT(RXEN)|BIT(RXCIE);   
  SREG|=BIT(7);                     
}
USART_Send(unsigned char *data)
  {
        unsigned char cnt=0;
        while(*(data+cnt))                  
  {
    while(!(UCSRA&(BIT(UDRE))));     
    UDR=*(data+cnt);
    while(!(UCSRA&(BIT(TXC))));     
    UCSRA|=BIT(TXC);
    cnt++;
  }
   }
USART_Received_Ir()
   {
  UCSRB&=~BIT(RXCIE);
  RX_Buffer=UDR;
  RX_Flag=1;  
  UCSRB|=BIT(RXCIE);  
   }
//主函数
void main()
{      
        DDRA=0XFF;
        DDRC=0XFF;
        PORTA=0XFF;
        PORTC=0XFF;
  USART_Init();
  while(1)
  {
  loop://a=PINA;
    b=PINC;
       TX_Flag=(b!=0XFF);              
    if(TX_Flag)
    {
       //Delayms(600000);           
    //RX_Flag=1;
    if(TX_Flag)
    {
       USART_Send("AT\r\n");
       Delayus(2000);
       USART_Send("AT+CMGF=1\r\n");
       Delayus(2000);
       USART_Send("AT+CSCS=\"UCS2\"\r\n");
       Delayus(2000);
       USART_Send("AT+CSMP=17,167,0,24\r\n");
       Delayus(2000);
       USART_Send("AT+CMGS=\"手机号\"\r\n");             //编译时已经通过UNICODE转码
       Delayus(2000);
       USART_Send("发送的内容\r\n");                               //编译时已经通过UNICODE转码     
       Delayus(2000);        
       USART_Send("0x1A");
       }
    Delayms(500);                    
    }
    else
    {
      goto loop;
    }
    Delayhour(2);                  
    if(TX_Flag)
      {
       //RX_Flag=1;
       USART_Send("AT\r\n");                                                                       
       Delayus(2000);                                                                        
       USART_Send("AT+CMGF=1\r\n");                                                               
       Delayus(2000);                                                                          
       USART_Send("AT+CSCS=\"UCS2\"\r\n");                                                         
       Delayus(2000);                                                                              
       USART_Send("AT+CSMP=17,167,0,24\r\n");                                                         
       Delayus(2000);                                                                              
       USART_Send("AT+CMGS=\"手机号\"\r\n");                          //编译时已经通过UNICODE转码
       Delayus(2000);                                                                           
       USART_Send("发送内容\r\n");                                              //编译时已经通过UNICODE转码
       Delayus(2000);                                                                     
       USART_Send("0x1A");
       Delayus(2000);                                                        
      }
    b=PINC;
    TX_Flag=(b!=0XFF);                        
    if(TX_Flag)
    {
      Delayhour(24);
      goto loop;
    }  
    else
    {
      goto loop;
     }         
  }
}

小弟已经折腾好几天了,麻烦各位高手给个解吧。大虾们,快给支个招吧?!小弟在线等!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top