اطلاعیه

Collapse
No announcement yet.

کسی میتونه این برنامه را بنویسه

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    کسی میتونه این برنامه را بنویسه

    سلام کسی میتونه برنامه روشن کردن ال ای دی های کیبرد کامپیوتر را با میکرو وبا استفاده از کانکتور ps2 بنویسه؟
    خیلی ممنون میشم اگه کسی کمکم کنه.
    خیلی ضروریه
    به طواف کعبه رفتم به حرم رهم ندادند
    که برون در چه کردی که درون خانه آیی

    #2
    پاسخ : کسی میتونه این برنامه را بنویسه

    کد:
    #include <mega32.h>
    #include <delay.h>
    #include <stdio.h>
    #include <defpin.h>
    #include <scancodes.h> 
    #include <kbdio.h>
    
    void main(void)
    {
     // Declare your local variables here
     unsigned char kar; 
     
     // USART initialization
     // Communication Parameters: 8 Data, 1 Stop, No Parity
     // USART Receiver: On
     // USART Transmitter: On
     // USART Mode: Asynchronous
     // USART Baud rate: 9600
     UCSRA=0x00;
     UCSRB=0x18;
     UCSRC=0xa6;
     UBRRH=0x00;
     UBRRL=0x33; 
     
     data_byte=0xff;		  
     hosto_d(data_byte);		\\ Send Reset Command
     show_byte(deviceto_h());	\\ Wait for 0xFA (ACK) Display it
     putchar(',');			  \\ Display ,
     show_byte(deviceto_h());	\\ Wait for 0xAA (Successful Reset)
     putchar(',');			  \\ Display ,
     
     data_byte=0xed;		  
     hosto_d(data_byte);		\\ Send LED Control Command
     show_byte(deviceto_h());	\\ Wait for 0xFA (ACK) and Display it	
     data_byte=0x02;		  \\ Argument = Num Lock: On	
     hosto_d(data_byte);		\\ Send Argument
     show_byte(deviceto_h()); \\ Wait for 0xFA (ACK) and Display it
     
    while(1)
    {
    } 
    }

    defpin.c:

    کد:
    #define data_pin    PIND.2         //Pind.2 connect to data pin of AT keyboard
    #define clock_pin   PIND.3         //Pind.3 connect to clock pin of AT keyboard 
    #define data_pin_out  PORTD.2         //define Portd.2 for output mode 
    #define clock_pin_out PORTD.3         //define Portd.3 for output mode
    #define data_pin_reg  DDRD.2 
    #define clock_pin_reg DDRD.3

    فایل kbdio.h:

    کد:
    // Declare your global variables here
    bit parity_bit,data_bit,scroll_flag=0;
    unsigned char data_byte;
    unsigned char i;     
    void hosto_d(unsigned char c_char); 
    unsigned char deviceto_h();
    unsigned char decode(unsigned char sc);
    void show_byte(unsigned char scc);
    void scroll(void); 
    
    /***************************************************************************************************************/
    
    unsigned char deviceto_h()
    { 
     unsigned char c_char;
     
     begin1:
     parity_bit=0;
     data_byte=0;
     data_pin_reg=0;                   //tow pin of port set to input mode
     clock_pin_reg=0;                  //the host ready to recive data from atkeyboard 
     
     for(;;) if(clock_pin==1) break;          //test clock pin if releas continue
     for(;;) if(clock_pin==0) break;          //wait until clock goes low , read start bit
     if(data_pin!=0) goto begin1;            //test start bit , It must be 0, if no zero replay 
     
     for(i=0;i<=7;i++)                  //read 8 bit data and save to data_byte variable
     {      
      for(;;) if(clock_pin==1) break; 
      for(;;) if(clock_pin==0) break;  
      parity_bit^=data_pin;              //genrate parity bit 
      c_char=data_pin;
      c_char<<=i;         
      data_byte|=c_char;      
     } 
     
     parity_bit^=1;                   //genrate parity bit                
     for(;;) if(clock_pin==1) break; 
     for(;;) if(clock_pin==0) break;
     if(data_pin!=parity_bit) goto begin1;       //test parity bit , if no correct replay 
     
     for(;;) if(clock_pin==1) break; 
     for(;;) if(clock_pin==0) break; 
     if(data_pin!=1) goto begin1;            //test stop bit , if zero replay 
    
     return data_byte;  
    } 
    /****************************************************************************************************************/
     
    void hosto_d(unsigned char c_char)
    {
     parity_bit=0;
     data_bit=0;
     clock_pin_out=0;                  //clock pin of host set to output mode
     clock_pin_reg=1;                  //and pulling it low about 100 microsec.
     delay_us(100);
     data_pin_out=0;                   //data pin set to output mode
     data_pin_reg=1;                   //and held it down(start bit) 
     //delay_us(20);
     clock_pin_out=1;                  //clock pin of host set to input mode
     clock_pin_reg=0;                  //and releas it
     
     for(i=0;i<=7;i++)               
     {
      for(;;) if(clock_pin==0) break;         //chek clock pin when it goes down 
      data_byte=c_char;                //host will send first bit to device
      data_byte>>=i;                  //and continue until final bit.
      data_byte&=1; 
      if(data_byte==1) data_bit=1; else data_bit=0;
      parity_bit^=data_bit;              //genrate parity bit
      data_pin_out=data_bit;
      for(;;) if(clock_pin==1) break;  
     }
     parity_bit^=1; 
     for(;;) if(clock_pin==0) break;
     data_pin_out=parity_bit;              //send parity bit to device
     for(;;) if(clock_pin==1) break; 
     for(;;) if(clock_pin==0) break;
     data_pin_out=1;                   //send end bit to device
     for(;;) if(clock_pin==1) break;
     for(;;) if(clock_pin==0) break;
     data_pin_reg=1;                   
    }
    /*************************************************************************************************/
    
    unsigned char decode(unsigned char sc)
     {
     static unsigned char exten=0,is_up=0, shift=0;
     unsigned char i,k;
     k=0; 
     if (!is_up)                           // Last data received was the up-key identifier
      {   
       switch (sc)
        { 
        case 0x7E : scroll() ; break;
        case 0xE0 : exten = 1; break;
        case 0xF0 : is_up = 1; break;               // The up-key identifier
        case 0x12 : shift = 1; break;               // Left SHIFT
        case 0x59 : shift = 1; break;               // Right SHIFT
                           
        default:
        if(!exten) 
         {             
          if(!shift)                         // If shift not pressed,
           {                            // do a table look-up
           for(i = 0; unshifted[i][0]; i++)
           if (unshifted[i][0] == sc) 
            {
             //put_kbbuff(unshifted[i][1]);
             k=unshifted[i][1];
             break;
            }
           } 
          else 
           {                            // If shift pressed
           for(i = 0; shifted[i][0]; i++)
           if (shifted[i][0] == sc) 
            {
             //put_kbbuff(shifted[i][1]);
             k=shifted[i][1];
             break;
            }
           }
         }  //end of if(!exten)
        else 
         {                    
          if(sc==0x4a) k='/';                  // decode "/" key and "enter" in keypad            
          else
          if(sc==0x5a) k=13; else k=0;        
         }        
        }   //end of switch 
                    
      }  
         
     else 
      {
       is_up = 0;                          // Two 0xF0 in a row not allowed
       exten = 0;
       switch (sc)
        {
        case 0x12 : shift = 0; break;               // Left SHIFT
        case 0x59 : shift = 0; break;               // Right SHIFT
        }
      }
     return k; 
     }
          
    /**********************************************************************************************************************/
    
    void show_byte(unsigned char scc)
    {
     unsigned char low_nible,high_nible;
     high_nible=scc>>4;
     if(high_nible<10) high_nible+=0x30; else high_nible+=0x37;
     low_nible=scc&0x0f;
     if(low_nible<10) low_nible+=0x30; else low_nible+=0x37;
     putchar(high_nible); 
     putchar(low_nible);
    }
    /**********************************************************************************************************************/ 
    
    void scroll(void)
    {
     unsigned char err=0,led_data=0x2;
     st:
     if(!scroll_flag) led_data=0x3;            
     data_byte=0xed;
     hosto_d(data_byte);
     if(deviceto_h()==0xFE) err=1;
     hosto_d(led_data); 
     if(deviceto_h()==0xFE) err=1;   
     if(err==1) goto st;
     scroll_flag^=1;    
    }

    فایل scancodes.h:

    کد:
    // Unshifted characters 
    const unsigned char unshifted[68][2] = {
    0x0d,9,
    0x0e,'`',
    0x15,'q',
    0x16,'1',
    0x1a,'z',
    0x1b,'s',
    0x1c,'a',
    0x1d,'w',
    0x1e,'2',
    0x21,'c',
    0x22,'x',
    0x23,'d',
    0x24,'e',
    0x25,'4',
    0x26,'3',
    0x29,' ',
    0x2a,'v',
    0x2b,'f',
    0x2c,'t',
    0x2d,'r',
    0x2e,'5',
    0x31,'n',
    0x32,'b',
    0x33,'h',
    0x34,'g',
    0x35,'y',
    0x36,'6',
    0x39,',', 
    0x3a,'m',
    0x3b,'j',
    0x3c,'u',
    0x3d,'7',
    0x3e,'8',
    0x41,',',
    0x42,'k',
    0x43,'i',
    0x44,'o',
    0x45,'0',
    0x46,'9',
    0x49,'.',
    0x4a,'/',
    0x4b,'l', 
    0x4c,';', 
    0x4d,'p',
    0x4e,'-', 
    0x52,'\'',
    0x54,'[',
    0x55,'=',
    0x5a,13,
    0x5b,']',
    0x5d,'\\',
    0x61,'<', 
    0x66,8,  
    0x69,'1', 
    0x6b,'4',
    0x6c,'7',
    0x70,'0',
    0x71,'.',
    0x72,'2',
    0x73,'5',
    0x74,'6',
    0x75,'8',
    0x79,'+',
    0x7a,'3',
    0x7b,'-',
    0x7c,'*',
    0x7d,'9',
    0,0
    };
    
    // Shifted characters
    const unsigned char shifted[68][2] = {
    0x0d,9,
    0x0e,'~',
    0x15,'Q',
    0x16,'!',
    0x1a,'Z',
    0x1b,'S',
    0x1c,'A',
    0x1d,'W',
    0x1e,'@',
    0x21,'C',
    0x22,'X',
    0x23,'D',
    0x24,'E',
    0x25,'$',
    0x26,'#',
    0x29,' ',
    0x2a,'V',
    0x2b,'F',
    0x2c,'T',
    0x2d,'R',
    0x2e,'%',
    0x31,'N',
    0x32,'B',
    0x33,'H',
    0x34,'G',
    0x35,'Y',
    0x36,'^',
    0x39,'L', 
    0x3a,'M',
    0x3b,'J',
    0x3c,'U',
    0x3d,'&',
    0x3e,'*',
    0x41,'<',
    0x42,'K',
    0x43,'I',
    0x44,'O',
    0x45,')',
    0x46,'(',
    0x49,'>',
    0x4a,'?',
    0x4b,'L',
    0x4c,':',
    0x4d,'P',
    0x4e,'_',
    0x52,'"',
    0x54,'{',
    0x55,'+',
    0x5a,13,
    0x5b,'}',
    0x5d,'|',
    0x61,'>',
    0x66,8,
    0x69,'1',
    0x6b,'4',
    0x6c,'7',
    0x70,'0',
    0x71,',',
    0x72,'2',
    0x73,'5',
    0x74,'6',
    0x75,'8',
    0x79,'+',
    0x7a,'3',
    0x7b,'-',
    0x7c,'*',
    0x7d,'9',
    0,0
    };

    توضیح: برنامه با استفاده از کتابخانه ی آقای حجت خاکسار است :smile:

    There is nothing so practical as a good theory. — Kurt Lewin, 1951

    دیدگاه


      #3
      پاسخ : کسی میتونه این برنامه را بنویسه

      متاسفانه بزرگترین مشکلی که فکر کنم همه رو اذیت می کنه همین تایپ انگلیسی متون برنامه است که به هم می ریزه و خیلی وقتها خوانایی برنامه رو خراب می کنه کسی می تونه کمک کنه این مشکل برطرف بشه

      دیدگاه


        #4
        پاسخ : کسی میتونه این برنامه را بنویسه

        نوشته اصلی توسط dariush_abbasi868
        متاسفانه بزرگترین مشکلی که فکر کنم همه رو اذیت می کنه همین تایپ انگلیسی متون برنامه است که به هم می ریزه و خیلی وقتها خوانایی برنامه رو خراب می کنه کسی می تونه کمک کنه این مشکل برطرف بشه
        مشکل اعلائم هستش؟؟
        وقتی برنامه رو به داخل کامپایلر ببرید مشکلی نداره.
        www.icesi.ir

        دیدگاه


          #5
          پاسخ : کسی میتونه این برنامه را بنویسه

          از روشی که manian گفت استفاده کنین.
          کدهاتون رو بین ltr و ltr/ قرار بدین. مثلا این جوری:

          a=b+(c-d)

          اگه
          آخر متن بذارین : [/ltr] و اولش هم همون بدون / درست دیده میشه

          درستش میشه:

          a=b+(c-d)

          دیدگاه


            #6
            پاسخ : کسی میتونه این برنامه را بنویسه

            میدونم زیاد سخت نیست، ولی هر چی از روی کتاب و.. امتحان میآ‌کنم یه جای کار غلط از آب در میاد :sad: :cry:

            اگه کسی بتونه واسم بنویسه، یا دستکم کمکم کنه واقعاً مدیونش میشم...(میدونم بهتره ماهیگیری یاد بگیرم تا تقاضای ماهی، ولی اون در شرایطیه که بیشتر از 1 هفته وقت داشته باشی!!)
            شرح ماوقع:

            برنامه با میکرو Mega16، با زبان codevision- ا¾C،
            یک ورودی 7 بیت، خروجی 3 بیتی، استفاده از Interrupt 0 هم میتونه کمک کنه.
            حالتهای ممکنه برای وروردی این حالات است:
            10111111 - 11011111 - 11101111
            11110111
            11111011 - 11111101 - 11111110

            همونطور میبینین، همه بیتها 1 هست، و یک بیت 0 فقط بین بیتها جابجا میشه. حالت هشتم یا 01111111 وجود نداره. تعریف نشدست. بقولی بیت هشتم همیشه یکه!

            ورودی همیشه در حالت عادی، وسطیه یعنی عدد سبز: F7
            حالا وضعیت خروجی: در حالت عادی ورودی، خروجی اینه: F8

            با تحریک سیستم سخت افزاری و.... وروردی به یکی از 6 حالت ذکر شده میره:
            حالا وظیفه میکرو چیه؟
            اگر ورودی یکی از اعداد قرمز بود (یعنی BF یا DF یا EF)، خروجی بشه FE یا همون 11111110
            چون سیستم فیدبک داره، وروردی شروع میکنه به تغییر کردن. ورودی ممکنه هر عددی بشه! (که اون 7 تا عدد شاملشون میشه). ولی هیچ عددی واسه ما مهم نیست، بجز عدد F7 که گفتم (عدد سبزه). یعنی عدد مطلوب ما اینه. میکرو باید خروجی رو اینقدر تو حالت FE نگه داره تا عدد F7 رو تو وروردی بخونه. به محض این که وروردی شد F7 ، خروجی را تبدیل کنه حالت اولیه ش که گفتم، یعنی F8.

            واسه سه عدد آبی باقی مونده ورودی (یعنی FB یا FD یا FE)، هم همینجوریه. با این تفاوت که اگر ورودی یکی از این 3 تا شد، خروجی بشه 11111101 یا همون FD. و خروجی اینقدر تو این حالت باقی بمونه تا عدد F7 رو تو وروردی رویت کنه. به محضه اینکه وروردی شد این عدد، دوباره خروجی بشه F8.

            کل ماجرا این بود!
            از اونجا که تو کدویژن مبتدی هستم، نتونستم بنویسم. بخدا بیشتر از آخر این هفته هم وقت ندارم.... :cry2: باور کنید راست میگم. قسم خوردم.
            خودم یه چیزایی نوشتم، کامپایل هم شد و کد هم ساخت، ولی تو پروتئوس درست عمل نمیکنه، مثلاً واسه نگه داشتن خروجی نوشتم :

            …
            While (PORTA!=0xF7)
            {
            Switch (x)
            Case EF : PORTC=FE;
            Break
            ..
            ..
            Default F8

            نخندین. میدونم غلطه، ولی بیشتر از این بلد نیستم.
            به ذهنم رسید یه interrupt0 واسش بزارم تا میکرو علاف نشه هی ورودی رو بخونه. بیت چهارم یعنی 0 عدد سبز رو بدم به پایه INT0 تا با تغییرش وقفه فعال بشه وبعد ورودی رو بخونه. نوع وقفه رو هم نمیدونستم، گذاشتمش any change....

            خلاصه شدیداً به کمکتون نیاز دارم.
            خواهشمندم درخواستم رو رد نکنین. :cry2: :sad:
            دلی دارم که از تنگی در او جز غم نمی گنجد........ غمی دارم ز دلتنگی که در عالم نمیگنجد

            دیدگاه


              #7
              پاسخ : کسی میتونه این برنامه را بنویسه

              .... و ما همچنان چشم انتظار..... :cry2:

              من بازم سعی کردم. ولی از ایرادای کدویژن سر در نمیارم. 10 خط مینویسم، 15 تا ایراد میگیره! :sad:
              دلی دارم که از تنگی در او جز غم نمی گنجد........ غمی دارم ز دلتنگی که در عالم نمیگنجد

              دیدگاه


                #8
                پاسخ : کسی میتونه این برنامه را بنویسه

                سلام
                من با این برنامه کار کردم واقعیتش توی کارگاه دانشگاه بستیمش عالی بود کیبرد رو وصل میکردیم به میکرو و همه چیز رو شبیه سازی میکنه حتی چراغ های کیبرد حروف کوچک بزرک و پاک کردن امید وارم به کارت بیاد اگه خواستی بگو نقشه اش رو هم بزارم برات


                #include <mega16.h>
                #include <delay.h>
                #include <lcd.h>
                // External Interrupt 0 service routine
                interrupt [EXT_INT0] void ext_int0_isr(void) {
                DDRB = 0x01;
                while(PIND.2 == 0) {
                PORTB.0 = 0;
                }
                DDRB = 0x00;
                }
                #asm
                .equ __lcd_port=0x1B ;PORTA
                #endasm
                unsigned char keyb_r (void);
                void keyb_w (unsigned char);
                void keyb_on (void);
                unsigned char b;

                void main(void) {
                unsigned char s,ch;
                unsigned char lo[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, '~',
                0, 0, 0, 0, 0, 0, 'q', '1', 0, 0, 0, 'z', 's', 'a', 'w', '2',
                0, 0, 'c', 'x', 'd', 'e', '4', '3', 0, 0, ' ', 'v', 'f', 't', 'r',
                '5', 0, 0, 'n', 'b', 'h', 'g', 'y', '6', 0, 0, 0, 'm', 'j', 'u', '7',
                '8', 0, 0, ',', 'k', 'i', 'o', '0', '9', 0, 0, '.', '/', 'l', ';', 'p',
                '-', 0, 0, 0, '"', 0, '[', '=', 0, 0, 0, 0, 0, ']', 0, 0,
                0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '1', 0, '4', '7', 0, 0, 0, '0',
                '.', '2', '5', '6', '8', 0, 0, 0, '+', '3', '-', '*', '9', 0};
                unsigned char up[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, '`',
                0, 0, 0, 0, 0, 0, 'Q', '!', 0, 0, 0, 'Z', 'S', 'A', 'W', '@',
                0, 0, 'C', 'X', 'D', 'E', '$', '#', 0, 0, ' ' ,'V' ,'F' ,'T' ,'R',
                '%',0, 0, 'N','B','H','G& #039;,'Y','^',0, 0, 0, 'M','J','U', '&',
                '*', 0, 0, '<', 'K','I', 'O', &#039', '(', 0, 0, '>', '?', 'L', ':','P',
                '_', 0, 0, 0, '"', 0, '{', '+', 0, 0, 0, 0, 0, '}', 0, '|',
                0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, '1', 0, '4', '7', 0, 0, 0, '0',
                '.', '2', '5', '6', '8', 0, 0, 0, '+', '3', '-', '*', '9', 0};
                PORTA = 0x00;
                DDRA = 0x00;
                PORTB = 0x00;
                DDRB = 0x00;
                DDRC = 0x00;
                PORTC = 0x00;
                PORTD = 0x00;
                DDRD = 0x00;
                // External Interrupt(s) initialization
                // INT0: On
                // INT0 Mode: Low level
                // INT1: Off
                // INT2: Off
                GICR |= 0x40;
                MCUCR = 0x00;
                MCUCSR = 0x00;
                GIFR = 0x40;
                // LCD module initialization
                lcd_init(16);
                // Global enable interrupts
                //lcd_putsf("((Yor lcd is ok)"
                #asm("sei&quot
                keyb_on();
                lcd_clear();
                ch = b;
                //lcd_putsf("((Yor lcd is ok)"
                delay_ms(500);
                while (1) {
                //input data
                s = keyb_r();
                switch (s) {
                case 0xF0:
                s = keyb_r();
                if (s == 0x12 | s == 0x59) ch = b;
                break;
                case 0x58:
                keyb_w(0xED);
                s = keyb_r();
                b = b ^ 0x04;
                ch = b;
                keyb_w(b);
                s = keyb_r();
                break;
                case 0x77:
                keyb_w(0xED);
                s = keyb_r();
                b = b ^ 0x02;
                keyb_w(b);
                s = keyb_r();
                break;

                case 0x7E:
                keyb_w(0xED);
                s = keyb_r();
                b = b ^ 0x01;
                keyb_w(b);
                s = keyb_r();
                break;
                case 0x76:
                keyb_on();
                lcd_clear();
                break;
                case 0x12:
                ch = 0x04;
                break;
                case 0x59:
                ch = 0x04;
                break;
                default:
                if (ch <= 3) s = lo[s];
                else s = up[s];
                lcd_putchar(s);
                };
                };
                }
                unsigned char keyb_r (void) {
                unsigned char c, a, i = 0;
                DDRB = 0x00;
                while (PINB.0 == 0 | PINB.1 == 0);
                while (PINB.0 == 1 & PINB.1 == 1);
                while (PINB.0 == 0);
                while (PINB.0 == 1);
                for (i=0; i<8; i++) {
                c = PINB;
                c = c << 6;
                c = c & 0x80;
                a = a >> 1;
                a = a ^ c;
                while (PINB.0 == 0);
                while (PINB.0 == 1);
                };
                while (PINB.0 == 0 & PINB.1 == 0);
                return a;
                }
                void keyb_w (unsigned char x) {
                unsigned char i, c, p = 0;
                PORTB = 0x03;
                DDRB = 0x03;
                while (PINB.0 == 0 || PINB.1 == 0);
                PORTB.0 = 0;
                delay_us(100);
                PORTB.1 = 0;
                PORTB.0 = 1;
                DDRB = 0x02;
                while (PINB.0 == 1);
                for (i=0; i<8; i++) {
                c = x;
                c = c & 0x01;
                x = x >> 1;
                PORTB.1 = c;
                if (c == 1) p += 1;
                while (PINB.0 == 0);
                while (PINB.0 == 1);
                };
                p = p % 2;
                if (p == 0) PORTB.1 = 1;
                else PORTB.1 = 0;
                while (PINB.0 == 0);
                while (PINB.0 == 1);
                PORTB.1 = 1;
                DDRB = 0x00;
                while (PINB.0 == 1 & PINB.1 == 1);
                while (PINB.0 == 0 & PINB.1 == 0);
                }
                void keyb_on () {
                unsigned char y;
                keyb_w(0xFF);
                y = keyb_r();
                y = keyb_r();
                keyb_w(0xED);
                y = keyb_r();
                b = 0x02;
                keyb_w(b);
                y = keyb_r();
                }
                انجام پروژه های برنامه نویسی اندروید
                [glow=red,2,300]نرم افزار نقشه های پاور کامپیوتر اندورید[/glow]
                http://cafebazaar.ir/app/?id=com.atxdroid

                دیدگاه


                  #9
                  پاسخ : کسی میتونه این برنامه را بنویسه

                  روسفیدم کردین عزیزان. خوبه گفتم اضطراریه... :sad:
                  خودم اینو نوشتم، کامپایل و... هم میشه، ولی در عمل تو پروتئوس جواب نمیده. :cry:

                  کد:
                  #include <mega16.h>
                  unsigned int x;
                  interrupt [EXT_INT0] void ext_int0_isr(void)
                   {
                  
                   switch (x)
                   {
                    case 0xFE: PORTC=0xFE;
                    break;
                    case 0xFD: PORTC=0xFE;
                    break;
                    case 0xFB: PORTC=0xFE;
                    break;
                    case 0xEF: PORTC=0xFD;
                    break;
                    case 0xDF: PORTC=0xFD;
                    break;
                    case 0xBF: PORTC=0xFD;
                    break;
                    default: PORTC=0xF8;
                   }
                  
                   while (PORTA!=0xF7);
                   }
                  void main (void)
                   {
                   {
                    PORTA=0x00;
                    DDRA=0x00;
                  
                    PORTC=0xF8;
                    DDRC=0xFF;
                  
                    GICR=0x40;
                    MCUCR=0x01;
                    MCUCSR=0x00;
                    GIFR=0x40;
                  
                   }
                  
                   #asm("sei")
                    while (1)
                    {
                     x=PORTA;
                     PORTC=0xF8;
                    } ;
                  
                   }
                  دلی دارم که از تنگی در او جز غم نمی گنجد........ غمی دارم ز دلتنگی که در عالم نمیگنجد

                  دیدگاه


                    #10
                    پاسخ : کسی میتونه این برنامه را بنویسه

                    گمون کنم فقط خودم واسه خودم مینویسم و فقط از خودم جواب میخوام و خودم....!!
                    هر چی مینویسم جواب نمیده. غلط از آب درمیاد.
                    واقعاً هیچ کس به خودش زحمت اینکه حداقل بگه "غلطه" هم نمیده تا مطمئن شم! :sad: دمتون گرم... :cry:

                    اینم جواب نداد: (247 همون 0xF7)

                    کد:
                    #include <mega16.h>
                    unsigned int x;
                    
                    
                    void main (void)
                     {
                        PORTA=0x00;
                        DDRA=0x00;
                    
                        PORTC=0xF8;
                        DDRC=0xFF;
                       
                        x=PORTA;
                        PORTC=0xF8; 
                     
                      while (1)
                      {
                       while (PORTA!=0xF7);
                       {
                       if (x>247);
                       {
                       PORTC=0xFE;
                       }
                       if (x<247);
                       {
                       PORTC=0xFD;
                       }  
                       }
                      
                      };
                     }
                    دلی دارم که از تنگی در او جز غم نمی گنجد........ غمی دارم ز دلتنگی که در عالم نمیگنجد

                    دیدگاه


                      #11
                      پاسخ : کسی میتونه این برنامه را بنویسه

                      جداً اگر کار خودتونم اینجوری گیر بود، اینقدر بیخیال رد میشدین؟ :sad:
                      دریغ از یک کمک، راهنمایی... :cry2:

                      تو این حداقل خروجی فعال میشه، ولی گویا تو حلقه while اشتباهی گیر میکنه و خروجی واسه خودش تغییر میکنه.... اینم غلطه!

                      کد:
                      #include <mega16.h>
                      unsigned int x;
                      
                      void main (void)
                       {
                        PORTA=0x00;
                        DDRA=0x00;
                      
                        PORTC=0xF8;
                        DDRC=0xFF;
                         
                        x=PORTA;
                        PORTC=0xF8; 
                       
                        while (1)
                        {
                         while (x!=0xF7)
                         {
                         if (x>0xF7);
                         {
                         PORTC=0xFE;
                         }
                         if (x<0xF7);
                         {
                         PORTC=0xFD;
                         }  
                         }; 
                        };
                       }

                      اینم عکسش. البته تو این برنامه وقفه نذاشتم. واسه همین مسیر PA3 به پایه INT0 بی اثره.

                      دلی دارم که از تنگی در او جز غم نمی گنجد........ غمی دارم ز دلتنگی که در عالم نمیگنجد

                      دیدگاه


                        #12
                        پاسخ : کسی میتونه این برنامه را بنویسه

                        میگم عزیزان مدیر، معاون ... یه نگاه بکنند این تاپیک دیده میشه؟؟!؟! oo:
                        قصد جسارت ندارم، :surprised: بجون خودم دارم شک میکنم ، نکنه فقط من میبینمش؟

                        مباحث واقعاً ثقیل تر و پیچیدهآ‌تر از برنامه درخواستی من تو اینجا مطرحه که بلافاصله روش بحث و راهنمایی و... انجام میشه. منم تلاشم رو میکنم، هوینجوری خشک و خالی نشستم کسی واسم بنویسه! میبینید که نتیجه بی نتیجهآ‌ش رو هم اینجا میارم. دستآ‌کم میتونین بگین غلطه، نمیتونین!؟ :cry2:
                        جزیات کامل رو تو پاسخ 5ام گفتم. ولی انگار فقط خودم میخونمش! :sad:
                        دلی دارم که از تنگی در او جز غم نمی گنجد........ غمی دارم ز دلتنگی که در عالم نمیگنجد

                        دیدگاه


                          #13
                          پاسخ : کسی میتونه این برنامه را بنویسه

                          واسه این الگوریتم، این برنامه درسته؟ (تو کدویژن کامپایل شد+فایل هگز، ولی تو پروتئوس جواب نمیده )
                          -----> در اولین IF برنامه، دوتا = گذاشتم. درسته؟ آخه هر وقت یک = میزارم، ارور میده میگه: possibly incorrect assignment

                          این الگوریتم:


                          اینم برنامه:

                          کد:
                          #include<mega16.h>
                          unsigned int x;
                          unsigned int y;
                          
                          
                          void main (void)
                            { 
                          
                              DDRC = 0xFF;
                              PORTC= 0x00;
                              
                              DDRA=0x00;
                              PORTA=0x00;
                           
                              x=PORTA;
                              PORTC=y;
                              
                              while(1)
                              {
                               if (x==0xF7) 
                               {
                               y=0xF8;
                               }
                               else if ((x=0xF8) || (x=0xF9) || (x=0xFA) ||(x=0xFB) ||(x=0xFC) ||(x=0xFD) || (x=0xFE))  y=0xFE;
                               else if ((x=0x8F) || (x=0x9F) || (x=0xAF) ||(x=0xBF) ||(x=0xCF) ||(x=0xDF) || (x=0xEF))  y=0xFD;
                               else
                               {
                               y=0xF8;
                               }
                              }
                           }
                          دلی دارم که از تنگی در او جز غم نمی گنجد........ غمی دارم ز دلتنگی که در عالم نمیگنجد

                          دیدگاه

                          لطفا صبر کنید...
                          X