急51串口数据接收一定量的数据后就不能再接收解决方法
发布时间:2010-06-14 16:01:08 文章来源:www.iduyao.cn 采编人员:星星草
急!51串口数据接收一定量的数据后就不能再接收
我使用的芯片为STC11F04E,我使用串口和其他设备通信,在我调试的时候我使用烧录工具STC-ISP里面自带的串口助手给该芯片发送数据,结果出现在接收了一定数据量的数据后就不能再接收数据。
我的程序另外有一个红外,里面使用的是定时器T0,串口使用的是定时器T1,我串口没使用中断,我采取的是在main的主循环里面接收,麻烦大家帮我看下是否哪里有问题。谢谢!
void UartInit(void) //115200bps@11.0592MHz
{
PCON &= 0x7f; //波特率不倍速
SCON = 0x50; //8位数据,可变波特率
AUXR |= 0x40; //定时器1时钟为Fosc,即1T
AUXR &= 0xfe; //串口1选择定时器1为波特率发生器
TMOD &= 0x0f; //清除定时器1模式位
TMOD |= 0x20; //设定定时器1为8位自动重装方式
// TL1 = 0xFD; //设定定时初值
TL1 = 0;
TH1 = 0xFD; //设定定时器重装值
ET1 = 0; //进制定时器1中断
TR1 = 1; //启动定时器1
}
#endif
//---------------------------
void send_char_com( unsigned char ch)
{
TI= 0 ;
SBUF=ch;
while (TI == 0 );
TI= 0 ;
}
void send_string_com( unsigned char *str, unsigned int strlen)
{
unsigned int k= 0 ;
do
{
send_char_com(*(str + k));
k++;
}
while (k < strlen);
}
unsigned char Receive_char()
{
unsigned char k =0;
if(RI == 1)
{
RI = 0;
k = SBUF;
}
return k;
}
红外部分
void IR_Init(void)
{
TMOD = 0x11 ; //É趨ʱÆ÷0ºÍ1Ϊ16λģʽ1
// TMOD &= 0xF1;
// TMOD &= 0x7F ;
IT0 = 1;
EA = 1;
ET1 = 0;
EX0 = 1;
IRstate = IR_EVENT;
PWR_DN = 1;
//T0_Init();
Power_off = 0;
Push_Power_Key = 0;
P1_5 = 0;
}
主程序部分
while(1)
{
#if 1
if(RI)
{
a = Receive_char();
send_char_com(a);
}
}
这里接收到一个字符后就发送到串口上去,我通过查看那个助手,发现只是开始的时候才能收到数据,过段时间后就不能接收了。
任务很紧急,麻烦大家帮我看看,给我点提示!
------解决方案--------------------
不能接收,你发出去没?用示波器看看
------解决方案--------------------
接点分。。。。。。。。。
------解决方案--------------------
红外响应是需要实习的,而你的串口并不会实时响应。要解决这个问题,最好在里面设置一个中断,红外有输入的时候,马上跳到中断,接收数据。
------解决方案--------------------
解决思路:
1. 中断函数中,如果有调用其它函数,应声明为"再入"函数,即 (reentrant)
2. 一般中断函数的入口,都需要 EA=0, 出口再设置 EA=1
3. 你为什么不考虑用中断接收串口的数据呢 ?
------解决方案--------------------
学习,upupupupupupupupupupupupupupupupupup
------解决方案--------------------
新手来学习!
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
c51串口求助!
串口接收程序如下
void rec_gps(void) interrupt 4 {
uchar str;
uint i,k;
k=0;
i=0;...
-
win7运行CodeWarrior IDE出错
我的本安装了CodeWarrior IDE,一运行就会出现提示:
IDE 4.1 Build 0622 已停止工作。
或者提示:
Unha...
-
关于AT指令控制GSM短信猫的问题
C/C++ code
打开串口
BOOL CComm::OpenComm(const char* pPort,
int nBaudRa...
-
关于51中断求教
各位大虾,我现在要做一个GPS授时的小程序,遇到如下困惑,求大虾们解答:
1 线路板上带有时钟芯片,平时显示时间是...
-
atd指令拨号,如何判断电话状态
在网上找了许久,终于找到一位仁心解决方案,这个指令是可以得到手机当时的状态,但是不管是空号、欠费、...
-
知道在哪跑飞,跑飞的详细原因有谁能解释一下。
今天出现这样的问题:
将这个中断函数注释掉:
#pragma vector=USCI_B2_VECTOR
__in...
-
51程序移植到2051
大牛们,我想吧一个51的程序移植到2051中,用NXP的89V51芯片时用到的I/O口只有P1.0 P1.1 P1.2 3三个,我现在移植到AT...
-
一道课程设计题:基于单片机的波形发生器的设计
设计要求:
1.能产生正弦波、方波、三角波、锯齿波等4种周期性波形,并且可通过调节变...
-
解析单片机最小系统及相关电路
原文出自:电子发烧友论坛——单片机论坛[color=#FF0000][/color]
单片机最小系统单片机最小系统介...
-
单片机学习书籍大全推荐
在电子发烧友论坛里看到了单片机学习资料汇总,特地搜罗了过来,不知道大家看过几本,也希望让需要学习的人 都...