晶振12MHz,波特率1200, 程序啟動后單片機主動發出Hello Server, PC使用串口助手應答單片機,當單片機收到PC發來的數據AAH后,將30H-3FH的16個字節發送給PC,當51收到E0H時就發40H-5FH的32個字節數據,若單片機收到其他數據后,則不做任何修改返回PC。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (8.72 KB, 下載次數: 103)
下載附件
2018-10-19 02:15 上傳
單片機源程序如下:
- #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)
2018-10-18 19:09 上傳
點擊文件名下載附件
內含電路圖和代碼 下載積分: 黑幣 -5
|