MAX525示例程序
#include//絕對地址訪問函數(shù)
#include
#include
#defineucharunsignedchar
sbitP1_0=P1^0;
sbitP1_1=P1^1;
sbitP1_2=P1^2;
sbitP1_3=P1^3;
sbitP1_4=P1^4;
sbitP1_5=P1^5;
sbitP1_6=P1^6;
sbitP1_7=P1^7;
/*MAX525完成兩路DAC模擬電壓輸出,待轉(zhuǎn)換的12位二進(jìn)制數(shù)據(jù)分別存放在變量dacdac1,dacdac2中*/
voiddac(unsignedlongdacdata1,dacdata2)
{
uchara=0;
unsignedlongxdatadacdatrfer=0;
P1_6=0;
P1=P1&0xdf;//片選CS端置低電平
for(a=0;a<4;a++)
{
P1_6=0;
P1=P1&0xef;
dacdatrfer=dacdata1;
dacdatrfer=((dacdatrfer>>(3-a))&0x01)<<3;
P1=P1|dacdatrfer;
P1_6=1;
}
P1_6=0;
for(a=0;a<12;a++)
{
P1_6=0;
P1=P1&0xef;
dacdatrfer=dacdata2;
dacdatrfer=((dacdatrfer>>(11-a))&0x01)<<3;
P1=P1|dacdatrfer;
P1_6=1;
}
P1_6=0;
P1=P1|0x20;
}
/*MAX1247的A/D轉(zhuǎn)換,其中P1_1為片選端,P1_0為時鐘輸入端,P1_2為數(shù)據(jù)輸入端,P1_3為數(shù)據(jù)輸出*/
unsignedintj,i;
voidadc()
{
ucharadcadres;
ucharadcadrestrfer;
ucharstrdata;
ucharldata[12];
P1_1=0;
P1_0=0;
adcadres=0x9e;//送控制命令字節(jié)
for(i=0;i<8;i++)
{
adcadrestrfer=adcadres;
adcadrestrfer=(adcadrestrfer>>(7-i))&0x01;
P1_3=adcadrestrfer;//右移一次,送到P1_2口
P1_0=0;//此處為送時鐘信號
for(j=0;j<2;j++);//空操作,延時
P1_0=1;
for(j=0;j<2;j++);//空操作,延時
P1_0=0;//時鐘信號周期等于執(zhí)行4條指令的時間
}
P1_1=0;
for(j=0;j<2;j++);//空操作,延時
P1_1=0;
strdata=0;
P1_0=1;
for(j=0;j<12;j++)
{
P1_0=0;
P1_0=1;
strdata=P1_2;//讀出12位串行數(shù)據(jù)
strdata=strdata<<(11-j);
ldata[j]=ldata[j]|strdata;
}
strdata=ldata[j];
for(j=0;j<4;j++)
{
P1_0=0;
P1_0=1;
}
P1_1=1;
}