久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4856|回復: 0
打印 上一主題 下一主題
收起左側

MSP430單片機的ADS7841驅(qū)動程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:51337 發(fā)表于 2013-7-14 16:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. 基于MSP430的ADS7841驅(qū)動程序
  2. ~正常應該在下降沿寫指令,上升沿讀數(shù)據(jù)!
  3. 切記:仔細觀察時序,配置字結束后的第一個時鐘的數(shù)據(jù)是無用數(shù)據(jù),應該左移拋棄
  4. ,下面是代碼部分。
  5. *****************************************************************************
  6. ** 函數(shù)原型:unsigned int ADS7841_Read_Data(unsigned char Channel);
  7. ** 功    能:SPI總線的A/D ADS7841 驅(qū)動程序
  8. ** 入口參數(shù):unsigned char Channel   表示選擇讀取通道
  9. ** 出口參數(shù):unsigned int   返回所讀取得12位數(shù)據(jù)。
  10. ** 說    明:ADS7841為12位A/D,先對其進行設置:數(shù)據(jù)位D0---D7,其中D0---D1是
  11. **           設置ADC的功耗模式,D2是模擬輸入通道設置,H為4個單通道,L為兩個
  12. **           差分輸入,D3為mode,當mode(pin)接地時為12位采樣方式,接高電平時
  13. **           mode為1時8位采集,為0時12位采集,D4---D6為輸入通道選擇,D7為起始位
  14. **-----------------------------------------------------------------------------
  15. ** 修 改 人:
  16. ** 日  期:
  17. *******************************************************************************/
  18. #include <msp430x14x.h>
  19. #define uint      unsigned int
  20. #define uchar       unsigned char
  21. #define ADS_S       0x80    //命令起始位
  22. #define ADS_MODE    0x08    //模式選擇。MODE端選擇直接接高電平,此位不用設置
  23. #define ADS_S_D     0x04    //輸入方式選擇
  24. #define ADS_POWER   0x00    //是否允許掉電
  25. #define DIR_CS      P3DIR|=BIT0
  26. #define ADS_CS_1    P3OUT|=BIT0
  27. #define ADS_CS_0    P3OUT&=~BIT0 //片選
  28. #define ADS_DIR_IN P3DIR|=BIT1 //端口輸出模式
  29. #define ADS_DIN_1   P3OUT|=BIT1 //命令寫入AD
  30. #define ADS_DIN_0   P3OUT&=~BIT1
  31. #define ADS_DIR_OT P2DIR&=~BIT0 //端口為輸入模式
  32. #define ADS_CLK_DIR P4DIR|=BIT4 //端口為輸出模式
  33. #define ADS_CLK_1   P4OUT|=BIT4 //時鐘置1
  34. #define ADS_CLK_0   P4OUT&=~BIT4 //時鐘置0
  35. #define DIR_BUSY    P4DIR&=~BIT0
  36. //#define DATA_IN     ((P4IN>>2 & 0x01)
  37. #define DATA_IN     (P2IN & 0x01)
  38. #define BUSY_IN     (P4IN & 0x01) //讀輸入數(shù)據(jù)
  39. void Check_busy(void);
  40. void SPI_WR(uchar DATA);
  41. void Init_Port(void);
  42. void delay(uint temp);
  43. uint ADS7841_Read_Data(uchar Channel);
  44. uint temp_DATA[100];
  45. void delay(uint temp1)
  46. {
  47. int i;
  48. for(i=temp1;i>0;i--)
  49. {
  50.     ;
  51. }
  52. }
  53. uint ADS7841_Read_Data(uchar Channel) //Channel=0:CH0;1:CH1;2:CH2;3:CH3;
  54. {
  55. uint ADCResult=0;
  56. uchar i,ADS_CHANNEL;
  57. uint TempBit =0;
  58. uchar COMMAND=0;
  59. switch (Channel)
  60. {
  61.      case 0:ADS_CHANNEL=0x10;break; //通道選擇
  62.      case 1:ADS_CHANNEL=0x50;break;
  63.      case 2:ADS_CHANNEL=0x20;break;
  64.      case 3:ADS_CHANNEL=0x60;break;
  65.      default:ADS_CHANNEL=0x10;break;        
  66. }
  67. COMMAND=(ADS_S|ADS_CHANNEL|ADS_S_D|ADS_POWER);
  68. ADS_CLK_0;
  69. ADS_DIN_0;     ///DIN先置0
  70. ADS_CS_0; //;片選信號
  71. //SPI_WR(COMMAND);                //SPI總線寫命令子程序
  72. //ADS_DIR_IN;              //端口定義為輸出模式,上升沿發(fā)送,下降沿接受
  73. for(i=0;i<8;i++)
  74. {
  75.      ADS_CLK_1;
  76.      if( (COMMAND & 0x80) ==0x80)
  77.      {
  78.         ADS_DIN_1;        //寫入指令
  79.      }
  80.      else
  81.      {
  82.         ADS_DIN_0;
  83.      }
  84.      COMMAND<<=1;                   //左移
  85.      delay(5);
  86.      ADS_CLK_0;
  87.      delay(5);                  //模擬SPI串行接口 發(fā)送數(shù)據(jù)                     
  88. }
  89. delay(5);
  90. ADS_CLK_0;
  91. Check_busy();
  92. //delay(5);
  93. for(i=0;i<12;i++)
  94. {                              //上升沿讀出數(shù)據(jù)   
  95.      ADS_CLK_0;
  96.      delay(4);
  97.     if( DATA_IN==0x01 )
  98.      {
  99.        TempBit=1;
  100.      }
  101.      else
  102.      {
  103.        TempBit=0;
  104.      }
  105.     ADS_CLK_1;
  106.     ADCResult=((ADCResult<<1)|TempBit);    //模擬SPI串行接口,接收數(shù)據(jù)
  107.     delay(5);
  108. }
  109.     ADS_CLK_0;
  110. for(i=0;i<4;i++)
  111. {
  112.      ADS_CLK_1;
  113.      delay(5);
  114.      ADS_CLK_0;
  115.      delay(5);
  116. }
  117. ADS_CS_1;                      //屏蔽片選
  118. return ADCResult;
  119. }
  120. void Check_busy(void)
  121. {
  122. int temp;
  123. //DIR_BUSY;                     //端口設置為輸入方式
  124. ADS_CLK_1;
  125. temp=BUSY_IN;
  126. ADS_CLK_0;
  127. while( (temp&0x01)==0)   //檢測到高電平就開始讀數(shù)。。不然會丟一位
  128. {
  129.     ADS_CLK_1;              //讀端口狀態(tài)....
  130.     temp=BUSY_IN;
  131.     //delay(5);                 //
  132.     ADS_CLK_0;
  133. }
  134. //
  135. /* do
  136. {
  137.       ADS_CLK_0;               //讀端口狀態(tài)....
  138.       temp=BUSY_IN;
  139.       delay(5);                 //
  140.       ADS_CLK_1;
  141. }while((temp&0x01)!=0);      //高位為1為忙信號*/
  142. }
  143. void SPI_WR(uchar DATA)
  144. {
  145. uint i;
  146. ADS_DIR_IN;              //端口定義為輸出模式,上升沿發(fā)送,下降沿接受
  147. for(i=0;i<8;i++)
  148. {
  149.      ADS_CLK_1;
  150.      if( (DATA & 0x80) ==0x80)
  151.      {
  152.         ADS_DIN_1;        //寫入指令
  153.      }
  154.      else
  155.      {
  156.         ADS_DIN_0;
  157.      }
  158.      DATA<<=1;                   //左移
  159.      ADS_CLK_0;
  160.      delay(5);                  //模擬SPI串行接口 發(fā)送數(shù)據(jù)                     
  161. }
  162. delay(5);
  163. ADS_CLK_0;
  164. }
  165. void Init_Port(void)
  166. {
  167. P3SEL=0X00;
  168. P4SEL=0X00;
  169. ADS_DIR_IN;
  170. ADS_DIR_OT;
  171. ADS_CLK_DIR;
  172. DIR_BUSY;
  173. DIR_CS;
  174. ADS_CLK_0;
  175. //delay(5);
  176. ADS_CS_1;
  177. // ADS_CLK_1;
  178. }
  179. void main(void)
  180. {
  181. WDTCTL = WDTPW+WDTHOLD; //關看門狗
  182. Init_Port();            //端口初始化
  183. uint flag=0;
  184. uint i;
  185. while(1)
  186. {
  187.     for(i=0;i<5;i++)
  188.     {
  189.       temp_DATA[i]=ADS7841_Read_Data(0);
  190.       delay(10);
  191.     }
  192.     flag=1;
  193. }

  194. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩免费高清视频 | 亚洲成人毛片 | 奇米超碰 | 欧美精品久久久久 | 天堂在线1 | 亚洲第一视频 | 国产精品欧美大片 | 韩日中文字幕 | 国产99视频精品免费播放照片 | 久久久久久久久精 | 亚洲综合首页 | 欧美区在线观看 | 国产精品免费一区二区三区 | 日本久久综合 | 九九热精品免费 | 噜噜噜噜狠狠狠7777视频 | 岛国av免费在线观看 | 久久99成人| 中文字幕在线一区二区三区 | 在线中文av| 免费在线观看成年人视频 | 欧美二区在线 | 91色在线视频 | 久久久久久成人 | 国产午夜精品一区二区三区嫩草 | 男人的天堂在线视频 | 五月婷婷在线视频 | 国产片网站 | 五月槐花香 | 成年人黄色免费视频 | 久久久tv | 三级在线观看 | 精品视频久久久久久 | 久久69精品久久久久久久电影好 | 国产精品久久久久久久午夜 | 国产精品久久九九 | 中文字幕第7页 | 免费久 | 免费一区二区 | 美女激情av| 久久亚洲春色中文字幕久久久 |