打印
[资料分享]

ADS7818驱动程序--Verilog程序

[复制链接]
575|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xyz549040622|  楼主 | 2020-1-27 14:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
标签: A/D  
ADS7818控制程序 C程序 Verilog程序
//************************AVR单片机 C程序*****************************
//ADS7818采用SPI模式采样

#define CLK_SET  PORTC|=(1<<6)     
#define CLK_CLI  PORTC&=~(1<<6)

#define CONV_SET  PORTC|=(1<<5)
#define CONV_CLI  PORTC&=~(1<<5)


//****************************ADS7818采样程序********************************
//晶振16M
//ADS7818采用SPI模式采样

unsigned int ADS7818(void)
{
unsigned int ADdata=0;
unsigned char i;

  
  CONV_CLI;           //conv低
  CLK_SET;   //1clk   //clk高
  _NOP();
  CLK_CLI;             //clk低
  _NOP();
  CLK_SET;   //2clk     //clk高
   _NOP();
  
  for(i=0;i<12;i++)
  {
   CLK_CLI;             //clk低
   _NOP();
   CLK_SET;             //clk高
   _NOP();
   
   
   ADdata=ADdata<<1;
   if(PINC&0x80)
    {
     ADdata|=0x0001;
    }
   else
    {
     ADdata&=0xFFFE;
    }
  
   
  }
   CLK_CLI;            //clk低
   _NOP();
  CLK_SET;  //15 clk   //clk高
  _NOP();
  CLK_CLI;             //clk低
  _NOP();
  CLK_SET;  //16 clk   //clk高
  _NOP();
  CLK_CLI;             //clk拉低
  _NOP();
  CONV_SET; //CONV拉高
  _NOP();    //至少保持350ns
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  _NOP();
  ADdata=ADdata&0x0FFF;
return ADdata;
}



//**********************verilog语言控制ADS7818*********************



//ADS7818采用DSP模式采样
/************************************************************************************
**读取ADS7818数据
**clk为50M

***************************************************************************************/
module read_7818(clk,rst,CLK_7818,DATA_7818,CONV_7818,AD_result);
input clk;
input rst;
input DATA_7818;

output CLK_7818;
output CONV_7818;
output [11:0]AD_result;



reg CLK_7818;
reg CONV_7818;
reg [11:0]AD_result;



reg [1:0]num_80ns;
reg clk_80ns;
//*******************************分频程序**********************
always @(posedge clk)
begin
  if(num_80ns==2'd1)
     begin
       num_80ns=2'd0;
       clk_80ns=~clk_80ns;
     end
  else
     begin
      num_80ns=num_80ns+1'b1;
     end

end


//************************************控制时序****************************

reg [5:0]state_7818;
reg [11:0]AD_reg;             //采样数据缓存

always @(posedge clk_80ns or negedge rst)
begin
  if(!rst)
    begin
        state_7818<=6'd0;

    end
  else
    begin
       case(state_7818)
          0:                        
            begin
               CLK_7818<=1'b0;
               state_7818<=6'd1;
            end
          1:                        //clk up 1
            begin
               CLK_7818<=1'b1;
               CONV_7818<=1'b1;
               state_7818<=6'd2;
   
            end      
          2:
            begin
               
               CLK_7818<=1'b0;            
               state_7818<=6'd3;
            end      
          3:                       //clk up 2  
            begin
              
               CLK_7818<=1'b1;  
               AD_reg[11]<=DATA_7818;   
               state_7818<=6'd4;
            end
          4:
            begin
               
               CLK_7818<=1'b0;            
               state_7818<=6'd5;
            end
          5:                       //clk up 3  
            begin
               CLK_7818<=1'b1;
               AD_reg[10]<=DATA_7818;            
               state_7818<=6'd6;
            end
          6:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd7;

            end
          7:                     //clk up 4
            begin
               CLK_7818<=1'b1;  
               AD_reg[9]<=DATA_7818;
               state_7818<=6'd8;
            end
          8:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd9;
            end
          9:                     //clk up 5
            begin
               CLK_7818<=1'b1;   
               AD_reg[8]<=DATA_7818;
               state_7818<=6'd10;
            end
          10:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd11;
            end
          11:                     //clk up 6
            begin
               CLK_7818<=1'b1;   
               AD_reg[7]<=DATA_7818;
               state_7818<=6'd12;
            end
          12:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd13;
            end
          13:                     //clk up 7
            begin
               CLK_7818<=1'b1;   
               AD_reg[6]<=DATA_7818;
               state_7818<=6'd14;
            end
          14:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd15;
            end
          15:                     //clk up 8
            begin
               CLK_7818<=1'b1;   
               AD_reg[5]<=DATA_7818;
               state_7818<=6'd16;
            end
          16:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd17;
            end
          17:                     //clk up 9
            begin
               CLK_7818<=1'b1;   
               AD_reg[4]<=DATA_7818;
               state_7818<=6'd18;
            end
          18:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd19;
            end
          19:                     //clk up 10
            begin
               CLK_7818<=1'b1;   
               AD_reg[3]<=DATA_7818;
               state_7818<=6'd20;
            end
          20:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd21;
            end
          21:                     //clk up 11
            begin
               CLK_7818<=1'b1;   
               AD_reg[2]<=DATA_7818;
               state_7818<=6'd22;
            end
          22:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd23;
            end
          23:                     //clk up 12
            begin
               CLK_7818<=1'b1;   
               AD_reg[1]<=DATA_7818;
               state_7818<=6'd24;
            end
          24:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd25;

            end
          25:                     //clk up  13
            begin
               CLK_7818<=1'b1;   
               AD_reg[0]<=DATA_7818;
               state_7818<=6'd26;
            end
          26:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd27;
            end
          27:                     //clk up  14
            begin
               CLK_7818<=1'b1;   
               state_7818<=6'd28;
            end
          28:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd29;
            end
          29:                     //clk up  15
            begin
               CLK_7818<=1'b1;   
               AD_result<=AD_reg;           //将采集的12位数据打入出输出
               state_7818<=6'd30;

            end
          30:
            begin
               CLK_7818<=1'b0;            
               state_7818<=6'd31;
            end
          31:                     //clk up  16
            begin
               
               CLK_7818<=1'b1;   
               CONV_7818<=1'b0;
               state_7818<=6'd0;
               
            end

          default:
            begin
            end

       endcase
    end

end




endmodule


使用特权

评论回复

相关帖子

沙发
xyz549040622|  楼主 | 2020-1-27 14:10 | 只看该作者
ADS7818--Verilog程序.doc (29 KB)

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:qq群: 嵌入式系统arm初学者 224636155←← +→→点击-->小 i 精品课全集,21ic公开课~~←←→→点击-->小 i 精品课全集,给你全方位的技能策划~~←←

2810

主题

19297

帖子

104

粉丝