OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4174|回复: 1

51的串口是怎样发送中断中读取的数据的?

[复制链接]

54

主题

105

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
341
金钱
341
注册时间
2014-10-30
在线时间
0 小时
发表于 2015-5-1 14:02:09 | 显示全部楼层 |阅读模式
5金钱
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
Uchar code table[]=I get //空格也算是一个字符
Void init()
{
TMOD=0x20; //设定T1定时器工作方式2
TH1=0xfd;  //T1定时器装初值
TL1=0xfd;
TR1=1;//启动T1
REN=1;  //允许串口接收
SM0=0;
SM1=1;
EA=1;//开总中断
ES=1//允许串口中断
}
Void main()
{
Init();
While1);//等待中断的发生
{
Ifflag==1) //检测标志位是否为1,检测到为1时说明已经执行过串      口中断服务程序,即收到了数据
{
ES=0//关闭串口中断,若不关闭,仍会进入串口中断,此时检测到的仍为1,则又开始发送
For{i=0;i<6;i++}
{
SBUF=table;//将数组中的字符发送出去
While(!T1); //等待是否发送完毕,发送完成后T1硬件置1
T1=0;  //退出等待
}
SBUF=a;  //发送从中断中读来的数据
while(!TI);
TI=0;
ES=1;
Flag=0
}
}
}
Void ser() interrupt 4
{
R1=0;   //RI0,进入串口中断后必须软件清0
a=SBUF;  //SBUF中的数据读给a(最重要)
Flag=1;  //将标志位置1
}

疑问如下:进入whlie(1)这句程序时,已经执行过串口这段程序a=SBUF,而后关闭串口中断ES=0。那么当执行SBUF=a这句程序时,发送的是串口中a的数据。串口中a的数据为什么也是“i get”?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2015-5-1 22:52:07 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 10:13

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表