一主机,用STC8A8K64S4,一从机,用STC89C52,用开发板上的MAX485模块(两个),进行通信,一直无法实现,以下是主机和从机的程序,求指点。
主机程序:
- #include "stc8.h"
- #include "intrins.h"
- typedef unsigned char uchar;
- typedef unsigned int uint;
- #define FOSC 11059200L
- #define BAUD 4800
- #define BN 8
- bit busy;
- sbit RS485_DIR = P0^4;
- uchar rebuf[8];
- uchar trbuf[8]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x66,0xf8};
- void delay(unsigned int ms)
- {
- unsigned char i;
- while(ms--)
- {
- for(i=0;i<110;i++);
- }
- }
- void master(uchar command)
- {
- uchar aa,i;
- RS485_DIR=1;
- S3BUF=command;
- while(S3TI==0);
- delay(5);
- S3CON &= ~S3TI;
- RS485_DIR=0;
- while(!S3RI);
- S3CON &= ~S3RI;
- aa=S3BUF;
- if(aa==0x02)
- {
- for(i=0;i<BN;i++)
- {
- while(!S3RI);
- S3CON &= ~S3RI;
- rebuf[i]=S3BUF;
- }
- }
- if(aa==0x01)
- {
- RS485_DIR=1;
- for(i=0;i<BN;i++)
- {
- S3BUF=trbuf[i];
- while(!S3TI);
- S3CON &= ~S3TI;
- }
- }
- }
- void ConfigUART(uint Baud)
- {
- RS485_DIR=1;
- S3CON = 0x10;
- AUXR = 0x10;
- T2L = (65536 - (FOSC/4/Baud/12));
- T2H = (65536 - (FOSC/4/Baud/12))>>8;
-
- }
- void main()
- {
- uchar j;
- P_SW2 =0x00; //(P0.0/RxD3, P0.1/TxD3)
- ConfigUART(BAUD);
- // EA = 1;
- while(1)
- {
- master(0x01);
- master(0x02);
- for(j=0;j<BN;j++)
- {
- P2=rebuf[j];
- delay(10000);
- }
- }
- }
复制代码
从机程序:
- #include "reg52.h"
- typedef unsigned int uint;
- typedef unsigned char uchar;
- sbit RS485DIR=P1^0;
- uchar trbuf[8]={0x00,0xa4,0xf9,0x90,0xb0,0x92,0x66,0xff};
- uchar rebuf[8];
- void delay(uint i)
- {
- int j;
- while(i--)
- {
- for(j=110;j>0;j--);
- }
- }
- void UsartInit()
- { RS485DIR=0;
- SCON=0X50;
- TMOD=0X20;
- PCON|=0X00;
- TH1=0Xfa;
- TL1=0Xfa;
- TR1=1;
- EA=1;
- }
- void main()
- {
- uchar j;
- UsartInit();
- while(1)
- {
- ES=1;
- for(j=0;j<8;j++)
- {
- P0=rebuf[j];
- delay(1000);
- }
- }
- }
- void Usart() interrupt 4
- {
- uchar a,j,i;
- RI = 0;
- ES=0;
- a=SBUF;
- delay(100);
- if(a==0x02)
- {
- RS485DIR=1;
- SBUF=0x02;
- while(!TI);
- TI=0;
- for(j=0;j<8;j++)
- {
- SBUF=trbuf[j];
- while(!TI);
- TI=0;
- }
- }
- if(a==0x01)
- {
- RS485DIR=1;
- SBUF=0x01;
- while(!TI);
- TI=0;
- for(i=0;i<8;i++)
- {
- RS485DIR=0;
- while(!RI);
- RI=0;
- rebuf[i]=SBUF;
- }
- }
- RS485DIR=0;
- ES=1;
- }
复制代码 |