这是官方代码,把两段例程合并起来,明天测试双串口通讯。
串口1切换
#include "reg51.h"
sfr P_SW1=0xa2;
void main()
{
P_SW1=0x00; //RXD/P3.0, TXD/P3.1
//P_SW1=0x40; //RXD_2/P3.6, TXD_2/P3.7
//P_SW1=0x80; //RXD_3/P1.6, TXD_3/P1.7
//P_SW1=0xc0; //RXD_4/P4.3, TXD_4/P4.4
while (1);
}
串口2切换
#include "reg51.h"
sfr P_SW2 = 0xba;
void main()
{
P_SW2=0x00; //RXD2/P1.0, TXD2/P1.1
//P_SW2=0x01; //RXD2_2/P4.0, TXD2_2/P4.2
while (1);
}
串口3切换
#include "reg51.h"
sfr P_SW2=0xba;
void main()
{
P_SW2=0x00; // RXD3/P0.0, TXD3/P0.1
//P_SW2=x02; // RXD3_2/P5.0, TXD3_2/P5.1
while (1);
}
串口4切换
#include "reg51.h"
sfr P_SW2 = 0xba;
void main()
{
P_SW2=0x00; //RXD4/P0.2, TXD4/P0.3
//P_SW2=0x04; //RXD4_2/P5.2, TXD4_2/P5.3
while (1);
}
UART 1 中断
#include "reg51.h"
#include "intrins.h"
//测试工作频率为11.0592MHz
sfr T2L=0xd7;
sfr T2H=0xd6;
sfr AUXR=0x8e;
sbit P10=P1^0;
sbit P11=P1^1;
void UART1_Isr() interrupt 4
{
if (TI)
{
TI = 0; //清中断标志
P10 = !P10; //测试端口
}
if (RI)
{
RI = 0; //清中断标志
P11 = !P11; //测试端口
}
}
void main()
{
SCON=0x50;
T2L=0xe8; //65536-11059200/115200/4=0FFE8H
T2H=0xff;
AUXR=0x15; //启动定时器
ES = 1; //使能串口中断
EA = 1;
SBUF = 0x5a; //发送测试数据
while (1);
}
UART 2 中断
#include "reg51.h"
#include "intrins.h"
//测试工作频率为11.0592MHz
sfr T2L=0xd7;
sfr T2H=0xd6;
sfr AUXR=0x8e;
sfr S2CON=0x9a;
sfr S2BUF=0x9b;
sfr IE2=0xaf;
#define ES2 0x01
sbit P12=P1^2;
sbit P13=P1^3;
void UART2_Isr() interrupt 8
{
if (S2CON & 0x02)
{
S2CON &= ~0x02; //清中断标志
P12 = !P12; //测试端口
}
if (S2CON & 0x01)
{
S2CON &= ~0x01; //清中断标志
P13 = !P13; //测试端口
}
}
void main()
{
S2CON=0x10;
T2L=0xe8; //65536-11059200/115200/4=0FFE8H
T2H=0xff;
AUXR=0x14; //启动定时器
IE2=ES2; //使能串口中断
EA=1;
S2BUF=0x5a; //发送测试数据
while(1);
}
UART 3 中断
#include "reg51.h"
#include "intrins.h"
//测试工作频率为11.0592MHz
sfr T2L=0xd7;
sfr T2H=0xd6;
sfr AUXR=0x8e;
sfr S3CON=0xac;
sfr S3BUF=0xad;
sfr IE2=0xaf;
#define ES3 0x08
sbit P10 = P1^0;
sbit P11 = P1^1;
void UART3_Isr() interrupt 17
{
if (S3CON & 0x02)
{
S3CON&=~0x02; //清中断标志
P10=!P10; //测试端口
}
if(S3CON&0x01)
{
S3CON&=~0x01; //清中断标志
P11=!P11; //测试端口
}
}
void main()
{
S3CON = 0x10;
T2L = 0xe8; //65536-11059200/115200/4=0FFE8H
T2H = 0xff;
AUXR = 0x14; //启动定时器
IE2 = ES3; //使能串口中断
EA = 1;
S3BUF = 0x5a; //发送测试数据
while (1);
}
UART 4 中断
#include "reg51.h"
#include "intrins.h"
//测试工作频率为11.0592MHz
sfr T2L=0xd7;
sfr T2H=0xd6;
sfr AUXR=0x8e;
sfr S4CON=0x84;
sfr S4BUF=0x85;
sfr IE2=0xaf;
#define ES4 0x10
sbit P10=P1^0;
sbit P11=P1^1;
void UART4_Isr() interrupt 18
{
if (S4CON & 0x02)
{
S4CON &= ~0x02; //清中断标志
P10 = !P10; //测试端口
}
if (S4CON & 0x01)
{
S4CON &= ~0x01; //清中断标志
P11 = !P11; //测试端口
}
}
void main()
{
S4CON = 0x10;
T2L = 0xe8; //65536-11059200/115200/4=0FFE8H
T2H = 0xff;
AUXR = 0x14; //启动定时器
IE2 = ES4; //使能串口中断
EA = 1;
S4BUF = 0x5a; //发送测试数据
while (1);
}
|