void Init44k22(void) { //OSC int 16MHz (62.5ns/inst.) OSCCONbits.IRCF2 = 1; OSCCONbits.IRCF1 = 1; OSCCONbits.IRCF0 = 1; while(!OSCCONbits.HFIOFS); //wait until ready //Uart1 ANSELCbits.ANSC7 = 0; //Port C7 select som digital port ANSELCbits.ANSC6 = 0; //Port C6 select som digital port //Uart2 ANSELDbits.ANSD7 = 0; //Port D7 select som digital port ANSELDbits.ANSD6 = 0; //Port D6 select som digital port //Leds ANSELAbits.ANSA3 = 0; //Port A3 select som digital port Red ANSELEbits.ANSE1 = 0; //Port E1 select som digital port Green ANSELEbits.ANSE2 = 0; //Port E2 select som digital port Blue //InitTimer0(); InitTimer1(); //InitTimer2(); InitTimer3(); InitUart1(); InitUart2(); Init_IO(); }
void Init26k20(){ //OSC int 16MHz (62.5ns/inst.) OSCCONbits.IRCF2 = 1; OSCCONbits.IRCF1 = 1; OSCCONbits.IRCF0 = 1; OSCCONbits.SCS1 = 1; while(!OSCCONbits.IOFS); //wait until ready //dioder ANSEL=0x00; //set ports som digitale ANSELH=0x00; //input //ANSELBbits.ANSB0 = 1; //Port B0 som analog //ANSELBbits.ANSB1 = 1; //Port B1 som analog //ANSELBbits.ANSB2 = 1; //Port B2 som analog //InitTimer0(); InitTimer1(); //InitTimer2(); InitTimer3(); InitUart1(); Init_IO(); }
void stop_send_ir() // initiates the sending process { cli(); get_ir_status = 0; irPointer = irBuffer; irBufferCounter = 0; InitTimer3(0); DEACTIVATE_PWM(); TCNT3 = 0; sei(); }
void stop_record_ir() // stopd the recording process { cli(); get_ir_status = 0; // Idle irPointer = irBuffer; irBufferCounter = 0; irBufferOverflow = 0; InitTimer3(0); DEACTIVATE_PWM(); DEACTIVATE_ICP1(); sei(); }
void start_record_ir() // initiates the recording process { cli(); get_ir_status = 2; // Recording irPointer = irBuffer; irBufferCounter = 0; irBufferOverflow = 0; InitTimer3(1); DEACTIVATE_PWM(); ACTIVATE_ICP1(); sei(); }
void start_send_ir() // initiates the sending process { cli(); get_ir_status = 1; irPointer = irBuffer; InitTimer3(1); ACTIVATE_PWM(); TCNT3 = 65535 - (*(irPointer+1)*256 + *(irPointer+2)); irPointer += 3; irBufferCounter = 3; sei(); }
void Record_IR_Code() { if((TCCR3B &(1<<CS31))== 0x00) // Timer 3 activated? { InitTimer3(1); } if(irBufferCounter>=507) { DEACTIVATE_ICP1(); *irPointer = 0xFF; // End of IR Code *(irPointer+1) = 0xFF; // End of IR Code *(irPointer+2) = 0xFF; // End of IR Code InitTimer3(0); CIM_frame.cim_feature=LIPMOUSE_CIM_FEATURE_SET_IR_MODE; CIM_frame.reply_code=CMD_REQUEST_WRITE_FEATURE; autoreply_num++; if (autoreply_num==0) autoreply_num=0x80; CIM_frame.serial_number=autoreply_num; get_ir_status = 3; // Record available CIM_frame.data[0]=get_ir_status; CIM_frame.data_size = 1; reply_DataFrame(); } else { *irPointer = irBufferOverflow; *(irPointer+1) = ((TCNT3>>8)&0xFF); *(irPointer+2) = ((TCNT3)&0xFF); irPointer+=3; irBufferOverflow = 0; irBufferCounter+=3; TCNT3 = 0; } }
/* ***************************************************************************** **函 数 名:void GatherData(void) **功能描述:数据采集 **输 入:无 **输 出:无 ***************************************************************************** */ void GatherData(void) { //ACCEL_Init(); if(SysDat.flagGather == 0) //如果不要数据采集直接退出 { return; } if(ReadMask(SysDat.Flag,SYS_BE_WORKING) == SYS_BE_WORKING) //开始数据采集 { ClearMask(SysDat.Flag,SYS_BE_WORKING); InitTimer3(); Timer3IntSwitchOn(); GatherVariable(); } if(SysDat.flagGather == 1) { //Timer3Open(); while(SysDat.flagGather != 2) //等待电压和温度数据采集完成 { if(!SysDat.timeLeft) { if(!AD0BUSY) { ADC0_Converx(VOLTAGE); ADC0_Converx(TEMPERATURE); if(SysDat.pFilter>=5) { SysDat.pFilter = 0; ParDat.voltage = (Uint8)(Filter(GatDat->TempLoad,5)>>2); //取ADC高8位 ParDat.temperature = (Uint8)(Filter(GatDat->TempAcc,5)>>2); //取ADC高8位 SysDat.flagGather = 2; break; } SysDat.timeLeft = 10; Timer3Open(); } } PCON |= 0x01; //空闲方式(省电),由Timer3中断唤醒 }