datasheet
超过460,000+ 应用技术资源下载
null

MCP3421原代码

  • 1星
  • 日期: 2017-08-05
  • 大小: 4.37KB
  • 所需积分:3分
  • 下载次数:10
  • favicon收藏
  • rep举报
  • 分享
  • free评论
标签: mcp342118位高精度ADC

MCP3421原代码 18位高精度AD, iic通信

#include "mcp3421.h" #include "eeprom.h" data unsigned char elech; data unsigned char elecl; data unsigned char elec; data unsigned char symbol; data unsigned char mcp_busy; //data unsigned char wr_data; bit mcp_wrong; //高:4000ns 低:4700ns //void Delay1us() //@30.000MHz,1us //{ // unsigned char i; // i = 5; // while (--i); //} //void Delay1us() //@27.000MHz //{ // unsigned char i; // _nop_(); // i = 4; // while (--i); //} void Delay1us() //@20.000MHz { unsigned char i; _nop_(); _nop_(); i = 10; while (--i); } //void Delay1us() //@22.1184MHz //{ // unsigned char i; // i = 3; // while (--i); //} void somenop() { do{ //18位 20Mhz Delay1us(); Delay1us(); Delay1us(); Delay1us(); Delay1us(); Delay1us(); //12。14位AD }while(0); } void I2CStart(void) { EA=0; SDA=1; somenop(); SCL=1; somenop(); SDA=0; somenop(); SCL=0; } void I2CStop(void) { SCL=0; somenop(); SDA=0; somenop(); SCL=1; somenop(); SDA=1; EA=1; } void WaitAck(void) { u8 i=20; SDA=1; somenop(); SCL=1; while(i--){ if(SDA==1) { SCL=0; somenop(); SCL=1; } else goto loop; } loop: SCL=0; return; } void SendAck(void) { SDA=0; somenop(); SCL=1; somenop(); SCL=0; } void SendNotAck(void) { SDA=1; somenop(); SCL=1; somenop(); SCL=0; } void I2CSendbyte(u8 ch) { unsigned char i=8; while(i--) { SCL=0; somenop(); SDA=(bit)(ch&0x80); ch<<=1; somenop(); SCL=1; somenop(); } SCL=0; } u8 I2CRecebyte(void) { u8 i=8; u8 ddata=0; SDA=1; while(i--){ ddata<<=1; SCL=0; somenop(); SCL=1; somenop(); ddata|=SDA; } SCL=0; return ddata; } void WRITE_MCP3421(unsigned char wr_data) { I2CStart(); I2CSendbyte(0xd0); WaitAck(); I2CSendbyte(wr_data); WaitAck(); I2CStop(); } int error_a(int num) { u8 error_num=0; if(num==-11){error_num=-24;} else if(num>=-11&&num<110){error_num=14;} else if(num>=110&&num<200){error_num=9;} else if(num>=200&&num<300){error_num=35;} else if(num>=300&&num<430){error_num=46;} else if(num>=430&&num<500){error_num=55;} else if(num>=500&&num<640){error_num=65;} else if(num>=640&&num<680){error_num=69;} else if(num>=680&&num<900){error_num=79;} else if(num>=900&&num<1080){error_num=84;} else if(num>=1080&&num<1370){error_num=90;} else if(num>=1370&&num<1650){error_num=96;} else if(num>=1650&&num<1840){error_num=104;} else if(num>=1840&&num<2030){error_num=110;} else if(num>=2030&&num<2050){error_num=114;} return error_num; } u16 READ_MCP3421(void) { unsigned int cch=0,ccl=0,c_num=0,count_error=0; I2CStart(); I2CSendbyte(0xd1); WaitAck(); elec=I2CRecebyte(); //第一个数据 SendAck(); elech=I2CRecebyte(); //第二个数据 SendAck(); elecl=I2CRecebyte(); //第三个数据 SendAck(); mcp_busy=I2CRecebyte(); SendNotAck(); I2CStop(); symbol=elec>>7; if(symbol==0) { // cch=elec<<8; // ccl=elecl; c_num=(unsigned int)((((unsigned long)((unsigned long)elec << 16 | (unsigned int)elech << 8 | elecl)) & 0x1fffff) / 64) + 1; LED9=0; c_num=c_num+error_a(c_num); } //18位 // c_num=(unsigned int)((((unsigned long)((unsigned long)elec << 16 | (unsigned int)elech << 8 | elecl)) & 0x1fffff)/64); // //16位 // c_num=(unsigned int)(cch+ccl)&0x1fffff; // c_num=c_num/16; // //14位 // c_num=(unsigned int)(cch+ccl)&0x1fff; // c_num=c_num/4; // //12位 // c_num=(int)(cch+ccl); // c_num=c_num; else { // cch=(long)elec << 8; // ccl=(int)elech; //16位 // c_num=(unsigned int)(cch+ccl)&0x1fffff; // c_num=c_num/16; // //14位 // c_num=(unsigned int)(cch+ccl)&0x1fff; // c_num=c_num/4; //12位 // c_num=(long)(cch+ccl); // c_num=c_num; // c_num= (long)((((long)((long)elec << 16 | ( long)elech << 8 | elecl)) & 0x1fffff) / 64); // c_num*=-1; // c_num-=32758; // c_num+=error_a(c_num); } return c_num; //18位 // c_num=(unsigned int)((((unsigned long)((unsigned long)elec << 16 | (unsigned int)elech << 8 | elecl)) & 0x1fffff) / 64) + 1; // //18位 // return c_num; } /*************************** *返回AD转换的值,设置ad模式 */ u16 AD_Conveat() { u16 ad; WRITE_MCP3421(0x8c); //单次,18位转换,详细设置看资料 ad = READ_MCP3421(); return ad; }
更多简介内容

评论

下载专区


TI 参考设计资源库

工业电子 汽车电子 个人电子
$(function(){ var appid = $(".select li a").data("channel"); $(".select li a").click(function(){ var appid = $(this).data("channel"); $('.select dt').html($(this).html()); $('#channel').val(appid); }) })