以485通信为例,其中包括AT89C52,MAX487芯片和虚拟中端,实现两个单片机之间的通讯。
MAX487-MAX491以及MAX1487是用于baiRS-485与RS-422通信的低功耗收发器,du每个器件中都具有一个驱动器和一zhi个接收器。MAX483、MAX487、MAX488以及daoMAX489具有限摆率驱动器,可以减小EMI,并降低由不恰当的终端匹配电缆引起的反射,实现最高250kbps的无差错数据传输。MAX481、MAX485、MAX490、MAX491、MAX1487的驱动器摆率不受限制,可以实现最高2.5Mbps的传输速率。
这些收发器在驱动器禁用的空载或满载状态下,吸取的电源电流在120μA至500μA之间。另外,MAX481、MAX483与MAX487具有低电流关断模式,仅消耗0.1μA。所有器件都工作在5V单电源下。
驱动器具有短路电流限制,并可以通过热关断电路将驱动器输出置为高阻状态,防止过度的功率损耗。接收器输入具有失效保护特性,当输入开路时,可以确保逻辑高电平输出。
MAX487与MAX1487具有1/4单位负载的接收器输入阻抗,使得总线上最多可以有128个MAX487/MAX1487收发器。使用MAX488-MAX491可以实现全双工通信,而MAX481、MAX483、MAX485、MAX487与MAX1487则为半双工应用设计。
分别对两个单片机下载程序
发送端
- #include
- #define uchar unsigned char
- #define uint unsigned int
- void delay_ms(uint ms)
- {
- uchar time;
- while(ms--)
- for(time=0;time<115;time++);
- }
- void UART_sendOneByte(uchar dat)
- {
- SBUF=dat;//将被发送的单字节数据放入串口SBUF数据发送缓冲器
- while(TI==0);//等待SBUF缓冲器中的数据被发送完毕(发送完毕后TI被硬件写1)
- TI=0;//将TI位(发送完成标志位)清零
- }
- void UART_sendEnter(void)
- {
- UART_sendOneByte(0x0d);
- UART_sendOneByte(0x0a);
- }
- void UART_sendstring(uchar *str)
- {
- while(*str)
- {
- UART_sendOneByte(*str);
- str++;
- }
- }
- void main()
- {
- uchar temp=0;
- TMOD=0x20; //设置定时器T1为方式2
- TH1=0xfd; //波特率9600
- TL1=0xfd;
- SCON=0x40; //串口初始化方式1发送,不接收
- PCON=0x00; //SMOD=0
- TR1=1; //启动T1
-
- while(1)
- {
- UART_sendstring("你好");
- delay_ms(1000);//延时1秒
- UART_sendstring("你好");
- delay_ms(1000);//延时1秒
- UART_sendstring("你好");
- delay_ms(1000);//延时1秒
接收端
- #include
- #define uchar unsigned char
- #define uint unsigned int
- void delay_ms(uint ms)
- {
- uchar time;
- while(ms--)
- for(time=0;time<115;time++);
- }
- void UART_sendOneByte(uchar dat)
- {
- SBUF=dat;//将被发送的单字节数据放入串口SBUF数据发送缓冲器
- while(TI==0);//等待SBUF缓冲器中的数据被发送完毕(发送完毕后TI被硬件写1)
- TI=0;//将TI位(发送完成标志位)清零
- }
- void UART_sendEnter(void)
- {
- UART_sendOneByte(0x0d);
- UART_sendOneByte(0x0a);
- }
- void UART_sendstring(uchar *str)
- {
- while(*str)
- {
- UART_sendOneByte(*str);
- str++;
- }
- }
- void main( )
- {
- uchar temp=0;
- TMOD=0x20; //设置定时器T1为方式2
- TH1=0xfd; //波特率9600
- TL1=0xfd;
- SCON=0x50; //设置串口为方式1接收,REN=1
- PCON=0x00; //SMOD=0
- TR1=1; //启动T1
- while(1)
- {