📄 ad_da.c
字号:
#include "c8051f020.h"
#include "AD_DA.H"
//***************AD_DA配置************************
void AD_DA_Config(void)
{
WDTCN=0X07;
WDTCN=0XDE;
WDTCN=0XAD; //关开门狗
XBR0=0XAF;
XBR1=0X0D;
XBR2=0X44; // 端口分配表见说明文件
OSCXCN=0X00;
OSCICN=0x06; //内部8m晶振
REF0CN = 0x03; // Reference Control Register
//----------------------------------------------------------------
// ADC Configuration AMUX0:九通道的可编程模拟多路选择器,ADC0的最高转换速率为100ksps,其转换时钟来源与系统
//时钟分频,分频值保存在寄存器ADC0CF的ADCSC位.
//----------------------------------------------------------------
AMX0CF = 0x60; // AMUX Configuration Register 配置寄存器
AMX0SL = 0x00; // AMUX Channel Select Register AMX0SL =0x00; //选择通道0 AMX0SL通道选择寄存器
ADC0CF = 0x18; // ADC Configuration Register 配置寄存器
ADC0CN = 0x80; // ADC Control Register 控制寄存器
ADC0LTH = 0x00; // ADC Less-Than High Byte Register ****下限寄存器ADC0GTH
ADC0LTL = 0x00; // ADC Less-Than Low Byte Register ****下限寄存器ADC0GTL
ADC0GTH = 0xFF; // ADC Greater-Than High Byte Register
ADC0GTL = 0xFF; // ADC Greater-Than Low Byte Register
/*AMX1SL = 0x00; // AMUX1 Channel Select Register
ADC1CF = 0xF8; // ADC1 Configuration Register
ADC1CN = 0x00; // ADC1 Control Register
DAC0CN = 0x80; // DAC0 Control Register
DAC0L = 0x00; // DAC0 Low Byte Register
DAC0H = 0x00; // DAC0 High Byte Register
DAC1CN = 0X80;
DAC1L = 0X00;
DAC1H = 0X00; */
}
/****************************************************************
DAC0 DAC1 OUTPUT function
*****************************************************************/
void DA0_Out (unsigned int con_volt )
{
unsigned char hbyte,lbyte;
hbyte=con_volt/256;
lbyte=con_volt&0x00ff;
DAC0L=lbyte;
DAC0H=hbyte;
}
void DA1_Out (unsigned int con_volt)
{
unsigned char hbyte,lbyte;
hbyte=con_volt/256;
lbyte=con_volt&0x00ff;
DAC1L=lbyte;
DAC1H=hbyte;
}
/************************************************************
ADC0 ADC1 output function
**********************************************************/
unsigned int AD_Sample ( )
{
unsigned char hbyte,lbyte;
unsigned char i;
unsigned int current_vlot=0;
unsigned int ret_volt=0;
for(i=0;i<8;i++)
{
AD0BUSY=1; //start ADC0 convert
while(!AD0INT); // waitting
hbyte=ADC0H;
lbyte=ADC0L;
current_vlot=hbyte*256+lbyte;
ret_volt=( current_vlot>>3)+ret_volt;
}
return ret_volt;
}
void Delay_ADDA(unsigned int counter)
{
while(counter--);
}
/*
main()
{
unsigned int i=0;
unsigned int voltage=0;
unsigned int temp=0;
AD_DA_Config();
while(1)
{
DA0_Out (1000 );
DA1_Out (2000 );
Delay_ADDA(10000);
temp=AD_Sample ( );
Delay_ADDA(100);
}
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -