سلام دوستان....من برای پروژم ی برنامه نوشتم که وضعیت یک پایه رو توی حافظه 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);
}
}
}




دیدگاه