單片機源程序如下:
- #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)
- {
- {;}
- }
- }
復制代碼
所有資料51hei提供下載:
509555821252314.rar
(1.92 KB, 下載次數: 19)
2018-4-25 09:54 上傳
點擊文件名下載附件
cs5460 下載積分: 黑幣 -5
|