0

嗨,我在项目中发送消息时遇到问题,我使用的是 pic16f877a 和 sim300。main 函数重复运行。发送的短信中缺少某些字符。我的程序是这样的......

void main()//main function
{ 
    Serial_init();  // initialization of serial communication
    Send_SMS();
}

void Serial_init()
{
    TRISC=0XC0; 
    TXSTA=0x24;
    SPBRG=129; // set baud rate 9600 Hz for 20MHz fosc
    RCSTA=0x90;
    TXIF=1;
}   

void Send_SMS(void)
{
    USART_puts("AT\0");
    putch1(0x0D);
    Delay_ms4M(200);
    USART_puts("AT+CMGF=1\0");       // switch into text mode

    putch1(0x0D);// ascii of Carriage Return
    Delay_ms4M(200);
    USART_puts("AT+CMGS=\"9741153218\"\0");   // send sms to the number
    putch1(0x0D);   
    Delay_ms4M(200);                            
    USART_puts("Hi this is working LOL\0"); // SMS text
    putch1(0x0A); // new line
    Delay_ms4M(200);
    putch1(0x0D);
    Delay_ms4M(100);
    putch1(0x1A);   // ascii of 'substitute' i.e end of file 
}


void USART_puts(const unsigned char *string)
{
    while(*string)
        putch1(*string++);
} 

void putch1(unsigned char data)
{
    while(TXIF==0);
    TXREG=data;
}

请帮忙

附加细节:所有其他程序运行正常,但如果我调用 send_sms 函数,“main”会重复运行,并且发送了几条缺少字符的消息。

4

1 回答 1

1

恕我直言 :

你的芯片正在复位。这是最可能的原因。

要么它有故障,要么你在某处设置了看门狗定时器


对于缺少的字符:

a) 在数据传输过程中芯片复位。

b) usart 的经验法则:

停止向 usart 填充字节。以 10-20 微秒的小前导延迟发送每个字节。

通信是异步的,这意味着接收器必须在每个通信单元的开头进行同步,这是一个. 为此,接收器会使用资源来检测起始位、它的长度(时间)等。因此,如果您尝试发送字节序列,您将停止接收器。byte


您是否尝试过使用另一个16F877a 的代码?(检查芯片故障)...

于 2013-04-24T10:44:07.890 回答