⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 st16c554d.c

📁 MSP430接ST16C55X的串口扩展卡程序
💻 C
字号:

#include "st16c554d.h"

/****************************************************************************/
/* 函数名称 :void StPinInit(void)                                          */
/* 功    能 :st16c554d的pin初始化                                          */
/* 输入参数 :无                                                            */
/* 输出参数 :无                                                            */
/****************************************************************************/
void StPinInit(void)
{
	DATA_DIR_OUT;
        RW_DIR_OUT;
        A0_DIR_OUT;
        A1_DIR_OUT;
        A2_DIR_OUT;
        A3_DIR_OUT;
        A4_DIR_OUT;
        CS_DIR_OUT;
        RXDTXDRDY_DIR_IN;
}

/****************************************************************************/
/* 函数名称 :void SetPort(uchar addr)                                      */
/* 功    能 :st16c554d设置地址,通道                                        */
/* 输入参数 :addr:地址                                                     */
/* 输出参数 :无                                                            */
/****************************************************************************/
void SetPort(uchar addr)
{
	if((addr & 0x01) == 0x01)
	A0_H;
        else
        A0_L;
        if((addr & 0x02) == 0x02)
        A1_H;
        else
        A1_L;
        if((addr & 0x04) == 0x04)
        A2_H;
        else
        A2_L;
        if((addr & 0x08) == 0x08)
        A3_H;
        else
        A3_L;
        if((addr & 0x10) == 0x10)
        A4_H;
        else
        A4_L;
}

/****************************************************************************/
/* 函数名称 :uchar Read(uchar cha,uchar addr)                              */
/* 功    能 :读某个通道的寄存器值                                          */
/* 输入参数 :cha,通道,addr:地址                                          */
/* 输出参数 :读到的一个字节                                                */
/****************************************************************************/
uchar Read(uchar cha, uchar addr)
{
  uchar dat;
  dat = 0;
  DATA_DIR_IN;
  _NOP();
  READ_ST;

  SetPort(cha + addr);            //A0~A4 地址,通道
  _NOP();
  CS_L;
  _NOP();
  _NOP();
  _NOP();
  dat = DATA_IN;
  _NOP();
  _NOP();
  _NOP();
  CS_H;
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  
  DATA_DIR_OUT;
  _NOP();  
  return dat;
}

/****************************************************************************/
/* 函数名称 :void Write(uchar cha,uchar addr, uchar dat)                   */
/* 功    能 :写某个通道的寄存器                                            */
/* 输入参数 :cha,通道,addr:地址,通道 ;dat:命令                        */
/* 输出参数 :无                                                            */
/****************************************************************************/
void Write(uchar cha,uchar addr, uchar dat)
{
  DATA_DIR_OUT;
  WRITE_ST;
  SetPort(cha + addr);
  _NOP();
  CS_L;
  _NOP();
  _NOP();
  _NOP();
  DATA_OUT = dat;
  _NOP();            //setup
  _NOP();
  _NOP();   
  CS_H;        
  _NOP();            //hold
  _NOP();
  _NOP();         
  READ_ST; 
  _NOP();
  _NOP();
  _NOP(); 
  _NOP();
  _NOP();
  _NOP();
}

/****************************************************************************/
/* 函数名称 :void ComChanelInit(uchar cha)                                 */
/* 功    能 :某个通道的寄存器初始化                                        */
/* 输入参数 :cha:通道 ;                                                  */
/* 输出参数 :无                                                            */
/****************************************************************************/
void ComChanelInit(uchar cha)
{
  uchar aa = 0;
////////  
  Write(cha, LCR_ADDR, 0x00);
  Write(cha, IER_ADDR, 0x00);
////////  
  Write(cha, LCR_ADDR, 0x80);             //bit7-1 设置特殊功能寄存器允许位
  Write(cha, DLM_ADDR, 0x00);
  Write(cha, DLL_ADDR, 0x0C);             //晶振1。8432M,波特率9600
  Write(cha, LCR_ADDR, 0x03);             //8位数据位,1位停止位,无校验,no break  
  Write(cha, FCR_ADDR, 0x01);             //FIFO使能
  Write(cha, FCR_ADDR, 0x07);             //FIFO使能,RCVR\XMIT FIFOreset,DMA mode0,接收trigger 1个字节
//  Write(cha, FCR_ADDR, 0x00);
  
  aa = Read (cha, ISR_ADDR);
  aa = aa & 0xC0;
  if(!aa)
    aa = 1;                              //port没有使用FIFO功能,因此没有设置FIFO Enable成功
  Write(cha, IER_ADDR, 0x01);             //receive holding register INT 
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -