?? 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 + -