Thông báo

Collapse
No announcement yet.

Lập trình ASM cho 8051

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

  • #16
    Nguyên văn bởi haunobita Xem bài viết
    " thiết kế mạch phát xung vuông tần số lập trìng được, có nut ấn chọn tầm Hz, KHz, 100KHz, nút ấn để tăng tần số, nút ấn để giảm tần số. Hiển thị tần số ra led 7 đoạn". ( dùng timer)
    Chương trình này đâu có gì đâu.

    Đầu tiên bạn tập viết chương trình dùng ngắt Timer0 16 bit tạo xung vuông với giá trị TH0, TL0 lấy từ 2 ô nhớ nào đó trong RAM gọi là a,b. Như vậy giá trị trong 2 ô nhớ a,b sẽ ảnh hưởng đến tần số của xung tạo ra.

    Do đó, bạn sẽ quét phím, khi nhấn chọn tần hay tăng, giảm thì ứng với nó sẽ thay đổi tần số xuất ra.

    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


    • #17
      Nguyên văn bởi hongtam Xem bài viết
      Chào các bạn,cho mình hỏi là làm sao dùng chân của các port để điều khiển 1 tải dùng điện xoay chiều có dòng khoản vài Ampe?
      Ko hiểu bạn muốn nói đến điều khiển kiểu gì. Nếu điều khiển đóng mở thì dùng relay thôi.
      AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
      Xem thêm tại Online Store ---> Click here
      Mob: 0982.083.106

      Comment


      • #18
        Nguyên văn bởi ngohaibac Xem bài viết
        TH0, TL0 lấy từ 2 ô nhớ nào đó trong RAM gọi là a,b. Như vậy giá trị trong 2 ô nhớ a,b sẽ ảnh hưởng đến tần số của xung tạo ra.
        Cảm ơn pác ngohaibac nha. Em chưa hỏi thầy nhưng một số bạn nói TH(0,1) và TL(0,1) chỉ nhận giá trị trực tiếp. Nghĩa là mình phải gán như sau:
        MOV TH0,#HIGH(-50)
        MOV TL0,#LOW(-50)
        (Ví dụ thế)
        cho nên em đang lúng túng. Nếu có thể pác post jùm em cái chương trình con tạo xung biến đổi. Em có đọc "Họ vi điều khiển 8051" của Tống Văn On nhưng không biết áp dụng như thé nào cho việc xung tăng giảm lung tung. (hì).

        Comment


        • #19
          Nguyên văn bởi ngohaibac Xem bài viết
          Quan trọng là mình biết nếu lập trình một cái thì mình tìm ở đâu, học ở chỗ nào thôi . Trường mình kì này mới dạy 8051 nên phải viết nhiều nhiều để thi nên tiện viết luôn cho các bạn .
          Hi hi, đọc được câu này của bác ngohaibac em mừng rúm. Bác chỉ jup em vài chỗ tìm cái, em lên google search "nâu nắm" mà ko thấy gì cả. Hay pác viết júp em cái. Bác đừng nghĩ em lười nha, vì bài tập gấp quá mà em thì vẫn thuộc tuýp "dựa cột mà nghe".
          Last edited by haunobita; 18-04-2007, 17:58.

          Comment


          • #20
            cho hỏi một chút , mình lập trình cho con 8051 để nó gởi giá trị đến DAC nhằm tạo sóng hình sin , nhưng không biét thuật toán thế nào đây. Mình chỉ có DAC 8 bit thôi. mong các bạn giúp đỡ , cám ơn nhiều.

            Comment


            • #21
              Nguyên văn bởi haunobita Xem bài viết
              Cảm ơn pác ngohaibac nha. Em chưa hỏi thầy nhưng một số bạn nói TH(0,1) và TL(0,1) chỉ nhận giá trị trực tiếp. Nghĩa là mình phải gán như sau:
              MOV TH0,#HIGH(-50)
              MOV TL0,#LOW(-50)
              Em xem link này về lệnh mov và các lệnh nhé:
              http://www.keil.com/support/man/docs/is51/is51_mov.htm

              Cái này dùng ngon lành chứ k phải như em nghĩ đâu. Vì anh làm với C ngon lành mà.

              Chúc em 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


              • #22
                Em có sưu tầm được ít code ASM lúc mới học 8051
                gửi cho các bạn .hi vọng giúp ích phần nào:
                Attached Files
                Học thầy không tày học bạn ...

                Comment


                • #23
                  Nguyên văn bởi ngohaibac Xem bài viết
                  Em xem link này về lệnh mov và các lệnh nhé:
                  http://www.keil.com/support/man/docs/is51/is51_mov.htm

                  Cái này dùng ngon lành chứ k phải như em nghĩ đâu. Vì anh làm với C ngon lành mà.
                  Bác NHB có trang web hay quá. Cảm ơn bác nhiều nhiều. Có gì hay gửi cho em vài link, hay mail cho em theo địa chi này vannguyen144@gmail.com nha.
                  Cảm ơn cả TDH-BN nha, pác có nhiều cái cũng rất hay. Em là dân đang tập tọe với thằng 8051, mong các pác chỉ bảo thêm.

                  Comment


                  • #24
                    Anh Hải cho em hỏi
                    - Khi mình nhảy đến 1 cái nhãn thì nó sẽ thực hiện hết các lệnh trong nhãn đó đến khi gặp cái nhãn khác thì nó way trở lại chương trình chính gọi nó hả anh lỡ ở dưới nó co cái nhãn khác thì nó có thưc hiện nhẵn đó ko?
                    - Rùi cái lệnh JMP @A+DPTR là nó thực hiện cái lệnh từ A+DPTR trở xuống hay là chỉ thực hiện lệnh ở vị trí A+DPTR thôi
                    - Rùi cái sau khi cho phép ngắt nhảy vào lệnh
                    EX: CLR TR0
                    DJNZ R7,LOOP
                    ........
                    RETI
                    LOOP: .........
                    thì nó thực hiện xong hết cái LOOP hết cái vòng lặp rùi nó mới trở lại thực hiện chương trình chính hả anh?

                    Comment


                    • #25
                      cho em hỏi về thuật toán quet led matrix nha anh ngohaibac. em chỉ quét dc 1 chữ cái thoi chứ khong quét dc chữ do chạy. mong anh chỉ với.

                      Comment


                      • #26
                        Mình muốn hỏi một bài như sau. Anh em có ai giải đáp hộ với! Chương trình hợp ngữ nhé.

                        Mục đích của mình là truyền 1 byte data (chỉ là chữ số 0,1,2....9) từ PC đến 8051 qua cổng COM ( IC max232), để hiển thị ra LED 7 thanh. Hiện tại mình chỉ truyền được ra cổng P0.

                        Tức là nếu muốn truyền số 0, thì thông qua ngắt cổng nối tiếp, các bit của P0 sẽ là #0011 0000 (Đúng mã ASCII của số 0 rồi ). Sau đó mình dùng cấu trúc CASE OF để đưa ra LED. Ví dụ, nếu đúng là số 0 (ASCII) thì sẽ chuyển mã của số 0 ra LED hiển thị. Đoạn chương trình như thế này:

                        cjne a,#00H,label1 ; Nếu không phải số 0 thì nhảy đến label1
                        mov P0,#03H ; Nếu đúng thì chuyển mã của 0 ra P0.
                        sjmp Exit

                        label1: cjne a,#01H,label2; Nếu không phải 1 thì nhảy tiếp label2
                        mov P0,#9FH
                        sjmp Exit

                        label2:
                        ....................

                        Mỗi thế mà làm không xong.

                        Anh em giúp đỡ với!! Cám ơn trước.
                        Last edited by daytripper; 01-05-2007, 23:33.

                        Comment


                        • #27
                          - Khi mình nhảy đến 1 cái nhãn thì nó sẽ thực hiện hết các lệnh trong nhãn đó đến khi gặp cái nhãn khác thì nó way trở lại chương trình chính gọi nó hả anh lỡ ở dưới nó co cái nhãn khác thì nó có thưc hiện nhẵn đó ko?
                          Em hiểu không đúng rùi em ạ. Em nhảy đễn nhãn thì cũng chính là nhảy đến các nơi trong chương trình chính hoặc trong hàm con chứa nó mà thôi, cái này không phải là ngắt em ạ.

                          Khi gặp lệnh nhảy đến nhãn nào đó thì chương trình sẽ thực hiện tiếp chương trình từ nhãn đó đến khi gặp kết thúc chương trình .end hoặc các lệnh ret, reti.

                          - Rùi cái lệnh JMP @A+DPTR là nó thực hiện cái lệnh từ A+DPTR trở xuống hay là chỉ thực hiện lệnh ở vị trí A+DPTR thôi
                          Em đọc lại trên là tự trả lời câu hỏi này rùi.

                          - Rùi cái sau khi cho phép ngắt nhảy vào lệnh
                          EX: CLR TR0
                          DJNZ R7,LOOP
                          ........
                          RETI
                          LOOP: .........
                          thì nó thực hiện xong hết cái LOOP hết cái vòng lặp rùi nó mới trở lại thực hiện chương trình chính hả anh?
                          DJNZ : decrease and jump if not zero tức là giảm R7 và nhảy nếu R7 khác 0. Như vậy khi R7 vẫn còn khác 0 thì nó sẽ nhảy đến Loop em ạ, còn khi R7 = 0 thì nó sẽ thực hiện lệnh sau lệnh DJNZ.

                          Em cần đọc kỹ ý nghĩa các lệnh em nhé.

                          Chúc em 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


                          • #28
                            Nguyên văn bởi ruacon112 Xem bài viết
                            cho em hỏi về thuật toán quet led matrix nha anh ngohaibac. em chỉ quét dc 1 chữ cái thoi chứ khong quét dc chữ do chạy. mong anh chỉ với.
                            Chào em.

                            Cho anh hỏi lại em nhé. Chữ chạy với chữ không chạy khác gì nhau hả em??

                            Em phải hiểu mấu chốt vấn đề là chỉ là hiển thị lên các LED mà thôi còn chạy hay không là cảm giác của người thôi đấy.

                            Em có biết ngày xưa các anh chị làm phim hoạt hình thế nào k? chụp ảnh từng cử động nhỏ rùi ghép lại mà thành hoạt động đấy. Cái này là hiệu ứng 24h/s đấy. Nếu k có cái này thì em cũng không đọc dc hình trên máy vi tính của em đâu .

                            Chúc em 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


                            • #29
                              Nguyên văn bởi daytripper Xem bài viết
                              Mình muốn hỏi một bài như sau. Anh em có ai giải đáp hộ với! Chương trình hợp ngữ nhé.

                              Mục đích của mình là truyền 1 byte data (chỉ là chữ số 0,1,2....9) từ PC đến 8051 qua cổng COM ( IC max232), để hiển thị ra LED 7 thanh. Hiện tại mình chỉ truyền được ra cổng P0.

                              Tức là nếu muốn truyền số 0, thì thông qua ngắt cổng nối tiếp, các bit của P0 sẽ là #0011 0000 (Đúng mã ASII của số 0 rồi ). Sau đó mình dùng cấu trúc CASE OF để đưa ra LED. Ví dụ, nếu đúng là số 0 (ASII) thì sẽ chuyển mã của số 0 ra LED hiển thị. Đoạn chương trình như thế này:
                              Về thuật giải thì đúng rùi đó bạn ạ, có điều bạn đã thử xem có nhận được dữ liệu từ PC xuống hay chưa?

                              Hãy test lại, nếu nhận được dữ liệu từ PC xuống thì cho sáng một đèn chứng tỏ UART OK, còn không thì kiểm tra lại nhé.

                              Em có thể dùng thuật giải này hay hơn:

                              a là dữ liệu nhận về
                              => P0 = '0' + a; thế là xong đỡ phải case of làm gì cả.

                              Chúc em 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


                              • #30
                                nhưng anh Bắc ơi. nếu dùng việc ghép 24hình/s thì việc quét led phức tạp thế. nếu muốn có ảnh led di chuyển mà mình phải viết từng ảnh của led ở những vị trí sát nhau thì bao giờ mới xong ảnh nhiều chữ di chuyển. khi còn học trong lớp em có thấy thầy viết đoạn mã tương đối ngắn ( dùng những lệnh như: push,pop AGC, gì ấy.. )nhung em ko hiểu. bây giờ hết học môn ấy rồi nên mới phãi hỏi các anh thế này. Ý em là có những lưu đồ chung cho những trường hợp ấy ko. hay mỗi người có một cách viết khác nhau. em khó hiểu quá !??

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X