12楼的JOYME 程序不全,我也补了点,还是不行!呵
#include <reg52.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define MAX_BUF_LEN 50
#define SETBIT(val,bitnum) val |= (1<<bitnum)
#define CLRBIT(val,bitnum) val &= ~(1<<bitnum)
#define isBitSet(val,bitnum) (val & (1<<bitnum) != 0)
#define RXD_FIN 0
#define TXD_START 1
uchar rxd_buf[MAX_BUF_LEN] = {0}; //接收缓冲区
uchar rxd_rdptr = 0; //缓冲区操作指针
uchar rxd_wrptr = 0;
uchar bflags = 0;
uchar * str;
void uart() interrupt 4 //串口中断函数
{
uchar tmp;
if(RI)
{
RI = 0;
tmp = SBUF;
if(tmp == '\n')
SETBIT(bflags, RXD_FIN);
else
rxd_buf[rxd_wrptr++] = tmp;
}
if(TI)
{
TI = 0;
SBUF = rxd_buf[rxd_rdptr++];
if(rxd_rdptr == (rxd_wrptr - 1)) //发送完毕(结束符不发送),重新启动串口接受功能
{
rxd_rdptr = 0;
rxd_wrptr = 0;
REN = 1;
}
}
}
void main()
{
// sys_config();
// uartinit();
TMOD = 0X20;
SCON = 0X50;
TH1 = TL1 = 0XFD;
TR1 = 1;
while(1)
{
if(isBitSet(bflags, RXD_FIN))
{
SETBIT(bflags,TXD_START);
CLRBIT(bflags,RXD_FIN);
rxd_buf[rxd_rdptr++] = '\0'; //加个字符串结束符,以便进行字符串比较
REN = 0;
}
if(strcmp(str,"good") == 0)
P0 = 0x0f;
if(isBitSet(bflags,TXD_START))
{
CLRBIT(bflags,TXD_START);
SBUF = rxd_buf[rxd_rdptr++]; //启动发送,后续字节在发送成功中断自动加载
}
}
}
|