本帖最后由 yy温控 于 2009-10-20 08:30 编辑
小弟最近做了一个关于单片机和PC机通信(485通信)的题目,需要单片机接收PC机发送的字符串,但是小弟实在是不明白怎么处理字符串,单个字符我还可以处理。
下面是我的程序,请各位大侠指点迷津。下面红色的地方我不知道怎么改。
(谢谢大家的支持,路过的兄弟给点意见)
#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
#define uchar unsigned char
#define uint unsigned int
void send(unsigned char i);
unsigned char inportb (unsigned int addr);
void Uart_init();
unsigned char receive;
uchar str[]={""} ;
sbit P20=P2^0;
void Timer0_Routine() interrupt 1 //定时器中断
{
TH0=0xb8;
TL0=0X00;
}
void serial_port() interrupt 4 //串口中断
{
if(RI==1)
{
str[0]=SBUF;
str[1]=str[0];
if(str[0]=='a'&&str[1]=='a') //当上位机发送字符 aa ,单片机动作
{
receive=1;
TI=0;
RI=0;
P20=1;
}
else
{
receive=0;
TI=0;
RI=0;
P20=0;
}
}
}
void DelayNS(unsigned int dly) //延时函数
{ unsigned int i;
for(; dly>0; dly--)
for(i=0; i<5000; i++)
_nop_();
}
void main()
{
Uart_init();
while (1)
{
if(receive==1)
{
send(65); //发送内容 A ASCII码
DelayNS(1); //延时
send(66); //B
DelayNS(1);
send(67); //C
DelayNS(1);
send(32); //空格
send(32); //空格
receive=0;
P20=0;
}
}
}
void Uart_init() //串口初始化函数
{
TMOD=0x21;
TCON=0x69;
TH0=0xb8;
TL0=0X00;
TR0=1;
EA=1;
ET0=1;
SCON=0x50;
TH1=0xfd;
TL1=0xfd;
REN=1;
ES=1;
TR1=1;
P20=0;
receive=0;
}
void send(unsigned char i) //单片机发送函数
{
TI=0;
SBUF=i;
while(!TI);TI=0;
} |