本文包含原理图、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调试接收和发送都可以,但是一烧到板子上就只有开机送出的字符,串口无法接收,请问这是怎么会事? |