//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能帮忙分析一下,找下原因,小弟真心谢谢了~! |