找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

新人求肋,单片机串口发送和接收的问题?

[复制链接]
admin 发表于 2012-9-2 09:33:38 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
我是新手,用C写了一段串口发送和接收的程序,代码如下:
void SendChar(unchar dat);
void PrintStr(unchar *buf);
void WatchDog(void);
uchar a,b,c;
void WatchDog(void)
{
/*清除看门狗定时标志*/
WDO = !WDO; /*刷新外部看门狗电路*/


}
void UARTInterrupt(void) interrupt 4
{
unchar temp;

if(RI)
{
SendChar('m');
RI=0;
b_rts=0;
temp=SBUF;
switch(temp)
{
case 0x00: a=0x01;break;
case 0x11: b=0x01;break;
case 0x22: c=0x01;break;
default:
SendChar('R');
}

}
}
void T1Interrupt(void) interrupt 3
{
// unsigned char i;
// TF1=0;

TH1 = 0x7d; TL1 = 0xca; /*40MHz,中断时间2mS(CPU倍频)*/

// b_rts = 0;
// b_txd = 1;
RTS = 1;
// TI = 1;
}
void InitSystem(void)
{

//P1 = 0XDf;

/*初始化MPU*/
TMOD = 0x16; /*T0,T1定时方式*/
T2CON = 0x34; /*定时计数器2作波特率发生器*/
SCON = 0x50; /*串口模式 8,1,1,N*/

TH1 = 0x7d; TL1 = 0xca; /*40MHz,中断时间2mS(CPU倍频)*/
RCAP2L = 0xdf; RCAP2H = 0xff; /*40MHz波特率38400bps*/ //CJX A: 2008/11/25




//TR1 = ET1 = 1; /*允许定时器1中断 - 时基发生器*/
ES = PS = 1;
// ES=1; /*允许串口通讯高优先级中断*/
EX0 = PX0 = 1; /*允许外部中断0高优先级电平触发中断*/
// IT0 = 1; /*边沿触发中断*/
//IPH = PX0H;
// TR2=1;
RI=0;
TI=1;
RTS = 1;
EA = 1; /*开中断*/
}
void main(void)
{
InitSystem();
// b_wtd=1;
SendChar('a');SendChar('k');SendChar('i');SendChar('t');SendChar(' ');
PrintStr("SYSTEM POWER UP");

while(1)
{
WatchDog();

RTS=1;

if(a==0x01)
{
SendChar('A');
a=0;
}
if(b==0x01)
{
SendChar('B');
b=0;
}
if(c==0x01)
{
SendChar('C');
c=0;
}
if(ES==0)
{
SendChar('O');
ES=1;
//PrintStr("Communication OK!");
//SendChar('!');
}
}
}

void SendByteUart1(uchar ch)
{
//ES = 0;
TI = 0;
SBUF=ch;
while(TI==0);
TI=0;
//ES = 1;
}
void SendChar(uchar dat)
{
uchar b;
RTS = 0;
// TI=0;

_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SendByteUart1(dat);
b=0x0f;
while(b!=0)b--;
RI=0;
RTS = 1;

}
void PrintStr(uchar *buf)
{
RTS=0;
while(*buf!='\0')
{
SendChar(*buf);
buf++;
}
RTS=1;
}
// ES = 0;

//RTS = 0;
//_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
// while(*buf)
// { SBUF = *buf++; while(TI == 0); TI = 0; WatchDog(); } /*看门狗刷新*/
//RTS = 1;
// ES = 1;
//}

在KEIL 里面用DEBUG调试接收和发送都可以,但是一烧到板子上就只有开机送出的字符,串口无法接收,请问这是怎么会事?
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-24 13:30 , Processed in 0.058364 second(s), 12 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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