Thông báo

Collapse
No announcement yet.

Xin chỉ giáo về quét phím

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

  • Xin chỉ giáo về quét phím

    Chào tất cả các thành viên của diễn đàn điện tử việt nam.Tôi đang tìm hiểu về VDK 8051,học cách lập trình bằng hợp ngữ.Tôi có một số vướng mắc mong được các anh em trong diễn đàn chỉ giáo thêm cho. Tôi làm bài tập dùng nút nhấn để điều khiển các led nháy theo các chế độ khác nhau(Không sử dụng ngắt), nhưng hình như code có vấn đề gì đó mà chương trình không chạy được. Mong các huynh đệ chỉ giáo thêm.
    Đây là code của chương trình

    ORG #0000H;
    MAIN:
    CLR P2;
    JNB P1.0,DK1;nhay neu nut P1.0 bang 0
    JNB P1.1,DK2;nhay neu nut p1.1 bang 0
    SJMP MAIN;tiep tuc kiem tra nut nhan
    DELAY:;ham tao tre
    MOV R3,#255;
    HERE:MOV R4,#255;
    HERE1:
    DJNZ R4,HERE1;
    DJNZ R3,HERE;
    RET;
    DK1:
    MOV A,#0AAH; nap AAh vao thanh ghi A
    MOV P2,A; chuyen noi dung thanh ghi A ra cong P2
    ACALL DELAY; goi ham tre
    CPL P2; Dao cong P2
    ACALL DELAY;
    RET;
    DK2:
    MOV P1,#0FFH;
    ACALL DELAY;
    CPL P2;
    ACALL DELAY;
    RET
    END
    Attached Files

  • #2
    Nguyên văn bởi Bóng Tối 009 Xem bài viết
    Chào tất cả các thành viên của diễn đàn điện tử việt nam.Tôi đang tìm hiểu về VDK 8051,học cách lập trình bằng hợp ngữ.Tôi có một số vướng mắc mong được các anh em trong diễn đàn chỉ giáo thêm cho. Tôi làm bài tập dùng nút nhấn để điều khiển các led nháy theo các chế độ khác nhau(Không sử dụng ngắt), nhưng hình như code có vấn đề gì đó mà chương trình không chạy được. Mong các huynh đệ chỉ giáo thêm.
    Đây là code của chương trình
    thử lại xem sao:
    Code:
    ORG 0000H;
    MAIN:
    MOV P1,#0ffH;
    lap:
    JNB P1.0,DK1;nhay neu nut P1.0 bang 0
    JNB P1.1,DK2;nhay neu nut p1.1 bang 0
    SJMP MAIN;tiep tuc kiem tra nut nhan
    DELAY:;ham tao tre
    MOV R3,#255;
    HERE:MOV R4,#255;
    HERE1:
    DJNZ R4,HERE1;
    DJNZ R3,HERE;
    RET;
    DK1:
    MOV A,#0AAH; nap AAh vao thanh ghi A
    MOV P2,A; chuyen noi dung thanh ghi A ra cong P2
    ACALL DELAY; goi ham tre
    MOV A,#055H; 
    MOV P2,A; chuyen noi dung thanh ghi A ra cong P2
    ACALL DELAY;
    SJMP lap;
    DK2:
    MOV P2,#0FFH;
    ACALL DELAY;
    MOV P2,#00H;
    ACALL DELAY;
    SJMP lap;
    END
    |

    Comment


    • #3
      Nguyên văn bởi tdm Xem bài viết
      thử lại xem sao:
      Code:
      ORG 0000H;
      MAIN:
      MOV P1,#0ffH;
      lap:
      JNB P1.0,DK1;nhay neu nut P1.0 bang 0
      JNB P1.1,DK2;nhay neu nut p1.1 bang 0
      SJMP MAIN;tiep tuc kiem tra nut nhan
      DELAY:;ham tao tre
      MOV R3,#255;
      HERE:MOV R4,#255;
      HERE1:
      DJNZ R4,HERE1;
      DJNZ R3,HERE;
      RET;
      DK1:
      MOV A,#0AAH; nap AAh vao thanh ghi A
      MOV P2,A; chuyen noi dung thanh ghi A ra cong P2
      ACALL DELAY; goi ham tre
      MOV A,#055H; 
      MOV P2,A; chuyen noi dung thanh ghi A ra cong P2
      ACALL DELAY;
      SJMP lap;
      DK2:
      MOV P2,#0FFH;
      ACALL DELAY;
      MOV P2,#00H;
      ACALL DELAY;
      SJMP lap;
      END
      Vẫn không được.Khi chưa nhấn nút nào thì các đèn đã sáng hết rồi. Khi nhấn nút cũng không thấy có tác dụng gì cả. Anh em xem lại hộ mình cái.Thanks

      Comment


      • #4
        Phương pháp dùng phím để chạy các CT khác nhau bạn nên làm như sau:

        a./ Phím nhấn:

        - Bạn có thể dùng nhiều phím hoặc chỉ cần dùng 1 phím để chọn CT.
        - Tạo 1 biến ví dụ "set_mode", biến này sẽ được gán giá trị tương ứng với các phím được nhấn.
        (Nếu bạn chỉ sử dụng 1 phím duy nhất thì ta sẽ gán bằng cách tăng 1 đơn vị mỗi lần nhấn, và trả biến này về 0 khi vượt quá số CT cần chạy.)

        b./ Run:

        Chương trình sẽ được chạy trong vòng lặp như sau. Kiểm tra biến "set_mode" nếu bằng:

        - Key set
        - Kiểm tra biến "set_mode" nếu bằng: (0 = chạy CT1 ; 1 = chạy CT2 ; 2 = chạy CT3; ................)
        - lặp lại từ Key set.

        Chúc bạn thành công.
        Last edited by pctcom; 26-08-2011, 13:05.
        PCT COMPUTER
        (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

        Comment


        • #5
          muốn led tắt hết thêm lệnh MOV P2,#00h vào đầu chương trình.
          ct trên đã chạy thử trên proteus.
          mô phong - YouTube
          |

          Comment


          • #6
            Nguyên văn bởi pctcom Xem bài viết
            Phương pháp dùng phím để chạy các CT khác nhau bạn nên làm như sau:

            a./ Phím nhấn:

            - Bạn có thể dùng nhiều phím hoặc chỉ cần dùng 1 phím để chọn CT.
            - Tạo 1 biến ví dụ "set_mode", biến này sẽ được gán giá trị tương ứng với các phím được nhấn.
            (Nếu bạn chỉ sử dụng 1 phím duy nhất thì ta sẽ gán bằng cách tăng 1 đơn vị mỗi lần nhấn, và trả biến này về 0 khi vượt quá số CT cần chạy.)

            b./ Run:

            Chương trình sẽ được chạy trong vòng lặp như sau. Kiểm tra biến "set_mode" nếu bằng:

            - Key set
            - Kiểm tra biến "set_mode" nếu bằng: (0 = chạy CT1 ; 1 = chạy CT2 ; 2 = chạy CT3; ................)
            - lặp lại từ Key set.

            Chúc bạn thành công.
            Bạn làm ơn cho mình xin một chương trình đơn giản nào đó mô tả được quá trình trên được không? Cảm ơn bạn đã giúp đỡ

            Comment


            • #7
              CODE của bạn lỗi vài chỗ ko đúng cú pháp lệnh. Với lại code này hơi bất tiện là nút bấm phải tích cực liên tục( nếu là loại nút ấn-nhả) thì LED mới chạy.

              Comment


              • #8
                Nguyên văn bởi chung1608 Xem bài viết
                CODE của bạn lỗi vài chỗ ko đúng cú pháp lệnh. Với lại code này hơi bất tiện là nút bấm phải tích cực liên tục( nếu là loại nút ấn-nhả) thì LED mới chạy.
                Mình mới đọc qua tài liệu về 8051 mà. Thế nên còn nhiều bỡ ngỡ lắm. Mong anh em nhiệt tình giúp đỡ
                Last edited by Bóng Tối 009; 26-08-2011, 17:49.

                Comment


                • #9
                  Nguyên văn bởi Bóng Tối 009 Xem bài viết
                  Mình mới đọc qua tài liệu về 8051 mà. Thế nên còn nhiều bỡ ngỡ lắm. Mong anh em nhiệt tình giúp đỡ
                  bạn viết code khác rồi có lỗi gì thì up lên để sửa đc thì sửa.

                  Comment


                  • #10
                    Nguyên văn bởi Bóng Tối 009 Xem bài viết
                    Mình mới đọc qua tài liệu về 8051 mà. Thế nên còn nhiều bỡ ngỡ lắm. Mong anh em nhiệt tình giúp đỡ
                    Bạn cần lưu ý về lệnh lấy bù cổng. Trong mạch của bạn các led có giá trị điện áp 2V sẽ bị xem như là mức 0, nên khi bạn dùng lệnh lấy bù các led này sẽ luôn sáng, bạn cần chỉnh lại mức áp của các led = 3V hoặc nối tiếp thêm với điện trở hạn dòng.

                    Code Mẫu:


                    $mod51
                    SET_MOD DATA 30H
                    ;============================
                    ORG 00H
                    MAIN:
                    MOV SET_MOD,#0
                    MOV P2,#0
                    MOV P1,#0FFH

                    LMAIN:
                    JB P1.0,KEY1 ;nhay neu nut P1.0 bang 1
                    MOV SET_MOD,#1

                    KEY1:
                    JB P1.1,KEY2 ;nhay neu nut p1.1 bang 1
                    MOV SET_MOD,#2

                    KEY2:
                    MOV A,SET_MOD
                    CJNE A,#1,NEXT
                    LCALL DK1
                    JMP LMAIN

                    NEXT:
                    MOV A,SET_MOD
                    CJNE A,#2,LMAIN
                    LCALL DK2
                    JMP LMAIN

                    ;============================
                    DELAY: ;ham tao tre
                    MOV R3,#10;
                    HERE:
                    MOV R4,#255;
                    HERE1:
                    MOV R5,#255
                    HERE2:
                    DJNZ R5,HERE2
                    DJNZ R4,HERE1;
                    DJNZ R3,HERE;
                    RET;

                    ;============================
                    DK1:
                    MOV A,#0AAH ; nap AAh vao thanh ghi A
                    MOV P2,A ; chuyen noi dung thanh ghi A ra cong P2
                    ACALL DELAY ; goi ham tre
                    MOV A,P2
                    CPL A;
                    MOV P2,A ; Dao cong P2
                    ACALL DELAY;
                    RET;

                    ;============================
                    DK2:
                    MOV P2,#0FFH;
                    ACALL DELAY;
                    MOV A,P2
                    CPL A;
                    MOV P2,A
                    ACALL DELAY;
                    RET

                    END
                    PCT COMPUTER
                    (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

                    Comment


                    • #11
                      chào mấy anh. quả là em có một chương trình mà yêu cầu cũng là nút nhấn mà em mới vào nghề không hiểu mô tê gì hết mong mấy anh giúp đỡ nhé.
                      em có 4 nút nhấn ở (p1). a, b, c, d. khi a=0, b=0, c=0 d=0 thì hiện số 1 ở (p0)và tương tự a=0,b=0,c=0,d=1 hiện số 2....đến số 9 lun. anh em nào biết giúp với

                      Comment


                      • #12
                        Nguyên văn bởi ngochuyen Xem bài viết
                        chào mấy anh. quả là em có một chương trình mà yêu cầu cũng là nút nhấn mà em mới vào nghề không hiểu mô tê gì hết mong mấy anh giúp đỡ nhé.
                        em có 4 nút nhấn ở (p1). a, b, c, d. khi a=0, b=0, c=0 d=0 thì hiện số 1 ở (p0)và tương tự a=0,b=0,c=0,d=1 hiện số 2....đến số 9 lun. anh em nào biết giúp với
                        không hiểu nhé, 0000 thì hiện số 0 mới phải chứ. Nếu như bạn thì bạn phải vẽ 1 cái bản mới biết mã nào hiện số nào chứ.
                        Thể theo yêu cầu post trước cho bạn 2 giá trị bạn ví dụ thôi. ^^!
                        Last edited by chung1608; 27-08-2011, 23:45.

                        Comment


                        • #13
                          Nguyên văn bởi pctcom Xem bài viết
                          Bạn cần lưu ý về lệnh lấy bù cổng. Trong mạch của bạn các led có giá trị điện áp 2V sẽ bị xem như là mức 0, nên khi bạn dùng lệnh lấy bù các led này sẽ luôn sáng, bạn cần chỉnh lại mức áp của các led = 3V hoặc nối tiếp thêm với điện trở hạn dòng.

                          Code Mẫu:
                          $mod51
                          SET_MOD DATA 30H
                          ;============================
                          ORG 00H
                          MAIN:
                          MOV SET_MOD,#0
                          MOV P2,#0
                          MOV P1,#0FFH

                          LMAIN:
                          JB P1.0,KEY1 ;nhay neu nut P1.0 bang 1
                          MOV SET_MOD,#1

                          KEY1:
                          JB P1.1,KEY2 ;nhay neu nut p1.1 bang 1
                          MOV SET_MOD,#2

                          KEY2:
                          MOV A,SET_MOD
                          CJNE A,#1,NEXT
                          LCALL DK1
                          JMP LMAIN

                          NEXT:
                          MOV A,SET_MOD
                          CJNE A,#2,LMAIN
                          LCALL DK2
                          JMP LMAIN

                          ;============================
                          DELAY: ;ham tao tre
                          MOV R3,#10;
                          HERE:
                          MOV R4,#255;
                          HERE1:
                          MOV R5,#255
                          HERE2:
                          DJNZ R5,HERE2
                          DJNZ R4,HERE1;
                          DJNZ R3,HERE;
                          RET;

                          ;============================
                          DK1:
                          MOV A,#0AAH ; nap AAh vao thanh ghi A
                          MOV P2,A ; chuyen noi dung thanh ghi A ra cong P2
                          ACALL DELAY ; goi ham tre
                          MOV A,P2
                          CPL A;
                          MOV P2,A ; Dao cong P2
                          ACALL DELAY;
                          RET;

                          ;============================
                          DK2:
                          MOV P2,#0FFH;
                          ACALL DELAY;
                          MOV A,P2
                          CPL A;
                          MOV P2,A
                          ACALL DELAY;
                          RET

                          END
                          Rất cảm ơn bạn đã giúp đỡ nhưng mình thấy code này chưa chính xác lắm. Cụ thể các đèn nháy không đúng theo như trạng thái đã đặt. Mình xin sửa lại đôi chút về phần ĐK1 và ĐK2 .

                          $mod51
                          SET_MOD DATA 30H
                          ;============================
                          ORG 00H
                          MAIN:
                          MOV SET_MOD,#0
                          MOV P2,#0
                          MOV P1,#0FFH

                          LMAIN:
                          JB P1.0,KEY1 ;nhay neu nut P1.0 bang 1
                          MOV SET_MOD,#1

                          KEY1:
                          JB P1.1,KEY2 ;nhay neu nut p1.1 bang 1
                          MOV SET_MOD,#2

                          KEY2:
                          MOV A,SET_MOD
                          CJNE A,#1,NEXT
                          LCALL DK1
                          JMP LMAIN

                          NEXT:
                          MOV A,SET_MOD
                          CJNE A,#2,LMAIN
                          LCALL DK2
                          JMP LMAIN

                          ;============================
                          DELAY: ;ham tao tre
                          MOV R3,#10;
                          HERE:
                          MOV R4,#255;
                          HERE1:
                          MOV R5,#255
                          HERE2:
                          DJNZ R5,HERE2
                          DJNZ R4,HERE1;
                          DJNZ R3,HERE;
                          RET;

                          ;============================
                          DK1:
                          MOV A,#0AAH ; nap AAh vao thanh ghi A
                          MOV P2,A ; chuyen noi dung thanh ghi A ra cong P2
                          ACALL DELAY ; goi ham tre
                          CPL A;
                          MOV P2,A ; Dao cong P2
                          ACALL DELAY;
                          RET;

                          ;============================
                          DK2:
                          MOV A,#0FFH;
                          MOV P2,A;
                          ACALL DELAY;
                          CPL A;
                          MOV P2,A
                          ACALL DELAY;
                          RET

                          END
                          Last edited by Bóng Tối 009; 30-08-2011, 17:49.

                          Comment


                          • #14
                            Nguyên văn bởi Bóng Tối 009 Xem bài viết
                            Rất cảm ơn bạn đã giúp đỡ nhưng mình thấy code này chưa chính xác lắm. Cụ thể các đèn nháy không đúng theo như trạng thái đã đặt. Mình xin sửa lại đôi chút về phần ĐK1 và ĐK2 .
                            chắc hok đó sao tui đọc code này thấy chuyển đổi giữa 2 dk bình thường mà, đè nút bấm lâu 1 tí đi

                            Comment


                            • #15
                              Nguyên văn bởi Bóng Tối 009 Xem bài viết
                              Rất cảm ơn bạn đã giúp đỡ nhưng mình thấy code này chưa chính xác lắm. Cụ thể các đèn nháy không đúng theo như trạng thái đã đặt. Mình xin sửa lại đôi chút về phần ĐK1 và ĐK2 .
                              với code nháy đơn giản như trên chỉ cần code như sau là ổn:

                              DK1:
                              MOV A,#0AAH ; nap AAh vao thanh ghi A
                              MOV P2,A ; chuyen noi dung thanh ghi A ra cong P2
                              ACALL DELAY ; goi ham tre

                              MOV A,#55H ; nap AAh vao thanh ghi A
                              MOV P2,A ; chuyen noi dung thanh ghi A ra cong P2
                              ACALL DELAY ; goi ham tre

                              ret;
                              Last edited by pctcom; 06-09-2011, 11:37.
                              PCT COMPUTER
                              (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

                              Comment

                              Về tác giả

                              Collapse

                              Bóng Tối 009 Tìm hiểu thêm về Bóng Tối 009

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

                              Collapse

                              Đang tải...
                              X