Thông báo

Collapse
No announcement yet.

Đếm phút giây. Quét 8 led 7 đoạn. Lệnh $+3. PRo nào giúp mình với

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

  • Đếm phút giây. Quét 8 led 7 đoạn. Lệnh $+3. PRo nào giúp mình với

    Chào các bạn.
    Mình đọc code bài: Đếm chính xác phút giây, quét led 7 đoạn. Và mình không hiểu $ + 3 là gì?
    với lại lệnh JC LB2 dùng để làm gì. MÌnh thấy sử dung bộ đếm đâu tác động đến cờ CY sao lại có lệnh JC trong code này. Cám ơn các bạn nhiều nha!!!!!

    ;CHUONG TRINH DEM PHUT
    BDN EQU R1
    GIAY EQU R2
    PHUT EQU R3
    ;------------------
    ORG 0000H
    JMP LB
    ;---------------CHUONG TRINH NGAT----------
    ORG 000BH
    INC BDN
    MOV TH0,#HIGH(-50000)
    MOV TL0,#LOW(=50000)
    RETI
    ;---------------------
    LB:
    MOV DPTR,#MA7DOAN
    MOV TMOD,#01H
    MOV IE,#10000010B
    SETB TR0
    MOV BDN,#00H

    LB3:
    MOV PHUT,#00H
    LB0:
    MOV GIAY,#00H
    LB1:
    CALL HEXTOBCD
    CALL GIAIMA ;CHUONG TRINH CXEM NHU CO SAN
    MOV 32H,#10111111B

    LB2:
    CALL HIENTHI ;CHUONG TRINH XEM NHU CO SAN
    CJNE BDN,#20,$+3
    JC LB2

    MOV BDN,#0
    INC GIAY
    CJNE GIAY,#60,LB1

    INC PHUT
    CJNE PHUT,#60,LB0
    JMP LB3

    ;--------------------
    HEXTOBCD:
    MOV A,GIAY
    MOV B,#10
    DIV AB
    MOV 20H,B
    MOV 21H,A

    MOV A,PHUT
    MOV B,#10
    DIV AB
    MOV 23H,B
    MOV 24H,A
    RET

    GIAIMA:
    MOV A,24H
    MOVC A,@A+DPTR
    MOV 34H,A
    RET

    END
    Attached Files

  • #2
    code này bạn lấy ở đâu.
    Chỗ $+3 là ko có ý nghĩa, nó chỉ là 1 cái nhãn nhưng mà ko thấy trong code

    Comment


    • #3
      Nguyên văn bởi ronaldodtvt Xem bài viết
      Chào các bạn.
      Mình đọc code bài: Đếm chính xác phút giây, quét led 7 đoạn. Và mình không hiểu $ + 3 là gì?
      với lại lệnh JC LB2 dùng để làm gì. MÌnh thấy sử dung bộ đếm đâu tác động đến cờ CY sao lại có lệnh JC trong code này. Cám ơn các bạn nhiều nha!!!!!

      ;CHUONG TRINH DEM PHUT
      BDN EQU R1
      GIAY EQU R2
      PHUT EQU R3
      ;------------------
      ORG 0000H
      JMP LB
      ;---------------CHUONG TRINH NGAT----------
      ORG 000BH
      INC BDN
      MOV TH0,#HIGH(-50000)
      MOV TL0,#LOW(=50000)
      RETI
      ;---------------------
      LB:
      MOV DPTR,#MA7DOAN
      MOV TMOD,#01H
      MOV IE,#10000010B
      SETB TR0
      MOV BDN,#00H

      LB3:
      MOV PHUT,#00H
      LB0:
      MOV GIAY,#00H
      LB1:
      CALL HEXTOBCD
      CALL GIAIMA ;CHUONG TRINH CXEM NHU CO SAN
      MOV 32H,#10111111B

      LB2:
      CALL HIENTHI ;CHUONG TRINH XEM NHU CO SAN
      CJNE BDN,#20,$+3
      JC LB2

      MOV BDN,#0
      INC GIAY
      CJNE GIAY,#60,LB1

      INC PHUT
      CJNE PHUT,#60,LB0
      JMP LB3

      ;--------------------
      HEXTOBCD:
      MOV A,GIAY
      MOV B,#10
      DIV AB
      MOV 20H,B
      MOV 21H,A

      MOV A,PHUT
      MOV B,#10
      DIV AB
      MOV 23H,B
      MOV 24H,A
      RET

      GIAIMA:
      MOV A,24H
      MOVC A,@A+DPTR
      MOV 34H,A
      RET

      END
      CJNE BDN,#20,$+3;chưa bằng thì nhảy đếm chỗ aaa
      JC LB2

      MOV BDN,#0
      INC GIAY;aaa
      CJNE GIAY,#60,LB1

      INC PHUT
      CJNE PHUT,#60,LB0
      JMP LB3
      |

      Comment


      • #4
        Nguyên văn bởi tdm Xem bài viết
        CJNE BDN,#20,$+3;chưa bằng thì nhảy đếm chỗ aaa
        JC LB2

        MOV BDN,#0
        INC GIAY;aaa
        CJNE GIAY,#60,LB1

        INC PHUT
        CJNE PHUT,#60,LB0
        JMP LB3
        ồ thế à, nếu nhảy tới chỗ aaa thì 1Sec sẽ tương đương gần bằng 50mSec => xúi bậy
        code này đếm cũng ko có chính xác. Dù có tính toán chi li tới cỡ nào đi nữa (chấp thạch anh cực chính xác luôn), dùng ngắt thì ko bao giờ có thể gọi là đếm giây chính xác

        Comment


        • #5
          Nguyên văn bởi chung1608 Xem bài viết
          code này bạn lấy ở đâu.
          Chỗ $+3 là ko có ý nghĩa, nó chỉ là 1 cái nhãn nhưng mà ko thấy trong code
          code này mình lấy trong bài tập thực hành vi xử lý. code mẫu chỉ cần đọc code hiểu code và nạp vào bộ Kit thực tế. Rồi dựa vào đó làm bài tập khác!!!

          Comment


          • #6
            Mình cũng nghỉ nhảy đến aaa như bạn nhưng mình thấy nếu vậy thì bộ đếm đâu đếm đủ 1s. Còn lệnh JC LB2 nằm ở đó chẳng biết làm gì nữa

            Comment


            • #7
              Nguyên văn bởi chung1608 Xem bài viết
              ồ thế à, nếu nhảy tới chỗ aaa thì 1sec sẽ tương đương gần bằng 50msec => xúi bậy
              code này đếm cũng ko có chính xác. Dù có tính toán chi li tới cỡ nào đi nữa (chấp thạch anh cực chính xác luôn), dùng ngắt thì ko bao giờ có thể gọi là đếm giây chính xác
              bạn có vẻ rành asm nhỉ.
              Last edited by tdm; 12-10-2011, 22:27.
              |

              Comment


              • #8
                Nguyên văn bởi ronaldodtvt Xem bài viết
                Mình cũng nghỉ nhảy đến aaa như bạn nhưng mình thấy nếu vậy thì bộ đếm đâu đếm đủ 1s. Còn lệnh JC LB2 nằm ở đó chẳng biết làm gì nữa



                LB2:
                CALL HIENTHI ;CHUONG TRINH XEM NHU CO SAN
                CJNE BDN,#20,$+3
                JC LB2

                ****
                lệnh CJNE so sánh 2 toán hạng BDN và #20 rồi rẽ nhánh đến địa chỉ được chỉ ra trong lệnh nếu giá trị 2 toán hạng nay không bằng nhau

                --cờ CY=1 nếu giá trị nguyên không dấu của BDN nhỏ hơn #20
                --cờ CY=0 nếu giá trị nguyên không dấu của BDN lớn hơn #20

                lệnh trên có ý nghĩa là nhảy đến nhãn lb2 nếu BDN <#20
                (kí hiệu $ là kí hiệu của trình hợp ngữ chỉ địa chỉ của lệnh hiển hành [CJNE có độ dài lệnh là 3BYTE nên $+3 sẽ là địa chỉ của lệnh tiếp theo CJNE tức là lệnh jc LB2 ])

                Comment


                • #9
                  Nguyên văn bởi h_m9988 Xem bài viết
                  LB2:
                  CALL HIENTHI ;CHUONG TRINH XEM NHU CO SAN
                  CJNE BDN,#20,$+3
                  JC LB2

                  ****
                  lệnh CJNE so sánh 2 toán hạng BDN và #20 rồi rẽ nhánh đến địa chỉ được chỉ ra trong lệnh nếu giá trị 2 toán hạng nay không bằng nhau

                  --cờ CY=1 nếu giá trị nguyên không dấu của BDN nhỏ hơn #20
                  --cờ CY=0 nếu giá trị nguyên không dấu của BDN lớn hơn #20

                  lệnh trên có ý nghĩa là nhảy đến nhãn lb2 nếu BDN <#20
                  (kí hiệu $ là kí hiệu của trình hợp ngữ chỉ địa chỉ của lệnh hiển hành [CJNE có độ dài lệnh là 3BYTE nên $+3 sẽ là địa chỉ của lệnh tiếp theo CJNE tức là lệnh jc LB2 ])
                  mô phỏng thử đoạn code thấy đúng như vậy.
                  Code:
                    mov p3,#00
                    mov p2,#00
                    mov a,#00  
                  bd:  
                       cjne a,#20,$+3
                        mov p3,#129  
                         nop       
                        nop
                         mov p2,#128
                          jmp    bd                    ;nhay ve nhan bd
                  |

                  Comment


                  • #10
                    Nguyên văn bởi tdm Xem bài viết
                    mô phỏng thử đoạn code thấy đúng như vậy.
                    Code:
                      mov p3,#00
                      mov p2,#00
                      mov a,#00  
                    bd:  
                         cjne a,#20,$+3
                          mov p3,#129  
                           nop       
                          nop
                           mov p2,#128
                            jmp    bd                    ;nhay ve nhan bd

                    code tren phải viết như vầy mới nêu bật lên được ứng dụng so sánh của câu lệnh cjne a,#20,$+3

                    mov p2,#00
                    mov a,#00 ; a> 20 thì mov p2,#129 a< 20 thì mov p2,#128
                    bd:
                    cjne a,#20,$+3
                    jc nho_hon_20
                    mov p2,#129
                    jmp bd
                    nho_hon_20:
                    mov p2,#128

                    jmp bd
                    end




                    khi lệnh cjne a,#20,$+3 thực thi thi lúc nào nó cũng sẽ nhảy xuống lệnh dưới nó ,chủ chốt ở đây phải có lệnh jc ở dưới lệnh cjne a,#20,$+3 để so sánh cờ nhớ CY

                    Comment


                    • #11
                      Vậy bạn cho mình hỏi? Tại sao mình không sử dụng lệnh LB2: CALL HIENTHI
                      CJNE BDN,#20,LB2.
                      và mình bỏ đi lệnh JC LB2.

                      Comment


                      • #12
                        Nguyên văn bởi ronaldodtvt Xem bài viết
                        Vậy bạn cho mình hỏi? Tại sao mình không sử dụng lệnh LB2: CALL HIENTHI
                        CJNE BDN,#20,LB2.
                        và mình bỏ đi lệnh JC LB2.
                        tùy cách lâp trình của mỗi người mà ta có cách viết khác nhau miễn sao đạt mục đích của mình thôi bạn (nhiều khi mình đang lâp trình tự nhiên thấy đoạn code đó lóe lên trong đầu nên cho vào luôn ,có thể sau này họ xem lại và thấy code tốn thời gian xử lý rồi họ sửa lại cho tốt hơn thì sao)

                        nhiều khi thông minh đột xuất ngu bất thình lình

                        Comment


                        • #13
                          Có lẽ như bạn nói. Những người đang học và làm vi xử lý nhiều khi suy nghĩ vấn đề phức tạp trong khi cách giải quyết đơn giản thì lại không nghĩ ra. hihihihi

                          Comment


                          • #14
                            Cảm ơn tất cả các bạn đã giúp mình giả đáp nha!!! cảm ơn lần sau hỏi mấy pro nữa. hihi

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X