16位DAC向下兼容,7311/8411/7811
3個IO口即可驅動
原來用在msp430g2553,宏定義快速移植
0.png (36.97 KB, 下載次數: 84)
下載附件
2018-6-6 02:23 上傳
單片機源程序如下:
- /*
- * DAC7311.c
- *
- * Created on: 2018年
- * Author: Thinkpad
- */
- /**********DAC8411.c******************/
- #include "global.h"
- #include "f2802x_common/include/gpio.h"
- #include "f2802x_common/include/pie.h"
- #define SAMPLENUM 400 //采樣點數,刪除link cmd前只能200
- unsigned int data[12]={32768,49151,61145,65535,61145,49151,32768,16384,4390,1,4390,16384};
- const unsigned int Data[SAMPLENUM]={32768,33282,33797,34311,34825,35338,35851,36363,36874,37384,37893,38401,38907,39412,39915,40417,
- 40916,41414,41909,42402,42893,43381,43867,44350,44830,45307,45781,46252,46719,47183,47643,48100,
- 48553,49002,49447,49888,50325,50757,51185,51609,52027,52441,52851,53255,53654,54048,54437,54820,
- 55198,55570,55937,56298,56654,57003,57346,57684,58015,58340,58659,58971,59277,59576,59868,60154,
- 60434,60706,60971,61230,61481,61726,61963,62193,62416,62631,62840,63040,63233,63419,63597,63768,
- 63931,64086,64233,64373,64505,64629,64745,64854,64954,65047,65131,65208,65276,65337,65389,65433,
- 65470,65498,65518,65530,65535,65530,65518,65498,65470,65433,65389,65337,65276,65208,65131,65047,
- 64954,64854,64745,64629,64505,64373,64233,64086,63931,63768,63597,63419,63233,63040,62840,62631,
- 62416,62193,61963,61726,61481,61230,60971,60706,60434,60154,59868,59576,59277,58971,58659,58340,
- 58015,57684,57346,57003,56654,56298,55937,55570,55198,54820,54437,54048,53654,53255,52851,52441,
- 52027,51609,51185,50757,50325,49888,49447,49002,48553,48100,47643,47183,46719,46252,45781,45307,
- 44830,44350,43867,43381,42893,42402,41909,41414,40916,40417,39915,39412,38907,38401,37893,37384,
- 36874,36363,35851,35338,34825,34311,33797,33282,32768,32253,31738,31224,30710,30197,29684,29172,
- 28661,28151,27642,27134,26628,26123,25620,25118,24619,24121,23626,23133,22642,22154,21668,21185,
- 20705,20228,19754,19283,18816,18352,17892,17435,16982,16533,16088,15647,15210,14778,14350,13926,
- 13508,13094,12684,12280,11881,11487,11098,10715,10337,9965,9598,9237,8881,8532,8189,7851,
- 7520,7195,6876,6564,6258,5959,5667,5381,5101,4829,4564,4305,4054,3809,3572,3342,
- 3119,2904,2695,2495,2302,2116,1938,1767,1604,1449,1302,1162,1030,906,790,681,
- 581,488,404,327,259,198,146,102,65,37,17,5,1,5,17,37,
- 65,102,146,198,259,327,404,488,581,681,790,906,1030,1162,1302,1449,
- 1604,1767,1938,2116,2302,2495,2695,2904,3119,3342,3572,3809,4054,4305,4564,4829,
- 5101,5381,5667,5959,6258,6564,6876,7195,7520,7851,8189,8532,8881,9237,9598,9965,
- 10337,10715,11098,11487,11881,12280,12684,13094,13508,13926,14350,14778,15210,15647,16088,16533,
- 16982,17435,17892,18352,18816,19283,19754,20228,20705,21185,21668,22154,22642,23133,23626,24121,
- 24619,25118,25620,26123,26628,27134,27642,28151,28661,29172,29684,30197,30710,31224,31738,32253};
- /************************************************************
- * STANDARD BITS
- ************************************************************/
- #define BITA (0x0400)
- #define BITB (0x0800)
- #define BITC (0x1000)
- #define BITD (0x2000)
- #define BITE (0x4000)
- #define BITF (0x8000)
- //--------IO宏定義----------
- #define SYNC_HIGH GPIO_setHigh(myGpio, GPIO_Number_0)//P1OUT |=BIT0
- #define SYNC_LOW GPIO_setLow(myGpio, GPIO_Number_0)//P1OUT &=~BIT0
- #define SCLK_HIGH GPIO_setHigh(myGpio, GPIO_Number_1)//P2OUT |=BIT2
- #define SCLK_LOW GPIO_setLow(myGpio, GPIO_Number_1)//P2OUT &=~BIT2
- #define DIN_HIGH GPIO_setHigh(myGpio, GPIO_Number_2)//P1OUT |=BIT3
- #define DIN_LOW GPIO_setLow(myGpio, GPIO_Number_2)//P1OUT &=~BIT3
- int send_1=0;
- int dacisr_in=0;
- /******************************************************************************************************
- * 名 稱:DAC8411_Init()
- * 功 能:初始化DAC8411
- * 入口參數:無
- * 出口參數:無
- * 說 明:就是初始化相關IO的狀態
- * 范 例:無
- ******************************************************************************************************/
- void DAC_Init()
- {
- //-----設置IO為輸出-----
- //P1DIR |=BIT0+BIT3;
- //P2DIR |=BIT2;
- GPIO_setDirection(myGpio, GPIO_Number_0, GPIO_Direction_Output);
- GPIO_setDirection(myGpio, GPIO_Number_1, GPIO_Direction_Output);
- GPIO_setDirection(myGpio, GPIO_Number_2, GPIO_Direction_Output);
- GPIO_setMode(myGpio, GPIO_Number_0, GPIO_0_Mode_GeneralPurpose);
- GPIO_setMode(myGpio, GPIO_Number_1, GPIO_0_Mode_GeneralPurpose);
- GPIO_setMode(myGpio, GPIO_Number_2, GPIO_0_Mode_GeneralPurpose);
- //-----設置IO初始狀態為高-----
- SCLK_HIGH;
- SYNC_HIGH;
- //先不打開DAC,防止影響1602的GPIO0-2
- PIE_disableInt(myPie,PIE_GroupNumber_1,PIE_InterruptSource_TIMER_0);
- }
- /******************************************************************************************************
- * 名 稱:write2DAC8411(unsigned int Data)
- * 功 能:對DAC8411寫16位數據
- * 入口參數:無
- * 出口參數:無
- * 說 明:共需發18位,頭兩位0,后16位是DAC量化數據
- * 范 例:無
- ******************************************************************************************************/
- void write2DAC(unsigned int Data)
- {
- unsigned int Temp;
- unsigned char i;
- Temp=Data;
- SYNC_LOW; //拉低同步線,傳輸開始
- //-----發送00,代表是非節能模式(節能就停止工作了)。-----
- SCLK_HIGH;
- DIN_LOW; //數據0
- SCLK_LOW;
- SCLK_HIGH;
- DIN_LOW; //數據0
- SCLK_LOW;
- //-----依次發送14位----- 最后兩位無效,數據位只截取前12位 相當于/8 位數越大循環次數多 越慢
- for(i=0;i<14;i++)
- {
- SCLK_HIGH;
- //-----通過位與,判斷最高位是1還是0,已決定發什么數據-----
- if(Temp & BITF)
- {
- DIN_HIGH;
- send_1++;
- }
- else DIN_LOW;
- SCLK_LOW;
- Temp=Temp<<1; //左移一位,永遠發最高位
- }
- SYNC_HIGH; //有效的數據序列是第16個拉高數據線,停止轉換
- }
- /******************************************************************************************************
- * 名 稱: TA0_OnTime()
- * 功 能:TA0的定時事件處理函數
- * 入口參數:無
- * 出口參數:無
- * 說 明:無
- * 范 例:無
- ******************************************************************************************************/
- void DAC_Output()
- {
- static unsigned int i=0;
- static unsigned int MUL=0;
- write2DAC(Data[i]); //寫入正弦表第i位數據
- dacisr_in++;
- // if(freq>600)
- // i=i+freq/100; //每隔 freq/10 取一個點,相當于倍頻
- // else
- i+=add;//需要耗時較多
- if(i>SAMPLENUM-1)
- i=0; //超出
- }
復制代碼
所有資料51hei提供下載:
DAC7311例程.zip
(3.01 KB, 下載次數: 55)
2018-6-5 22:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|