3.4.3_プログラムリスト(THERMOLOG1_User.c)
修正箇所(自動生成ファイルに記述追加)は、以下の青色の箇所です。
#include "C:\\WIZ_C\\Ver12\\Projects\\THERMOLOG1\\THERMOLOG1_Auto.h"
#include "C:\\WIZ_C\\Ver12\\Projects\\THERMOLOG1\\i2c.h" #include <stdlib.h> #include <Strings.h> #include <Delays.h> #__config _CONFIG1H, 0x02 #__config _CONFIG1L, 0x00 #__config _CONFIG2H, 0x0E #__config _CONFIG2L, 0x0E #__config _CONFIG3H, 0x01 #__config _CONFIG3L, 0x00 #__config _CONFIG4H, 0x00 #__config _CONFIG4L, 0x81 unsigned char dow[7][5] ={"Sun.","Mon.","Tue.","Wed.","Thu.","Fri.","Sat."}; unsigned char sampling_cycle[4][6] ={"1min ","15min","30min","60min"}; unsigned char out_str1[17], out_str2[17], disp_Work1[3]; unsigned char rom_write[16], rom_read[16]; unsigned char Receive_str[32], Transmit_str[32]; unsigned long TL_PV; unsigned long TL_PV_Work, TL_PV_Work1, TL_PV_Work2; WORD TL_AJ_TEMP, TL_AJ_ADTEMP, TL_SAMPLING_CYCLE; WORD TL_AJ_TEMP_Work, TL_AJ_ADTEMP_Work, TL_SAMPLING_CYCLE_Work; WORD TL_Work1, TL_Work2, TL_Work3; WORD EE_LogNo, EE_adrs, EE_Work1; WORD Years, Months, Days, Years_Work, Months_Work, Days_Work; WORD Hours_Work, Mins_Work, Secs_Work, Day_Work; BYTE dt1, dt2, dt3, dt4, dt5, dt6; BYTE EE_uadrs; int SetModeNo, StrCount, CAL_Work; bit EE_Check, EE_SetMode, EE_SetMode_Use, EE_SetTempAjMode; bit CR_exist,LF_exist; bit SW1_work, SW2_work, SW3_work, SW4_work; void I2C_AdrsSet(BYTE uadrs, WORD adrs); void I2C_ROM_Write(BYTE uadrs, WORD adrs, BYTE *data, BYTE size); void I2C_ROM_Read(BYTE uadrs, WORD adrs, BYTE *data, BYTE size); void EE_Write(); void EE_Read(WORD logno); void TxStr(char *Transmit_str); void CmdProc(); // // This file includes all user definable routines. It may be changed at will as // it will not be regenerated once the application has been generated for the // first time. // //******************************************************************************* // // Insert your interrupt handling code if required here. // Note quick interrupts are used so code must be simple // See the manual for details of quick interrupts. // void UserInterrupt() { // Insert your code here #asmline goto UserIntReturn ; PIC Assembler - go back to interrupt routine } //******************************************************************************* // // Insert your initialisation code if required here. // Note that when this routine is called Interrupts will not be enabled - the // Application Designer will enable them before the main loop // void UserInitialise() { dt1 = ReadEEData(0); //temp(adjust value) dt2 = ReadEEData(1); EE_Work1 = (WORD)dt2 << 8; TL_AJ_TEMP = EE_Work1 | dt1; dt1 = ReadEEData(2); //ad temp(adjust value) dt2 = ReadEEData(3); EE_Work1 = (WORD)dt2 << 8; TL_AJ_ADTEMP = EE_Work1 | dt1; dt1 = ReadEEData(4); //sampling cycle dt2 = ReadEEData(5); EE_Work1 = (WORD)dt2 << 8; TL_SAMPLING_CYCLE = EE_Work1 | dt1; if(TL_AJ_TEMP > 650) EE_Check = 1; if(TL_AJ_ADTEMP > 1023) EE_Check = 1; if(TL_SAMPLING_CYCLE > 5) EE_Check = 1; if(EE_Check) { TL_AJ_TEMP = 650; TL_AJ_ADTEMP = 1010; TL_SAMPLING_CYCLE = 0; dt1 = TL_AJ_TEMP & 0x00FF; dt2 = TL_AJ_TEMP >> 8; dt3 = TL_AJ_ADTEMP & 0x00FF; dt4 = TL_AJ_ADTEMP >> 8; dt5 = TL_SAMPLING_CYCLE & 0x00FF; dt6 = TL_SAMPLING_CYCLE >> 8; WriteEEData(0,dt1); Wait(100); WriteEEData(1,dt2); Wait(100); WriteEEData(2,dt3); Wait(100); WriteEEData(3,dt4); Wait(100); WriteEEData(4,dt5); Wait(100); WriteEEData(5,dt6); Wait(100); } Years = 2001; Months = 1; Days = 1; I2C_ROM_Read(0x00,0x0000,rom_read,4); EE_Work1 = atoi(rom_read); if(EE_Work1 > 8191) EE_LogNo = 1; //EE_LogNo:1 -- 8191(0:Control Data) else EE_LogNo = EE_Work1; LCDClear(); sprintf(disp_Work1," "); ADCON0 |= (1<<GO); } //******************************************************************************* // // Insert your main loop code if required here. This routine will be called // as part of the main loop code // void UserLoop() { if(!PD.B2) //Mode key { if(!SW1_work) { SW1_work = 1; SetModeNo = 0; if(EE_SetMode) { EE_SetMode = 0; EE_SetMode_Use = 0; } else { EE_SetMode = 1; EE_SetMode_Use = 1; LCDClear(); Wait(500); sprintf(out_str1,"SETTING MODE "); LCDPrintAt(0,0); LCDString(out_str1); Years_Work = Years; Months_Work = Months; Days_Work = Days; Hours_Work = Hours; Mins_Work = Mins; Secs_Work = Secs; Day_Work = Day; TL_SAMPLING_CYCLE_Work = TL_SAMPLING_CYCLE; } } } else SW1_work = 0; if(!PC.B5) //Jumper SW EE_SetTempAjMode = 1; else EE_SetTempAjMode = 0; if(EE_SetMode_Use) { while(EE_SetMode_Use) { if(!PD.B6) //left key { SetModeNo = SetModeNo - 1; if(SetModeNo < 0) SetModeNo = 7; Years_Work = Years; Months_Work = Months; Days_Work = Days; Hours_Work = Hours; Mins_Work = Mins; Secs_Work = Secs; Day_Work = Day; } if(!PD.B7) //right key { SetModeNo = SetModeNo + 1; if(SetModeNo > 7) SetModeNo = 0; Years_Work = Years; Months_Work = Months; Days_Work = Days; Hours_Work = Hours; Mins_Work = Mins; Secs_Work = Secs; Day_Work = Day; } if(SetModeNo == 0) //Year { if(!PD.B4) //Up Key { Years_Work = Years_Work + 1; if(Years_Work > 2100) Years_Work = 2001; } if(!PD.B5) //Down key { Years_Work = Years_Work - 1; if(Years_Work < 2001) Years_Work = 2100; } sprintf(out_str2,"Year:%04d ",Years_Work); } if(SetModeNo == 1) //Month { if(!PD.B4) //Up Key { Months_Work = Months_Work + 1; if(Months_Work > 12) Months_Work = 1; } if(!PD.B5) //Down key { Months_Work = Months_Work - 1; if(Months_Work < 1) Months_Work = 12; } sprintf(out_str2,"Month:%02d ",Months_Work); } if(SetModeNo == 2) //Day { if(!PD.B4) //Up Key { Days_Work = Days_Work + 1; if(Days_Work > 31) Days_Work = 1; } if(!PD.B5) //Down key { Days_Work = Days_Work - 1; if(Days_Work < 1) Days_Work = 31; } sprintf(out_str2,"Day:%02d ",Days_Work); } if(SetModeNo == 3) //Hour { if(!PD.B4) //Up Key { Hours_Work = Hours_Work + 1; if(Hours_Work > 23) Hours_Work = 0; } if(!PD.B5) //Down key { if(Hours_Work == 0) Hours_Work = 23; else Hours_Work = Hours_Work - 1; } sprintf(out_str2,"Hour:%02d ",Hours_Work); } if(SetModeNo == 4) //Minute { if(!PD.B4) //Up Key { Mins_Work = Mins_Work + 1; if(Mins_Work > 59) Mins_Work = 0; } if(!PD.B5) //Down key { if(Mins_Work == 0) Mins_Work = 59; else Mins_Work = Mins_Work - 1; } sprintf(out_str2,"Minute:%02d ",Mins_Work); } if(SetModeNo == 5) //Second { if(!PD.B4) //Up Key { Secs_Work = Secs_Work + 1; if(Secs_Work > 59) Secs_Work = 0; } if(!PD.B5) //Down key { if(Secs_Work == 0) Secs_Work = 59; else Secs_Work = Secs_Work - 1; } sprintf(out_str2,"Second:%02d ",Secs_Work); } if(SetModeNo == 6) //Week { if(!PD.B4) //Up Key { Day_Work = Day_Work + 1; if(Day_Work > 6) Day_Work = 0; } if(!PD.B5) //Down key { if(Day_Work == 0) Day_Work = 6; else Day_Work = Day_Work - 1; } sprintf(out_str2,"Week:%04s ",dow[Day_Work]); } if(SetModeNo == 7) //Samplng Cycle { if(!PD.B4) //Up Key { TL_SAMPLING_CYCLE_Work = TL_SAMPLING_CYCLE_Work + 1; if(TL_SAMPLING_CYCLE_Work > 3) TL_SAMPLING_CYCLE_Work = 0; } if(!PD.B5) //Down key { if(TL_SAMPLING_CYCLE_Work == 0) TL_SAMPLING_CYCLE_Work = 3; else TL_SAMPLING_CYCLE_Work = TL_SAMPLING_CYCLE_Work - 1; } sprintf(out_str2,"Sampling:%05s ",sampling_cycle[TL_SAMPLING_CYCLE_Work]); } LCDPrintAt(0,1); LCDString(out_str2); Wait(500); if(!PD.B3) //SET key { sprintf(out_str2,"DATA WRITING. "); LCDPrintAt(0,1); LCDString(out_str2); if(SetModeNo == 0) //Year Years = Years_Work; if(SetModeNo == 1) //Month Months = Months_Work; if(SetModeNo == 2) //Day Days = Days_Work; if(SetModeNo == 3) //Hour Hours = Hours_Work; if(SetModeNo == 4) //Minute Mins = Mins_Work; if(SetModeNo == 5) //Second Secs = Secs_Work; if(SetModeNo == 6) //Week Day = Day_Work; if(SetModeNo >= 0 ) if(SetModeNo <= 6) Wait(200); if(SetModeNo == 7) //Samplng Cycle { dt1 = TL_SAMPLING_CYCLE_Work & 0x00FF; dt2 = TL_SAMPLING_CYCLE_Work >> 8; WriteEEData(4,dt1); Wait(100); WriteEEData(5,dt2); Wait(100); TL_SAMPLING_CYCLE = TL_SAMPLING_CYCLE_Work; } Wait(300); } if(!PD.B2) { LCDClear(); EE_SetMode_Use = 0; SW1_work = 0; } } } if(!PC.B5) { if(EE_SetTempAjMode) { sprintf(out_str1,"PRESENT TEMP SET"); LCDPrintAt(0,0); LCDString(out_str1); TL_AJ_TEMP_Work = TL_AJ_TEMP; } while(!PC.B5 && EE_SetTempAjMode) { TL_AJ_ADTEMP_Work = (WORD)ADRESH << 8; TL_AJ_ADTEMP_Work = TL_AJ_ADTEMP_Work | ADRESL; ADCON0 |= (1<<GO); Wait(200); if(!PD.B4) //UP Key { TL_AJ_TEMP_Work = TL_AJ_TEMP_Work + 1; if(TL_AJ_TEMP_Work > 650) TL_AJ_TEMP_Work = 0; } if(!PD.B5) //DOWN key { if(TL_AJ_TEMP_Work == 0) TL_AJ_TEMP_Work = 650; else TL_AJ_TEMP_Work = TL_AJ_TEMP_Work - 1; } TL_Work1 = TL_AJ_TEMP_Work / 10; TL_Work2 = TL_AJ_TEMP_Work % 10; disp_Work1 = 0xdf; sprintf(out_str2,"%02d.%01d%sC(AD:%04d) ",TL_Work1,TL_Work2,disp_Work1,TL_AJ_ADTEMP_Work); LCDPrintAt(0,1); LCDString(out_str2); if(!PD.B3) //SET key { sprintf(out_str2,"TEMP WRITING. "); LCDPrintAt(0,1); LCDString(out_str2); dt1 = TL_AJ_TEMP_Work & 0x00FF; dt2 = TL_AJ_TEMP_Work >> 8; dt3 = TL_AJ_ADTEMP_Work & 0x00FF; dt4 = TL_AJ_ADTEMP_Work >> 8; WriteEEData(0,dt1); Wait(100); WriteEEData(1,dt2); Wait(100); WriteEEData(2,dt3); Wait(100); WriteEEData(3,dt4); Wait(100); TL_AJ_TEMP = TL_AJ_TEMP_Work; TL_AJ_ADTEMP = TL_AJ_ADTEMP_Work; Wait(200); EE_SetTempAjMode = 0; } } } } // // User occurrence code // // // Occurrence - A/D Conversion complete // void ad_data_t() { TL_PV_Work = (unsigned long)ADRESH << 8; TL_PV_Work = TL_PV_Work | ADRESL; TL_PV = TL_PV_Work * TL_AJ_TEMP / TL_AJ_ADTEMP; } void timer_1sec() { if((Hours == 0) && (Mins == 0) && (Secs == 0)) { Days = Days + 1; switch(Months) { case 1: CAL_Work = 1; break; case 2: CAL_Work = 3; break; case 3: CAL_Work = 1; break; case 4: CAL_Work = 2; break; case 5: CAL_Work = 1; break; case 6: CAL_Work = 2; break; case 7: CAL_Work = 1; break; case 8: CAL_Work = 1; break; case 9: CAL_Work = 2; break; case 10: CAL_Work = 1; break; case 11: CAL_Work = 2; break; case 12: CAL_Work = 1; break; } if(CAL_Work == 1) { if(Days > 31) { if(Months == 12) { Months = 1; Years = Years + 1; } else Months = Months + 1; Days = 1; } } if(CAL_Work == 2) { if(Days > 30) { Months = Months + 1; Days = 1; } } if(CAL_Work == 3) { if(Days > 28) { if((Years % 4 == 0) && (Years % 100 != 0) || (Years % 400 == 0)) { if(Days > 29) { Months = Months + 1; Days = 1; } } else { if(Days > 28) { Months = Months + 1; Days = 1; } } } } } if(!EE_SetMode && !EE_SetTempAjMode && PC.B5) { sprintf(out_str1,"%04d/%02d/%02d %04s",Years,Months,Days,dow[Day]); TL_PV_Work1 = TL_PV / 10; TL_PV_Work2 = TL_PV % 10; disp_Work1 = 0xdf; sprintf(out_str2,"%02d:%02d:%02d %02ld.%01ld%sC",Hours,Mins,Secs,TL_PV_Work1,TL_PV_Work2,disp_Work1); LCDPrintAt(0,0); LCDString(out_str1); LCDPrintAt(0,1); LCDString(out_str2); } if (TL_SAMPLING_CYCLE == 0) //1min { if(Secs == 0) EE_Write(); } if (TL_SAMPLING_CYCLE == 1) //15min { if(((Mins == 0) ||(Mins == 15) || (Mins == 30) || (Mins == 45)) && (Secs == 0)) EE_Write(); } if (TL_SAMPLING_CYCLE == 2) //30min { if(((Mins == 0) || (Mins == 30)) && (Secs == 0)) EE_Write(); } if (TL_SAMPLING_CYCLE == 3) //60min { if((Mins == 0) && (Secs == 0)) EE_Write(); } ADCON0 |= (1<<GO); } void timer_1min() { } void timer_1hour() { } void timer_1day() { } // // I2C-EEPROM DATA WRITE // void I2C_ROM_Write(BYTE uadrs, WORD adrs, BYTE *data, BYTE size) { int i; I2C_AdrsSet(uadrs, adrs); for(i = 0; i < size; i++) { I2CWrite(*data); data++; } I2CStop(); } // // I2C-EEPROM DATA READ // void I2C_ROM_Read(BYTE uadrs, WORD adrs, BYTE *data, BYTE size) { int i; I2C_AdrsSet(uadrs, adrs); I2CStart(I2C_START_CONT); if(uadrs == 0) I2CWrite(0xA1); // control byte (write) else I2CWrite(0xA3); // control byte (write) for(i = 0; i < size; i++) { if(i != (size - 1)) *data = I2CRead(I2C_READ_ACK); else *data = I2CRead(I2C_READ_NOACK); data++; } I2CStop(); } // // I2C-EEPROM DATA READ/WRITE ADDRES SET // void I2C_AdrsSet(BYTE uadrs, WORD adrs) { I2CStart(I2C_START_NORM); if(uadrs == 0) I2CWrite(0xA0); // control byte (write) else I2CWrite(0xA2); // control byte (write) I2CWrite(adrs>>8); // EEPROM Address(H) I2CWrite(adrs); // EEPROM Address(L) } // // I2C-EEPROM DATA WRITE // void EE_Write() { if(EE_LogNo > 8191) EE_LogNo = 1; if(EE_LogNo > 4095) { EE_uadrs = 1; EE_adrs = (EE_LogNo - 4096) * 16; } else { EE_uadrs = 0; EE_adrs = EE_LogNo * 16; } EE_LogNo = EE_LogNo + 1; TL_Work3 = Years % 2000; sprintf(rom_write,"%02d%02d%02d%02d%02d%02d%03ld ",TL_Work3,Months,Days,Day,Hours,Mins,TL_PV); I2C_ROM_Write(EE_uadrs,EE_adrs,rom_write,16); //Sampling Data sprintf(rom_write,"%04d ",EE_LogNo); Wait(10); //Wait 10msec I2C_ROM_Write(0x00,0x0000,rom_write,4); //Control Data } // // I2C-EEPROM DATA READ // void EE_Read(WORD logno) { if(logno > 8191) logno = 1; if(logno > 4095) { EE_uadrs = 1; EE_adrs = (logno - 4096) * 16; } else { EE_uadrs = 0; EE_adrs = logno * 16; } I2C_ROM_Read(EE_uadrs,EE_adrs,rom_read,16); } // // SERIAL PORT DATA SEND // void TxStr(char *Transmit_str) { int i; for(i=0; i<32; i++) { if(Transmit_str[i] != 0) AddTx(Transmit_str[i]); else break; } } // // SERIAL PORT DATA RECEIVE // void GetRx() { BYTE ch; if(GetRxSize() > 0) { ch = WaitRx(); if(ch == '\r') //'\r'(0x0D) CR_exist = 1; if(ch == '\n') //'\n'(0x0A) LF_exist = 1; if(!(CR_exist | LF_exist)) { Receive_str[StrCount] = ch; StrCount = StrCount + 1; } if(CR_exist & LF_exist) { Receive_str[StrCount] = 0; //NULL StrCount = 0; CR_exist = 0; LF_exist = 0; CmdProc(); } } } // // SERIAL PORT RECEIVE PROCESS // void CmdProc() { if(strcmp(Receive_str,"DR")==0) { int i; EE_Work1 = EE_LogNo -1; for(i = 0; i < 5 ;i ++) { if(EE_Work1 < 1) EE_Work1 = 8191; EE_Read(EE_Work1); strcpy(Transmit_str, rom_read); Transmit_str[15] = '\r'; Transmit_str[16] = '\n'; Transmit_str[17] = 0; TxStr(Transmit_str); EE_Work1 = EE_Work1 - 1; } } if(strcmp(Receive_str,"LOGNO")==0) { I2C_ROM_Read(0x00,0x0000,rom_read,4); strcpy(Transmit_str, rom_read); Transmit_str[4] = '\r'; Transmit_str[5] = '\n'; Transmit_str[6] = 0; TxStr(Transmit_str); } strcpy(Receive_str,""); } トップページヘもどる |