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

📄 drive.c

📁 MSP430接ST16C55X的串口扩展卡程序
💻 C
字号:
#include<msp430x13x.h>
#include"drive.h"

extern unsigned char comm_sys;
extern unsigned char address;
extern void P1_Init(void);
extern void st16c55x_res();
extern void chioce_com(unsigned char port,unsigned long i);

/*-------------------------------------
               延时函数(精确到ms)
            入口:毫秒的倍数
---------------------------------------*/
void wait_ms(unsigned char i)
{
	unsigned int j;
	for(;i>0;i--)
	{
		for(j=0;j<980;j++);
	}	
}

unsigned char read_address()
{
	unsigned char i;
	P3DIR&=0x33;
	i=P3IN&0xcc;
	i=(i>>4)+((i>>2)&0x03);
	return(i);
}	

/****************************************************************************/
/* 函数名称 :void Uart0_Init(void)                                         */
/* 功    能 :串口uart0初始化函数                                           */
/* 输入参数 :无                                                            */
/* 输出参数 :无                                                            */
/****************************************************************************/
void Uart0_Init(void)
{
  /* 串口0设置 */
  
  UCTL0 = SWRST;                   // 复位串口控制寄存器
  
  UCTL0=0x10;                      //8位数据位,1位停止位,无校验位
     
  UBR00=0x03;                      //波特率9600  32768hz XTAL @9600 = 32768Hz/9600 = 3.41 (000Dh 4Ah )
  UBR10=0x00;  
  UMCTL0=0x4A;          
  
  UTCTL0=0x10;                     //选择波特率发生器的时钟源为辅助时钟
     
  URCTL0 = 0x00;                   //清接收控制寄存器
  ME1 |= 0xC0;                     // 置发送,接收允许标志位

  /* P3.4~P3.5 选择USATR功能 */
  P3SEL|= 0x10;                    // Pin P3.4 used by USART module
  P3DIR|=0x10;                     // Pin P3.4 is IR_TXD
     
  P3SEL|= 0x20;                    // Pin P3.5 used by USART module
  P3DIR &= 0xDF;                   // Pin P3.5 is IR_RXD
  
  UCTL0 &=~ SWRST;                 // Release the UART to operation   
//  IE1=URXIE0|UTXIE0;             // enable UART0 transmit/receive interrupt
  IE1 = URXIE0;                    // enable UART0 receive interrupt
  
}


/*------------------------------------
            串口数据发送程序
        入口:数据首地址  长度
--------------------------------------*/
void send_urt0(unsigned char *add,unsigned char l)
{
	unsigned char i; 
	//_DINT();
	c_485_t;
	for(i=0; i<l; i++)
        {
        	while (!(IFG1 & UTXIFG0));            // USART0 TX buffer ready?
                TXBUF0=*add++;
        }
        wait_ms(2); 
        c_485_r;  
        
        //_EINT();
}	


void system_res()
{
	//关闭看门狗
	WDTCTL = WDTPW + WDTHOLD;  
	DCOCTL = 0xE0;                        // Max DCO 8M
        BCSCTL1 = 0x87;                       // XT2off, max RSEL
	
	//打开led控制口线的输出状态
	LED1_DIR_OUT;
	LED2_DIR_OUT;
	LED3_DIR_OUT;
	LED4_DIR_OUT;
	LED5_DIR_OUT;
	LED1_OFF;
	LED2_OFF;
	LED3_OFF;
	LED4_OFF;
	LED5_OFF;
	//串口初始化
	Uart0_Init();
	c_485_DIR_OUT;
	c_485_r;
	comm_sys=0; 
	_EINT();                         //开总中断 
	address=read_address();
	st16c55x_res();
	chioce_com(1,9600);
	chioce_com(2,9600); 
	chioce_com(3,9600); 
	chioce_com(4,9600);  
	P1_Init();
}	

⌨️ 快捷键说明

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