#include "reg52.h" #define uchar unsigned char #define uint unsigned int uchar code table[]="I get "; uchar flag,a,i; void init() { TMOD=0X20; TH1=0XFD; TL1=0XFD; TR1=1; SM0=0; SM1=1; REN=1; EA=1; ES=1; } void main() { init(); while(1) { if(flag==1) { ES=0; for(i=0;i<6;i++) { SBUF=table[i]; while(!TI); TI=0; } SBUF=a; while(!TI); TI=0; ES=1; flag=0; } } } void ser() interrupt 4 { RI=0; a=SBUF; flag=1; } 下面是我的代码复制 #include "reg52.h" #define uchar unsigned char #define uint unsigned int uchar code table[]="I get "; uchar flag,a,i; void delayms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void init() { TMOD=0X20; TH1=0XFD; TL1=0XFD; TR1=1; SM0=0; SM1=1; REN=1; EA=1; ES=1; } void main() { init(); while(1) { a=SBUF; if(RI==1) { for(i=0;i<6;i++) { SBUF=table[i]; delayms(500); } SBUF=a; delayms(500); SBUF=' '; delayms(500); RI=0; } } }
#include "reg52.h" #define uchar unsigned char #define uint unsigned int uchar code table[]="I get "; uchar flag,a,i; void delayms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void init() { TMOD=0X20; TH1=0XFD; TL1=0XFD; TR1=1; SM0=0; SM1=1; REN=1; EA=1; ES=1; } void main() { init(); while(1) { a=SBUF; if(RI==1) { for(i=0;i<6;i++) { SBUF=table[i]; delayms(500); } SBUF=a; delayms(500); SBUF=' '; delayms(500); RI=0; } } }
收藏0 举报
ningling_21 发表于 2013-4-19 19:17 TI只是中断标志,如果不清除,会重复触发串口中断... 如果关闭串口中断,用查询的方式也可以工作... 你这样 ...
喷嚏成风 发表于 2013-4-20 09:52 谢谢,但是TI没清零的话,程序一直处于串口中断,应该不能发送下一个数据才对呀,可是我延时一会儿就可以 ...
查看全部评分
ningling_21 发表于 2013-4-20 10:37 如果TI未清除,如果开了中断的话才会进入中断处理否则不会。 如果上个数据已发送完成,TI未清除也一样能 ...
喷嚏成风 发表于 2013-4-21 17:06 就是说下面如果写一个中断函数的话,ES没等于的话,是不会处理这个函数的是不是? ...
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
人才类勋章
发帖类勋章
时间类勋章
等级类勋章
1
6
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号