想产生正弦波通过单片机和max5312,可是调不出来,是da芯片的关系还是程序的关系

2019-07-16 15:12发布

#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DIN=P1^1;
sbit SCLK=P1^0;
sbit CS=P1^2;
uint k,i,Dignum;
uchar code sin[201]={0x0800,0x0840,0x0881,0x08c1,0x0901,0x0940,0x0980,0x09bf,0x09fd,0x0a3b,
        0x0a79,0x0ab5,0x0af2,0x0b2d,0x0b68,0x0ba1,0x0bda,0x0c12,0x0c49,0x0c7f,0x0cb3,0x0ce7,0x0d19,
        0x0d4a,0x0d79,0x0da7,0x0dd4,0x0dff,0x0e29,0x0e51,0x0e78,0x0e9d,0x0ec0,0x0ee2,0x0f02,0x0f20,
        0x0f3c,0x0f57,0x0f6f,0x0f86,0x0f9b,0x0fae,0x0fbf,0x0fce,0x0fdb,0x0fe6,0x0fef,0x0ff6,0x0ffb,
        0x0ffe,0x0fff,0x0ffe,0x0ffb,0x0ff6,0x0fef,0x0fe6,0x0fdb,0x0fce,0x0fbf,0x0fae,0x0f9b,0x0f86,
        0x0f6f,0x0f57,0x0f3c,0x0f20,0x0f02,0x0ee2,0x0ec0,0x0e9d,0x0e78,0x0e51,0x0e29,0x0dff,0x0dd4,
        0x0da7,0x0d79,0x0d4a,0x0d19,0x0ce7,0x0cb3,0x0c7f,0x0c49,0x0c12,0x0bda,0x0ba1,0x0b68,0x0b2d,
        0x0af2,0x0ab5,0x0a79,0x0a3b,0x09fd,0x09bf,0x0980,0x0940,0x0901,0x08c1,0x0881,0x0840,0x0800,
        0x07c0,0x077f,0x073f,0x06ff,0x06c0,0x0680,0x0641,0x0603,0x05c5,0x0587,0x054b,0x050e,0x04d3,
        0x0498,0x045f,0x0426,0x03ee,0x03b7,0x0381,0x034d,0x0319,0x02e7,0x02b6,0x0287,0x0259,0x022c,
        0x0201,0x01d7,0x01af,0x0188,0x0163,0x0140,0x011e,0x00fe,0x00e0,0x00c4,0x00a9,0x0091,0x007a,
        0x0065,0x0052,0x0041,0x0032,0x0025,0x001a,0x0011,0x000a,0x0005,0x0002,0x0001,0x0002,0x0005,
        0x000a,0x0011,0x001a,0x0025,0x0032,0x0041,0x0052,0x0065,0x007a,0x0091,0x00a9,0x00c4,0x00e0,
        0x00fe,0x011e,0x0140,0x0163,0x0188,0x01af,0x01d7,0x0201,0x022c,0x0259,0x0287,0x02b6,0x02e7,
        0x0319,0x034d,0x0381,0x03b7,0x03ee,0x0426,0x045f,0x0498,0x04d3,0x050e,0x054b,0x0587,0x05c5,
  0x0603,0x0641,0x0680,0x06c0,0x06ff,0x073f,0x077f,0x07c0,0x0800,};

void DA_conver(uint Dignum)
{
        uint Dig=0;
        uchar i=0;
        SCLK=1;
        CS=0;           
        for(i=0;i<16;i++)   
        {
           Dig=Dignum&0x8000;
           if(Dig)
           {
            DIN=1;
           }
           else
           {
            DIN=0;
           }
           SCLK=0;
           _nop_();
           Dignum<<=1;//×óÒÆ
           SCLK=1;
           _nop_();//1us
        }
        SCLK=1;
        CS=1;      
}


void delay40ms()                //40msÑÓʱ@20.000MHz
{
        unsigned char i, j;
  i = 130;
        j = 176;
        do
        {
                while (--j);
        }
        while (--i);
}
void main()
{
while(1)
        {  
  for(i=0;i<201;i++)
    {
                        Dignum=sin[i];
     DA_conver(Dignum);       
                        delay40ms();
      if(i==200)
      {i=0;}                               
    }               

  }
}


QQ图片20160613214239.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。