找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1260|回復: 1
打印 上一主題 下一主題
收起左側(cè)

ATMEGA16單片機+AD7715采集陀螺儀的驅(qū)動程序

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:335334 發(fā)表于 2019-4-27 21:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
,用ATMEGA16編寫,使用AD7715做AD采集,16BIT精度

單片機源程序如下:
  1. #include<avr/io.h>  
  2. #include<stdio.h>
  3. #include <avr/interrupt.h>
  4. #include <avr/signal.h>

  5. #define uchar unsigned char
  6. #define uint unsigned int
  7. #define ulong unsigned long

  8. #define RDY (PINA&_BV(5))

  9. #define RES_1 PORTA|=_BV(5)
  10. #define RES_0 PORTA&=~_BV(5)


  11. static uint g_aAdValue[100]; //A/D 轉(zhuǎn)換緩沖區(qū)

  12. unsigned long int results=0;
  13. uint jiaodu,zhong;
  14. uint adc;
  15. int vjiao;
  16. long fx;
  17. /*----------------------------------------------------------------------------
  18. 延時一些時間
  19. ------------------------------------------------------------------------------*/
  20. void delay10ms(unsigned int x)
  21. {
  22. unsigned char i,j,k;
  23. for(i=0;i<x;i++)
  24.   for(j=0;j<10;j++)
  25.    for(k=0;k<120;k++);
  26. }
  27. void delay(unsigned int x)
  28. {

  29. while(x--)
  30. {;}
  31. }
  32. /*----------------------------------------------------------------------------
  33. 初始化IO口
  34. ------------------------------------------------------------------------------*/
  35. void IoInit(void)
  36. {
  37. DDRA=0X0F;
  38. PORTA=0Xff;
  39. //DDRD=0Xff;
  40. //PORTD=0Xff;
  41. }

  42. void InitS() //初始化串口
  43. {
  44. UBRRL=51;//設(shè)置波特率為9600
  45. UCSRB|=_BV(RXEN)|_BV(TXEN);//允許串口接受
  46. // UCSR1B|=_BV(RXCIE);//允許串口中斷



  47. }

  48. void SPI_SET(void)                                            //SPI初始化
  49. {
  50.            DDRB=0XBE;                                                 //DRDY接PB1,設(shè)置PB1為輸入口
  51.          PORTB=0XFF;
  52.          PORTB=0XEF&PORTB;                                 //復位接PB4,此處為拉低PB4
  53.          SPCR=0X5c;                                                   //設(shè)置SPI使能,工作于主機狀態(tài),
  54.                                                                           //并設(shè)CPOL=0,CPHA=1,SPR1=0,SPR2=0
  55.                                                                          //SCK為對11.0592晶振的1/4分頻
  56. }
  57. void WRITE_DATA(uchar i)                         //SPI發(fā)送數(shù)據(jù)
  58. {
  59.            uchar CLEAR;
  60.          SPDR=i;
  61.          while(!(SPSR&0X80));
  62.         CLEAR=SPSR;
  63.         CLEAR=SPDR;
  64. }
  65. uchar READ_DATA(void)                                  //SPI接收數(shù)據(jù)
  66. {
  67.            
  68.           uchar data,clear;
  69.           SPDR=0x00;
  70.           while(!(SPSR&0x80));
  71.           clear=SPSR;
  72.           data=SPDR;
  73.           return(data);
  74. }
  75. void putbyte(uchar x)
  76. {
  77. while( !(UCSRA & (1<<UDRE)) );
  78. UDR=x;
  79. }

  80. ////////////////////////////////////////////////////////////////////////////////

  81. uchar num(uchar x)
  82. {
  83. switch(x)
  84. {
  85.   case 0:x='0';break;
  86.   case 1:x='1';break;
  87.   case 2:x='2';break;
  88.   case 3:x='3';break;
  89.   case 4:x='4';break;
  90.   case 5:x='5';break;
  91.   case 6:x='6';break;
  92.   case 7:x='7';break;
  93.   case 8:x='8';break;
  94.   case 9:x='9';break;
  95. }
  96. return x;
  97. }
  98. uint AD(void)
  99. {
  100. uint result1,result2,ad;
  101. RES_1;
  102. while(RDY);
  103. WRITE_DATA(0x38);
  104. while(RDY);
  105. result1=READ_DATA();
  106. result2=READ_DATA();
  107. RES_0;
  108. ad=(result1<<8)+result2;
  109. return ad;
  110. }
  111. void InitTLY(void)
  112. {
  113. uchar i;
  114. for(i=0;i<200;i++)
  115.   {
  116.    results+=AD();
  117.   }
  118. zhong=results/200;
  119. }
  120. //****************************************************************************//
  121. //                                                                                            //
  122. //                                                         主函數(shù)                                                                                          //
  123. //                                                                                                                                                          //
  124. //****************************************************************************//
  125. int main(void)
  126. {
  127. uchar i;

  128. IoInit();
  129. InitS();
  130. SPI_SET();
  131. while(1)
  132. ……………………

  133. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
陀螺儀.zip (11.63 KB, 下載次數(shù): 10)


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:1 發(fā)表于 2019-4-27 22:27 | 只看該作者
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表