Thông báo

Collapse
No announcement yet.

lap trinh cho avr

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • lap trinh cho avr

    em mới học lập trình avr .em dung codeversion em có đoạn code nay ma em không biêt sai ở đâu.xin các bác chỉ giúp em mới

    Code:
    while (1)
          {   
          if(nut==0)
          {
          while(nut==1)
          (
          ;
          }
          dem++;
          if(dem==10) dem=0; 
          if (dem=3){led1=0}
          }
    dich sang ma may thi khong sai nhưng chạy thì không đúng
    bác nào biết chỉ dùm em mới
    em cảm ơn
    Last edited by VNarmy; 08-07-2008, 16:12.

  • #2
    Nguyên văn bởi longdt4 Xem bài viết
    em mới học lập trình avr .em dung codeversion em có đoạn code nay ma em không biêt sai ở đâu.xin các bác chỉ giúp em mới

    while (1)
    {
    if(nut==0)
    {
    while(nut==1)
    (
    ;
    }
    dem++;
    if(dem==10) dem=0;
    if (dem=3){led1=0}
    }
    dich sang ma may thi khong sai nhưng chạy thì không đúng
    bác nào biết chỉ dùm em mới
    em cảm ơn
    Sửa chỗ mầu xanh: so sánh phải là ==, nếu để thế thì dem=3

    email:mahaco@fpt.vn

    Comment


    • #3
      Nguyên văn bởi longdt4 Xem bài viết
      while(nut==1)
      (
      ;
      }
      Đọc đoạn bác viết không hiểu đang làm gì, đoán là nháy đèn nhưng lại không thấy dòng led=1.
      Bác bảo dịch được nhưng thấy còn lỗi ở ngay sau chữ while kìa

      Bác nên nói rõ mục đích của bác trong chương trình này.
      Email: - Mobil: tạm thời ngừng liên lạc 1 thời gian
      Giới thiệu website kiếm tiền trực tuyến & tăng thứ hạng website.

      Comment


      • #4
        Bạn nên trình bày bài toán của bạn một cách rõ ràng như bạn nghaiha nói. Sau đó anh em sẽ góp ý để chương trình được gọn. Chúc bạn thành công!

        Comment


        • #5
          lập trình cho avr

          xin lỗi các bạn không nói dõ:
          bài toán của mình là đến số lần nhấn phín.Ví dụ nhấn 3 lần thì một làm một việc gì đó.(bật một cái led).Nếu các bạn có code gửi cho mình xin với mình lạp trình c viết cho atmega 16.cảm ơn các bạn nhiều

          Comment


          • #6
            chào bạn Longdt4 , nói chung bài của bạn sai nhiều lắm :
            trong ham` while(nut bam) sai dấu "(" ma` fải là "{" , còn trong hàm while(1) thì cũng chưa có dấu } đóng khối lệnh(có thể bạn trích thiếu )
            Bạn xem chương trình này nhé

            while(1)
            {
            if(nut_bam==0)
            {
            delay_ms(300); // chờ cho qua xung nhiễu
            while(nut_bam==0){;} // nếu còn giữ nút thì ko làm j (của bạn lại là 1)
            dem++;
            if(dem==10)dem=0;
            if(dem==3){;;;;}
            }
            }
            chúc bạn thành công

            Comment


            • #7
              cam on bạn rất nhiều. mình đã làm được rồi.

              Comment


              • #8
                ngắt timer

                các bác chỉ mình viết đoạn chương trình ngắt timer với! Dùng codevision thì viết sao các bác chỉ giúp nha! Thanks!
                Nguyen Sinh_ 01689.660.922

                Comment


                • #9
                  /************************************************** ***
                  This program was produced by the
                  CodeWizardAVR V1.25.9 Professional
                  Automatic Program Generator
                  © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
                  http://www.hpinfotech.com

                  Project :
                  Version :
                  Date : 8/9/2008
                  Author : F4CG
                  Company : F4CG
                  Comments:


                  Chip type : ATmega16
                  Program type : Application
                  Clock frequency : 12.000000 MHz
                  Memory model : Small
                  External SRAM size : 0
                  Data Stack size : 256
                  ************************************************** ***/

                  #include <mega16.h>
                  #include<delay.h>
                  #include<math.h>
                  #include<stdio.h>
                  // Alphanumeric LCD Module functions
                  #asm
                  .equ __lcd_port=0x1B ;PORTA
                  #endasm
                  #include <lcd.h>
                  bit old_pulseA,old_pulseB;
                  unsigned char buff[16];
                  unsigned int timer0int;
                  unsigned int pulse,timer0;
                  // External Interrupt 0 service routine
                  interrupt [EXT_INT0] void ext_int0_isr(void)
                  {
                  // Place your code here
                  //PIND.2
                  if(old_pulseA==0) // ngat canh len
                  {
                  if(PIND.3==0)
                  pulse++;
                  else
                  pulse--;
                  }
                  else //old_pulse==1; ngat canh xuong
                  {
                  if(PIND.3==1)
                  pulse++;
                  else
                  pulse--;

                  }
                  old_pulseA=PIND.2;
                  }

                  // External Interrupt 1 service routine
                  interrupt [EXT_INT1] void ext_int1_isr(void)
                  {
                  // Place your code here
                  //PIND.3
                  if(old_pulseB==0)//ngat canh len
                  {
                  if(PIND.2==1)
                  pulse++;
                  else
                  pulse--;
                  }
                  else //ngat canh xuong
                  {
                  if(PIND.2==0)
                  pulse++;
                  else
                  pulse--;
                  }
                  old_pulseB=PIND.3;


                  }

                  // Timer 0 overflow interrupt service routine
                  interrupt [TIM0_OVF] void timer0_ovf_isr(void)
                  {
                  // Place your code here
                  timer0int++;

                  }

                  // Timer 2 overflow interrupt service routine
                  interrupt [TIM2_OVF] void timer2_ovf_isr(void)
                  {
                  // Place your code here

                  }

                  // Declare your global variables here
                  void display_lcd(unsigned int pulse)
                  {
                  unsigned int data1,data2,data3,data4,data5;
                  lcd_clear();
                  data1=pulse/10000;
                  data2=(pulse%10000)/1000;
                  data3=(pulse%1000)/100;
                  data4=(pulse%100)/10;
                  data5=(pulse%10);
                  sprintf(buff,"PULSE:%d%d%d%d%d",data1,data2,data3, data4,data5);
                  lcd_puts(buff);

                  }

                  void main(void)
                  {
                  // Declare your local variables here

                  // Input/Output Ports initialization
                  // Port A initialization
                  // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                  // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                  PORTA=0x00;
                  DDRA=0x00;

                  // Port B initialization
                  // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                  // State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
                  PORTB=0xFF;
                  DDRB=0xFE;

                  // Port C initialization
                  // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
                  // State7=1 State6=1 State5=1 State4=1 State3=1 State2=1 State1=1 State0=1
                  PORTC=0xFF;
                  DDRC=0xFF;

                  // Port D initialization
                  // Func7=Out Func6=Out Func5=Out Func4=Out Func3=In Func2=In Func1=Out Func0=Out
                  // State7=1 State6=1 State5=1 State4=1 State3=P State2=P State1=1 State0=1
                  PORTD=0xFF;
                  DDRD=0xF3;

                  // Timer/Counter 0 initialization
                  // Clock source: System Clock
                  // Clock value: 11.719 kHz
                  // Mode: Normal top=FFh
                  // OC0 output: Disconnected
                  TCCR0=0x05;
                  TCNT0=0x00;
                  OCR0=0x00;

                  // Timer/Counter 1 initialization
                  // Clock source: System Clock
                  // Clock value: 1500.000 kHz
                  // Mode: Fast PWM top=03FFh
                  // OC1A output: Inverted
                  // OC1B output: Inverted
                  // Noise Canceler: Off
                  // Input Capture on Falling Edge
                  // Timer 1 Overflow Interrupt: Off
                  // Input Capture Interrupt: Off
                  // Compare A Match Interrupt: Off
                  // Compare B Match Interrupt: Off
                  TCCR1A=0xF3;
                  TCCR1B=0x0A;
                  TCNT1H=0x00;
                  TCNT1L=0x00;
                  ICR1H=0x00;
                  ICR1L=0x00;
                  OCR1AH=0x00;
                  OCR1AL=0x00;
                  OCR1BH=0x00;
                  OCR1BL=0x00;

                  // Timer/Counter 2 initialization
                  // Clock source: System Clock
                  // Clock value: 11.719 kHz
                  // Mode: Normal top=FFh
                  // OC2 output: Disconnected
                  ASSR=0x00;
                  TCCR2=0x07;
                  TCNT2=0x00;
                  OCR2=0x00;

                  // External Interrupt(s) initialization
                  // INT0: On
                  // INT0 Mode: Any change
                  // INT1: On
                  // INT1 Mode: Any change
                  // INT2: Off
                  GICR|=0xC0;
                  MCUCR=0x05;
                  MCUCSR=0x00;
                  GIFR=0xC0;

                  // Timer(s)/Counter(s) Interrupt(s) initialization
                  TIMSK=0x41;

                  // Analog Comparator initialization
                  // Analog Comparator: Off
                  // Analog Comparator Input Capture by Timer/Counter 1: Off
                  ACSR=0x80;
                  SFIOR=0x00;

                  // LCD module initialization
                  lcd_init(16);

                  // Global enable interrupts
                  #asm("sei")
                  pulse=0;
                  TCNT0=0;
                  timer0=0;
                  while (1)
                  {
                  // Place your code here
                  OCR1A=0;
                  display_lcd(pulse);
                  delay_ms(1000);
                  timer0=0;
                  timer0int=0;

                  };
                  }


                  //vào codevision chọn timer và chọn overlow interrupt để cho phép ngắt khi tràn timer. sau khi sinh ra code bạn có thể viết chương trình mình muốn. bạn có thể tham khảo ở trên.
                  cố lên anh em.

                  Comment

                  Về tác giả

                  Collapse

                  longdt4 Tìm hiểu thêm về longdt4

                  Bài viết mới nhất

                  Collapse

                  Đang tải...
                  X