3.4.16_プログラムリストNo.2(VOICERECORDER_User.c)
修正箇所(自動生成ファイルに記述追加)は、以下の青色の箇所です。
#include "C:\\WIZ_C\\Ver12\\Projects\\VOICERECORDER\\VOICERECORDER_Auto.h"
#include "C:\\WIZ_C\\Ver12\\Projects\\VOICERECORDER\\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, 0x80 #define TST_TMR2IF (PIR1&(1<<TMR2IF)) // TMR2IFフラグチェック #define CLR_TMR2IF (PIR1&=~(1<<TMR2IF)) // TMR2IFフラグクリア #define TIMER2_ON T2CON|=(1<<TMR2ON) // TIMER2 START #define TIMER2_OFF T2CON&=~(1<<TMR2ON) // TIMER2 STOP #define DI_TMR2 (PIE1&=~(1<<TMR2IE)) // TMR2割込禁止 #define EI_TMR2 (PIE1|=(1<<TMR2IE)) // TMR2割込許可 WORD VR_PV, VR_PV_Work, VR_PV_Work_pre, EEReadWriteNo, EEReadWriteEnd; BYTE out_str1[17], out_str2[17], data_buf[17], Transmit_Buf[32], Receive_Buf[32], EE_Work[2], EE_Buf0[256], EE_Buf1[256]; BYTE VR_PV_H, VR_PV_L, uadrs, SampMode, SampMode_Set, SampNo, StrCount, SetModeNo, EEBufCount, EE_BufNo; bit No1Key, No2Key, No3Key, No4Key, UpKey, DownKey, LeftKey, RightKey, ModeKey, SetKey, Hosyu1Key, Hosyu2Key, SetMode; bit EERead, EEWrite; void IntTMR2(); void I2C_ROM_AdrsSet_1(BYTE uadrs, WORD adrs); void I2C_ROM_Write_1(BYTE uadrs, WORD adrs, BYTE *data, WORD size); void I2C_ROM_Read_1(BYTE uadrs, WORD adrs, BYTE *data, WORD size); void I2C_ROM_AdrsSet_2(BYTE uadrs, WORD adrs); void I2C_ROM_Write_2(BYTE uadrs, WORD adrs, BYTE *data, WORD size); void I2C_ROM_Read_2(BYTE uadrs, WORD adrs, BYTE *data, WORD size); void I2C_ROM_AdrsSet_3(BYTE uadrs, WORD adrs); void I2C_ROM_Write_3(BYTE uadrs, WORD adrs, BYTE *data, WORD size); void I2C_ROM_Read_3(BYTE uadrs, WORD adrs, BYTE *data, WORD size); void EE_Start(WORD EENo); void EE_Write(WORD EENo, BYTE EE_BufNo); void EE_BufRead(WORD EENo, BYTE *data, BYTE EndData); void EE_Stop(WORD EENo); void TxStr(BYTE *Transmit_Buf); void CmdProc(); void LCDdisp(); void LCDset(); // // 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 // 500us周期 if(PIE1&(1<<TMR2IE)) { if(TST_TMR2IF) { // TIMER2 OverFlow T=499us CLR_TMR2IF; IntTMR2(); } } #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() { SampMode = ReadEEData(0); if(SampMode == 0) SampMode = 1; if(SampMode > 3) SampMode = 1; SetPWM2Volts(0); LCDClear(); ADCON0 |= (1<<GO); TIMER2_OFF; EI_TMR2; sprintf(out_str1,"VOICE RECORDER "); sprintf(out_str2," "); LCDdisp(); SetModeNo = 0; EEBufCount = 0; } //******************************************************************************* // // Insert your main loop code if required here. This routine will be called // as part of the main loop code // void UserLoop() { if(ModeKey) { ModeKey = 0; if(SetMode) SetMode = 0; else SetMode = 1; if(SetMode) { No1Key = 0; No2Key = 0; No3Key = 0; No4Key = 0; UpKey = 0; DownKey = 0; LeftKey = 0; RightKey = 0; SetKey = 0; SampNo = 0; TIMER2_ON; SetModeNo = 1; sprintf(out_str1,"VOICE REC:MODE %d",SampMode); switch(SampMode) { case 1:sprintf(out_str2,"PUSH KEY(K1)! ");break; case 2:sprintf(out_str2,"PUSH KEY(K1,K2)!");break; case 3:sprintf(out_str2,"PUSH KEY(K1-K4)!");break; default:sprintf(out_str2,"NOT SAMP MODE! "); } } else { TIMER2_OFF; SetPWM2Volts(0); SetModeNo = 0; sprintf(out_str1,"VOICE RECORDER "); sprintf(out_str2," "); } EERead = 0; EEWrite = 0; LCDClear(); LCDdisp(); } if(No1Key) { No1Key = 0; if(SetModeNo != 2) { if(SampMode == 1) { SampNo = 1; EEReadWriteNo = 1; EEReadWriteEnd = 1500; sprintf(out_str2,"K1 (96sec) "); } if(SampMode == 2) { SampNo = 2; EEReadWriteNo = 1; EEReadWriteEnd = 750; sprintf(out_str2,"K1 (48sec) "); } if(SampMode == 3) { SampNo = 4; EEReadWriteNo = 1; EEReadWriteEnd = 375; sprintf(out_str2,"K1 (24sec) "); } LCDdisp(); if(SetMode) EEWrite = 1; else { EERead = 1; TIMER2_ON; EE_Start(EEReadWriteNo); } EEBufCount = 0; } } if(No2Key) { No2Key = 0; if(SetModeNo != 2) { if(SampMode == 2) { SampNo = 3; EEReadWriteNo = 751; EEReadWriteEnd = 1500; sprintf(out_str2,"K2 (48sec) "); } if(SampMode == 3) { SampNo = 5; EEReadWriteNo = 376; EEReadWriteEnd = 750; sprintf(out_str2,"K2 (24sec) "); } LCDdisp(); if(SetMode) EEWrite = 1; else { EERead = 1; TIMER2_ON; EE_Start(EEReadWriteNo); } EEBufCount = 0; } } if(No3Key) { No3Key = 0; if(SetModeNo != 2) { if(SampMode == 3) { SampNo = 6; EEReadWriteNo = 751; EEReadWriteEnd = 1125; sprintf(out_str2,"K3 (24sec) "); } LCDdisp(); if(SetMode) EEWrite = 1; else { EERead = 1; TIMER2_ON; EE_Start(EEReadWriteNo); } EEBufCount = 0; } } if(No4Key) { No4Key = 0; if(SetModeNo != 2) { if(SampMode == 3) { SampNo = 7; EEReadWriteNo = 1126; EEReadWriteEnd = 1500; sprintf(out_str2,"K4 (24sec) "); } LCDdisp(); if(SetMode) EEWrite = 1; else { EERead = 1; TIMER2_ON; EE_Start(EEReadWriteNo); } EEBufCount = 0; } } if(SetMode) { if(LeftKey) { LeftKey = 0; if(SetModeNo == 1) { SetModeNo = 2; SampMode_Set = SampMode; sprintf(out_str1,"SET SAMP MODE %d ",SampMode_Set); switch(SampMode_Set) { case 1:sprintf(out_str2,"USE KEY (K1) ");break; case 2:sprintf(out_str2,"USE KEY (K1,K2) ");break; case 3:sprintf(out_str2,"USE KEY (K1-K4) ");break; default:sprintf(out_str2,"NOT SAMP MODE! "); } LCDset(); } else { SetModeNo = 1; sprintf(out_str1,"VOICE REC:MODE %d",SampMode); switch(SampMode) { case 1:sprintf(out_str2,"PUSH KEY(K1)! ");break; case 2:sprintf(out_str2,"PUSH KEY(K1,K2)!");break; case 3:sprintf(out_str2,"PUSH KEY(K1-K4)!");break; default:sprintf(out_str2,"NOT SAMP MODE! "); } LCDdisp(); } } if(RightKey) { RightKey = 0; if(SetModeNo == 1) { SetModeNo = 2; SampMode_Set = SampMode; sprintf(out_str1,"SET SAMP MODE %d ",SampMode_Set); switch(SampMode_Set) { case 1:sprintf(out_str2,"USE KEY (K1) ");break; case 2:sprintf(out_str2,"USE KEY (K1,K2) ");break; case 3:sprintf(out_str2,"USE KEY (K1-K4) ");break; default:sprintf(out_str2,"NOT SAMP MODE! "); } LCDset(); } else { SetModeNo = 1; sprintf(out_str1,"VOICE REC:MODE %d",SampMode); switch(SampMode) { case 1:sprintf(out_str2,"PUSH KEY(K1)! ");break; case 2:sprintf(out_str2,"PUSH KEY(K1,K2)!");break; case 3:sprintf(out_str2,"PUSH KEY(K1-K4)!");break; default:sprintf(out_str2,"NOT SAMP MODE! "); } LCDdisp(); } } if(UpKey) { UpKey = 0; if(SetModeNo == 2) { if(SampMode_Set >= 3) SampMode_Set = 1; else SampMode_Set = SampMode_Set + 1; } sprintf(out_str1,"SET SAMP MODE %d ",SampMode_Set); switch(SampMode_Set) { case 1:sprintf(out_str2,"USE KEY (K1) ");break; case 2:sprintf(out_str2,"USE KEY (K1,K2) ");break; case 3:sprintf(out_str2,"USE KEY (K1-K4) ");break; default:sprintf(out_str2,"NOT SAMP MODE! "); } if(SetModeNo == 2) LCDset(); else LCDdisp(); } if(DownKey) { DownKey = 0; if(SetModeNo == 2) { if(SampMode_Set <= 1) SampMode_Set = 3; else SampMode_Set = SampMode_Set - 1; } sprintf(out_str1,"SET SAMP MODE %d ",SampMode_Set); switch(SampMode_Set) { case 1:sprintf(out_str2,"USE KEY (K1) ");break; case 2:sprintf(out_str2,"USE KEY (K1,K2) ");break; case 3:sprintf(out_str2,"USE KEY (K1-K4) ");break; default:sprintf(out_str2,"NOT SAMP MODE! "); } if(SetModeNo == 2) LCDset(); else LCDdisp(); } if(SetKey) { SetKey = 0; if(SetModeNo == 2) { TIMER2_OFF; SetPWM2Volts(0); SetMode = 0; SetModeNo = 0; EERead = 0; EEWrite = 0; SampMode = SampMode_Set; WriteEEData(0, SampMode); sprintf(out_str1,"VOICE RECORDER "); sprintf(out_str2," "); } LCDdisp(); } } if(Hosyu1Key) Hosyu1Key = 0; if(Hosyu2Key) Hosyu2Key = 0; } // // User occurrence code // void IntTMR2() { ADCON0 |= (1<<GO); if(SetMode) { VR_PV = VR_PV_Work; SetPWM2Volts(VR_PV); if(EEWrite) { if(EE_BufNo == 0) { EE_Buf0[EEBufCount] = VR_PV_L; EEBufCount = EEBufCount + 1; EE_Buf0[EEBufCount] = VR_PV_H; } else { EE_Buf1[EEBufCount] = VR_PV_L; EEBufCount = EEBufCount + 1; EE_Buf1[EEBufCount] = VR_PV_H; } if(EEBufCount == 255) { EEBufCount = 0; EE_Write(EEReadWriteNo, EE_BufNo); if(EE_BufNo == 0) EE_BufNo = 1; else EE_BufNo = 0; if(EEReadWriteNo == EEReadWriteEnd) { EEWrite = 0; switch(SampMode) { case 1:sprintf(out_str2,"PUSH KEY(K1)! ");break; case 2:sprintf(out_str2,"PUSH KEY(K1,K2)!");break; case 3:sprintf(out_str2,"PUSH KEY(K1-K4)!");break; default:sprintf(out_str2,"NOT SAMP MODE! "); } } else EEReadWriteNo = EEReadWriteNo + 1; } else EEBufCount = EEBufCount + 1; } } else { if(EERead) { if(EEBufCount == 127) { EE_BufRead(EEReadWriteNo, EE_Work, 1); VR_PV_L = EE_Work[0]; VR_PV_H = EE_Work[1]; VR_PV_Work = (WORD)VR_PV_H << 8; VR_PV_Work = VR_PV_Work | VR_PV_L; SetPWM2Volts(VR_PV_Work); EEBufCount = 0; EE_Stop(EEReadWriteNo); if(EEReadWriteNo == EEReadWriteEnd) { EERead = 0; sprintf(out_str2," "); } else { EEReadWriteNo = EEReadWriteNo + 1; EE_Start(EEReadWriteNo); } } else { EE_BufRead(EEReadWriteNo, EE_Work, 0); VR_PV_L = EE_Work[0]; VR_PV_H = EE_Work[1]; VR_PV_Work = (WORD)VR_PV_H << 8; VR_PV_Work = VR_PV_Work | VR_PV_L; SetPWM2Volts(VR_PV_Work); EEBufCount = EEBufCount + 1; } } } } // // Occurrence - A key has been pressed (or is repeating) // void KeyPress() { switch(KP4Value) { case 0:No1Key = 1;break; case 1:No2Key = 1;break; case 2:No3Key = 1;break; case 3:No4Key = 1;break; case 4:UpKey = 1;break; case 5:DownKey = 1;break; case 6:LeftKey = 1;break; case 7:RightKey = 1;break; case 8:ModeKey = 1;break; case 9:SetKey = 1;break; case 10:Hosyu1Key = 1;break; case 11:Hosyu2Key = 1;break; } } // // Occurrence - Byte received on serial interface // void GetRX() { BYTE ch; if(GetRxSize() > 0) { ch = WaitRx(); if((ch == '\r') || (ch == '\n')) //'\r'(0x0D) { Receive_Buf[StrCount] = 0; //NULL StrCount = 0; CmdProc(); } else { Receive_Buf[StrCount] = ch; StrCount = StrCount + 1; if(StrCount > 7) StrCount = 7; } } } void CmdProc() { if(strcmp(Receive_Buf,"SAR1") == 0) { TxStr("123456\r\n"); } if(strcmp(Receive_Buf,"SAR2") == 0) { TxStr("ABCDEF\r\n"); } strcpy(Receive_Buf,""); StrCount = 0; } void TxStr(BYTE *Transmit_Buf) { BYTE i; for(i = 0; i < 8; i++) //8byte送信 AddTx(Transmit_Buf[i]); } void LCDdisp() { //LCD display LCDPrintAt(0,0); LCDString(out_str1); LCDPrintAt(0,1); LCDString(out_str2); } void LCDset() { //LCD display LCDPrintAt(0,0); LCDString(out_str1); LCDPrintAt(0,1); LCDString(out_str2); LCDPrintAt(14, 0); LCDOnOff(1, 0, 1); } // // Occurrence - A/D Conversion complete // void ad_data_t() { VR_PV_L = ADRESL; VR_PV_H = ADRESH; VR_PV_Work = (WORD)ADRESH << 8; VR_PV_Work = VR_PV_Work | ADRESL; } // //I2C-EEPROM DATA WRITE(EENo:1〜1500, data:fix 256byte) // void EE_Write(WORD EENo, BYTE EE_BufNo) { if(EENo >= 1) { if(EENo <= 1500) { BYTE uadrs; WORD adrs; if(EENo<=500) { if(EENo <= 250) uadrs = 0; else uadrs = 1; adrs = (EENo - 1) * 256; if(EE_BufNo == 0) I2C_ROM_Write_1(uadrs, adrs, EE_Buf0, 256); else I2C_ROM_Write_1(uadrs, adrs, EE_Buf1, 256); } else { if(EENo <= 1000) { if(EENo <= 750) uadrs = 0; else uadrs = 1; adrs = (EENo - 1) * 256; if(EE_BufNo == 0) I2C_ROM_Write_2(uadrs, adrs, EE_Buf0, 256); else I2C_ROM_Write_2(uadrs, adrs, EE_Buf1, 256); } else { if(EENo <= 1250) uadrs = 0; else uadrs = 1; adrs = (EENo - 1) * 256; if(EE_BufNo == 0) I2C_ROM_Write_3(uadrs, adrs, EE_Buf0, 256); else I2C_ROM_Write_3(uadrs, adrs, EE_Buf1, 256); } } } } } // //I2C EEPROM Start Process(EENo:1〜1500 : 256byte*1500) // void EE_Start(WORD EENo) { if(EENo >= 1) { if(EENo <= 1500) { BYTE uadrs; WORD adrs; if(EENo<=500) { if(EENo <= 250) uadrs = 0; else uadrs = 1; adrs = (EENo - 1) * 256; I2C_ROM_AdrsSet_1(uadrs, adrs); if(EERead) { I2CStart_1(I2C_START_CONT); if(uadrs == 0) I2CWrite_1(0xA1); // control byte (read) else I2CWrite_1(0xA3); // control byte (read) } } else { if(EENo <= 1000) { if(EENo <= 750) uadrs = 0; else uadrs = 1; adrs = (EENo - 1) * 256; I2C_ROM_AdrsSet_2(uadrs, adrs); if(EERead) { I2CStart_2(I2C_START_CONT); if(uadrs == 0) I2CWrite_2(0xA1); // control byte (read) else I2CWrite_2(0xA3); // control byte (read) } } else { if(EENo <= 1250) uadrs = 0; else uadrs = 1; adrs = (EENo - 1) * 256; I2C_ROM_AdrsSet_3(uadrs, adrs); if(EERead) { I2CStart_3(I2C_START_CONT); if(uadrs == 0) I2CWrite_3(0xA1); // control byte (read) else I2CWrite_3(0xA3); // control byte (read) } } } } } } // //I2C EEPROM 2byte Buffer Read Process(EENo:1〜1500 : 256byte*1500) // void EE_BufRead(WORD EENo, BYTE *data, BYTE EndData) { if(EENo >= 1) { if(EENo <= 1500) { if(EENo<=500) { *data = I2CRead_1(I2C_READ_ACK); data++; if(EndData == 0) *data = I2CRead_1(I2C_READ_ACK); else *data = I2CRead_1(I2C_READ_NOACK); } else { if(EENo <= 1000) { *data = I2CRead_2(I2C_READ_NOACK); data++; if(EndData == 0) *data = I2CRead_2(I2C_READ_ACK); else *data = I2CRead_2(I2C_READ_NOACK); } else { *data = I2CRead_3(I2C_READ_NOACK); data++; if(EndData == 0) *data = I2CRead_3(I2C_READ_ACK); else *data = I2CRead_3(I2C_READ_NOACK); } } } } } // //I2C EEPROM Stop Process(EENo:1〜1500 : 256byte*1500) // void EE_Stop(WORD EENo) { if(EENo >= 1) { if(EENo <= 1500) { BYTE i; if(EENo<=500) I2CStop_1(); else { if(EENo <= 1000) I2CStop_2(); else I2CStop_3(); } } } } //************************************************** // No.1 I2Cbus EEPROM // SDA:RC0 // SCL:RA4 //************************************************** // // I2C-EEPROM DATA WRITE // void I2C_ROM_Write_1(BYTE uadrs, WORD adrs, BYTE *data, WORD size) { WORD i; I2C_ROM_AdrsSet_1(uadrs, adrs); for(i = 0; i < size; i++) { I2CWrite_1(*data); data++; } I2CStop_1(); } // // I2C-EEPROM DATA READ // void I2C_ROM_Read_1(BYTE uadrs, WORD adrs, BYTE *data, WORD size) { WORD i; I2C_ROM_AdrsSet_1(uadrs, adrs); I2CStart_1(I2C_START_CONT); if(uadrs == 0) I2CWrite_1(0xA1); // control byte (read) else I2CWrite_1(0xA3); // control byte (read) for(i = 0; i < size; i++) { if(i != (size - 1)) *data = I2CRead_1(I2C_READ_ACK); else *data = I2CRead_1(I2C_READ_NOACK); data++; } I2CStop_1(); } // // I2C-EEPROM DATA READ/WRITE ADDRES SET // void I2C_ROM_AdrsSet_1(BYTE uadrs, WORD adrs) { I2CStart_1(I2C_START_NORM); if(uadrs == 0) I2CWrite_1(0xA0); // control byte (write) else I2CWrite_1(0xA2); // control byte (write) I2CWrite_1(adrs>>8); // EEPROM Address(H) I2CWrite_1(adrs); // EEPROM Address(L) } //************************************************** // No.2 I2Cbus EEPROM // SDA:RD1 // SCL:RD0 //************************************************** // // I2C-EEPROM DATA WRITE // void I2C_ROM_Write_2(BYTE uadrs, WORD adrs, BYTE *data, WORD size) { WORD i; I2C_ROM_AdrsSet_2(uadrs, adrs); for(i = 0; i < size; i++) { I2CWrite_2(*data); data++; } I2CStop_2(); } // // I2C-EEPROM DATA READ // void I2C_ROM_Read_2(BYTE uadrs, WORD adrs, BYTE *data, WORD size) { WORD i; I2C_ROM_AdrsSet_2(uadrs, adrs); I2CStart_2(I2C_START_CONT); if(uadrs == 0) I2CWrite_2(0xA1); // control byte (read) else I2CWrite_2(0xA3); // control byte (read) for(i = 0; i < size; i++) { if(i != (size - 1)) *data = I2CRead_2(I2C_READ_ACK); else *data = I2CRead_2(I2C_READ_NOACK); data++; } I2CStop_2(); } // // I2C-EEPROM DATA READ/WRITE ADDRES SET // void I2C_ROM_AdrsSet_2(BYTE uadrs, WORD adrs) { I2CStart_2(I2C_START_NORM); if(uadrs == 0) I2CWrite_2(0xA0); // control byte (write) else I2CWrite_2(0xA2); // control byte (write) I2CWrite_2(adrs>>8); // EEPROM Address(H) I2CWrite_2(adrs); // EEPROM Address(L) } //************************************************** // No.3 I2Cbus EEPROM // SDA:RD3 // SCL:RD2 //************************************************** // // I2C-EEPROM DATA WRITE // void I2C_ROM_Write_3(BYTE uadrs, WORD adrs, BYTE *data, WORD size) { WORD i; I2C_ROM_AdrsSet_3(uadrs, adrs); for(i = 0; i < size; i++) { I2CWrite_3(*data); data++; } I2CStop_3(); } // // I2C-EEPROM DATA READ // void I2C_ROM_Read_3(BYTE uadrs, WORD adrs, BYTE *data, WORD size) { WORD i; I2C_ROM_AdrsSet_3(uadrs, adrs); I2CStart_3(I2C_START_CONT); if(uadrs == 0) I2CWrite_3(0xA1); // control byte (read) else I2CWrite_3(0xA3); // control byte (read) for(i = 0; i < size; i++) { if(i != (size - 1)) *data = I2CRead_3(I2C_READ_ACK); else *data = I2CRead_3(I2C_READ_NOACK); data++; } I2CStop_3(); } // // I2C-EEPROM DATA READ/WRITE ADDRES SET // void I2C_ROM_AdrsSet_3(BYTE uadrs, WORD adrs) { I2CStart_3(I2C_START_NORM); if(uadrs == 0) I2CWrite_3(0xA0); // control byte (write) else I2CWrite_3(0xA2); // control byte (write) I2CWrite_3(adrs>>8); // EEPROM Address(H) I2CWrite_3(adrs); // EEPROM Address(L) } //************************************************** トップページヘもどる |