C51单片机程序进不了中断函数,SBUF接收不到数据,求大神指教,急急急! 100

#include<stdio.h>#include<reg52.h>#include<string.h>voidUart_Init(void){TMOD=0x20;//定... #include<stdio.h>
#include<reg52.h>
#include <string.h>
void Uart_Init(void)
{
TMOD = 0x20;//定时器1工作方式2
SCON=0x50;
PCON=0x00;//波特率不增加
TH1=0xfa;// 4800波特率,11.0592M
TL1=0xfa;//
RI=0;
EA=1; //开总中断
ES=1; //串口中断允许
TR1=1;
}
void main(void)
{
Uart_Init(); //初始化串口
while(1);

}
void inter() interrupt 4
{
unsigned char ch;
ES=0;
if (RI)
{
ch = SBUF;
}
RI=0;
ES=1;
}
展开
 我来答
做而论道
高能答主

2013-05-03 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.2亿
展开全部
串口收到的数据,应该送到接口,当场显示。

试试如下程序:

#include<reg52.h>

void main(void)
{
//初始化串口
PCON = 0x00; //波特率不增加
SCON = 0x50;
TMOD = 0x20; //定时器1工作方式2
TH1 = 0xfa; //4800波特率,11.0592M
TL1 = 0xfa; //
TR1 = 1;
ES = 1; //串口中断允许
EA = 1; //开总中断

while(1);
}

void inter() interrupt 4
{
unsigned char ch;
if (RI) {
RI = 0;
ch = SBUF;
P1 = ch; //用P1口当场显示
}
}
更多追问追答
追问
我是用GPS模块发送数据的,接收到的数据正常的话应该是$GPRMC,073740.891,V,3018.9681,N,12022.9420,E,,0.00,030513,,,N*6B这种格式,没法在P1口显示。。。。
追答
呵呵,这么多数据呀 !
要从中分离出:经度、纬度、时间、...,这可得编写一个大程序了。

你现在,连一个数据都收不到,还弄那个GPS干吗?

路,得一步一步的走。

应该先用 PC 机,运行串口助手软件,和单片机通信。

把我写的程序,弄好了,能够收取数据了,再研究GPS。
----
在证明了单片机的串口工作正常之后,再为了GPS,修改接收程序如下:

在接收中断程序中,每次中断,仅仅接收一个字符,应该存入一个数组。

收到了$,就存到第一个元素。以后的每次中断,就依次存放数据。

当中断了多少多少次之后,才收齐了《经度》数据,这时,才能去显示。

……

你现在,连一个数据都收不到,还弄那个GPS干吗?

路,得一步一步的走。
鲲水陈04
2013-05-03 · TA获得超过2001个赞
知道小有建树答主
回答量:816
采纳率:25%
帮助的人:527万
展开全部
你要定义一个全局变量,然后在中断函数中对全局变量进行赋值。不然的话,你在man()中没有办法将接受到的数据显示出来。局部变量在函数执行完毕后会被释放。
更多追问追答
追问
能麻烦帮我修改下吗?我把unsigned char ch;放到#include 后面了,还是不行,万分感谢!
追答
我认为你的程序是对的,要不是你测试方法不对,进了中断,但是你不知道,这种情况建议你在中断程序里面控制一个LED指示灯闪烁,这样一旦进中断,你就能看出来。还有一种情况就是你给这个单片机发送的数据不正确,或是波特率不对应,比如你用另一个单片机给他发送9600波特率的数据,就可能接受不到。还有一种情况,就是你接线接错了,你要注意,串口线是要交叉相接的,这个单片机的Tx接另一个单片机的Rx,还有一种情况就是你两个系统没有共地,如果两个系统采用分别供电,不共地也会偶尔出现这种情况。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伊川侠
2013-05-03
知道答主
回答量:18
采纳率:0%
帮助的人:7.2万
展开全部
在这个函数里面void inter() interrupt 4
{
unsigned char ch;
ES=0;
if (RI)
{
ch = SBUF;
}
RI=0;
ES=1;
}
需要再对定时器进行赋值,并且启动定时器
追问
能麻烦帮我修改下吗?我是菜鸟,什么都不会,好人一生平安!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
殇不起91
2013-05-10
知道答主
回答量:5
采纳率:0%
帮助的人:3440
展开全部
麻烦详细介绍
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
linnjing
2013-05-03 · TA获得超过2632个赞
知道大有可为答主
回答量:1230
采纳率:91%
帮助的人:521万
展开全部
你的程序,应该可以进中断,你是怎么测试进不了中断的?!
更多追问追答
追问
我调试,结果SBUF和ch始终为0,不知道为什么,并且串口调试助手能收到数据,但是程序这里就是没反应
追答
如果你是用仿真器的话,可以在中断里面下个断点试试。
SBUF是随时变化的,ch你定义的局部变量,直接看变量不一定准确。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式