Thông báo

Collapse
No announcement yet.

Cần hướng dẫn về 16F877A

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

  • Cần hướng dẫn về 16F877A

    Tui mới học PIC thôi , nói chung là biết được cấu trúc và cách hoạt động sơ sơ của con 16F877A ( do có học 1 chút về ASM) , nhưng chưa biết lập trình C

    Bi giờ tui muốn làm 1 mạch hẹn giờ kiểu như đồng hồ điện tử . Tui đã tìm hiểu và biết là mình phải dùng timer , ngắt rồi quét bàn phím rồi lập trình tùm lum hết .

    Phải nói là lượng kiến thức trên các diễn đàn quá nhiều , tui chỉ mới tìm hiểu , chưa xác định được hướng đi . Vậy ai đã từng làm hay biết về mạch này thì có thể dẫn hướng cho tui đi được không . Nhất là cái C .

  • #2
    nói chung tôi khuyên bạn, nên học C/C++, rất có ích sau này. đây có một mạch về digital clock, viết = asm, bạn xem thử http://www.hobby-elec.org/e_pic6_7.htm

    Comment


    • #3
      Từ từ tìm hiểu lập trình C đi bạn, dùng ccs c cho dễ dàng, lâu ngày rồi lập trình cũng quen thôi, Trình độ ngày cũng càng cao hơn. Lúc xưa mình cũng như bạn bây giờ. Nhưng 1 năm sau đã làm được cái lịch vạn niên treo ở nhà.

      Web:[url]www.ledviet.info/url]
      Email:
      DĐ:0949299699

      Comment


      • #4
        Các bác xem cho em bài này với ko hiểu sao nó lại ko chạy được. Sorry nha em ko port mạch lên dc nhưng mà nó rất đơn giản đầu ra dc lấy từ portd sử dụng ngắt ngoài để điều khiển thế thôi, các bác giúp em với nha. Thank!

        Đây là CT:
        #include<16f877a.h>
        #include<def_877a.h>
        #fuses nowdt,hs,noput,noprotect,nodebug,nobrownout,nolvp, nocpd,nowrt
        #use delay(clock=20000000)
        #use fast_io(d)
        #int_ext
        int i,j,nhay,loop1=255,loop2=1;
        ext_isr()
        {
        if(nhay==0) nhay=1;
        else nhay=0;
        }
        void delay_ms(int tre)
        {
        int x,y;
        for(x=0;x++;x<tre)
        {
        for(y=0;y++;y<100);
        }
        }
        void nhay1();
        void nhay2();
        void main()
        {
        trisd=0x00;
        enable_interrupts(int_ext);
        ext_int_edge(h_to_l);
        enable_interrupts(global);
        nhay=0;
        while(true)
        {
        switch(nhay)
        {
        case 0:nhay1(); break;
        case 1:nhay2(); break;
        }
        }
        }
        void nhay1()
        {
        for(i=0;i++;i<8)
        {
        portd=loop1;
        delay_ms(50);
        loop1<<=1;
        if(i==8) i=0;
        }
        }
        void nhay2()
        {
        for(j=0;j++;j<8)
        {
        portd=loop2;
        delay_ms(50);
        loop2<<=1;
        if(j==8) j=0;
        }
        }
        Nhớ quá khứ buồn rơi nước mắt.
        Nhìn tương lai lạnh buốt sống lưng.
        Y!M: nhamdtk4.

        Comment


        • #5
          Hình như thiếu khai báo portb=0xff (ngõ vào)

          Web:[url]www.ledviet.info/url]
          Email:
          DĐ:0949299699

          Comment


          • #6
            Nguyên văn bởi manhha2799 Xem bài viết
            Hình như thiếu khai báo portb=0xff (ngõ vào)
            Nhưng mình dùng nó làm ngắt ngoài cơ mà, chỉ cần khai báo ngắt là được chứ.
            Nhớ quá khứ buồn rơi nước mắt.
            Nhìn tương lai lạnh buốt sống lưng.
            Y!M: nhamdtk4.

            Comment


            • #7
              Mình góp ý với bạn mấy vấn đề như sau:
              1. Không hiểu bạn #include<def_877a.h> làm gì, những định nghĩa cần thiết đã có trong chương trình rồi còn gì?
              2. Bạn không cần phải viết hàm delay, ccs hỗ trợ bạn rồi
              3. Void nhay1(), void nhay2() xảy ra khi có ngắt ngoài phải không? như vậy nó phải được đặt trong hàm ext_isr()
              4. portd chắc là bạn khai báo trong #include<def_877a.h> phải không? Nếu chưa có bạn phải đặt portd=8.
              5. Bạn nên test thử với chương trình đơn giản như là xuất ra tất cả các chân và cho nháy 1s để test phần cứng và PIC. Nếu chạy ok rồi lúc ấy mới đi áp dụng các chương trình phức tạp dần lên
              Chúc bạn thành công!

              Comment


              • #8
                for(j=0;j++;j<8)
                {
                portd=loop2;
                delay_ms(50);
                loop2<<=1;
                if(j==8) j=0;
                }

                Bỏ lệnh if trong vòng lặp for đi, không cần thiết.
                Bỏ khai báo hàm delay_ms đi, không cần thiết, bản thân CCS có sẵn hàm delay_ms rồi.
                Bỏ 2 thứ đó đi, dịch lại xem sao. Kiểm tra giá trị biến Loop1 và Loop2 xem dịch đúng giá trị chưa. Có thể thử vòng lặp và hàm nháy bằng cách cho PORTD = i ở hàm nhay1 và PORTD = j ở nhay2
                Ethernet-RS232, PIC Webserver, RFID Reader
                CallerID, Cảnh báo BTS, ...
                0988006696
                linhnc308@gmail.com
                http://linhnc308.blogspot.com

                Comment


                • #9
                  Nguyên văn bởi linhnc308 Xem bài viết
                  Bỏ lệnh if trong vòng lặp for đi, không cần thiết.
                  Bỏ khai báo hàm delay_ms đi, không cần thiết, bản thân CCS có sẵn hàm delay_ms rồi.
                  Bỏ 2 thứ đó đi, dịch lại xem sao. Kiểm tra giá trị biến Loop1 và Loop2 xem dịch đúng giá trị chưa. Có thể thử vòng lặp và hàm nháy bằng cách cho PORTD = i ở hàm nhay1 và PORTD = j ở nhay2
                  Em làm đúng như vậy nhưng nó cũng ko ý kiến gì anh ah!
                  Nhớ quá khứ buồn rơi nước mắt.
                  Nhìn tương lai lạnh buốt sống lưng.
                  Y!M: nhamdtk4.

                  Comment


                  • #10
                    vậy thì phải học c trước chứ?không biết gì thì sao mà chỉ?tui thì tạm tạm thôi!

                    Comment


                    • #11
                      bác nào có tài liệu gì về báo trộm báo về điện thoại ko cho em xin với?
                      gmail:vodvt10101989@gmail.com

                      Comment


                      • #12
                        Có gì đâu mua module sim900+Píc6 về mà dùng tham khảo
                        http://pccommunication.blogspot.com/...00-sim900.html

                        Comment


                        • #13
                          chào mấy anh chị, em cũng đang làm mạch vi điều khiển cho pic 16f877a.
                          Đây là đồ án thầy giao, mong a chị giúp với, nếu có code càng tốt. mà em đang học và lập trình trong C nha
                          có thể gởi wa mail em cũng được: thanh.phong.thanh91@gmail.com
                          dưới đây là hình nè

                          Click image for larger version

Name:	yeucau.png
Views:	1
Size:	34.2 KB
ID:	1359297
                          Click image for larger version

Name:	yeucauphancung.png
Views:	1
Size:	21.6 KB
ID:	1359298

                          Comment


                          • #14
                            phải hỉu rõ vè lập trình rùi hãng làm he.

                            Comment


                            • #15
                              Nguyên văn bởi olyvip
                              Hôm trước mình có mua code đồng hồ số giao tiếp ds1307 của anh hệ,mạch của anh ấy chạy ngon thật.Mình mô phỏng chạy rất đẹp bảo vệ đồ án được 10 điểm thích thật,anh ấy còn cho mình code lập trình nữa chứa.Đúng là mất tiền mà có được cái hay cũng thích.Đây là website bán hàng của anh ấy các bạn nè:
                              http://vip1990.blogtiengviet.net/
                              anh em nào cần mua mạch cứ liên hệ với anh ấy là có mạch chạy luôn.
                              khiếp! đề tài đồng hồ số sử dụng DS1307 chả có gì mới mẻ, tiến bộ mà cũng được 10 điểm.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X