Thông báo

Collapse
No announcement yet.

Dành cho người mới tìm hiểu 8051

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

  • Nguyên văn bởi quynh Xem bài viết
    Ví dụ đầu tiên:Nối A của led với P1.0 ,K nối với GND, và cho nó nhấp nháy nhanh hay chậm, tùy bạn.
    ___________________
    Code:
    #include<regx51.h>//khai báo cho chương trình mình dùng thư viện của 8051
    #define led P1_0//Led được nối với P1_0,chú ý viết hoa chữ "P"nhé
    void delay(unsigned int ms)//hàm này tạo độ trễ thời gian, dơn vị là ms
    {
      unsigned int i;
      unsigned char j;//khai báo kiểu "char"mỗi biến chỉ chiếm 1 byte
      for(i=0;i<ms;i++)
         for(j=0;j<120;j++)
             {}//không làm gì cả
    }
    main()//Chương trình chính
    {
      While(1)//tạo vòng lặp vô hạn
    {
        led=0;//tắt led
        delay(1000);//tạo độ trễ 1000ms=1s
        led=1;//bật led
        delay(1000);
    }
    }
    Thế là xong ct đầu tiên, bạn chỉ việc copy,paste, và dịch nó thành file hex ,nạp vào chip,cắm vào mạch và thấy thành quả của mình.
    có điều lưu ý. lệnh While phải sửa thành while ko là Build bị 3 error ngay đó.
    "rất nhỏ nhặt mà lại đáng sợ"

    Comment


    • Nguyên văn bởi duydong Xem bài viết
      mình có thể tham gia chút nha!
      Bạn đã học lập trình C nếu có học mã HEX thì chỗ này có j mà ko hiểu
      0x00 mã HEX viết dạng nhị phân 8bit là 00000000 nếu nối led anot lên nguồn thì nó sáng cả lũ 8 cái luôn còn nối canot thì nó tắt hết thui
      còn 0x01 thi nhị phân 8bit là 00000001 ngẫm thử coi
      nghe vẻ cậu này cũng biết nhiều đây. mình thử hỏi các bạn mới học 1 câu nhé,
      Bạn đã học lập trình C nếu có học mã HEX thì chỗ này có j mà ko hiểu
      0x00 mã HEX viết dạng nhị phân 8bit là 00000000 nếu nối led anot lên nguồn thì nó sáng cả lũ 8
      vậy nếu đặt 0xFF tức là 11111111 (8 con số 1) nếu đấu xuống canot thì hiện tượng gì xảy ra ???

      Comment


      • có điều lưu ý. lệnh While phải sửa thành while ko là Build bị 3 error ngay đó.
        "rất nhỏ nhặt mà lại đáng sợ"
        thì trong C nó phân biệt chữ Hoa và chữ thường mà. bạn ghi thế nào nếu là từ khóa thì tự khắc nó sẽ in đậm lên. nếu không đậm thì tức là bạn đã ghi sai,cần phải sửa.

        mấy cái này mình có thể quy ước được mà các bạn thử nhé

        Comment


        • Nguyên văn bởi rongconn2t Xem bài viết
          nghe vẻ cậu này cũng biết nhiều đây. mình thử hỏi các bạn mới học 1 câu nhé,


          vậy nếu đặt 0xFF tức là 11111111 (8 con số 1) nếu đấu xuống canot thì hiện tượng gì xảy ra ???
          Oh! ahy nhỉ tất nhiên là có hiện tượng chả có hiện tượng j cả, các led tắt hết thui. vì oxFF là coi logic 1 =5v
          anot nối 5v qua trở điện bằng nhau. led tắt
          ở 8051 do cấu tạo phần cứng chỉ hút dòng lớn thui
          nên chả ai cho led sáng băng 0xFF cả ^^ trừ qua IC đệm thì ko nói làm j
          ( thực tế thì mức logic 1 ở đây do điện trở treo thui or gần như zậy, xem phần cứng coi ^^)
          àh ! có khi cho nó sáng mờ mờ ảo ảo lại hay..hehe

          Comment


          • bác nào có thể giúp em được không
            em cần chương trình khi dịch ra file hex thì nó ở dạng
            0000
            1000
            0100
            0010
            0001
            1001
            0101
            0011
            1011
            0111
            1111
            nó được viết bằng ASM nha

            Comment


            • Nguyên văn bởi duydong Xem bài viết
              Oh! ahy nhỉ tất nhiên là có hiện tượng chả có hiện tượng j cả, các led tắt hết thui. vì oxFF là coi logic 1 =5v
              anot nối 5v qua trở điện bằng nhau. led tắt
              ở 8051 do cấu tạo phần cứng chỉ hút dòng lớn thui
              nên chả ai cho led sáng băng 0xFF cả ^^ trừ qua IC đệm thì ko nói làm j
              ( thực tế thì mức logic 1 ở đây do điện trở treo thui or gần như zậy, xem phần cứng coi ^^)
              àh ! có khi cho nó sáng mờ mờ ảo ảo lại hay..hehe
              vui đây.
              ý mình nói là cắm đầu ---- con led xuống đất.khi đưa ra mức 1 ở các chân thì nó xảy ra hiện tượng gì ??
              cái này dành cho mấy bạn hay dùng proteus ấy mà .

              thêm câu nữa nhé . mình dùng C cho mọi người dễ hiểu ,asm cho người mới bắt đầu thì ... hic ... lâu tiến bộ lắm

              ở đầu hàm main mình thiết lập thế này
              void main(void)
              {
              TMOD = 0x01;
              TR0 = 1;
              IE = 0x82;
              while(1);

              }

              và hàm xử lý ngắt nữa

              void ngat_timer_0(void) interrupt 1 // hàm xử lý ngắt timer 0
              {
              P2_0 = ~P2_0; // đảo mức trên chân P2.0
              }

              //==============================================

              hiện tượng gì sẽ sảy ra trên chân P2.0
              nếu đấu đầu + con led lên 5V , đầu --- con led xuống P2.0 thì led sẽ thế nào ?
              mình dùng thạch anh 12MHz nhé.cho quen thuộc
              cái này cho mấy bạn mới vào nghề
              Last edited by rongconn2t; 22-12-2009, 09:39.

              Comment


              • em có led matrix nhu chủ đền bên dưới em đã ráp xong rồi nhưng em chưa biết lập trình như thế nào bằng c keli. em muốn chạy dòng chữ "happy new year" thì phải lập trình như thế nào. em cám ơn anh nhiều

                http://www.dientuvietnam.net/forums/...885#post229885

                Comment


                • làm LED thì phần nguồn khá là quan trọng, nên mua một nguồn tốt của hãng về ghép lại sẽ đỡ tốn nhiều phí
                  Giảng dạy, thiết kế mạch vdk: pic,8051,psoc,avr. các board ứng dụng: ADC,LCD,LED, điều khiển động cơ bước, tich hợp sensor:dò đường, siêu âm, chuyển động.YM:luong_nc@yahoo.com, dd:01234809946

                  Comment


                  • Nguyên văn bởi rongconn2t Xem bài viết
                    vui đây.
                    ý mình nói là cắm đầu ---- con led xuống đất.khi đưa ra mức 1 ở các chân thì nó xảy ra hiện tượng gì ??
                    cái này dành cho mấy bạn hay dùng proteus ấy mà .

                    thêm câu nữa nhé . mình dùng C cho mọi người dễ hiểu ,asm cho người mới bắt đầu thì ... hic ... lâu tiến bộ lắm

                    ở đầu hàm main mình thiết lập thế này
                    void main(void)
                    {
                    TMOD = 0x01;
                    TR0 = 1;
                    IE = 0x82;
                    while(1);

                    }

                    và hàm xử lý ngắt nữa

                    void ngat_timer_0(void) interrupt 1 // hàm xử lý ngắt timer 0
                    {
                    P2_0 = ~P2_0; // đảo mức trên chân P2.0
                    }

                    //==============================================

                    hiện tượng gì sẽ sảy ra trên chân P2.0
                    nếu đấu đầu + con led lên 5V , đầu --- con led xuống P2.0 thì led sẽ thế nào ?
                    mình dùng thạch anh 12MHz nhé.cho quen thuộc
                    cái này cho mấy bạn mới vào nghề
                    Thực tế chút chứ mô phỏng nhiều khi ko đúng lém. ^^
                    Mà bộp 1 phát bạn cho luôn mấy bạn mới như vậy thì làm sao mà hiểu nổi
                    Phải tìm hiểu qua phần cứng và viêt ASM 1 chút chứ -> nó là cơ bản và cũng tưong đối dễ mà
                    Nếu viết như trên bạn cũng phải giải thic chút chứ
                    TMOD : Dặt chế độ cho Timer , ở đây chọn Timer 0 chế độ 16bit nè
                    Khai báo ngắt nè IE
                    và cho timer0 TR0=1
                    mà ở đây bạn ko nạp giá trị ban đầu cho timer0 nhé , thế tính thời gian đèn chuyển trạng thái bao nhiêu zậy ^^
                    Trong chương trình ngắt timer0 chỉ đảo bit cổng P2_0
                    Ở đây ko nạp giá trị ban đầu cho timer0 thì bạn dùng thạch anh nào chả thế có cần tính thời gian chính xác đâu nhỉ
                    Có j thỉnh giáo nhé ^^

                    Comment


                    • Thực tế chút chứ mô phỏng nhiều khi ko đúng lém. ^^
                      thế mới cần thực tế.các bạn mà cứ đăm đăm vào thằng Proteus thì có ngày die đấy.các bạn đóng tắt con led thì không sao.hic nhưng các bạn mà làm bộ hẹn giờ cho quả bom chẳng hạn .cẩn thận đấy

                      Phải tìm hiểu qua phần cứng và viêt ASM 1 chút chứ -> nó là cơ bản và cũng tưong đối dễ mà
                      mới vào nghề thì nên đọc về C trước hay hơn .đọc thẳng ASM dễ tẩu hỏa nhập ma lắm

                      Nếu viết như trên bạn cũng phải giải thic chút chứ
                      mình đã ghi trên là "ĐỐ" rồi. vậy các bạn trả lời xong thì mình sẽ giải thích chứ

                      TMOD = 0x01; : cái này để khai báo timer 0 mode 1( chế độ 16 bit)
                      TR0 = 1; : cái này để cho timer 0 chạy .
                      IE = 0x82; : cái này để khai báo ngắt cho timer 0
                      giải thích như thế này thì người biết rồi không sao . nhưng những người chưa biết thì sẽ không hiểu đc vì nó yêu cầu phải biết đc bản chất con 89 trong có những thanh ghi nào ? các chế độ đc đặt ở các bit trên thanh ghi có tác dụng gì ....
                      tham khảo các code trên mạng đc thì tốt nhưng vẫn phải yêu cầu các bạn phải học sâu về con VDK mới đc
                      mà ở đây bạn ko nạp giá trị ban đầu cho timer0 nhé , thế tính thời gian đèn chuyển trạng thái bao nhiêu zậy ^^
                      Trong chương trình ngắt timer0 chỉ đảo bit cổng P2_0
                      Ở đây ko nạp giá trị ban đầu cho timer0 thì bạn dùng thạch anh nào chả thế có cần tính thời gian chính xác đâu nhỉ
                      không nạp giá trị ban đầu cho timer 0 thì mặc định của nó sẽ là 0. và cứ 12 xung thạch anh vào thì bộ đếm timer sẽ tăng lên 1 .
                      mình đưa thạch anh 12MHz vào vì nó quen với các bạn hơn và dễ dùng với 89
                      tính thời gian chuyển trạng thái trên chân P2.0 như sau
                      tần số thạch anh đưa vào là 12MHz
                      qua bộ chia tần số trong chip thì chip hoạt động với tần số là 12/12 = 1MHz
                      vì timer 0 chế độ 1 là 16bit tức là timer 0 đếm tối đa là 2^16 = 65535
                      vậy thời gian đảo trạng thái là : 1/ (1E6 / 65536 ) = ~1 /15 s
                      nếu đấu con led vào thì tần số 15Hz bạn có thể trông thấy đc

                      chúc vui

                      Comment


                      • Xin hỏi các cao thủ có kiểu thể lập trình được cho VDK đồng thời thực hiện tất cả các chương trình con cùng một lúc không. Giả sử có 3 chương trình con để tạo 3 xung tần số f1, f2 ,f3 xuất ra P1, P2, P3 .

                        Comment


                        • E cũng mạo mụi trả lời cho bác là: ko thể có 3 ct con cùng thực hiện một lúc đc. Chỉ có 3 ct thực hiện lần lượt thôi. Chỉ là thời gian quá ngắn mình ko phân biệt đc 3 ct đó thực hiện lần lượt thôi. chúc bác zui ze nghiên cứu hăng say!

                          Comment


                          • Đó chính là điểm yếu của VDK.

                            Comment


                            • theo cá nhân mình đc biết thì hầu hết các phần mềm lập trình đều như thế. Mình chỉ có biết 1 phần mềm tên là labview là có thể chạy song song một lúc cả 2 chương trình trên 2 nhân của cpu máy tính. Có bạn nào biết thêm thì chỉ giáo cho mình. E là kiến thức của mình khá hạn hẹp mong sự bổ sung từ mọi người để cùng tiến.

                              Comment


                              • Riêng về nhân máy tính thì khỏi nói. 2 chứ 10 chương chình nó chấp hết. Loại chip AMD 4CPUs thì khỏi bàn luôn.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X