Thông báo

Collapse
No announcement yet.

Có bác nào rành về lập trình avr thì giúp em với

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

  • Có bác nào rành về lập trình avr thì giúp em với

    em có 1 file Code cho Avr Atmega 16.lịch vạn niên.nhưng em mù tịt ah.ai giúp em giải thích các câu lệnh trong đoạn code do với.ý em là em sẽ đến tận chỗ các bác.mong các bác thương tình thằng em mới tìm hiểu mà giúp đỡ.yahoo của em nè:thinhvip58 hoặc số dt:01696890257
    Học Đi Đôi Với Hành!

  • #2
    dua code len thi moi giai thic duoc chu
    Học Hỏi Không Ngừng Nghỉ

    Comment


    • #3
      Ý MÌNH LÀ MÌNH MUỐN ĐƯỢC GIẢI THÍCH TỪNG LỆNH 1 CỦA DOAN CODE.VÌ MINH HỌC YẾU MÔN NÀY LẮM..MA MÌNH SẮP PHẢI BẢO VỆ ĐỒ ÁN MÔN HOC RÙI.ĐÂY LÀ CODE CỦA MÌNH NÈ:
      #include <mega16.h>

      // I2C Bus functions
      #asm
      .equ __i2c_port=0x15 ;PORTC
      .equ __sda_bit=1
      .equ __scl_bit=0
      #endasm
      #include <i2c.h>

      // DS1307 Real Time Clock functions
      #include <ds1307.h>

      #define mode PIND.0
      #define up PIND.2
      #define down PIND.1

      #define l1 PORTC.2 //4 CHAN DK LED DOAN
      #define l2 PORTC.3
      #define l3 PORTC.4
      #define l4 PORTC.5
      #define l5 PORTC.6
      #define l6 PORTC.7
      #define l7 PORTA.7
      #define l8 PORTA.6
      #define l9 PORTA.5
      #define l10 PORTA.4
      #define l11 PORTA.3
      #define l12 PORTA.2
      #define l13 PORTA.1

      #define ACK 1
      #define NO_ACK 0
      // khai bao bien
      unsigned char Hour,Min,Sec,DayofWeek,Day,Month,Year;
      unsigned char so[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x9 0}; // ma 7 doan
      unsigned char data[7]; //mang chua gia tri thoi gian doc tu ds1307


      //-------------------------------
      // Read RTC
      //-------------------------------
      void ReadRTC(unsigned char * buff)
      {
      i2c_start();
      i2c_write(0xD0);
      i2c_write(0x00);

      i2c_start();
      i2c_write(0xD1);
      *(buff+0)=i2c_read(ACK); // Second
      *(buff+1)=i2c_read(ACK); // Minute
      *(buff+2)=i2c_read(ACK); // hour
      *(buff+3)=i2c_read(ACK); // Day
      *(buff+4)=i2c_read(ACK); // date
      *(buff+5)=i2c_read(ACK); // month
      *(buff+6)=i2c_read(NO_ACK); // year
      i2c_stop();
      }
      //-------------------------------
      // Write RTC
      //-------------------------------
      void WriteRTC(unsigned char *buff)
      {

      i2c_start();
      i2c_write(0xD0);
      i2c_write(0x00);
      i2c_write(*(buff+0));
      i2c_write(*(buff+1));
      i2c_write(*(buff+2));
      i2c_write(*(buff+3));
      i2c_write(*(buff+4));
      i2c_write(*(buff+5));
      i2c_write(*(buff+6));
      i2c_stop();
      }

      void delay()
      {
      int i;
      for (i = 0;i<50;i++){}
      }
      void hienthi7doan()
      {
      PORTA=255;
      PORTB = so[data[2] & 15];
      l12 = 0;
      delay();
      PORTA = 255;
      PORTB = so[(data[2]&240) >> 4];
      l13=0;
      delay();
      PORTA = 255;
      PORTB = so[data[1] & 15];
      l10 = 0;
      delay();
      PORTA = 255;
      PORTB = so[(data[1]&240) >> 4];
      l11= 0 ;
      delay();
      PORTA = 255;
      PORTB = so[data[0] & 15];
      l8 = 0;
      delay();
      PORTA = 255;
      PORTB = so[(data[0]&240) >> 4];
      l9= 0 ;
      delay();

      PORTA = 255;
      if(data[3]==1) PORTB = so[8]; else PORTB = so[data[3]];
      l7= 0 ;
      delay();
      PORTA = 255;

      l6=l5=l4=l3=l2=l1=1;
      PORTB = so[(data[4]&240) >> 4];
      l6= 0 ;
      delay();
      l6=l5=l4=l3=l2=l1=1;
      PORTB = so[data[4] & 15];
      l5= 0 ;
      delay();

      l6=l5=l4=l3=l2=l1=1;
      PORTB = so[(data[5]&240) >> 4];
      l4= 0 ;
      delay();
      l6=l5=l4=l3=l2=l1=1;
      PORTB = so[data[5] & 15];
      l3= 0 ;
      delay();

      l6=l5=l4=l3=l2=l1=1;
      PORTB = so[(data[6]&240) >> 4];
      l2= 0 ;
      delay();
      l6=l5=l4=l3=l2=l1=1;
      PORTB = so[data[6] & 15];
      l1= 0 ;
      delay();
      l6=l5=l4=l3=l2=l1=1;
      }

      void hienthi(int m)
      {
      unsigned char chuc,donvi;
      if(m!=1){
      chuc = Hour/10; donvi = Hour%10;
      PORTA=255;
      PORTB = so[chuc];
      l13 = 0;
      delay();
      PORTA = 255;
      PORTB = so[donvi];
      l12=0;
      delay();
      PORTA = 255;
      }
      if(m!=2){
      chuc = Min/10; donvi = Min%10;
      PORTB = so[chuc];
      l11 = 0;
      delay();
      PORTA = 255;
      PORTB = so[donvi];
      l10= 0 ;
      delay();
      PORTA = 255;
      }
      if(m!=3){
      chuc = Sec/10; donvi = Sec%10;
      PORTB = so[chuc];
      l9 = 0;
      delay();
      PORTA = 255;
      PORTB = so[donvi];
      l8= 0 ;
      delay();
      PORTA = 255;
      }
      if(m!=4){
      if(DayofWeek==1) PORTB = so[8]; else PORTB = so[DayofWeek];
      l7 = 0;
      delay();
      PORTA = 255;
      }
      if(m!=5){
      chuc = Day/10; donvi = Day%10;
      PORTB = so[chuc];
      l6 = 0;
      delay();
      l6=l5=l4=l3=l2=l1=1;
      PORTB = so[donvi];
      l5= 0 ;
      delay();
      l6=l5=l4=l3=l2=l1=1;
      }
      if(m!=6){
      chuc = Month/10; donvi = Month%10;
      PORTB = so[chuc];
      l4 = 0;
      delay();
      l6=l5=l4=l3=l2=l1=1;
      PORTB = so[donvi];
      l3= 0 ;
      delay();
      l6=l5=l4=l3=l2=l1=1;
      }
      if(m!=7){
      chuc = Year/10; donvi = Year%10;
      PORTB = so[chuc];
      l2 = 0;
      delay();
      l6=l5=l4=l3=l2=l1=1;
      PORTB = so[donvi];
      l1= 0 ;
      delay();
      l6=l5=l4=l3=l2=l1=1;
      }
      }
      void chinhgio()
      {
      int i;
      Hour = (data[2] & 15) + ((data[2]&240) >> 4) * 10;
      Min = (data[1] & 15) + ((data[1]&240) >> 4) * 10;
      Sec = (data[0] & 15) + ((data[0]&240) >> 4) * 10;
      DayofWeek = data[3];
      Day = (data[4] & 15) + ((data[4]&240) >> 4) * 10;
      Month = (data[5] & 15) + ((data[5]&240) >> 4) * 10;
      Year = (data[6] & 15) + ((data[6]&240) >> 4) * 10;
      //s_gio:
      while(1)
      {
      if (mode == 0) {while(mode==0){hienthi(0);}; goto s_phut;}
      if(i<150) hienthi(0); else {if(i<300) {hienthi(1);} else i=0; } i++;
      if (up == 0) {while(up==0){hienthi(0);}; Hour++; if(Hour==24) Hour=0;}
      if (down == 0) {while(down==0){hienthi(0);}; Hour--; if(Hour<1) Hour=23;}

      }
      s_phut:
      hienthi(0);
      while(1)
      {
      if (mode == 0) {while(mode==0){hienthi(0);}; goto s_giay;}
      if(i<150) hienthi(0); else {if(i<300) {hienthi(2);} else i=0; } i++;
      if (up == 0) {while(up==0){hienthi(0);}; Min++; if(Min==60) Min=0;}
      if (down == 0) {while(down==0){hienthi(0);}; Min--; if(Min<1) Min=59;}
      }
      s_giay:
      hienthi(0);
      while(1)
      {
      if (mode == 0) {while(mode==0){hienthi(0);}; goto s_thu;}
      if(i<150) hienthi(0); else {if(i<300) {hienthi(3);} else i=0; } i++;
      if (up == 0) {while(up==0){hienthi(0);}; Sec++; if(Sec==60) Sec=0;}
      if (down == 0) {while(down==0){hienthi(0);}; Sec--; if(Sec<1) Sec=59;}
      }

      s_thu:
      hienthi(0);
      while(1)
      {
      if (mode == 0) {while(mode==0){hienthi(0);}; goto s_ngay;}
      if(i<150) hienthi(0); else {if(i<300) {hienthi(4);} else i=0; } i++;
      if (up == 0) {while(up==0){hienthi(0);}; DayofWeek++; if(DayofWeek==8) DayofWeek=1;}
      if (down == 0) {while(down==0){hienthi(0);}; DayofWeek--; if(DayofWeek<1) DayofWeek=7;}
      }
      s_ngay:
      hienthi(0);
      while(1)
      {
      if (mode == 0) {while(mode==0){hienthi(0);}; goto s_thang;}
      if(i<150) hienthi(0); else {if(i<300) {hienthi(5);} else i=0; } i++;
      if (up == 0) {while(up==0){hienthi(0);}; Day++; if(Day==32) Day=1;}
      if (down == 0) {while(down==0){hienthi(0);}; Day--; if(Day<1) Day=31;}
      }
      s_thang:
      hienthi(0);
      while(1)
      {
      if (mode == 0) {while(mode==0){hienthi(0);};goto s_nam;}
      if(i<150) hienthi(0); else {if(i<300) {hienthi(6);} else i=0; } i++;
      if (up == 0) {while(up==0){hienthi(0);}; Month++; if(Month==13) Month=1;}
      if (down == 0) {while(down==0){hienthi(0);}; Month--; if(Month<1) Month=12;}
      }
      s_nam:
      hienthi(0);
      while(1)
      {
      if (mode == 0) {while(mode==0){hienthi(0);}; break;}
      if(i<150) hienthi(0); else {if(i<300) {hienthi(7);} else i=0; } i++;
      if (up == 0) {while(up==0){hienthi(0);}; Year++; if(Year==100) Year=0;}
      if (down == 0) {while(down==0){hienthi(0);}; Year--; if(Year<1) Year=99;}
      }

      // ghi lai cac gia tri cai dat
      data[0] = Sec%10 + ((Sec/10)<<4); data[1] = Min%10 + ((Min/10)<<4);
      data[2] = Hour%10 + ((Hour/10)<<4); data[3] = DayofWeek%10 + ((DayofWeek/10)<<4);
      data[4] = Day%10 + ((Day/10)<<4); data[5] = Month%10 + ((Month/10)<<4);
      data[6] = Year%10 + ((Year/10)<<4);
      WriteRTC(&data[0]);
      }
      void main(void)
      {
      PORTA=0x00;
      DDRA=0xFF;
      PORTB=0x00;
      DDRB=0xFF;
      PORTC=0x00;
      DDRC=0xFF;
      PORTD=0x00;
      DDRD=0x00;

      // I2C Bus initialization
      i2c_init();

      // DS1307 Real Time Clock initialization
      rtc_init(0,0,0);

      while (1)
      {
      ReadRTC(&data[0]);
      if(mode==0) { while(mode==0){hienthi(0);} chinhgio(); }
      hienthi7doan();
      };
      }
      END!
      MÌNH THẤY TRONG ĐÓ CŨNG CÓ GIẢI THÍCH NHƯNG CÒN QUÁ SƠ XÀI.NẾU CÁC BÁC HIỂU HẾT ĐƯỢC Ý NGHĨA CỦA TỪNG CÂU LỆNH TRONG ĐOẠN CODE TRÊN THÌ GIÚP MÌNH CHÚ THÍCH RA PHÍA SAU ĐỂ EM XEM CHO DỄ HIỄU.MONG CÁC BÁC GIÚP ĐỠ.NẾU ĐƯỢC THÌ MAIL CHO EM THEO ĐỊA CHỈ:thinhvip58@yahoo.com.xin cảm ơn!
      Học Đi Đôi Với Hành!

      Comment


      • #4
        Cái này chỉ cần biết lập trình C la đọc hiểu liền mà bạn ! bạn hiểu được bao nhiêu % trong đó ? chả lẻ đè ra chỉ từng lệnh 1 cho bạn thì kỳ quá !

        Comment


        • #5
          rtc_init(0,1,0); giải thích hộ mình với

          Comment


          • #6
            Cái code mày viết bằng codevision Avr bạn phải tìm hiểu phần mền này mới hiểu đươc.

            rtc_int(0,1,0) có nghĩa ngỏ ra chân số 7 của DS1307 xung 1s...

            Comment

            Về tác giả

            Collapse

            thinhvip58 29/01/1990 Tìm hiểu thêm về thinhvip58

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

            Collapse

            Đang tải...
            X