#include <Program.h>
uint data attenuation = 3000; // 衰减量,表示50dB
uint data frequency = 100; // 频率值,表示1000MHz
uint data num;
//存放22个定标电压值,分别对应于0mw, 5mw, 10mw,..........100mw
uint code Volt0[22] = {0,98,317,493,631,747,849,944,1031,1111,1187,1256,1325,1381,1429,1479,1527,1570,1629,1653,1692,1741};
uint code Volt1[22] = {0,97,316,491,629,745,846,941,1028,1108,1184,1253,1322,1379,1426,1476,1524,1567,1624,1651,1690,1740};
uint code Volt2[22] = {0,97,318,494,632,748,849,942,1028,1106,1180,1246,1307,1363,1416,1464,1509,1549,1590,1625,1661,1690};
uint code Volt3[22] = {0,97,315,490,626,742,843,937,1023,1102,1176,1244,1315,1367,1415,1464,1510,1551,1598,1630,1667,1712};
uint code Volt4[22] = {0,95,311,483,617,731,832,923,1008,1085,1158,1223,1294,1343,1390,1438,1483,1522,1564,1596,1631,1675};
uint code Volt5[22] = {0,95,310,483,618,732,833,925,1009,1087,1161,1227,1299,1348,1396,1443,1488,1529,1572,1604,1640,1684};
uint code Volt6[22] = {0,94,309,481,615,729,830,921,1005,1082,1156,1222,1294,1343,1391,1439,1484,1524,1567,1600,1635,1680};
uint code Volt7[22] = {0,94,308,479,612,725,825,916,999,1076,1150,1215,1289,1336,1384,1432,1477,1518,1560,1594,1629,1674};
uint code Volt8[22] = {0,93,303,471,603,715,814,904,986,1062,1135,1200,1274,1325,1368,1416,1462,1502,1543,1578,1613,1659};
void main()
{
uchar i, adhigh, adlow;
// AUXR = AUXR|0x02;
Dlms(3000);
P2 = 0;
Dlms(2000);
Write24LC16P(0xa0, 0xfc, (uchar)(frequency/256));
Write24LC16P(0xa0, 0xfd, (uchar)(frequency%256));
Write24LC16P(0xa0, 0xfe, (uchar)(attenuation/256));
Write24LC16P(0xa0, 0xff, (uchar)(attenuation%256));
for(i = 0; i < 22; i++)
{
adhigh = (uchar)(Volt0[i] /256);
adlow = (uchar)(Volt0[i]%256);
Write24LC16P(0xa0, i*2, adhigh);
Write24LC16P(0xa0, (i*2 + 1), adlow);
}
for(i = 0; i < 22; i++)
{
adhigh = (uchar)(Volt1[i] /256);
adlow = (uchar)(Volt1[i]%256);
Write24LC16P(0xa0, (44 + i*2), adhigh);
Write24LC16P(0xa0, (44 + i*2 + 1), adlow);
}
for(i = 0; i < 22; i++)
{
adhigh = (uchar)(Volt2[i] /256);
adlow = (uchar)(Volt2[i]%256);
Write24LC16P(0xa0, (88 + i*2), adhigh);
Write24LC16P(0xa0, (88 + i*2 + 1), adlow);
}
for(i = 0; i < 22; i++)
{
adhigh = (uchar)(Volt3[i] /256);
adlow = (uchar)(Volt3[i]%256);
Write24LC16P(0xa0, (132 + i*2), adhigh);
Write24LC16P(0xa0, (132 + i*2 + 1), adlow);
}
for(i = 0; i < 22; i++)
{
adhigh = (uchar)(Volt4[i] /256);
adlow = (uchar)(Volt4[i]%256);
Write24LC16P(0xa0, (176 + i*2), adhigh);
Write24LC16P(0xa0, (176 + i*2 + 1), adlow);
}
for(i = 0; i < 22; i++)
{
adhigh = (uchar)(Volt5[i] /256);
adlow = (uchar)(Volt5[i]%256);
Write24LC16P(0xa2, i*2, adhigh);
Write24LC16P(0xa2, (i*2 + 1), adlow);
}
for(i = 0; i < 22; i++)
{
adhigh = (uchar)(Volt6[i] /256);
adlow = (uchar)(Volt6[i]%256);
Write24LC16P(0xa2, (44 + i*2), adhigh);
Write24LC16P(0xa2, (44 + i*2 + 1), adlow);
}
for(i = 0; i < 22; i++)
{
adhigh = (uchar)(Volt7[i] /256);
adlow = (uchar)(Volt7[i]%256);
Write24LC16P(0xa2, (88 + i*2), adhigh);
Write24LC16P(0xa2, (88 + i*2 + 1), adlow);
}
for(i = 0; i < 22; i++)
{
adhigh = (uchar)(Volt8[i] /256);
adlow = (uchar)(Volt8[i]%256);
Write24LC16P(0xa2, (132 + i*2), adhigh);
Write24LC16P(0xa2, (132 + i*2 + 1), adlow);
}
P2 = 0xff;
while(1) ;
}
//****************************************************************************
//探头上24LC16 的读写操作
void write_8bitP(uchar ch) //注意延时????!!!!
{
uchar i=8;
SCL=0;
Dlus(5);
while (i--)
{
SDA_P=(bit)(ch&0x80);
Dlus(5);
ch<<=1;
SCL=1;
Dlus(5);
SCL=0;
Dlus(1);
}
Dlms(5);
}
void ACKP(void) //等待ACK 位
{
SDA_P=1;
SCL=0;
Dlus(5);
SCL=1;
while(SDA_P) {;} //ACK
SCL=0;
Dlus(1);
}
void Write24LC16P(uchar ctr_byte, word_addr, ddata) // ctr_bytr: 1010xxx0
{
SCL=1;
Dlus(5);
SDA_P=0;
Dlus(5);
SCL=0; //START
write_8bitP(ctr_byte); //control byte
ACKP();
write_8bitP(word_addr); //word address
ACKP();
write_8bitP(ddata);
ACKP();
SDA_P =0;
Dlus(5);
SCL=1;
Dlus(5);
SDA_P =1; //STOP
Dlms(15);
}
/*
uchar Read24LC16P(uchar ctr_byte, word_addr) // ctr_bytr: 1010xxx0
{
uchar ddata=0;
uchar i=8;
SCL=1; //
Dlus(5);//
SDA_P=0;
Dlus(5);
SCL=0; //START
write_8bitP(ctr_byte); //control byte
ACKP();
write_8bitP(word_addr); //word address
ACKP();
//以上是一个“哑”写操作,相当于设置当前地址
SCL=1;
Dlus(5);
SDA_P=0;
Dlus(5);
SCL=0; //START
write_8bitP(ctr_byte|0x01); //control byte
ACKP();
while (i--)
{
SDA_P=1;
ddata<<=1;
SCL=0;
Dlus(5);
SCL=1;
Dlus(1); //
if (SDA_P) ddata|=0x01;
}
SCL=0;
Dlus(5);
SCL=1;
Dlus(5);
SDA_P=0;
Dlus(5);
SCL=1;
Dlus(5);
SDA_P=1; //STOP
Dlus(5);
return ddata;
}
*/
/*
//*****************************************************************************
//探头上24LC64的读写操作
void Write24LC64P(uint address,uchar ddata)
{
SCL=1;
Dlus(5);
SDA_P=0;
Dlus(5);
SCL=0; //START
write_8bitP(0xa0); //写从地址
ACKP();
write_8bitP((uchar)(address>>8));
ACKP();
write_8bitP((uchar)(address&0x00FF));
ACKP();
write_8bitP(ddata);
ACKP();
SDA_P=0;
Dlus(5);
SCL=1;
Dlus(5);
SDA_P=1; //STOP
Dlms(5);
}
uchar Read24LC64P(uint address)
{
uchar ddata=0;
uchar i=8;
SCL=1;
Dlus(5);
SDA_P=0;
Dlus(5);
SCL=0; //START
write_8bitP(0xa0); //写从地址
ACKP();
write_8bitP((uchar)(address>>8));
ACKP();
write_8bitP((uchar)(address&0x00FF));
ACKP();
//以上是一个“哑”写操作,相当于设置当前地址
SCL=1;
Dlus(5);
SDA_P=0;
Dlus(5);
SCL=0; //START
write_8bitP(0xa1); //写从地址,置为读模式
ACKP();
while (i--)
{
SDA_P=1;
ddata<<=1;
SCL=0;
Dlus(5);
SCL=1;
Dlus(1); //
if (SDA_P) ddata|=0x01;
}
SCL=0;
Dlus(5);
SCL=1;
Dlus(5);
SDA_P=0;
Dlus(5);
SCL=1;
Dlus(5);
SDA_P=1; //STOP
Dlus(5);
return ddata;
}
*/
//*****************************************************************************
void Dlms(uint n) //MCU模式时延时n ms子程序
{
uchar j;
while((n--) > 0)
{
for(j = 0;j < 125;j++)
{;}
}
}
void Dlus(uint n) //MCU模式时延时n*8us子程序
{
while((n--) > 0)
{
{;}
}
}