📄 drive.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 + -