سلام
یه برنامه داریم قراره اختلاف فاز رو بدست بیاره حالا میخوایم زمانی که پالسمون یک میشه تا وقتی که صفر میشه رو اندازه بگیریم یعنی یه وقفه خارجی به لبه بالال رونده حساسه و یه وقفه هم به لبه پایین رونده ، وقتی که وقفه اول اتفاق میوفته تایمر صفر روشن میشه و تا وقتی که وقفه دوم اتفاق بیوفته میخوایم زمان رو اندازه بگیره حالا همه چیز درست کار میکنه فقط گاهی اوقات این زمان عدد های غیر عادی نشون میده که علتش رو نمیدونم
حالا مشکل کجاس که چنین اتفاقی میوفته؟؟؟؟
http://mjs1990s.ooq.ir/wp-content/uploads/2012/07/GccApplication2.rar
/*
* GccApplication2.c
*
* Created: 1433/08/22 03
42 PM
* Author: MJI
*/
#define F_CPU 4000000
#include <avr/io.h>
#include "lcd4bit.c"
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned char t,x,x2,c;
int main(void)
{
_delay_ms(500);
DDRA=0b11111111;
PORTD=0b11111111;
DDRB=0b11111111;
LCDinit();
LCDcursorOFF();
GICR=GICR | 0b11000000;
MCUCR=MCUCR | 0b00001011;
sei();
while(1)
{
cli();
x=180*t/156;
x2=180-x;
LCDGotoXY(0,0);
LCDprintData("x=%d",x2);
sei();
}
}
ISR (INT0_vect)
{
TCCR0=TCCR0 | 0b00000100;
TCNT0=0b00000000;
PORTA=0b11111111;
}
ISR (INT1_vect)
{
t=TCNT0;
TCCR0=TCCR0 | 0b00000000;
cli();
PORTA=0b00000000;
}
یه برنامه داریم قراره اختلاف فاز رو بدست بیاره حالا میخوایم زمانی که پالسمون یک میشه تا وقتی که صفر میشه رو اندازه بگیریم یعنی یه وقفه خارجی به لبه بالال رونده حساسه و یه وقفه هم به لبه پایین رونده ، وقتی که وقفه اول اتفاق میوفته تایمر صفر روشن میشه و تا وقتی که وقفه دوم اتفاق بیوفته میخوایم زمان رو اندازه بگیره حالا همه چیز درست کار میکنه فقط گاهی اوقات این زمان عدد های غیر عادی نشون میده که علتش رو نمیدونم
حالا مشکل کجاس که چنین اتفاقی میوفته؟؟؟؟
http://mjs1990s.ooq.ir/wp-content/uploads/2012/07/GccApplication2.rar
/*
* GccApplication2.c
*
* Created: 1433/08/22 03

* Author: MJI
*/
#define F_CPU 4000000
#include <avr/io.h>
#include "lcd4bit.c"
#include <avr/interrupt.h>
#include <util/delay.h>
unsigned char t,x,x2,c;
int main(void)
{
_delay_ms(500);
DDRA=0b11111111;
PORTD=0b11111111;
DDRB=0b11111111;
LCDinit();
LCDcursorOFF();
GICR=GICR | 0b11000000;
MCUCR=MCUCR | 0b00001011;
sei();
while(1)
{
cli();
x=180*t/156;
x2=180-x;
LCDGotoXY(0,0);
LCDprintData("x=%d",x2);
sei();
}
}
ISR (INT0_vect)
{
TCCR0=TCCR0 | 0b00000100;
TCNT0=0b00000000;
PORTA=0b11111111;
}
ISR (INT1_vect)
{
t=TCNT0;
TCCR0=TCCR0 | 0b00000000;
cli();
PORTA=0b00000000;
}
دیدگاه