专栏中心

EEPW首页 > 专栏 > ADS7818控制程序 C程序 Verilog程序

ADS7818控制程序 C程序 Verilog程序

发布人:0750long 时间:2009-06-14 来源:工程师 发布文章
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

专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们

关键词:

相关推荐

村田最新业绩显示:MLCC需求暴增

元件/连接器 2026-02-04

小尺寸、大电流的PCB接插件(上)

电连接器检验仪器应用研究(上)

视频 2010-03-25

三星将半导体玻璃基板项目移交业务部门

电连接器检验仪器应用研究(下)

视频 2010-03-25

AMD苏姿丰淡化PC内存危机,称 “我们的重点领域是企业市场”

ZLG500B 应用文档V1.4 (仅对购买ZLG500B产品的客户开...

瑞士如何以 “精耕细作” 打造全球半导体优势

EDA/PCB 2026-02-04

维兰德高性能铜合金以及其在连接器领域的解决方案(下)

硅光子成GTC 2026焦点?NVIDIA竹北验证测试专区再扩大

ZLG500B读卡模块演示软件

ZLG500BX2 器件读卡模块简介

ITECH发布IT-N6700系列高压可编程直流电源

ZLG500B 器件读卡模块简介

2025年电动汽车销量下滑,马斯克转战人形机器人

三星2nm工艺量产在即,晶圆代工业务能否逆袭?

EDA/PCB 2026-02-04

小尺寸、大电流的PCB接插件(下)

特斯拉2025年营收半数来自美国市场

汽车电子 2026-02-04

科尔蒂(Corti)推出面向医疗健康领域的多智能体人工智能框架

ZLG500B 应用文档V1.3 (仅对购买ZLG500B产品的客户开...

更多 培训课堂
更多 焦点
更多 视频

技术专区