晶振12MHz,波特率1200, 程序启动后单片机主动发出Hello Server, PC使用串口助手应答单片机,当单片机收到PC发来的数据AAH后,将30H-3FH的16个字节发送给PC,当51收到E0H时就发40H-5FH的32个字节数据,若单片机收到其他数据后,则不做任何修改返回PC。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg51.h>
- char code table[]="hello server!";
- int i=0,j=0;
- int a=0;
- int n=0,m=0;
- char data1[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f};
- char *p=0x40;
- void send(char *n,char *m)
- {
- for(;n<=m;n++)
- {
- SBUF=*n;
- while(!TI);
- }
- }
- void C51() interrupt 4
- {
- if(RI==1)
- {
- a=SBUF;
- RI=0;
- }
- else if(TI==1)
- {
- TI=0;
- }
- }
-
- void main()
- {
- EA=1;
- TMOD=0x20;
- TH1=0xE6;
- TL1=0xE6;
- TR1=1;
- SCON=0x50;
- ES=1;
- for(;p<=0x5f;p++)
- {
- *p=data1[j];
- j++;
- }
- for(i=0;table[i]!='\0';i++)
- {
- SBUF=table[i];
- while(!TI);
- }
- while(1)
- {
- if(a==0xAA)
- {
- send(0x50,0x5f);
- a=0;
- }
- if(a==0xE0)
- {
- send(0x40,0x5f);
- a=0;
- }
- if(a!=0xAA&&a!=0xE0&&a!=0)
- {
- SBUF=a;
- while(!TI);
- a=0;
- }
- }
- }
复制代码
所有资料51hei提供下载:
实验五.zip
(34.62 KB, 下载次数: 120)
|