ADC12CTL0 |= ADC12SC; //开启转换 ADC12CTL0 &= ~ADC12SC; //清零
Flag=0; //清零标志位 } } }
6、DAC5615-DAC直接控制测试程序
/********************************************************************
//DM430-A型开发板DAC转换程序,板载TLC5615芯片,10位电压型DAC,5V供电 //程序控制方式采用模拟时序方式,模拟TLC5615时序进行操作,也可以用SPI方式操作 //DAC转换输出直接驱动LED发光二极管DS3,输出由暗变亮,再由亮变暗,循环 ********************************************************************/
#include
#include \ //开发板配置头文件,主要配置IO端口信息
//*********************************************************************** // MSP430IO口初始化
//*********************************************************************** void Port_Init() {
LED8SEL = 0x00; //设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; //设置IO口方向为输出 LED8PORT = 0xFF; //P2口初始设置为FF
P3SEL = 0x00; //设置IO口为普通I/O模式,此句可省
P3DIR |= BIT1 + BIT3; //DIN管脚、SCLK管脚输出模式,DOUT输入模式 P3OUT = 0xFF; //初始值0xFF
P5SEL = 0x00; //设置IO口为普通I/O模式,此句可省 P5DIR |= BIT4; //CS管脚输出模式 P5OUT = 0xFF; //初始值0xFF }
//************************************************************************* // DAC转换程序
//************************************************************************* void DAC_Ser(uint data) {
uchar i;
uint DACDATA2;
DACCS0; //片选DAC,置低有效 SCLK0; //时钟信号拉低
for (i=0;i<16;i++) //尽管是10位DAC,但是其寄存器为16位,只有10位数据有效 {
DACDATA2=data&0x8000; //逐位取出 if(DACDATA2>>15) DIN1; else
DIN0;
SCLK1; //上升沿数据锁存 data<<=1; //移位 SCLK0; }
delay_us(10); DACCS1; SCLK0; }
//************************************************************************* // 主程序
//*************************************************************************
void main(void) {
uint DACDATA;
WDT_Init(); //看门狗初始化 Clock_Init(); //时钟初始化
Port_Init(); //端口初始化,用于控制IO口输入或输出
Close_LED(); while(1) {
for(DACDATA=0x000;DACDATA<0x3ff;DACDATA++) //连续转换,输出电压从小到大 {
DACDATA=DACDATA<<2;
DAC_Ser(DACDATA); //送入DAC进行转换 DACDATA=DACDATA>>2; delay_ms(2); }
//delay_ms(10);
for(DACDATA=0x3ff;DACDATA>0x00;DACDATA--) //连续转换,输出电压从大到小 {
DACDATA=DACDATA<<2;
DAC_Ser(DACDATA); //送入DAC进行转换 DACDATA=DACDATA>>2; delay_ms(2); } } }
7、DAC5615-SPI-DAC通过SPI接口控制测试程序
/********************************************************************
//DM430-A型开发板DAC转换程序,板载TLC5615芯片,10位电压型DAC,5V供电 //采用SPI控制方式驱动,使用SPI0,使用前需要先对SPI进行初始化
//DAC转换输出直接驱动LED发光二极管DS3,输出由暗变亮,再由亮变暗,循环 ********************************************************************/
#include
#include \ //开发板配置头文件,主要配置IO端口信息
//*********************************************************************** // MSP430IO口初始化
//*********************************************************************** void Port_Init() {
LED8SEL = 0x00; //设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; //设置IO口方向为输出 LED8PORT = 0xFF; //P2口初始设置为FF
P3SEL |= 0x0E; //设置IO口为普通I/O模式,此句可省
P3DIR |= BIT1 + BIT3; //DIN管脚、SCLK管脚输出模式,DOUT输入模式 P3OUT = 0xFF; //初始值0xFF
P5SEL = 0x00; //设置IO口为普通I/O模式,此句可省 P5DIR |= BIT4; //CS管脚输出模式 P5OUT = 0xFF; //初始值0xFF }
/************************************************* 函数功能:SPI初始化,使用串口0工作在SPI模式下
操作内容:配置串口为SPI模式以及设置相关寄存器
*************************************************/
void SPI_Init(void) {
P3SEL |= 0x0E; //设置USART0相关IO口功能,CS片选设置为普通IO,3线SPI设置为第二功能 P3SEL &= ~0x11;
P3OUT |= 0x01; //初始化时设置CS为高,SD卡不选 P3DIR |= 0x1B; //对于输入输出方向,第二功能也需要配置 P3DIR |= BIT0;
UCTL0 = SWRST; // 配置SPI接口,初始化前需先置SWRST高
UTCTL0 = CKPH | SSEL1 | SSEL0 | STC; // SPI时钟为SMCLK, 3线模式(STE无效), UCLK延时半个周期, 数据在上升沿输出或输入锁存
UBR00 = 0x02; // 0x02: UCLK/2 (4 MHz), works also with 3 and 4
UBR10 = 0x00; // -\
UMCTL0 = 0x00; // SPI模式下,必须设置该寄存器为00 UCTL0 = CHAR | SYNC | MM | SWRST; // 8位SPI主机模式、复位状态
UCTL0 &= ~SWRST; // 配置完后清零SWRST,必须这样的过程,否则可能出现不可预料错误
ME1 |= USPIE0; // 使能USART0为SPI模式,允许 while (!(IFG1 & UTXIFG0)); // USART0发送缓冲器空 }
//************************************************************************* // SPI发送数据函数
//************************************************************************* void spiSendByte(uchar data) {
TXBUF0 = data; //写数据到发送缓冲器 while ((IFG1&UTXIFG0) ==0); // 如果未准备好,则等待 IFG1&=~UTXIFG0; }
//************************************************************************* // 主程序
//*************************************************************************
void main(void) {
uint da_data,da_data2;
WDT_Init(); //看门狗初始化 Clock_Init(); //时钟初始化
Port_Init(); //端口初始化,用于控制IO口输入或输出
SPI_Init(); Close_LED(); while(1) {
for(da_data=0;da_data<0x03ff;da_data++) {
da_data = da_data<<2;
DACCS0;
da_data2=(da_data&0xff00); da_data2>>=8; spiSendByte(da_data2);
spiSendByte(da_data&0x00ff);
DACCS1;
da_data = da_data>>2;
delay_ms(1); }
delay_ms(100);
for(da_data=0x3ff;da_data>0;da_data--) {
da_data = da_data<<2;
DACCS0;
da_data2=(da_data&0xff00); da_data2>>=8; spiSendByte(da_data2);
spiSendByte(da_data&0x00ff);
DACCS1;
da_data = da_data>>2;
delay_ms(1); }
//连续转换,输出电压从小到大 //使能DAC //提取数据的高8位
//高8位移到低8位,便于赋值 //写数据的低8位到SPI数据寄存器 //关闭使能 //连续转换,输出电压从大到小 //使能DAC //提取数据的高8位
//高8位移到低8位,便于赋值 //写数据的低8位到SPI数据寄存器 //关闭使能
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库MSP430x14x系列单片机程序实例(5)在线全文阅读。
相关推荐: