stc89c52rc单片机串口中断发送问题.docx

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
stc89c52rc 单片机串口中断发送问题 stc89c52rc 单片机串口中断发送问题发表于 2014-5-1 00:33:04 2366 查看 20 回复 只看该作者 倒序浏览我用串口中断发送数据,开始单片机发送正常,也 能接受!当我再次将程序烧录到单片机就发现单片机不能正 常工作了!我的单片机晶振是 11.0592M 的。波特率 9600 ! 单片机工作不正常的表现为:单片机运行熟读变得相当相当 慢,比以前慢了许多!不知道是怎么回事,还请各位高手帮 帮忙,看看我的程序哪里出了问题!在此谢过了! #include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char uchar code ptrData[] ={0x7e,0x04,0xa1,0x00,0x00,0x7e}; //命令//电机正转sbit djz = P 2 //命令 //电机正转 uint txbuffer[]; uint txbuffer[]; //串口发送缓存区 // //发送状态标志 uint bufferhead,bufferCt; void init() TMOD = 0x21; //定时器 1 工作方式 2, 定时器 0 工作方式 1(用于延迟 ) SCON = 0x50; TH1 = 0xfd; //串口 9600 波特率初值 TL1 = 0xfd; TR1=1; EA =1; ES =1; bufferhead=bufferCt=0; }void delay(uint i) uchar j; while(i--) for(j=0;j<115;j++)//1ms for(j=0;j<115;j++) //1ms 基 准延时程序 } } }void uart_senddata(uchar j) uint i; for(i=0;i<6;i++) if(i!=4) txbuffer[bufferCt]=ptrData[i];// 循 环添加待发送数据 bufferCt++; if(i==4) txbuffer[i]=j; bufferCt++; TI=1; //命令数据存缓存期完毕后,立刻触发串口发送中断 }void main() init(); delay(200); uart_senddata(4); delay(100); while(1) djz=0; delay(500); djz=1; delay(500); }void uart_int(void) interrupt 4 if(TI) TI=0; if(bufferCt) SBUF=txbuffer[bufferhead++]; bufferCt--; if(bufferCt==0) bufferhead = 0; //当发送数据个数大于 16 时, bufferhead 清零 }你是不是烧录的时候没有设置晶振的参数啊 我用的 stc-isp 下载软件,对于这个单片机不需要设置晶振参 数啊 我也看不懂你的程序,不过有一点,如果你的单片机 也接收数据,那么串口中断里面也要对串口接收触发的中断 进行处理,就是清 RI, 如果不清除则不断触发中断。谢谢你 的帮助,还真是这个 RI 搞的鬼!一般串口发送是不用中断 的窝,因为发送是主动的。接收才用中断,因为接收是被动 的。可以参考 stc 官网手册,发送一般用 SBUF = temp; while(!TI); TI =0 ; 这样的结构。问题解决就好,一般串口中断都要判断TI 这样的结构。问题解决就好,一般串口中断都要判断 TI 和 RI. 清零再做出对应的中断操作 .恩恩,这个我知道,主要是 开始我发这个数据的时候,时间有点长,照成我的数码管在 扫描显示的时候发生抖动!当时是想到这么写,所以就这么 弄了,用数码管中断扫描显示也能达到目标!只是上次遇到 这个,想摸清这个原因! 不过同样谢谢你的热心回答, 谢谢! 可以用定时器中断不断扫描数码管,那么就不会出现抖动了。

文档评论(0)

zhaoxiaoj + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档