📄 main.c
字号:
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <./Atmel/at89x52.h>
#include "source.h"
unsigned int Mv_To_Dat(unsigned int mv){
#define Vref_2times 5
unsigned int dat;
dat=mv*(1024/5);
dat &=0x3ff;//10 bits is vaild.
return dat;
}
void Spi_Write(unsigned int dat){
unsigned char i;
TLC_NCS=0;
TLC_CLK_SET;
for(i=0;i<16;i++){
TLC_DIN=((dat&0x8000)>0)?1:0;
TLC_CLK_PULSE;
dat<<=1;
}
TLC_CLK_SET;
TLC_NCS=1;
}
#define SLOW_MODE 0X4000
#define FAST_MODE 0X0000
#define NORMAL_POWER_MODE 0X0000
#define SAVE_POWER_MODE 0X2000
void WriteA_RefreshB( unsigned int mv){/*通道A和B的模拟电压同时更新*/
unsigned int dat;
dat=Mv_To_Dat(mv);
dat <<=2;
dat |=FAST_MODE|NORMAL_POWER_MODE|0x8000;
Spi_Write(dat);
}
void WriteB_DoubleBuf( unsigned int mv){/*写通道B和双缓冲寄存器*/
unsigned int dat;
dat=Mv_To_Dat(mv);
dat <<=2;
dat |=FAST_MODE|NORMAL_POWER_MODE|0x0000;
Spi_Write(dat);
}
void Write_DoubleBuf( unsigned int mv){/*仅写双缓冲寄存器*/
unsigned int dat;
dat=Mv_To_Dat(mv);
dat <<=2;
dat |=FAST_MODE|NORMAL_POWER_MODE|0x0001;
Spi_Write(dat);
}
void Refresh_Two_Volt(unsigned int chla_mv,unsigned int chlb_mv){/*同时更新通道A和通道B的模拟电压值*/
Write_DoubleBuf(chlb_mv);/*先写双缓冲寄存器的值,其对应的是通道B的电压*/
WriteA_RefreshB(chla_mv);/*写通道A的电压,同时把双缓冲的电压值更新到B通道*/
/*这就达到了同时更新两路电压的目的*/
}
void Refresh_ChlA_Volt(unsigned int mv){/*只更新A的模拟电压*/
WriteA_RefreshB(mv);/*因为双缓冲寄存器的值没有改*/
/*所以这是只更新通道A的模拟电压*/
}
void Refresh_ChlB_Volt(unsigned int mv){/*只更新B的模拟电压*/
WriteB_DoubleBuf(mv);/*此命令更新通道B的模拟电压值*/
/*同时写双缓冲的值,这样就可以在更新其他通道时使用双缓冲寄存器中的值了,不会改变通道B的电压了*/
}
main()
{
unsigned int chl_bmv,chl_amv;
unsigned int i;
IE=0X40;
EA=1; /* Enable interrupts */
chl_bmv=1000;/*1伏电压*/
chl_amv=2000;/*2伏电压*/
i++;
if(i==10000){
chl_amv=1000;//1V
Refresh_ChlA_Volt(chl_amv);
}
else if(i==20000){
chl_bmv=2000;//2v
Refresh_ChlB_Volt(chl_bmv);
}
else if(i==30000){
i=0;
chl_bmv=3000;//3v
Refresh_Two_Volt(chl_amv,chl_bmv);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -