打印

串口1秒定时发送数据的代码问题,困扰,求帮助,谢谢

[复制链接]
3199|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
meepo|  楼主 | 2012-4-5 23:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//89c52   12MHZ   8位通信
//BR=2400MHz

#include "AT89X52.h"

/*延时程序//////////////////由Delay参数确定延迟时间*/

void msDelay(unsigned int Delay)
{ unsigned int i;
for(;Delay>0;Delay--)
{ for(i=0;i<124;i++)
  {;}
}
}  

void main  (void)
{

TMOD = 0x25;
/*0010 0101    T1定时器、BR发生器、方式2 reload;T0计数器、计脉冲、方式1(16bits)
*/

SCON = 0x40;
/*0100 0000
串口通信方式1、 不允许接收、TI=0
*/

PCON = 0;


TH0 = 0;TL0 = 0;        /*初始计数0
*/

TH1 = 243;TL1 = 243;     /*BR:2400HZ   0xF4H ---------------------
*/

TR0 = 1;               /*开T0,T1
*/

TR1 = 1;


EA = 1;
/*没有开串口中断  */

ES = 0;

ET1=1;       /*T1中断允许,自动清零TF1,并自动赋初值; T0不会溢出
*/

                /*ET0=1;*/



while(1)        /* 循环程序 查询方式
*/

{


msDelay(916);
/* 920
*/


P1_0 = ~P1_0;         /* 测试代码,接二极管*/


TR0 = 0;



SBUF = TL0;
/* TL0; */
  


while(TI==0);
/*等待TI置一,发送低八位字节成功   */

        TI=0;


TR0 = 1;

TL0 = 0;TH0 = 0;




}/*end while */

}/*end main*/

在keil 2中编译的,能编译成功,但存在两个问题:
1.  电脑接收时发现一直能接收到数据,而不是按照1秒接收到一个,且接收到的也不是实际发送的数据,一直是0;
2. 代码中的测试代码,二极管能正常按照1秒进行闪烁
2. 用keil   debug时,程序不能按顺序执行,会出现意为“访问到不能执行的内存区域”的英文提示


希望好心的GGJJ能帮忙分析一下,找下原因,小弟真心谢谢了~!

相关帖子

沙发
ayb_ice| | 2012-4-6 08:22 | 只看该作者
T1做波特率发生器就不要开中断了,开中断就必须有相应的中断程序

使用特权

评论回复
板凳
airwill| | 2012-4-6 09:12 | 只看该作者
楼上正解哪, 一语中的!
毛病在于 T1 中断, 开了中断, 却没有相应的中断服务程序. 编译器可能会把 T1 的中断服务地址分配给 启动文件或main() 函数. 这好了, 一片混乱啦

使用特权

评论回复
地板
liang7143| | 2012-4-6 09:40 | 只看该作者
:)LS二位已经完美解答
偶路过,打酱油

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:善护口意身

9

主题

144

帖子

1

粉丝