1、芯片简介:
MAX3100通用异步收发器是第一个专门用于小型单片机系统,可以通过SPI接口和微控制器通信。MAX3100可以用于RS232、RS485以及红外线的串口转换。
2、硬件电路:
如图所示,将MAX3100的SPI接口分别接到微控制器上相对引脚,TX和RX接RS232或RS485芯片;
将IRQ引脚上拉后接到微控制器的IO上,可以用查询或中断方式进行读写数据;
将SHDN直接上拉,RTS和CTS悬空,晶振采用1.8432MHz.
3、软件设计:
以下软件设计时基于MSP430单片机
//MAX3100初始化函数
unsigned int SPI_Init(void)
{
unsigned char i;
unsigned int read_data;
unsigned int write_data;
write_data = 0xC409;//初始化设置命令,使能FIFO,使能接收中断,1位停止位,波特率19200
SCLK_low;
CS_low;
for(i=0;i<16;i++)
{
if( write_data & 0x8000)
DOUT_high;
else
DOUT_low;
write_data = write_data << 1;
delayus();
SCLK_high;
delayus();
SCLK_low;
}
SCLK_low;
CS_high;
delayms(5);
write_data = 0x4000;//read configuration from MAX3100
SCLK_low;
CS_low;
for(i=0;i<16;i++)
{
if( write_data & 0x8000)
DOUT_high;
else
DOUT_low;
write_data = write_data << 1;
delayus();
SCLK_high;
//*******************************
read_data = read_data << 1;
if( P5IN&0x04 )
read_data = read_data|0x01;
else
read_data = read_data|0x00;
//*******************************
delayus();
SCLK_low;
}
SCLK_low;
CS_high;
delayms(3);
return read_data;
}
//通过SPI接口向MAX3100写数据函数
void SPI_write(unsigned char x)
{
unsigned char i;
unsigned int write_data;
write_data = 0x8000 | x;
SCLK_low;
CS_low;
for(i=0;i<16;i++)
{
if( write_data & 0x8000)
DOUT_high;
else
DOUT_low;
write_data = write_data << 1;
delayus();
SCLK_high;
delayus();
SCLK_low;
}
SCLK_low;
CS_high;
delayms(3);
}
//通过SPI接口向MAX3100读数据函数
unsigned char SPI_read()
{
unsigned char i;
unsigned char read_data;
unsigned int write_data = 0x0000;
SCLK_low;
CS_low;
for(i=0;i<16;i++)
{
if( write_data & 0x8000)
DOUT_high;
else
DOUT_low;
write_data = write_data << 1;
delayus();
SCLK_high;
//*******************************
read_data = read_data << 1;
if( P5IN&0x04 )
read_data = read_data|0x01;
else
read_data = read_data|0x00;
//*******************************
delayus();
SCLK_low;
}
SCLK_low;
CS_high;
delayms(1);
return read_data;
}
4、应用总结:
总体而言,MAX3100还是一个比较方便使用的串口扩展芯片,在遇到串口不足的情况下可以满足要求。