嗨我在项目中发送消息时遇到问题,我正在使用pic16f877a和sim300。主要功能反复运行。在发送的短信中遗漏了一些字符。 我的程序是这样的......
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”会重复运行,并会发送多条消息并发送错过的字符。
答案 0 :(得分:1)
恕我直言:
您的筹码正在重置。这是最可能的原因。
错误或者您已将看门狗定时器设置为 。
缺少字符:
a)芯片在数据传输过程中重置。
b)usart的拇指:
停止向usart填充字节。发送每个字节的前导延迟很小,比如10-20微秒。
通信是异步的,这意味着接收器必须在每个通信单元的开头同步,这是byte
。为了做到这一点,接收器粗暴地使用资源来检测起始位,它的长度(及时)等。因此,如果你尝试发送一个字节序列,你将停止接收器。
您是否尝试过另一个 16F877a的代码? (检查芯片故障)......