?? main.c
字號(hào):
//Main.c
//采集板主程序
#include "SEED-DEC2407.h"
#include "eeprom.h"
#include "eeprom.c"
#include "dpram.h"
#include "dpram.c"
#include "ads7844.h"
#include "ads7844.c"
#include "ds18b20.h"
#include "ds18b20.c"
void SystemInit();
void IOInit();
void SPI_Init();
void Timer1Init();
void KickDog();
unsigned char offlag = 0; //關(guān)機(jī)標(biāo)志
float temp[28]; //溫度
unsigned char snn[28][8];//28個(gè)溫度傳感器序列號(hào)
//int result[30]; //單電壓、總電壓、總電流值
unsigned char* buff; //中間值
int i,j,loopindex;
void main()
{
SystemInit(); //系統(tǒng)初始化
IOInit();
SPI_Init(); //SPI初始化
Timer1Init(); //定時(shí)器初始化
//采集溫度
while (reset()==1){}; /* 復(fù)位等待從機(jī)應(yīng)答 */
write_byte(0xCC); /* 忽略ROM 匹配 */
write_byte(0x44); /* 發(fā)送溫度轉(zhuǎn)化命令 */
for(loopindex=0;loopindex<65535;loopindex++){;} /* 延時(shí)300ms,等待數(shù)模轉(zhuǎn)換 */
for(loopindex=0;loopindex<65535;loopindex++){;}
for(i=0; i<28; i++)
{
while(reset()==1){}; /* 再次復(fù)位,等待從機(jī)應(yīng)答 */
write_byte(0x55); //匹配rom命令
for(j=0; j<8; j++)write_byte(snn[i][j]); /* 寫序列號(hào) */
write_byte(0xBE); /* 發(fā)送讀溫度命令 */
read_byte(buff); /* 讀出溫度低8 位 */
read_byte(buff+1); /* 讀出溫度高8 位 */
temp[i]=transform(buff);
PIN_HIGH(); /* 釋放總線 */
}
WR2DRAM(temp,0x801E,28);//將讀出的數(shù)存入雙口RAM
WT2EEPROM(temp,0x001E,28);//將數(shù)據(jù)寫入EEPROM
//采集電壓電流
for(i=0; i<4; i++)
{
if(i==0)*PBDATDIR=*PBDATDIR&0xFFFE;//模擬CS0
if(i==1)*PBDATDIR=*PBDATDIR&0xFFFD;//模擬CS1
if(i==2)*PBDATDIR=*PBDATDIR&0xFFFB;//模擬CS2
if(i==3)*PBDATDIR=*PBDATDIR&0xFFF7;//模擬CS3
ADConversion(i); //讀出第i個(gè)ad的轉(zhuǎn)化結(jié)果-12位二進(jìn)制數(shù),并存在result數(shù)組中
}
// convert(adread); //數(shù)據(jù)轉(zhuǎn)化
WR2DRAM(result,0x8000,30);//將讀出的數(shù)存入雙口RAM
WR2EEPROM(result,0x0000,30);//將數(shù)據(jù)寫入EEPROM
asm(" CLRC INTM ");
while(offlag == 0)
{
int j;
while (reset()==1){}; /* 復(fù)位等待從機(jī)應(yīng)答 */
write_byte(0xCC); /* 忽略ROM 匹配 */
write_byte(0x44); /* 發(fā)送溫度轉(zhuǎn)化命令 */
for(loopindex=0;loopindex<65535;loopindex++){;} /* 延時(shí)300ms,等待數(shù)模轉(zhuǎn)換 */
for(loopindex=0;loopindex<65535;loopindex++){;}
for(i=0; i<28; i++)
{
while(reset()==1){}; /* 再次復(fù)位,等待從機(jī)應(yīng)答 */
write_byte(0x55); //匹配rom命令
for(j=0; j<8; j++)write_byte(snn[i][j]); /* 寫序列號(hào) */
write_byte(0xBE); /* 發(fā)送讀溫度命令 */
read_byte(buff); /* 讀出溫度低8 位 */
read_byte(buff+1); /* 讀出溫度高8 位 */
temp[i]=transform(buff);
PIN_HIGH(); /* 釋放總線 */
}
WR2DRAM(temp,0x801E,28);//將讀出的數(shù)存入雙口RAM
WT2EEPROM(temp,0x001E,28);//將數(shù)據(jù)寫入EEPROM
}
}
void SystemInit()
{
asm(" SETC INTM "); //關(guān)閉總中斷
asm(" CLRC SXM "); //禁止符號(hào)位擴(kuò)展
asm(" CLRC CNF "); // B0塊映射為 on-chip DARAM
asm(" CLRC OVM "); // 累加器結(jié)果正常溢出
*SCSR1=0x83FE; // 系統(tǒng)時(shí)鐘CLKOUT=20*2=40M
*WDCR=0x006F; //禁止看門狗,看門狗時(shí)鐘64分頻
KickDog(); // 初始化看門狗
*IFR=0xFFFF; // 清除中斷標(biāo)志
*IMR=0x0002; //打開中斷2
}
void IOInit()
{
*MCRA=*MCRA & 0x10FF; //除IOPB4以外IOPB0-7都設(shè)為IO口模式
*PBDATDIR=0xCF0F; //置IOPB5為輸入口
*MCRC=*MCRC & 0x80FF; //IOPF0-6都設(shè)為IO口模式
}
void SPI_Init()
{
*MCRB=*MCRB|0x001C; //SPISIMO,SPISOMI,SPICLK特殊功能方式,SPISTE配置為通用I/O引腳以作片選信號(hào)
*PCDATDIR=*PCDATDIR|0x0020; //置片選信號(hào)為高
*SPICCR=0x004F; //上升(下降)沿輸出(入)16位數(shù)據(jù)
*SPICTL=0x0006; //主工作方式,禁止中斷
*SPIBRR=0x0027; //1M波特率
*SPICCR=*SPICCR|0X80; //開始發(fā)送或接收數(shù)據(jù)
}
void Timer1Init()
{
*EVAIMRA=0x0080; // 定時(shí)器1周期中斷使能
*EVAIFRA=0xFFFF; // 清除中斷標(biāo)志
*GPTCONA=0x0000;
*T1PR=2500; // 定時(shí)器1初值,定時(shí)128/40us*2500=8ms
*T1CNT=0;
*T1CON=0x174E; //增模式, TPS系數(shù)40M/128, T1使能
}
void interrupt c_int2() //定時(shí)器1中斷服務(wù)程序
{
if(*PIVR!=0x27)
{ asm(" CLRC INTM ");
return;
}
*T1CNT=0;
//采集電壓電流
for(j=0; i<4; i++)
{
if(i==0)*PBDATDIR=*PBDATDIR&0xFFFE;//模擬CS0
if(i==1)*PBDATDIR=*PBDATDIR&0xFFFD;//模擬CS1
if(i==2)*PBDATDIR=*PBDATDIR&0xFFFB;//模擬CS2
if(i==3)*PBDATDIR=*PBDATDIR&0xFFF7;//模擬CS3
AD(result,i); //讀出第i個(gè)ad的轉(zhuǎn)化結(jié)果
}
// convert(adread); //數(shù)據(jù)轉(zhuǎn)化
WR2DRAM(result,0x8000,30);//將讀出的數(shù)存入雙口RAM
WR2EEPROM(result,0x0000,30);//將數(shù)據(jù)寫入EEPROM
*EVAIFRA=0x80;
asm(" CLRC INTM ");
}
void KickDog() //踢除看門狗
{
*WDKEY=0x5555;
*WDKEY=0xAAAA;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -