سلام
من تازه شروع کردم به کار با میکروکنترلرها؛
برنامه های میخواستم بنویسم که 3 تا پین از پورت A رو بخونه و تا زمانی که 1 بودن سه تا پین رو پورت D رو 1 کنه؛
تو محیط Atmel Studio کار میکنم؛ ( قبلا با کدویژن جواب گرفتم ولی علاقه مندم تو محیط اتمل کار کنم)
این کد منه:
مشکل اینه که وقتی فایل هگز رو تو Proteus میبرم کار نمیکنه؛ ممنونم میشم کمک کنید.
تو proteus به پین های PA0 و PA1 و PA2 سویچ وصل کردم و به پین های PD0 و PD1 و PD2 ؛ LED وصل کردم؛
من تازه شروع کردم به کار با میکروکنترلرها؛
برنامه های میخواستم بنویسم که 3 تا پین از پورت A رو بخونه و تا زمانی که 1 بودن سه تا پین رو پورت D رو 1 کنه؛
تو محیط Atmel Studio کار میکنم؛ ( قبلا با کدویژن جواب گرفتم ولی علاقه مندم تو محیط اتمل کار کنم)
این کد منه:
کد:
#define F_CPU 8000000UL#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
#include <avr/interrupt.h>
int cnt=0;
int in1=0, in2=0, in3=0, out1=0, out2=0, out3=0;
int main (void)
{
DDRA = 0x00;
DDRD = 0xff;
DDRC=0xff;
TIMSK |= (1 << TOIE1); // Enable overflow interrupt
sei(); // Enable global interrupts
TCCR1B |= (1 << CS11);
for (;;)
{
in1= PINA & 0x01;
in2= PINA & (0x01 << 1);
in3= PINA & (0x01 << 2);
out1= PORTD | 0x01;
out2= PORTD | (0x01 << 1);
out3= PORTD | (0x01 << 2);
}
}
ISR(TIMER1_OVF_vect)
{
if (TIFR &(1<<OCF1A))
{
if (in1 !=0) {out1=1;}
else {out1=0;}
if (in2 !=0) {out2=1;}
else {out2=0;}
if (in3 !=0) {out3=1;}
else {out3=0;}
if (PINA & (1 << PA0 & 1<<PA1 & 1<<PA2))
{
cnt++;
TIFR = (1<<OCF1A); // Reset timer value
PORTD |= (0x01 << 6);
}
}
}
تو proteus به پین های PA0 و PA1 و PA2 سویچ وصل کردم و به پین های PD0 و PD1 و PD2 ؛ LED وصل کردم؛
