sinoway 发表于 2008-6-23 12:16:32

为什么我的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,也应该没错,
求求各位高手,谁知道问题在乃

machao 发表于 2008-6-23 14:17:37

先查一下TC35的命令,它的应答格式有2种.而且可以用AT命令设置的.

liu7894 发表于 2008-6-23 14:54:23

void usart0_rx_isr(void)
{
a=UDR0;
n++;
}

这里a岂不是要溢出。

sinoway 发表于 2008-6-23 17:39:16

不可能是TC35的问题,我做了个短信猫,用同样的TC35i和串口助手调都没问题
a不会溢出吧
a的最大150
而返回才9个字符

帮帮偶啊 很郁闷那

sinoway 发表于 2008-6-25 07:22:49

顶 问题没解决啊

watercat 发表于 2008-6-25 08:35:49

存整段返回消息纯属多余,只要检测"OK\r"和"OR\r"两个状态就好了
页: [1]
查看完整版本: 为什么我的128串口返回数据不全