📄 msp430f149-
字号:
/*********************************************************
* SPI控制DA(TLC5620)同步通信 *
* SPI三线主模式 *
* 硬件连接图 *
* P5.0----STE1----DA LOAD *
* P5.1----SIMO1----DA DATA *
* P5.2----SOMI1----DA LDAC *
* P5.3----UCLK1----DA CLK *
* 采用的是: *
Figure 3. Load-Controlled Update Using 8-Bit Serial Word (LDAC = Low)
A1=0 A0=0 RNG=0
*********************************************************/
#include <msp430x14x.h>
#define uint8 unsigned char
#define uint32 unsigned int
#define uint16 unsigned short
#define DAC_RNG 0 // 幅值选择
/* TLC5620由P0口控制,控制I/O定义如下 */
#define CLK1 (1<<3)
#define DAT1 (1<<1)
#define LOAD (1<<0)
#define LDAC (1<<2)
//#define DAC5620CON (CLK1 | DAT1 | LOAD | LDAC)
/* I/O输出操作函数 */
#define CCLK1() P5OUT &= ~CLK1
#define SCLK1() P5OUT |= CLK1
#define CDAT1() P5OUT &=~DAT1
#define SDAT1() P5OUT |= DAT1
#define CLOAD() P5OUT &= ~LOAD
#define SLOAD() P5OUT |= LOAD
#define CLDAC() P5OUT &=~LDAC
#define SLDAC() P5OUT |= LDAC
void DAC5620_Data(uint8 no, uint8 dat);
void PIN_Init(void);
void Delay(void);
int main(void)
{ uint8 i;
PIN_Init(); // 初始化CPU的IO口
while(1) // 发生锯齿波
{
DAC5620_Data(1, i);
DAC5620_Data(2, 0);
DAC5620_Data(3, i);
DAC5620_Data(4, i);
i++;
}
return(0);
}
/****************************************************************************
* 名 称:IRQ_Eint3()
* 功 能:外部中断EINT3服务函数,取反B1控制口。
* 入口参数:无
* 出口参数:无
****************************************************************************/
void PIN_Init(void) // CPU的IO口初始化函数
{
WDTCTL = WDTPW + WDTHOLD; //关闭关门狗
//BCSCTL2 &=0xc0; //XT2CLK+2分频
P5DIR |=0x0f;
CCLK1(); // CLK1 = 0
CDAT1(); // DAT1 = 0
SLOAD(); // LOAD = 1
SLDAC(); // LDAC = 1
}
/****************************************************************************
* 名 称:DAC5620_Data()
* 功 能:DAC芯片TLC5620的控制函数
* 入口参数:uint8 no 通道选择 uint8 dat 输出数值
* 出口参数:无
****************************************************************************/
void DAC5620_Data(uint8 no, uint8 dat)
{ unsigned int bak;
uint8 m;
#if DAC_RNG==0
bak = (dat<<5) | ((no&0x03)<<14);
#else
bak = (dat<<5) | ((no&0x03)<<14) | (1<<13);
#endif
for(m=0; m<11; m++)
{
SCLK1(); // CLK1 = 1
Delay();
if((bak&0x8000) == 0)
{
CDAT1(); // DAT1 = 0
}
else
{
SDAT1(); // DAT1 = 1
}
Delay();
CCLK1(); // CLK1 = 0
Delay();
bak <<= 1;
}
CLOAD(); // LOAD = 0
Delay();
SLOAD(); // LOAD = 1
Delay();
CLDAC(); // LDAC = 0
Delay();
SLDAC(); // LDAC = 1
Delay();
}
void Delay(void)
{ uint32 i;
for(i=0; i<50; i++);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -