نوشته اصلی توسط
microprocesor_2002
سلام به همه دوستان ....
برنامه دیمر رو نوشتم ... فقط اینکه تستش نکردم ... لطفا تستش کنین و بهم خبر بدین .... با کدویژن نوشتم... هم مدار و هم برنامه رو می زارم....
متشکرم
حالا دانلود و تست میکنم
من برنامه را جمع و جور کردم و مقداری توضیحات به آن اضافه کردم
اگر درست تشخیص داده ام لطفا بفرمائید ادامه دهم
#include <mega16.h>
#include <stdio.h>
#include <delay.h>
////////////////////////////////
#define UP PINB.0
#define DOWN PINB.1
#define ADDR PINA
////////////////////////////
//********************
void UartEnable(void)
{
PORTD.1 = 1;
DDRD.1 = 0; //PORTD.1 as Input
UCSRB=0x08;
}
//******************************
void UartDisable(void)
{
PORTD.1 = 1;
DDRD.1 = 1; //PORTD.1 as output
UCSRB=0x00;
}
//*********************************
void Wait( unsigned long int delay )
{
unsigned long int j;
for( j=0; j<delay; j++ ){};
}
//////////////////////////////////////////
void main(void)
{
char lamp[100]; //آرايه نگهداري مقادير روشنائي هر لامپ 100 لامپ در نظر گرفته شده است
char i;
PORTA=0x00;
DDRA=0x00;
PORTB=0x03;
DDRB=0x00;
// USART initialization
// Communication Parameters: 8 Data, 2 Stop, No Parity
// USART Receiver: Off
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 250000
UCSRA=0x00;
UCSRB=0x08;
UCSRC=0x8E;
UBRRH=0x00;
UBRRL=0x03;
for(i=0; i<=100;i++)lamp[i]=0; // مقدار دهي عدد صفر براي صد لامپ
while (1)
{
UartDisable();
PORTD.1 = 0; // ايجاد سيگنال Break
Wait(50);
UartEnable(); // ايجاد سيگنال Mark-after-break
putchar( 0 ); // ايجاد سيگنال Start Code
//for (i=0; i<=99; i++)
putchar(lamp[i]); // ارسال اطلاعات مقادير ذخيره شده براي هر لامپ در پورت سريال
if(!UP)
{ // تست کليد ها براي تغيير مقادير هر لامپ با درنظر گرفتن ديپ سويچ هاي پورت آ
delay_ms(50); // براي افزايش مقدار روشنايي
lamp[ADDR]++;
if(lamp[ADDR] >= 254)lamp[ADDR]=254;
}
if(!DOWN)
{ // تست کليد ها براي تغيير مقادير هر لامپ با درنظر گرفتن ديپ سويچ هاي پورت آ
delay_ms(50); // براي کاهش روشنايي
if(lamp[ADDR] > 0)lamp[ADDR]--;
}
}
}