📄 1.c
字号:
//=====================================================================
//TLV5618驱动及简单测试例子(三角波产生程序,波形顶部不大好)
//IOB15-->DIN
//IOB14-->SCLK
//IOB13-->CS
//DATA15--DATA12分别为:R1.SPD.PWR.R0
//R1R0:00 Write data to DAC B and BUFFER
// 01 Write data to BUFFER
// 10 Write data to DAC A and update DAC B with BUFFER content
// 11 Reserved
//SPD: Speed control bit 1 fast mode 0 slow mode
//PWR: Power control bit 1 power down 0 normal operation
//On power up, SPD and PWD are reset to 0 (slow mode and normal operation)
//参考电压应小于VDD-3.3伏
//输出模拟电压为:V=2*Vref*(dignum/0x1000) 注:dignum后四位为:0x0000~~0x0fff
//
//注:所需输入的数字信号值为16位数,其中D15~~D12为特殊位设置,如上面说明
// D11~~D0为数据位000~~fff
//
//***********done by:murufy 2007.8.8于EDA实验室***********************
//=====================================================================
#define P_Watchdog_Clear (volatile unsigned int *)0x7012
#define P_IOA_Data (volatile unsigned int *)0x7000
#define P_IOA_Buffer (volatile unsigned int *)0x7001
#define P_IOA_Dir (volatile unsigned int *)0x7002
#define P_IOA_Attrib (volatile unsigned int *)0x7003
#define P_IOA_Latch (volatile unsigned int *)0x7004
#define P_IOB_Data (volatile unsigned int *)0x7005
#define P_IOB_Buffer (volatile unsigned int *)0x7006
#define P_IOB_Dir (volatile unsigned int *)0x7007
#define P_IOB_Attrib (volatile unsigned int *)0x7008
//若修改端口可更改此处
#define P_IO_Data *P_IOB_Data
#define P_IO_Buffer *P_IOB_Buffer
#define P_IO_Dir *P_IOB_Dir
#define P_IO_Attrib *P_IOB_Attrib
//
#define DIN 0x8000
#define SCLK 0x4000
#define CS 0x2000
//==================================================================
//
//初始化,将三个引脚全设成输出
//
//==================================================================
void DA_init()
{
P_IO_Dir=DIN+SCLK+CS;
P_IO_Attrib=DIN+SCLK+CS;//同相输出
}
//===================================================================
//
//DA_conver()
//Dignum:根据说明设置转化数据.头四位为特殊位用于选择转化方式,以及用于
// 通道选择.请自行设置.
//===================================================================
void DA_conver(unsigned int Dignum)
{
unsigned int i;
unsigned int Dig;
P_IO_Buffer|=SCLK;//sclk=1
P_IO_Buffer&=(~CS);//cs=0;
for(i=0;i<=15;i++)
{
Dig=Dignum&0x8000;
if(Dig==0)P_IO_Buffer&=(~DIN); //DIN=0
else P_IO_Buffer|=DIN; //DIN=1
P_IO_Buffer&=(~SCLK);//sclk=0
P_IO_Buffer|=SCLK; //sclk=1
Dignum=Dignum<<1;
}
P_IO_Buffer|=SCLK;//cs=1,sclk=1
P_IO_Buffer|=CS;//cs=1,sclk=1
}
//=====================================================================
//主函数:void main()
//仅供测试用,无实际意义
//通过改变DA_conver(dignum)的参数来观察输出,此程序A通道输出约3.3伏
//=====================================================================
int main()
{
unsigned int mm=0x8000;
DA_init();
while(1)
{
while(mm!=0x8000)
{
DA_conver(mm);
mm=mm-0x0009;//幅度减小一个台阶
*P_Watchdog_Clear=0x0001;
}
while(mm!=0x8fff)
{
DA_conver(mm);
mm=mm+0x0009; //幅度提高一个台阶
*P_Watchdog_Clear=0x0001;
}
*P_Watchdog_Clear=0x01;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -