Thông báo

Collapse
No announcement yet.

HƯỚNG DẪN LẬP TRÌNH KEIL C CHO 8051-[Chỉ dành post bài hướng dẫn]

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

  • #31
    Nguyên văn bởi ngohaibac
    Hic đến bao giờ tôi mới được xứng đáng với hai chữ "cao thủ " đây?

    Nhưng không sao tôi biết gì nói đó vậy.

    Cái này là không thể thực hiện nếu bạn không biết tần số thạch anh. Vì thời gian trễ phụ thuộc vào tần số của nguồn tạo xung giao động.

    Một vi điều khiển khi ta lập trình thì tần số thạch anh là cố định. Thế bạn định lúc thì dùng thạch anh tần số này, lúc thì dùng tấn số khác à? Không nên thay đổi tần số thạch anh.

    Còn hàm của tôi đưa ra với tham số là số mili giây cần trễ thì thoải mái còn gì chứ bạn. Nếu cần thời gian trễ quá lớn cỡ 1 giò, 1 ngày thì bạn cho thêm vòng lặp vào đó là ổn mà. Mà có ai lại gây trễ lớn thế cơ chứ.

    chúc thành công.
    Bác à !Bác co rảnh thì giúp em đoạn code với nhé!Có lẻ mới bắt đầu nen nó khó thế đấy,em dần dần đoạn một số đoạn code thì em sẽ hiểu kỉ thêm cùng với tài liệu.Mấy lần trước em đã từng đọc vi điều khiển nhưng về phần cứng em không hiểu nên bây giờ mới thật sự bắt đầu .Nếu rảnh bác pót một vài ví dụ để còn học hỏi.
    À bác có nói bên luồng bên kia là bác đã tét bằng proteus .Thế khi tét bằng proteus con vi điều khiển ấy lấy thạch anh ở đâu mà gắng vào hả bác!(Giúp luôn phần proteus luôn bác nhé!)
    Khó nhất trên đời làm trang nam tử
    Ý chí vững vàng mà tình cảm lại mênh mang

    Comment


    • #32
      Trước hết, giúp bạn về phần Proteus. Trong Proteus con vi điều khiển hoàn toàn bạn coi nó như là con vi điều khiển thật mà thôi, tức là nó có thạch anh nội, nếu bạn dùng thạch anh ngoài thì bạn mắc thêm một mạch tạo dao động thạch anh thôi.

      Bạn nên dùng mạch thật mà làm. Cứ như mình ấy, hay mô phỏng đến khi chạy mạch thật thì dở hơi lắm, sẽ rất lúng túng.
      Technical sale at WT Microelectronics S'pore
      Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
      Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

      Comment


      • #33
        cám ơn bác đã nhắc nhở.Em sẽ cố gắng làm mạch thật .Thế phần proteus con vi điều khiển không cần mắc thạch anh hả bác!Có gì bác giúp em với nhé!Thanks!
        Khó nhất trên đời làm trang nam tử
        Ý chí vững vàng mà tình cảm lại mênh mang

        Comment


        • #34
          Chào bạn, có lẽ trình độ của tớ và bạn chẳng hơn gì nhau đâu mà. Bạn cứ đặt câu hỏi và nếu tớ biết thì sẽ trả lời. Còn nếu không biết thì sẽ có người giỏi hơn, nghiên cứu sâu hơn sẽ trả lời cho bạn.

          Thực tế thì ví dụ với con AT89C51 thì tôi làm như sau: bạn kích phải chuột vào con đó, kích chuột trái sẽ hiện lên cửa sổ Edit Component. Khi đó bạn chọn tần số thạch anh trong ô Clock Frequency. Thế là xong.

          Chúc bạn thành công.
          Technical sale at WT Microelectronics S'pore
          Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
          Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

          Comment


          • #35
            Mình đã xem ý kiến của zemen, theo mình thấy rất hay và hoàn toàn làm được một cách tương đối chính xác !(Nếu cần tính toán chúng ta vẫn tính được một vòng lặp while hay for mất bao nhiêu lâu thông qua số chu kỳ máy mà vòng lặp Keil cần dùng).
            Một số vấn đề mà chúng ta quan tâm khi tạo 1 hàm của zemen là:
            * Giá trị Max của TIMER(ví dụ mode 16bit thì max là 65536).
            * Giá trị Max mà 8051cho phép.(ví dụ P89c lên độ 40Mhz).
            Với 2 thông số trên ta hoàn toàn có thể tạo ra 1 hàm thời gian với 2 đối số thực được truyền là: Xtal và Timer.
            --------------------------------------------------------------------------------

            Comment


            • #36
              Nguyên văn bởi zemen
              Tuyệt quá, mấy bác giảng về delay dùng timer rất là hay, tôi hiểu thêm được nhiều điều, vậy mà trước giờ cứ delay đại, o biết là bao nhiêu.
              À, tu mới nảy ra 1 ý, o biết thực hiện được o? Ta có thể viết hàm delay (time) vơi giá trị thời gian tùy ý bất chấp tần số thạch anh. Chẳng hạn:
              void Hdelay (unsigned long fxtal, unsigned int time)
              {
              //////////
              }
              Mời các cao thủ thử xem!
              Bạn đã nói không rõ ý của bạn nên mình không hiểu, thông cảm nha bạn.

              Theo cách giải thích của bạn ở bài trên thì bạn muốn xây dựng một hàm delay tổng quát trong 1 file để với một ứng dụng bất kì nào đó mà muốn dùng hàm delay thì không phải sửa lại chút gì cả chỉ cần thêm vào các tham số: tần số thạch anh, thời gian cần gây trê.

              Do đó, hàm này thực tế nó phụ thuộc trực tiếp vào tần số thạch anh đấy chứ.

              Giải thuật của hàm này như sau:

              - Tính toán thời gian của một chu kì máy
              - Tìm phần nguyên của 1ms/chu kì máy. Nếu giá trị này <256 thì dùng các timer 8 bít, nếu >=256 và <=65535 thì dùng timer 16 bit. Còn nếu >65535 thì dùng thêm vòng lặp vào để lấy bội số của mỗi lần dùng timer.

              Từ đó tính toán ra các giá trị TH và TL
              - Dùng một vòng lặp while(time--) , ở trong vòng lặp này sẽ dùng timer như bước 2 để có thể gây trễ 1ms.

              Được không bạn?
              Technical sale at WT Microelectronics S'pore
              Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
              Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

              Comment


              • #37
                Chào bác Hải Bắc!Mấy ngày nay em cũng bận nên không lên diễn đàn được !Bác này em thử viết chương trình nhận tín hiệu của adc 0804 thế này bác nhé!
                #include "regx51.h"

                void main()
                {unsigned char x;
                while(1)
                {
                TMOD=0x02;sử dụng bộ định thời o chế đọ 8 bít
                AH0=0x00;
                AL0=0xA2;
                TR0=1;
                if (TF0) then
                {
                x=P1;
                P2=x;
                };
                };
                }
                Khó nhất trên đời làm trang nam tử
                Ý chí vững vàng mà tình cảm lại mênh mang

                Comment


                • #38
                  Mong các bác chỉ giúp thằng em mới vào nghề!à ween cụ thể bài toán yêu cầu thế này!
                  Em có bài toán như thế này :
                  Em có một biến trở sẽ điều chỉnh mức điện áp từ 0-10v sau khi được chuẩn hóa qua con A/D đưa vào vi điều khiển và hiển thị qua led các số từ 0 tới 10 .
                  Quá trình được lặp lại theo chiều ngược từ 7 công tắc qua vi điều khiển wa con D/A wa khâu khuếch đại hiển thị qua đồng hồ vôn.
                  Khó nhất trên đời làm trang nam tử
                  Ý chí vững vàng mà tình cảm lại mênh mang

                  Comment


                  • #39
                    Em làm phần đó là phần đi!
                    Các bác cho ý kiến giùm em!
                    Khó nhất trên đời làm trang nam tử
                    Ý chí vững vàng mà tình cảm lại mênh mang

                    Comment


                    • #40
                      Em đinh test trên proteus nhưng không được .Em không tìm được biến trở!
                      Các bác giúp em với!
                      À mà khi nối vi điều khiển với led 7 đoạn thì mắc trực tiếp chân hai vào led 7 đoạn à!(theo em biết thì không thể theo trật tự đó được!)
                      Khó nhất trên đời làm trang nam tử
                      Ý chí vững vàng mà tình cảm lại mênh mang

                      Comment


                      • #41
                        LED 7 đoạn có 10 chân, trong đó có 7 chân là cực của 7 diode, 1 chân là cực của dấu chấm, chân số 3 và chân số 8 là đầu mắc chung của các cực còn lại.
                        LED 7 đoạn có 2 loại: K chung và A chung, bạn phải biết mình dùng loại nào.
                        Nếu dùng giải mã LED 7 đoạn (7447 hay 7448 hay 4511 gì đó) thì bạn chỉ việc xuất số BCD đưa vào 4 chân của con giải mã là LED sẽ hiển thị ra số.
                        Nếu bạn không dùng giải mã thì bạn phải tự viết hàm giải mã và khi đó bạn có thể bật bất cứ đoạn nào của LED 7 đoạn, như vậy bạn có thể hiển thị được cả các ký tự.
                        Chúc bạn thành công.
                        Một bông hồng cho những ai đang còn mẹ,
                        Đang còn mẹ để lòng vui sướng hơn ..

                        Comment


                        • #42
                          1 chân là cực của dấu chấm, chân số 3 và chân số 8 là đầu mắc chung của các cực còn lại.
                          Em chưa hiểu cực dấu chấm là cực gì.Thế em không dùng con giải mã thì phải viết hàm à!
                          Khó nhất trên đời làm trang nam tử
                          Ý chí vững vàng mà tình cảm lại mênh mang

                          Comment


                          • #43
                            Nguyên văn bởi svngheo
                            1 chân là cực của dấu chấm, chân số 3 và chân số 8 là đầu mắc chung của các cực còn lại.
                            Em chưa hiểu cực dấu chấm là cực gì.Thế em không dùng con giải mã thì phải viết hàm à!
                            Muốn biết cực dấu chấm là gì thì bạn mua con led7 thanh về mà coi. cực dấu chấm dùng để hiển thị LED hoạt động dùng để báo là LED đã ở trạng thái sẵn sàng (không thích thì tắt cái này đi cũng chẳng sao ).

                            Còn nếu không dùng giải mã thì cũng vô tư bạn ạ. Bạn cần phải viết một bộ font cho led7 thanh với Anot chung:

                            Code:
                            const unsigned char Font[]={ 0b00000011, 0b10011111, 0b00100101, 0b00001101, 0b10011001,	0b01001001, 0b01000001, 0b00011111, 0b00000001, 0b00001001};
                            ví dụ: các chân của port2 từ 2.0 đến 2.6 nối với a,b,c,d,e,f,g (còn chân để cực chấm nó hiển thị thì luôn nối với GND cho luôn sáng).

                            Do đó, khi muốn led hiển thị chữ i (i = 0 đến 9) thì bạn cho P2 = Font[i] là ok ngay.

                            Còn chương trình bạn viết như thế cần thêm code để cho PORT1 là đầu vào. P1 = 0xFF;

                            Chúc thành công.
                            Technical sale at WT Microelectronics S'pore
                            Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
                            Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

                            Comment


                            • #44
                              Chào bạn Ngô Hải Bắc ,Minh van chua hiểu ý bạn ,tức là sửa lại chương trình như thế nào ấy nhỉ!Thêm P1=0xFF thì được rồi,còn cái cấu trúc font ,các phần tử của nó như thế nào ấy nhỉ?Minh chưa hiểu như thế nào nên không biết sửa chương trinh như thế nào!
                              Ban ranh giúp minh cái proteus đi ,mình muốn làm mô phỏng để hiểu thêm một chút trước khi làm mạch!(mình tìm con biến trở cũng gay)
                              Khó nhất trên đời làm trang nam tử
                              Ý chí vững vàng mà tình cảm lại mênh mang

                              Comment


                              • #45
                                undefinedHình như hình ảnh đính kèm.

                                Khi bạn muốn led này sáng thì cho : P3.0 = 0 ; khi đó trans ở trạng thái bão hoà.

                                Sau đó bạn muốn cho led hiển thị chữ số nào ví dụ chữ 1 chẳng hạn thì cho:

                                P2 = Font[2];

                                Bạn hiểu chưa nhỉ?
                                Technical sale at WT Microelectronics S'pore
                                Hỗ trợ dự án sử dụng các hãng Texas Instrument, STMicro, Freescale, Fairchild, International Rectifier, Ublox, Lumiled, Maxim
                                Liên hệ: 0915.560.511 hoặc ngo.haibac@wtmec.com

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X