Thông báo

Collapse
No announcement yet.

so sánh lớn hơn,nhỏ hơn trong ASM

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

  • so sánh lớn hơn,nhỏ hơn trong ASM

    có bác nào biết cách viết asm để so sánh lớn hơn hay nhỏ hơn giá trị định sẵn không?làm ơn cho mình xin code.CÁM ƠN NHIỀU !!!!!!!!

  • #2
    Nguyên văn bởi thaithanhtam Xem bài viết
    có bác nào biết cách viết asm để so sánh lớn hơn hay nhỏ hơn giá trị định sẵn không?làm ơn cho mình xin code.CÁM ƠN NHIỀU !!!!!!!!
    Mẫu đây bạn ạ:
    nguong equ 100 ; dat nguong theo yeu cau
    mov A,giatricansosanh
    cjne A,#nguong,khac_nguong
    khac_nguong:
    ;if A < nguong thi C=1
    JC nho_hon
    ;A>=nguong
    ; Place your code here for >= nguong
    sjmp end_sosanh
    nho_hon:
    ; Place your code here for < nguong
    end_sosanh:
    Last edited by hoctro89xxx; 08-06-2008, 23:55. Lý do: cjne viết thành cnje

    email:mahaco@fpt.vn

    Comment


    • #3
      Nguyên văn bởi thaithanhtam Xem bài viết
      có bác nào biết cách viết asm để so sánh lớn hơn hay nhỏ hơn giá trị định sẵn không?làm ơn cho mình xin code.CÁM ƠN NHIỀU !!!!!!!!
      Trong sách của thầy Tống Văn On có 1 phần định nghĩa Macro, chỉ cần định nghĩa 1 lần là sử dụng nhiều lần mà không sợ bị nhầm lẫn.
      Ví dụ cho "nhảy nếu A lớn hơn"
      Code:
       ;định nghĩa Macro
       %*DEFINE (JGT(VALUE, LABEL)) (
                        CJNE      A, #%VALUE+1, $+3
                        JNC       %LABEL
                       )
      ;Xong, giời thì sử dụng, so sánh A, và 1 số
      %JGT(55H, LON_HON)
      ;Chỗ này dành cho chương trình nếu A nhỏ hơn
      ;....
      
      LON_HON:
      ;Chỗ này dành cho chương trình nếu lớn hơn
      ...
      Bạn có thể xem chi tiết cách giải thích trong cuống Vi Điều Khiển họ 8051 của thầy Tống Văn On, trang 174
      Diễn đàn Vi điều khiển:

      Comment


      • #4
        cám ơn hai bạn,nhưng mình không biết c,mình muốn hỏi code viết bằng asm.các bạn có thì cho mình xin nhe,cám ơn nhiều lắm.

        Comment


        • #5
          nhưng giá trị a của mình luôn biến thiên các bạn ơi,giúp mình nhe!!!!!

          Comment


          • #6
            2 Ví dụ trên đều là ASM (cái sau viết theo marco), không phải C.
            A vẫn là biến, "nguong" hoặc "value" là giá trị cónst. để so sánh.
            Bạn đọc kỹ Ví dụ trên có thắc mắc thì hỏi tiếp. Thân

            Comment


            • #7
              Nguyên văn bởi thaithanhtam Xem bài viết
              nhưng giá trị a của mình luôn biến thiên các bạn ơi,giúp mình nhe!!!!!
              nguong equ 100 ; dat nguong theo yeu cau
              mov A,giatricansosanh
              giatricansosanh luôn biến thiên theo ý bạn mà, nó là 1 biến chiếm 1 ô nhớ 1 byte trong RAM.
              Bạn hãy học ASM hơn nữa nhé, kiến thức của bạn thấy không ổn!

              email:mahaco@fpt.vn

              Comment


              • #8
                Nguyên văn bởi hoctro89xxx Xem bài viết
                Mẫu đây bạn ạ:
                nguong equ 100 ; dat nguong theo yeu cau
                mov A,giatricansosanh
                cjne A,#nguong,khac_nguong ;(Cái này là so sánh với 100 chứ không phải so sánh với giá trị chứa trong ô nhớ địa chỉ 100)
                khac_nguong:
                ;if A < nguong thi C=1
                JC nho_hon
                ;A>=nguong
                ; Place your code here for >= nguong
                sjmp end_sosanh
                nho_hon:
                ; Place your code here for < nguong
                end_sosanh:
                Nhu thế này thì chính xác hơn
                nguong equ 100 ; dat nguong theo yeu cau(hằng số so sanh sẽ chứa trong ô nhớ 100
                giatricansosanh equ 20h; them như vấy cho bạn ấy dể hiểu(biến để so sánh chứa trong ô nhớ 20h)
                mov A,giatricansosanh
                cjne A,nguong,khac_nguong
                khac_nguong:
                ;if A < nguong thi C=1
                JC nho_hon
                ;A>=nguong
                ; Place your code here for >= nguong
                sjmp end_sosanh
                nho_hon:
                ; Place your code here for < nguong
                end_sosanh:
                Last edited by phienbinh; 09-06-2008, 14:23.

                Comment


                • #9
                  Nguyên văn bởi thaithanhtam Xem bài viết
                  cám ơn hai bạn,nhưng mình không biết c,mình muốn hỏi code viết bằng asm.các bạn có thì cho mình xin nhe,cám ơn nhiều lắm.
                  bạn học vi xử lý và đặt những câu hỏi thế này mà chưa phân biệt lệnh viết bằng C hay asm thì tui thấy bạn chưa biết nhiều về vi xử lý, nên cho dù các bạn khác trả lời bạn đúng và rõ ràng như thế mà bạn cũng không hiểu. Cần cố gắng nhiều hơn nữa.

                  Comment


                  • #10
                    Nguyên văn bởi thaithanhtam Xem bài viết
                    có bác nào biết cách viết asm để so sánh lớn hơn hay nhỏ hơn giá trị định sẵn không?làm ơn cho mình xin code.CÁM ƠN NHIỀU !!!!!!!!
                    Mình có cách này có lẽ dễ hiểu hơn, mọi người xem thủ nhé:
                    nguong equ r1
                    giatricanss equ r2
                    ..............................
                    mov a,nguong
                    sub a,giatricanss
                    jc nhohon ;kiểm tra co c để biết giá trị lớn hơn, bằng, hay nhỏ hơn
                    jz bang ; kiểm tra co z de biet gia tri co bang hay khong
                    ;nếu giatricanss lon hon nguong làm lệnh kế

                    Ở đây mình dùng lệnh SUB(trừ), lấy giá trị cần so sánh trừ cho ngưỡng, nếu kết quả lớn hơn hoặc bằng thì cờ c = 0, nếu kết quả nhỏ hơn thì cờ c = 1. Như vậy chúng ta đi kiểm tra cờ c thì sẽ biết kết quả lớn hơn hoặc bằng hay nhỏ hơn. Để biết kết quả có bằng không thì ta kiểm tra cờ z, nếu bằng thì cờ z = 1.

                    Comment


                    • #11
                      cám ơn các bạn nhiều,mình mới nhập môn mong các bạn giúp đỡ nhiều.
                      các bạn giải thích giùm cách dùng các cờ nhớ giúp mình nhé.khi nào thì cờ c=0 & khi nào cờ c=1,nếu có tài lệu cho mình xin với.
                      mail mình là:tam0903184486@yahoo.com.vn
                      cám ơn trước !!!!!

                      Comment


                      • #12
                        hi.. chắc bạn mới đụng vào 89, mà bạn có tài liệu nào về tập lệnh của 89 ko, của thầy tống văn on hoặc các tài liệu trong các trường đại học chẳng hạn.
                        bạn coi kĩ chỗ giải thích cho lệnh CJNE ở trang 278 trong sách của thầy tống văn on.

                        cjne x,y,nhãn

                        x khác y thì nhảy đến nhãn
                        x=y thì thực hiện lệnh kế.
                        đồng thời:
                        c=1 nếu x<y
                        c=0 nếu x>=y

                        trong đó
                        x là a,Rn hoặc @Ri
                        y là data,Rn...
                        nhãn: là tên nhãn bạn đặt ở đâu mà muốn chương trình nhảy tới.
                        và giá trị so sánh ở đây là giá trị nguyên không dấu 8 bit (0-255)

                        Comment


                        • #13
                          bạn cho hỏi có cách nào chống nhiểu cho ngắt ngoài không,mình viết chương trình sử dụng ngắt ngoài để đếm một số,mổi lần có ngắt thì đếm lên 1 nhưng khi đưa ra board tex
                          thì đếm mấy số một lượt luôn.không biết cách chống nhiểu ra sao,mong bạn hướng dẫn giúp.thank

                          Comment


                          • #14
                            Ngoài chống nhiễu ở phần cứng, thì ở phần mềm bạn viết đoạn code kiểm tra tồn tại của tín hiệu tại cổng nhận sau 1 thời gian nhất định (thường nhiễu có biên độ cao nhưng thời gian tồn tại ngắn), trong thời gian kiểm tra nếu vẫn tồn tại liên tục thì nhận nó là tín hiệu, ngược lại thì coi là nhiểu.
                            Thí dụ, sau khi vào ngắt ( chân INT0, active logic = 0):
                            push r0
                            move r0 # 50
                            loop1: jb INT0, loop2 ; if INT0=1 > nhiểu, nhảy đến loop2 (bỏ qua).
                            djnz r0, loop1
                            ------ ; tín hiệu thật vào xử lý
                            ------
                            loop2: pop r0
                            reti
                            Bạn thử xem.

                            Comment


                            • #15
                              CÁM ƠN CÁC BẠN,BÀI TOÁN CHỐNG NHIỂU CHO NGẮT MÌNH ĐÃ GIẢI QUYẾT XONG RỒI.
                              Mình chọn ngắt theo mức & cho kiểm tra khi chân ngắt về lại mức 1 mình cho delay khoảng 50ms xong mới thực hiện lệnh trong ngắt,hết nhiểu các bạn ạ.
                              Last edited by thaithanhtam; 23-06-2008, 22:49.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X