Thông báo

Collapse
No announcement yet.

Cho em hỏi xíu( mới tập lập trình)

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

  • Cho em hỏi xíu( mới tập lập trình)

    EM LẬP TRÌNH ĐOẠN CODE NHƯ SAU:
    ( CHO ĐÈN LED CHẠY THUI)
    EM THỬ TRÊN TEXTBOARD KO THẤY ĐÈN LED CHẠY , NÓ CHỈ SÁNG ĐỒNG LOẠT RỒI ĐƯNG YÊN
    VỀ PHẦN CỨNG EM CẤP NGUÔN GND VÀ 18,19 NỐI VÀO THẠCH ANH 12M VA 2 TỤ 33P. EM HỎI CÓ THIẾU J KO SAO CHẠY KO ĐÚNG
    CODE
    INCLUDE 89C51.MC
    MOV P0,#FFH
    MOV TMOD, #10H
    LOOP:
    MOV A,#01111111B
    MOV P0,A
    ACALL DELAY
    RL A
    MOV P0,A
    ACALL DELAY
    RL A
    MOV P0,A
    ACALL DELAY
    RL A
    MOV P0,A
    ACALL DELAY
    RL A
    MOV P0,A
    ACALL DELAY
    RL A
    MOV P0,A
    ACALL DELAY
    RL A
    MOV P0,A
    ACALL DELAY
    RL A
    MOV P0,A
    ACALL DELAY
    SJMP LOOP
    DELAY:
    MOV R7,#20
    LOP:
    MOV TH1,#3CH
    MOV TL1,#B0h
    SETB TR1
    JNB TF1 $
    CLR TR1
    CLR TF1
    DJNZ R7, LOP
    RET
    END

  • #2
    ngôn ngữ chữ in hoa này thì mình không biết nhưng về phần cứng không thấy bạn nói gì đến chân 9 và chân số 31 của 8051.

    Comment


    • #3
      Nguyên văn bởi Multi System Xem bài viết
      ngôn ngữ chữ in hoa này thì mình không biết nhưng về phần cứng không thấy bạn nói gì đến chân 9 và chân số 31 của 8051.
      Chân 9 mình cho nối đất. con chân 31 mình không rõ làm j nên bỏ trống, liệu chân 31 có anh hưởng j ko bạn

      Comment


      • #4
        chân 9 là chân reset bạn phải nối đúng như sơ đồ.
        chân 31 là chân quy định dùng bộ nhớ trong hay bộ nhớ ngoài, nếu bạn dùng bộ nhớ trên chip thì chân 31 phải nối lên Vcc.

        Comment


        • #5
          chân 31 mình nối lên vcc rồi
          ma cũng ko được , hic sao kì dậy ko biết

          Comment


          • #6
            Còn chân reset nữa, thấy có câu này MOV P0,#FFH => vậy P0 đã treo trở chưa ?

            Comment


            • #7
              uh quên mất, treo trở thanh 10k hả sư huynh

              Comment


              • #8
                Dưới đây là cấu hình tối thiểu để chíp có thể chạy
                Attached Files

                Comment


                • #9
                  Đoạn code của bạn viết tôi thấy chưa ổn, nhất là đoạn dùng Timer1 để làm delay. Tôi có một số góp ý sau:

                  Đầu code nên viết:

                  org 0000h
                  sjmp main
                  ...đoạn này viết các đường dẫn cho ngắt...
                  ...
                  org 0030h
                  main:
                  MOV A,#01111111B
                  MOV P0,A
                  ACALL DELAY
                  RL A
                  MOV P0,A
                  ACALL DELAY
                  RL A
                  MOV P0,A
                  ACALL DELAY
                  RL A
                  MOV P0,A
                  ACALL DELAY
                  RL A
                  MOV P0,A
                  ACALL DELAY
                  RL A
                  MOV P0,A
                  ACALL DELAY
                  RL A
                  MOV P0,A
                  ACALL DELAY
                  RL A
                  MOV P0,A
                  ACALL DELAY
                  sjmp main
                  ;;;;;;;;;;;;
                  delay:
                  Viết code bình thường trễ dài cỡ 1 giây để dễ nhìn
                  ret

                  Tôi chưa bao giờ sử dụng ngắt như bạn nên không biết đoạn code delay của bạn có chạy như ý muốn không. Tôi không rõ khi chưa thiết lập IE là 84H thì timer1 sẽ chạy như thế nào khi TR1 = 1. Nếu đoạn code delay chạy như ý muốn thì thời gian quét các LED là quá nhanh, bạn không thể nhìn thấy được,
                  Thân

                  Comment


                  • #10
                    Nguyên văn bởi pvkhai Xem bài viết
                    Đoạn code của bạn viết tôi thấy chưa ổn, nhất là đoạn dùng Timer1 để làm delay. Tôi có một số góp ý sau:

                    Đầu code nên viết:

                    org 0000h
                    sjmp main
                    ...đoạn này viết các đường dẫn cho ngắt...
                    ...
                    org 0030h
                    main:
                    MOV A,#01111111B
                    MOV P0,A
                    ACALL DELAY
                    RL A
                    MOV P0,A
                    ACALL DELAY
                    RL A
                    MOV P0,A
                    ACALL DELAY
                    RL A
                    MOV P0,A
                    ACALL DELAY
                    RL A
                    MOV P0,A
                    ACALL DELAY
                    RL A
                    MOV P0,A
                    ACALL DELAY
                    RL A
                    MOV P0,A
                    ACALL DELAY
                    RL A
                    MOV P0,A
                    ACALL DELAY
                    sjmp main
                    ;;;;;;;;;;;;
                    delay:
                    Viết code bình thường trễ dài cỡ 1 giây để dễ nhìn
                    ret

                    Tôi chưa bao giờ sử dụng ngắt như bạn nên không biết đoạn code delay của bạn có chạy như ý muốn không. Tôi không rõ khi chưa thiết lập IE là 84H thì timer1 sẽ chạy như thế nào khi TR1 = 1. Nếu đoạn code delay chạy như ý muốn thì thời gian quét các LED là quá nhanh, bạn không thể nhìn thấy được,
                    Thân
                    mình delay tới 1s lận mà sao ko thấy được, chỉ cần 24hinh/s la lưu anh dc rồi mà

                    Comment


                    • #11
                      Các Pác ơi! giúp tôi với! Tôi đang có 1 con Intel D8751H. Toi có thể lấy code ra bằng mạch nạp đa năng All - 11. Nhưng dùng code này để nạp vào con AT89C51 để sử dụng, thì không được. Trong khi datasheet của 2 con này giống y trang nhau. Có Pác nào có cao kiến xin chỉ dùm! Xin đa tạ!

                      Comment


                      • #12
                        Nếu dùng timer tạo trế thì tùy theo thời gian delay là dài hay ngắn mà chọn timer.Nếu vượt quá 16bit thì cho nó thêm cái vòng lặp ngoài(Dùng DJNZ hay CJNE).Trong chương trình con delay tạo trễ chỉ cần xóa cờ TR0 và nạp giá trị cho TH0 và TL0, tiếp theo setb TR0.Nhớ có thêm lệnh kiểm tra JNB TR0 vào nhé.Chúc thành công


                        Add: 97 Quán Nam - Lê Chân - Hải Phòng.
                        Tel: 031 518648 Phone: 0904 283 505

                        Comment


                        • #13
                          Nguyên văn bởi siriusr Xem bài viết
                          mình delay tới 1s lận mà sao ko thấy được, chỉ cần 24hinh/s la lưu anh dc rồi mà
                          Xin lỗi bạn, đoạn delay của bạn cũng là 1 giây, do tôi đọc không kỹ. Tôi đã thử đoạn code của bạn chạy bình thường, có lẻ do phần cứng rồi. Cách dùng kiểu delay này tôi chưa dùng bao giờ, Timer dùng để ngắt chứ dùng để delay thì kỳ quá, bởi vì trong thời gian delay MCU không thể làm được việc gì cả.
                          Attached Files

                          Comment


                          • #14
                            Nguyên văn bởi pvkhai Xem bài viết
                            Xin lỗi bạn, đoạn delay của bạn cũng là 1 giây, do tôi đọc không kỹ. Tôi đã thử đoạn code của bạn chạy bình thường, có lẻ do phần cứng rồi. Cách dùng kiểu delay này tôi chưa dùng bao giờ, Timer dùng để ngắt chứ dùng để delay thì kỳ quá, bởi vì trong thời gian delay MCU không thể làm được việc gì cả.
                            Dùng timer để tạo hàm delay là chuyện bình thường, không có vấn đề gì cả. Mục đích là tạo khoảng thời gian gần chính xác như mong muốn.

                            Comment


                            • #15
                              Timer dùng để tạo delay và tạo xung vuông thì chính xác rồi, nhưng mà làm thế thì trong thời gian đó MCU chả làm được cái gì khác cả nên phí phạm quá, nên tạo delay = n vòng lặp DJNZ thì hay hơn!
                              Mình ví cái dụ cho 1 hàm delay gần chính xác 1s bằng mấy lệnh tạo vòng lặp!
                              Code:
                              Delay:
                                                                 mov	70h,#08
                              			W1:	mov	71h,#252
                              			W2:	mov	72h,#246
                              				djnz	72h,$
                              				djnz	71h,W2
                              				djnz	70h,W1
                              				ret
                              Và dùng vòng lặp đơn giản cho bit chuyển dịch trên P0!

                              Code:
                                       MOV A,#01111111B
                              LOOP: MOV P0,A
                                       ACALL DELAY
                                       RL A
                                       CJNE A,#01111111B,LOOP
                              Và chương trình sẽ đơn giản thành!
                              Code:
                              ORG 0000H
                              MOV P0,#0FFH
                              MOV A,#01111111B
                              LOOP: MOV P0,A
                                       ACALL DELAY
                                       RL A
                                       CJNE A,#01111111B,LOOP
                              ;;;;;;;;;;;;;;;;;;;;
                              Delay:
                                                               mov	70h,#08
                              			W1:	mov	71h,#252
                              			W2:	mov	72h,#246
                              				djnz	72h,$
                              				djnz	71h,W2
                              				djnz	70h,W1
                              				ret
                              
                              END
                              Trần Đức Sơn

                              tel:0934691385

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X