資源簡介
MCP3204+MCP4822 AD/DA程序 MCP3204 AD,MCP4822 DA輸出

代碼片段和文件信息
#include?
#include?
#include?
#include?
#define?uchar?unsigned?char
#define?uint?unsigned?int
sbit??MCP3204_CS??=P1^3;
sbit??MCP3204_CLK?=P1^0;
sbit??MCP3204_DI=P1^1?;
sbit??MCP3204_DO=P1^2?;
sbit??MCP_LDAC=P1^4?;
sbit??MCP_CS??=P1^6?;
sbit??MCP_SCK?=P1^7?;
sbit??MCP_SDI?=P1^5?;
??
int?MCP3204GetResult(bit?VOG_CUR?unsigned?int?*?Result);?
void?MCP4822_WriteValue(uchar?chuchar?gateuchar?shdnuint??dat);??
void?delay()
{
uchar?i=?255;
while(i--);
}
//函數:設置MCP4822的輸出值,有效值為0-4095
//ch---0:通道A;1:通道B
//gate---0:2倍增益;1:不增益
//shdn---0:關閉;1:工作
//data---設置值
uint??result=0?;?
uint??MCP_result?;
uint??final_result1=0?;??
uint??final_result2=0?;??
uchar?change_flage=0;
/***********************
定時器0初始化
***********************/
void?Timer0Init(void) //10000微秒@11.0592MHz
{
?
TMOD?&=?0xF0; //設置定時器模式
TMOD?|=?0x01; //設置定時器模式
TL0?=?0xF0; //設置定時初值
TH0?=?0xFF; //設置定時初值
TF0?=?0; //清除TF0標志
TR0?=?1; //定時器0開始計時
????EA=1;
ET0=1;
}
/*******************************************************************************
****入口參數:無
****出口參數:無
//Mcp3202驅動函數?:需要先寫配置bit,然后再讀取轉換結果
//硬件要求:需要端口定義csclkDIDO
//輸入參數:chn=0,選通道0;chn=1,選擇通道1
//輸出參數:unsigned?int?型?轉換結果
*******************************************************************************/
unsigned?int?Read_Mcp3204(unsigned?char?chn)//3204驅動程序
?{
? unsigned?char?x;
unsigned?int??temp=0;
????????//GPIO_init();
MCP3204_CS=1;
MCP3204_CS=0;
MCP3204_CLK=0;
MCP3204_DI=1;?? //啟動位,對應時序圖第一個bit
MCP3204_CLK=1;?
MCP3204_CLK=0;??
MCP3204_DI=1;? //選擇單端輸入模式?,對應時序圖第二個bit
MCP3204_CLK=1;??
?
MCP3204_CLK=0; //跳過無效位
??? ??
MCP3204_CLK=1;?
MCP3204_CLK=0; ?
??? MCP3204_DI=chn&0x02;?
MCP3204_CLK=1;?
MCP3204_CLK=0; ?
??? MCP3204_DI=chn&0x01;?
MCP3204_CLK=1;?
MCP3204_CLK=0; //跳過無效位
??? ??
MCP3204_CLK=1;
MCP3204_CLK=0;
MCP3204_CLK=1;??//跳過無效位,對應Dout的空位
MCP3204_CLK=0; // 準備讀取數據
for(x=0;x<12;x++)
{
? MCP3204_CLK=1; //時鐘上升沿MCP3202輸出數據
? temp=(temp<<1)|MCP3204_DO; ????????//單片機讀入一個bit
MCP3204_CLK=0;
}
?MCP3204_CLK=1;
?MCP3204_CS=1;? //結束本次轉換
?return?temp; //返回轉換結果
?
?}
void?main()
{
?? //uart_init()?;
? Timer0Init();
????while(1)???????????????????????//等待串口中斷
{
????//if(change_flage)
???? ???{?final_result1=Read_Mcp3204(0x01);
?????????MCP4822_WriteValue(001?final_result1);
???}
//else
??{??final_result2=Read_Mcp3204(0x00);
?????????MCP4822_WriteValue(101?final_result2);
??}
?
}
}?
?
/******************************************************************************
**函數名稱:i?
**功能描述:?
**入口參數:?
**輸出:?
*******************************************************************************/
//函數:設置MCP4822的輸出值,有效值為0-4095
//ch---0:通道A;1:通道B
//gate---0:2倍增益;1:不增益
//shdn---0:關閉;1:工作
//data---設置值
void?MCP4822_WriteValue(uchar?chuchar?gateuchar?shdnuint??dat)????????????????
{?
????????uchar?i;?
?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-05-22?16:17??adc3204+MCP4822\
?????文件????????6376??2018-05-21?15:38??adc3204+MCP4822\STARTUP.A51
?????文件???????14048??2018-05-22?15:57??adc3204+MCP4822\STARTUP.LST
?????文件?????????749??2018-05-22?15:57??adc3204+MCP4822\STARTUP.OBJ
?????文件????????8560??2018-05-22?15:57??adc3204+MCP4822\adc
?????文件????????8366??2018-05-22?15:57??adc3204+MCP4822\adc.LST
?????文件????????9976??2018-05-22?15:57??adc3204+MCP4822\adc.M51
?????文件????????8753??2018-05-22?15:57??adc3204+MCP4822\adc.OBJ
?????文件????????4095??2018-05-22?16:16??adc3204+MCP4822\adc.c
?????文件????????1347??2018-05-22?15:57??adc3204+MCP4822\adc.hex
?????文件??????????39??2018-05-22?15:57??adc3204+MCP4822\adc.lnp
?????文件????????9880??2018-05-22?15:57??adc3204+MCP4822\adc.plg
?????文件???????56140??2018-05-22?16:17??adc3204+MCP4822\adc.uvopt
?????文件???????13386??2018-05-21?21:52??adc3204+MCP4822\adc.uvproj
?????文件???????56678??2018-05-21?21:52??adc3204+MCP4822\adc_uvopt.bak
?????文件???????13387??2018-05-21?15:38??adc3204+MCP4822\adc_uvproj.bak
- 上一篇:1602液晶顯示DS1302實時時鐘程序
- 下一篇:LabView 低通濾波器
評論
共有 條評論