为什么我的128串口返回数据不全
作了一个128和手机板TC35i串口通信的程序,当单片机发送“AT\r”时,TC35i应该返回“A T \r \r \n O K \r \n”
可是我的返回只到了“AT\r\n\n”,后面的“OK\r\n”没有收到
硬件上应该没有问题,因为通过串口接发数据都有响应,
#include <iom128v.h>
#include <macros.h>
#include <stdio.h>
#include <string.h>
unsigned int n=0;
unsigned int a;
unsigned int pos=0;
const unsigned char temp="AT\r";
//延时
void delay_1ms(void)
{
unsigned int j;
for (j=1;j<4*143-2;j++)
;
}
void delay(unsigned int m)
{
unsigned int i=0;
for (i=0;i<m;i++)
delay_1ms();
}
//UART0 发送一个字节
void sendchar0(unsigned char d)
{
UDR0=d;
while(!(UCSR0A&0x40)); //等待TXC0置位
UCSR0A|=0x40; //写1清零
}
//IO端口初始化
void IO_init(void)
{
DDRA|=0x08; //IO端口初始化,设置A3为输出
PORTA|=0x08; //PA3输出高电平
DDRD=0xFF; //设置D为输出端
PORTD=0xFE; //PD0置零其他为1
delay(2000); //延时2秒
PORTD|=0x01; //PD0输出高电平
delay(8000);
}
//UART0 正确收到一个字节发出中断
#pragma interrupt_handler usart0_rx_isr:19
void usart0_rx_isr(void)
{
a=UDR0;
n++;
}
//初始化UART0
void uart0_init(void)
{
UCSR0B=0x00;
UBRR0H=0x00;
UBRR0L=0x2F; //波特率9600
UCSR0A=0x20; //UDR0空
UCSR0B=0x98; //接收中断使能,接收使能,发送使能
UCSR0C=0x06; //发送8为字符,上升沿发送,下降沿接收
}
void main()
{
IO_init();
SREG=0x80;
uart0_init();
while(pos<10)
{
sendchar0(temp);//发送短信
pos++;
}
}
波特率9600,晶振7.38,也应该没错,
求求各位高手,谁知道问题在乃 先查一下TC35的命令,它的应答格式有2种.而且可以用AT命令设置的. void usart0_rx_isr(void)
{
a=UDR0;
n++;
}
这里a岂不是要溢出。 不可能是TC35的问题,我做了个短信猫,用同样的TC35i和串口助手调都没问题
a不会溢出吧
a的最大150
而返回才9个字符
帮帮偶啊 很郁闷那 顶 问题没解决啊 存整段返回消息纯属多余,只要检测"OK\r"和"OR\r"两个状态就好了
页:
[1]