void main(){ setup(); while(1){ for(i=0;i<3;i++){ old_pin[i]=pin[i]; pin[i]=input_b() & (1<<(7-i)); } if(pin[1]==0){output_a(FORWARD);} else if(pin[0]==0){output_a(R_TURNV);delay_ms(8);j=1;} else if(pin[2]==0){output_a(L_TURNV);delay_ms(8);j=1;} else { j++; output_a(BACK); delay_ms(3); output_a(STOP); delay_us(100); output_a(R_TURN); delay_ms(10);} //if(j==20){output_a(BACK);delay_ms(50);j=1;} delay_ms(1); output_a(STOP); delay_us(100); } for (;;) { for (PWM_COUNT=PWM_MAX;PWM_COUNT<1;PWM_COUNT--){ if(state[1]>PWM_COUNT) output_a(state[0]); else output_a(state[2]); delay_ms(100); } } }
void main(){ setup(); while(1){ for(i=0;i<3;i++){ old_pin[i]=pin[i]; pin[i]=input_b() & (1<<(7-i)); } if(pin[1]==0){output_a(FORWARD);} else if(pin[0]==0){output_a(R_TURNV);delay_ms(8);j=1;} else if(pin[2]==0){output_a(L_TURNV);delay_ms(8);j=1;} else { j++; output_a(BACK); delay_ms(3); output_a(STOP); delay_us(100); output_a(R_TURN); delay_ms(1);} //if(j==20){output_a(BACK);delay_ms(50);j=1;} delay_ms(1); output_a(STOP); delay_us(100); if(k==200) { output_a(BRAKE); delay_ms(100); } } while(1){ output_a(R_TURN); delay_ms(1);} }
void PortB_isr() { //Pin RB4 se usará para el comando "Aceptar", RB5 será "Arriba", RB6... "Abajo" y RB7 será "Cancelar". //Para arreglos activo en bajo. pushButton = input_b(); if ((pushButton | 0xEF)==0xEF) //Aceptar { if(displayConfigs==false){ displayConfigs=true; } else RB4=true; cls=true; } if ((pushButton | 0xDF)==0xDF) //Arriba { RB5=true; } if ((pushButton | 0xBF)==0xBF) //Abajo { RB6=true; } if ((pushButton | 0x7F)==0x7F) //Cancelar { RB7=true; cls=true; } }
main() { short output; long count,max_count; error_count=0; resync(); do { while((input_a() & 3)==sequence[seq_index]) ; seq_index=(seq_index+1)&3; if ((input_a() & 3)!=sequence[seq_index]) resync(); else { if(error_count==0) output_low(pin_a2); else --error_count; max_count=input_b()>>2; count++; if(count>max_count) { output=!output; output_bit(pin_a3,output); count=0; } } } while (true); }
//En la interrupcion externa un valor es adquirido a traves del //teclado matricial void EXT_isr(void) { output_low(LED); printf(lcd_putc,"\f"); lcd_gotoxy(1,2); printf(lcd_putc," . = * Enter = #"); d=0; i=0; while (text!='#') { //TAbla de conversionaes digitales delay_ms(200); text='E'; if ((input(PIN_B0)!=0)) { tec=input_b(); if ((tec==1)||(tec==-31)) text='1'; else if ((tec==113)||(tec==49)||(tec==-15)||(tec==17)) text='2'; else if ((tec==9)||(tec==-23)) text='3'; else if ((tec==5)||(tec==-27)) text='4'; else if ((tec==117)||(tec==21)||(tec==53)||(tec==-11)) text='5'; else if ((tec==13)||(tec==-19)) text='6'; else if ((tec==3)||(tec==-29)) text='7'; else if ((tec==115)||(tec==-13)||(tec==51)||(tec==19)) text='8'; else if ((tec==-53)||(tec==11)||(tec==-21)||(tec==-117)) text='9'; else if ((tec==-25)||(tec==7)) text='.'; else if ((tec==23)||(tec==55)||(tec==-9)||(tec==-21)) text='0'; else if ((tec==-17)||(tec==15)) text='#'; lcd_gotoxy(1+i,1); printf(lcd_putc,"%c",text); delay_ms(200); d[i]=text; i++; } } if (atof(d)==0) //Valor predeterminado vn=30; else vn=atof(d); //El valor adquirido es un FLOAT printf(lcd_putc,"\f"); lcd_gotoxy(1,2); printf(lcd_putc,"IN"); lcd_gotoxy(1,1); printf(lcd_putc,"%.1f",vn); enable_interrupts(INT_TIMER1); //Habilita las interrupciones por timer pues solo al haber //adquirido una temperatura tiene sentido enable_interrupts(INT_TIMER2); }
void teiki(void){ //escape and reading for(i=0;i<3;i++){ old_pin[i]=pin[i]; pin[i]=input_b() & (1<<i); //pin[i]=PORTB() & (1<<i); old_state[i]=state[i]; } //mode judge if(!pin[LS_Center]){ state[0] = FORWARD; state[2] = STOP; if(pin[LS_Left]==pin[LS_Right]){ // b b b or w b w state[1]=PWM_MAX+1; } else{ if(!pin[LS_Left]){ //b b w state[0]=L_TURN; } else{ //w b b state[0]=R_TURN; } state[1]=PWM_MAX/2; state[2]=FORWARD; } } else if(!pin[LS_Left]){ if(old_state[0]==L_TURN){ state[0]=L_TURNV; } else{ state[0]=L_TURN; } state[1]=PWM_MAX/2; state[2]=STOP; } else if(!pin[LS_Right]){ if(old_state[0]==R_TURN){ state[0]=R_TURNV; } else{ state[0]=R_TURN; } state[1]=PWM_MAX/2; state[2]=STOP; } else{ state[0]=FORWARD; state[1]=PWM_MAX-1; state[2]=STOP; } }
void slave_id() { byte id; id = input_b(); id = (id&0b11110000); // mascara id = id>>3; // Rotate para obter sempre um endereco par id = id +0xA0; // Soma A0 range de começo sspadd = id; // coloca no registo a qual reponde o barramento }
void trata_rb() { int x; if (input(MODE) == 0) { changeMode(); } if (input(INC) == 0) { incClick(); } if (input(DEC) == 0) { decClick(); } x = input_b(); }
void RB_isr(void) { BYTE changes; port_b = input_b(); //compare status of port B with previous value changes = last_b ^ port_b; last_b = port_b; if(bit_test(changes, 2)) { mode = MODE_A; smode = 1; } if(bit_test(changes, 3)) { mode = MODE_B; smode = 1; } if(bit_test(changes, 4)) { mode = MODE_C; //change value of smode in range of 0-3 if (smode == 0) smode = 1; else if (smode == 1) smode = 2; else if (smode == 2) smode = 3; else if (smode == 3) smode = 0; } if(bit_test(changes, 5)) { mode = MODE_D; smode = 1; //change direction of text: clockwise, anti-clockwise, still if (pled_status == 0) pled_status = 1; else if (pled_status == 1) pled_status = 2; else if (pled_status == 2) pled_status = 3; else if (pled_status == 3) pled_status = 0; if (pled_status == 0 || pled_status == 2) pled_direction = 0; else if (pled_status == 1) pled_direction = 1; else if (pled_status == 3) pled_direction = -1; } }
void main () { disable_interrupts(GLOBAL); //общее запрещение прерываний setup_oscillator(OSC_8MHZ); //|OSC_INTRC set_tris_a(0x00); //выходы set_tris_b(0xff); //входы set_tris_c(0x10); //выходы, RC4-вход(данные от STM) //output_c(0x4f); portc=0x4f; porta=0x7f; portb=0xff; //set_tris_c(0x10); //выходы, RC4-вход(данные от STM) //output_a(0x7f); //output_b(0xff); pit_bykl(); pr_wkl_pit=0; //пр. вкл. питания (исп. для 1-го нажатия кн. "Питание") delay_ms(1000); //для настройки STM //Инициализация модуля MSSP(режим SPI) SSPCON1=0x31; SSPSTAT=0; //0x80; SSPBUF=0x55; //иниц. таймеров: //t0con=0xc8; //8-ми разр t0con=0x88; //16-ми разр счетчик T1CON=0x85; setup_timer_1(T1_INTERNAL|T1_DIV_BY_1); set_timer1(62286); set_timer0(64536); //enable_interrupts(INT_TIMER2); enable_interrupts(INT_TIMER1); enable_interrupts(INT_TIMER0); enable_interrupts(GLOBAL); //СОСТОЯНИЕ кнопок и ручек по ВКЛЮЧЕНИЮ: //---------------------------------------- for (ii=0; ii<6;ii++) { du_pA=porta&0xc0|mask[ii]; output_a(du_pA); pr_state_rb[ii] = input_b(); } while(1) { for (ii=0; ii<6;ii++) { pr_ruk=0; // output_a(mask[ii]); //SL... -> PORTA du_pA=porta&0xc0|mask[ii]; output_a(du_pA); tek_state_rb[ii] = input_b(); if (pr_state_rb[ii] ^ tek_state_rb[ii]) //возможно нажатие или вращение ? { if ((tek_state_rb[ii]&mask_kn[ii])!=mask_kn[ii]) //если это кнопка, то отрабат. дребезг { //кнопка delay_ms(1); tek1_state_rb = input_b(); delay_ms(1); tek2_state_rb = input_b(); delay_ms(1); tek3_state_rb = input_b(); // if (tek_state_rb[ii] == tek3_state_rb) //дребезг зак.-есть нажатие/отжатие или вращение! } else //ручка { tek3_state_rb=tek_state_rb[ii]; } if (tek_state_rb[ii] == tek3_state_rb) //дребезг зак.-есть нажатие/отжатие или вращение! switch(ii) //номер сигнала SL0,SL1,SL2,SL3,SL4,SL5 { case 0: //SL0 //Кнопки K1, Ser: if (!(tek3_state_rb & (1 << 0))) { buf_per=0x81; //№1-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 0))); //отжатие произошло while (buf_per!=0) {} buf_per=0x01; //№1-отж. break; } if (!(tek3_state_rb & (1 << 5))) { buf_per=0x82; //№2-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 5))); //отжатие произошло while (buf_per!=0) {} buf_per=0x02; //№2-отж. break; } //Ручки -B_K1, +B_K1 -Sm_K1, +Sm_K1: //*********************************** if ((tek3_state_rb & 0x02)&&(tek3_state_rb & 0x04)) //RB1 & RB2==1 { for (ib=0; ib<2;ib++) { if ((tek3_state_rb & (0x02 << ib)) && (!(pr_state_rb[ii] & (0x02 << ib)))) switch(ib) { case 0: pr_ruk=1; buf_per=0x14; //№20-влево break; case 1: pr_ruk=1; buf_per=0x94; //№20-вправо break; }//switch } //for ib } //if // else // { if ((tek3_state_rb & 0x08)&&(tek3_state_rb & 0x10)&& (!pr_ruk)) //RB3 & RB4==1 & pr_ruk=0 { for (ib=0; ib<2;ib++) { if ((tek3_state_rb & (0x08 << ib)) && (!(pr_state_rb[ii] & (0x08 << ib)))) switch(ib) { case 0: { buf_per=0x15; //№21-влево break; } case 1: { buf_per=0x95; //№21-вправо break; } }//switch ib } //for } //if // } //else pr_state_rb[ii]=tek3_state_rb; pr_ruk=0; break; case 1: //SL1 //Кнопки K2, DISP: if (!(tek3_state_rb & (1 << 0))) { buf_per=0x83; //№3-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 0))); //отжатие произошло while (buf_per!=0) {} buf_per=0x03; //№2-отж. break; } if (!(tek3_state_rb & (1 << 5))) { buf_per=0x84; //№4-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 5))); //отжатие произошло while (buf_per!=0) {} buf_per=0x04; //№4-отж. break; } //Ручки -B_K2, +B_K2 -Sm_K2, +Sm_K2: //*********************************** if ((tek3_state_rb & 0x02)&&(tek3_state_rb & 0x04)) //RB1 & RB2==1 { for (ib=0; ib<2;ib++) { if ((tek3_state_rb & (0x02 << ib)) && (!(pr_state_rb[ii] & (0x02 << ib)))) switch(ib) { case 0: pr_ruk=1; buf_per=0x16; //№22-влево break; case 1: pr_ruk=1; buf_per=0x96; //№22-вправо break; }//switch } //for } //if // else // { if ((tek3_state_rb & 0x08)&&(tek3_state_rb & 0x10) && (!pr_ruk)) //RB3 & RB4==1 & (!pr_ruk) { for (ib=0; ib<2;ib++) { if ((tek3_state_rb & (0x08 << ib)) && (!(pr_state_rb[ii] & (0x08 << ib)))) switch(ib) { case 0: { buf_per=0x17; //№23-влево break; } case 1: { buf_per=0x97; //№23-вправо break; } }//switch } //for } //if // } //else // pr_state_rb[ii]=tek3_state_rb; pr_ruk=0; break; case 2: //SL2 //Кнопки Raz, Pam: if (!(tek3_state_rb & (1 << 0))) { buf_per=0x85; //№5-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 0))); //отжатие произошло while (buf_per!=0) {} buf_per=0x05; //№5-отж. break; } if (!(tek3_state_rb & (1 << 5))) { buf_per=0x86; //№6-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 5))); //отжатие произошло while (buf_per!=0) {} buf_per=0x06; //№6-отж. break; } //Ручки -T, +T -Del, +Del: //*********************************** if ((tek3_state_rb & 0x02)&&(tek3_state_rb & 0x04)) //RB1 & RB2==1 { for (ib=0; ib<2;ib++) { if ((tek3_state_rb & (0x02 << ib)) && (!(pr_state_rb[ii] & (0x02 << ib)))) switch(ib) { case 0: pr_ruk=1; buf_per=0x18; //№24-влево break; case 1: pr_ruk=1; buf_per=0x98; //№24-вправо break; }//switch } //for } //if // else { if ((tek3_state_rb & 0x08)&&(tek3_state_rb & 0x10) && (!pr_ruk)) //RB3 & RB4==1 & (!pr_ruk) { for (ib=0; ib<2;ib++) { if ((tek3_state_rb & (0x08 << ib)) && (!(pr_state_rb[ii] & (0x08 << ib)))) switch(ib) { case 0: { buf_per=0x19; //№25-влево break; } case 1: { buf_per=0x99; //№25-вправо break; } }//switch } //for } //if } //else // pr_state_rb[ii]=tek3_state_rb; pr_ruk=0; break; case 3: //SL3 //Кнопки Sinch, Pusk, Kurs, Izm: if (!(tek3_state_rb & (1 << 0))) { buf_per=0x87; //№7-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 0))); //отжатие произошло while (buf_per!=0) {} buf_per=0x07; //№7-отж. break; } if (!(tek3_state_rb & (1 << 3))) { buf_per=0x88; //№8-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 3))); //отжатие произошло while (buf_per!=0) {} buf_per=0x08; //№8-отж. break; } if (!(tek3_state_rb & (1 << 4))) { buf_per=0x89; //№9-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 4))); //отжатие произошло while (buf_per!=0) {} buf_per=0x09; //№9-отж. break; } if (!(tek3_state_rb & (1 << 5))) { buf_per=0x8A; //№10-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 5))); //отжатие произошло while (buf_per!=0) {} buf_per=0x0A; //№10-отж. break; } //Ручки -Ur, +Ur : //**************** if ((tek3_state_rb & 0x02)&&(tek3_state_rb & 0x04)) //RB1 & RB2==1 { for (ib=0; ib<2;ib++) { if ((tek3_state_rb & (0x02 << ib)) && (!(pr_state_rb[ii] & (0x02 << ib)))) switch(ib) { case 0: buf_per=0x1A; //№26-влево break; case 1: buf_per=0x9A; //№26-вправо break; }//switch } //for } //if // pr_state_rb[ii]=tek3_state_rb; break; case 4: // SL4 //Кнопки Pit, Sbor: if (!(tek3_state_rb & (1 << 0))) { buf_per=0x8B; //№11-наж. if (pr_wkl_pit==0) { pit_bkl(); } break; } if (!(tek3_state_rb & (1 << 5))) { buf_per=0x8C; //№12-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 5))); //отжатие произошло while (buf_per!=0) {} buf_per=0x0C; //№12-отж. break; } //Ручки -Ur, +Ur : //**************** if ((tek3_state_rb & 0x02)&&(tek3_state_rb & 0x04)) //RB1 & RB2==1 { for (ib=0; ib<2;ib++) { if ((tek3_state_rb & (0x02 << ib)) && (!(pr_state_rb[ii] & (0x02 << ib)))) switch(ib) { case 0: buf_per=0x1B; //№27-влево break; case 1: buf_per=0x9B; //№27-вправо break; }//switch } //for } //if // pr_state_rb[ii]=tek3_state_rb; break; case 5: //SL5 //Кнопки Men,"1", "2", "3", "4", "5": if (!(tek3_state_rb & (1 << 0))) { buf_per=0x8D; //№13-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 0))); //отжатие произошло while (buf_per!=0) {} buf_per=0x0D; //№13-отж. break; } if (!(tek3_state_rb & (1 << 1))) { buf_per=0x8e; //№14-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 1))); //отжатие произошло while (buf_per!=0) {} buf_per=0x0e; //№14-отж. break; } if (!(tek3_state_rb & (1 << 2))) { buf_per=0x8f; //№15-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 2))); //отжатие произошло while (buf_per!=0) {} buf_per=0x0f; //№15-отж. break; } if (!(tek3_state_rb & (1 << 3))) { buf_per=0x90; //№16-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 3))); //отжатие произошло while (buf_per!=0) {} buf_per=0x10; //№16-отж. break; } if (!(tek3_state_rb & (1 << 4))) { buf_per=0x91; //№17-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 4))); //отжатие произошло while (buf_per!=0) {} buf_per=0x11; //№17-отж. break; } if (!(tek3_state_rb & (1 << 5))) { buf_per=0x92; //№18-наж. do tek3_state_rb = input_b(); while (!(tek3_state_rb & (1 << 5))); //отжатие произошло while (buf_per!=0) {} buf_per=0x12; //№18-отж. break; } pr_state_rb[ii]=tek3_state_rb; break; }//switch(ii) pr_state_rb[ii]=tek3_state_rb; }//if }//for (ii) }//while(1) //output_bit(PIN_C3,1); //BUF_CAP[i-1]=input(PIN_C4); //output_bit( PIN_B2, 0); //Ldac в 0 //level = input_state(pin_A3); } //main
void trata_rb() { // interrupcao na porta B int x; // configurar alarme if (input(PIN_B4) == 0) { if (var_alarme_configurado == 1 && var_alarme_tocando == 1) { // verifica se o alarme esta ativo e tocando parar_alarme(); } else if (var_alarme_configurando == 1) { // se o alarme estiver sendo configurado, o segundo click é para setar o alarme // verifica se o alarme foi configurado if (var_alarme_horas == 0 && var_alarme_minutos == 0) { // alarme nao configurado var_alarme_configurado = 0; } else { var_alarme_configurado = 1; } output_low(PIN_A0); // baixa pino do alarme que indica o alarme sendo configurado var_alarme_configurando = 0; // configuracao do alarme terminou exibe_relogio(temp_global_horas, temp_global_minutos); } else { // alerta que o alarme esta sendo configurado output_high(PIN_A0); // pino alarme // reseta o display para configurar hora do alarme clean_displays(); // primeiro click no B4, quer configurar o alarme var_alarme_configurando = 1; } } // incrementar hora if (input(PIN_B5) == 0) { // verifica se e o alarme esta sendo configurado if (var_alarme_configurando) { var_alarme_horas = var_alarme_horas + 1; if (var_alarme_horas == 24) { var_alarme_horas = 0; } exibe_relogio(var_alarme_horas, var_alarme_minutos); } else { incrementa_minutos(60); exibe_relogio(temp_global_horas, temp_global_minutos); } } // incrementar minuto if (input(PIN_B6) == 0) { // verifica se e o alarme esta sendo configurado if (var_alarme_configurando) { var_alarme_minutos = var_alarme_minutos + 1; if (var_alarme_minutos == 60) { var_alarme_minutos = 0; var_alarme_horas = var_alarme_horas + 1; } exibe_relogio(var_alarme_horas, var_alarme_minutos); } else { incrementa_minutos(1); exibe_relogio(temp_global_horas, temp_global_minutos); } } x = input_b(); // reinicia leitura da porta B }