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还是一个比较方便使用的串口扩展芯片,在遇到串口不足的情况下可以满足要求。