سلام دوستان....من برای پروژم ی برنامه نوشتم که وضعیت یک پایه رو توی حافظه eeprom ذخیره میکنه تا اگه برق رفت و اومد توی همون حالت بمونه...در ضمن از طریق کلید و پورت سریال(کامپیوتر هم دسترسی دارم برای کنترل کردنش)یه مشکل خیلی عجیب ترم داشتم این بود که وقتی دوتی پایه مثلا A0 و A1 رو خروجی تعریف میکردم LED ها چشمک میزدن!!!و اصلا درست کار نمیکردن ولی وقتی مثلا A0 و D0 رو تعریف میکردم درست میشد!!!!در صورتی که هیچ ربطی نداره!!دوستان خواهش میکنم کمکم کنید....موقع بالا اومدن ی چشمک میزنه LED ها و بعدش همون حالت ذخیره شده توی EEPROM رو در بر میگیره....راهی هست که اون چشمکه زده نشه؟؟؟
میکرو استفاده شده هم PIC16F877A هست.
میکرو استفاده شده هم PIC16F877A هست.
کد:
char uart_rd; char uart_data_2; //int edge_1; //int edge_2; unsigned char edge_1,pstate=0 ,k,edge_2,kk; int butstate_1; int butstate_2; int last_butstate_1; int last_butstate_2; void main() { //ANSEL = 0; // Configure AN pins as digital //ANSELH = 0; //TRISD.F2 = 0; //TRISD.F3 = 0; UART1_Init(9600); // Initialize UART module at 9600 bps Delay_ms(200); // Wait for UART module to stabilize TRISB2_bit = 0; //output ports TRISB1_bit = 0; TRISD0_bit = 0; //output ports TRISD1_bit = 0; TRISB4_bit = 1; // set RB0 pin as input TRISB5_bit = 1; /* PORTA.F0 = 1; Delay_ms(50); PORTA.F0 = 0; Delay_ms(50); PORTA.F0 = 1; Delay_ms(50); PORTA.F0 = 0; Delay_ms(50); */ pstate = 1; while (1) { __asm CLRWDT; butstate_1 = PORTB.F4; butstate_2 = PORTB.F5; uart_rd = UART1_Read(); // read the received data, if( uart_rd == 'W') { { edge_1 = 10; //s_1=1; } } else if( uart_rd == 'w') { { edge_1 = 20; //r_1=1; } } if( uart_rd == 'C') { { edge_2 = 10; //ss_1=1; } } else if( uart_rd == 'c') { { edge_2 = 20; //rr_1=1; } } if( butstate_1 != last_butstate_1) { if(butstate_1 == 1) // agar kilid 1 feshar dade shod.... { edge_1 = 10; //s_2 = 1; } else if(butstate_1 == 0) { edge_1 = 20; //s_2 = 1; } } if( butstate_2 != last_butstate_2) { if(butstate_2 == 1) // agar kilid 2 feshar dade shod.... { edge_2 = 10; //ss_2 = 1; } else if(butstate_2 == 0) { edge_2 = 20; //rr_2 = 1; } } last_butstate_1 = butstate_1; last_butstate_2 = butstate_2; if(pstate == 1) { pstate = 0; k = EEPROM_Read(0x03); kk = EEPROM_Read(0x08); edge_1 = k; edge_2 = kk; } if(edge_1 == 10) { PORTB.F1 = 1; PORTD.F0 = 1; EEPROM_Write(0x03, 10); Delay_ms(150); } else if(edge_1 == 20) { PORTB.F1 = 0; PORTD.F0 = 0; EEPROM_Write(0x03, 20); Delay_ms(150); } if(edge_2 == 10) { PORTB.F2 = 1; PORTD.F1 = 1; EEPROM_Write(0x08, 10); Delay_ms(150); } else if(edge_2 == 20) { PORTB.F2 = 0; PORTD.F1 = 0; EEPROM_Write(0x08, 20); Delay_ms(150); } } }
دیدگاه