Thông báo

Collapse
No announcement yet.

help code asm 8951

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

  • #31
    bạn giải thích cho mình tại sao lại là "$+3" được không?
    tại sao bạn không dùng nhãn cụ thể mà lại ghi là "$+3", bạn có chắc chắn là nó nhảy đến chỗ mong muốn!

    Comment


    • #32
      $+3 là thực thi lệnh kế tiếp. cái này là mình muốn so sánh nhỏ hơn hay lớn hơn vì lệnh cjne liên quan đến cờ c để so sánh giá trị lớn hay nhỏ nên mình mới dùng
      |

      Comment


      • #33
        mình nghĩ bạn nên viết lại đoạn so sánh đi:
        -với CJNE thì khi hai giá trị so sánh khác nhau thì nhảy đến nhãn, nếu hai giá trị bằng nhau thì sẽ thực hiện lệnh kế tiếp. ( nếu trong c.trình của bạn $+3 là lệnh kế tiếp, thì nếu a và temp bằng nhau nó cũng thực hiện lệnh kế tiếp, chứ không phải khác nhau mới thực hiện lệnh sau CJNE)
        -đoạn nào là chương trình còn thì mới dùng RET
        -với lệnh nhảy JMP (hay LJMP) thì chỉ nạp giá trị PC để nhảy tới vị trị mong muồn thôi, không phải PUSH địa chỉ lệnh tiếp theo vào Satck nên dùng RET khi nhảy tới một đoạn chương trình sẽ nạp lại giá trị không phải là giá trị của lệnh tiếp theo trước khi nhảy của PC. nên sẽ Return về chỗ không mong muốn.

        Comment


        • #34
          Code:
              clr     c
              mov a,50h
              cjne    a,temp,$+3
              call        nhay1
              clr        c
              mov a,51h
              cjne    a,temp,$+3
              call     nhay2
              clr     c
          .................
          nhay1:jc    relay
          clr p0.0
          ret
          relay:
          setb p0.0
          ret
          nhay2:jnc    alarm
          clr p0.1
          ret
          alarm:
          setb p0.1
          ret
          mình viết sai 2 lệnh này nên nó mới hok thực hiện lệnh giờ thì nó ok rồi nhưng có 1 điều là nó nhảy loạn cả lên nhờ bác giúp với.
          Last edited by ozonedark2; 10-07-2012, 13:32.
          |

          Comment


          • #35
            Nguyên văn bởi ozonedark2 Xem bài viết
            Code:
                clr     c
                mov a,50h
                cjne    a,temp,$+3
                call        nhay1
                clr        c
                mov a,51h
                cjne    a,temp,$+3
                call     nhay2
                clr     c
            .................
            nhay1:jc    relay
            clr p0.0
            ret
            relay:
            setb p0.0
            ret
            nhay2:jnc    alarm
            clr p0.1
            ret
            alarm:
            setb p0.1
            ret
            mình viết sai 2 lệnh này nên nó mới hok thực hiện lệnh giờ thì nó ok rồi nhưng có 1 điều là nó nhảy loạn cả lên nhờ bác giúp với.
            Bạn đã sửa rồi thì sữa cho chót đi:
            - muốn nó nhảy đến đâu thì ghi rõ ra
            - với logic thì chỉ có hoặc là 1 hoặc là 0 thôi, nên mấy cái lệnh so sánh bạn không cần phải viết kiểu thế này cho rườm rà ra:
            Code:
            jb mode,nhietdo_dat2
            call delayled
            jnb mode,thoat
            thoat:
            ret
            nếu như mod=1 thì nhảy tới nhiệt độ đặt 2, còn bằng 0 thì thoát, không cần phải kiểm tra jnb mode,thoat nữa ( giả sử đến đoạn jb mode,nhietdo_dat2 mode nó là 0, thì đến đoạn tiếp theo, mode có bằng 1 nó cũng thoát chứ không phải là phải chờ bằng không đâu-jnb mode,thoat)
            - tiếp là mình đã nói với bạn rồi, khi nào mà bạn CALL thì mới RET
            chứ như trên của bạn:
            Code:
            .................
            nhay1:jc    relay
            clr p0.0
            ret
            relay:
            setb p0.0
            ret
            nhay2:jnc    alarm
            clr p0.1
            ret
            alarm:
            setb p0.1
            ret
            bạn nhảy tới, thế RET về đâu đây? có phải CALL đâu mà nó cất giá trị PC vào STACK để mà gọi lại.

            Comment


            • #36
              Nguyên văn bởi hoadang Xem bài viết
              Bạn đã sửa rồi thì sữa cho chót đi:
              - muốn nó nhảy đến đâu thì ghi rõ ra
              - với logic thì chỉ có hoặc là 1 hoặc là 0 thôi, nên mấy cái lệnh so sánh bạn không cần phải viết kiểu thế này cho rườm rà ra:
              Code:
              jb mode,nhietdo_dat2
              call delayled
              jnb mode,thoat
              thoat:
              ret
              nếu như mod=1 thì nhảy tới nhiệt độ đặt 2, còn bằng 0 thì thoát, không cần phải kiểm tra jnb mode,thoat nữa ( giả sử đến đoạn jb mode,nhietdo_dat2 mode nó là 0, thì đến đoạn tiếp theo, mode có bằng 1 nó cũng thoát chứ không phải là phải chờ bằng không đâu-jnb mode,thoat)
              - tiếp là mình đã nói với bạn rồi, khi nào mà bạn CALL thì mới RET
              chứ như trên của bạn:
              Code:
              .................
              nhay1:jc    relay
              clr p0.0
              ret
              relay:
              setb p0.0
              ret
              nhay2:jnc    alarm
              clr p0.1
              ret
              alarm:
              setb p0.1
              ret
              bạn nhảy tới, thế RET về đâu đây? có phải CALL đâu mà nó cất giá trị PC vào STACK để mà gọi lại.
              cái lệnh cjne a,temp,$+3 như mình nói ở trên $+3 là thực hiện lệnh kế ( bất kể nó có bằng hay không thì vẫn thực hiện lệnh kế ) tức là thực hiện lệnh call nhay1 ( ở đây mình sẽ kiểm tra cờ c nếu a lớn hơn hay bằng temp thì c = 0 còn nhỏ hơn thì c = 1 ) mình nghĩ là nó sẽ ret về sau lệnh call nhay1 để thực hiện tiếp chương trình nếu mình nói có gì sai xin bạn sửa dùm vì mình còn gà lắm
              bên dưới là chương trình mình đã sửa bác thử đặt nhiệt độ thấp rồi đặt nhiệt độ cao rồi chỉnh nhiệt độ thực thấp hơn nhiệt độ đặt thấp rồi chỉnh lại cho nhiệt độ thực cao hơn nhiệt độ đặt thấp xem thay đổi của nó đi, nó nhảy loạn cả lên luôn
              Attached Files
              Last edited by ozonedark2; 10-07-2012, 19:07.
              |

              Comment


              • #37
                Code:
                HIENTHI:
                	CALL	HIEU_CHINH
                	CALL	KIEMTRA
                	CALL	OUTLED
                RET
                sosanh:
                	clr 	c
                	mov a,50h
                	cjne	a,temp,nhay1
                	clr		c
                	mov a,51h
                	cjne	a,temp,nhay2
                	clr 	c
                	ret
                nhay1:jc	relay
                setb p0.0
                call delay1s
                ret
                relay:
                clr p0.0
                ret
                nhay2:jnc	alarm
                clr p0.1
                call delay1s
                ret
                alarm:
                setb p0.1
                ret
                Đây là đoạn chương trình mới của bạn,( đoạn chương trình so sánh). Thì như mình đã nói, nhưng bạn sửa lại thì chưa sửa hết:
                -khi gọi hàm con call sosanh thì thực hiện các lệnh bắt đầu từ nhãn sosanh: và cho tới khi đến lệnh CJNE đầu tiên thì như sau:
                - Nếu a=temp thì sẽ thực hiện tiếp lệnh sau CJNE A,TEMP,NHAY1
                - Nếu khác thì nhảy tới nhay1: và thực hiện các lệnh bắt đầu từ đây, nhưng sau khi thực hiện xong, bạn lại dùng ret, như vậy chương trình sẽ nhảy về thực hiện tiếp lệnh sau lệnh call sosanh mà không phải nhảy về thực hiện tiếp lệnh sau CJNE A,TEMP,NHAY1 là lệnh clr c
                - tương tự cho lệnh CJNE sau, khi thực hiện lệnh RET thì giá trị của PC sẽ được nạp bằng giá trị cất trong Stack trước đó, đó là lý do tại sao khi thực hiện xong lệnh trong đoạn nhay1: thì quay về chương trình chính luôn mà không thực hiện tiếp các lệnh trong đoạn sosanh:

                Comment


                • #38
                  bác nói rất đúng
                  em đã sửa lại rồi bây giờ thì ok không chỗ chê nhưng led hơi nháy (chắc phải sửa delay lại tí là được ) típ sau chắc em sẽ nâng cấp nó lên dùng thêm rom 24c02 để lưu giá trị đặt nhân đây cho em hỏi không biết protues có mô phỏng được con rom này không
                  Last edited by ozonedark2; 11-07-2012, 08:34.
                  |

                  Comment


                  • #39
                    nãy giờ mới để ý cái log mô phỏng bác xem thử xem nó cảnh báo vậy có ảnh hưởng tới mạch thực không
                    Attached Files
                    |

                    Comment


                    • #40
                      Nguyên văn bởi ozonedark2 Xem bài viết
                      nãy giờ mới để ý cái log mô phỏng bác xem thử xem nó cảnh báo vậy có ảnh hưởng tới mạch thực không
                      Cái này mình cũng không biết, chưa gặp bao giờ. thử hỏi cao thủ nào xem, không thì làm thật mới biết thế nào thôi.

                      Comment


                      • #41
                        Chào A ozonedark2. E thấy đề tài of A đang viết rất hay. A có thể chia sẻ trương chình of A cho e và mọi người biết để tham khảo thêm được không ạ.

                        Comment


                        • #42
                          Nguyên văn bởi ozonedark2 Xem bài viết
                          nãy giờ mới để ý cái log mô phỏng bác xem thử xem nó cảnh báo vậy có ảnh hưởng tới mạch thực không
                          a ơi, chương trình a post, phần đọc nhiệt độ đã chuẩn chưa ạ?
                          sao e ko mô phỏng đc nhỉ.hjc

                          Comment


                          • #43
                            Nguyên văn bởi ozonedark2 Xem bài viết
                            cái lệnh cjne a,temp,$+3 như mình nói ở trên $+3 là thực hiện lệnh kế ( bất kể nó có bằng hay không thì vẫn thực hiện lệnh kế ) tức là thực hiện lệnh call nhay1 ( ở đây mình sẽ kiểm tra cờ c nếu a lớn hơn hay bằng temp thì c = 0 còn nhỏ hơn thì c = 1 ) mình nghĩ là nó sẽ ret về sau lệnh call nhay1 để thực hiện tiếp chương trình nếu mình nói có gì sai xin bạn sửa dùm vì mình còn gà lắm
                            bên dưới là chương trình mình đã sửa bác thử đặt nhiệt độ thấp rồi đặt nhiệt độ cao rồi chỉnh nhiệt độ thực thấp hơn nhiệt độ đặt thấp rồi chỉnh lại cho nhiệt độ thực cao hơn nhiệt độ đặt thấp xem thay đổi của nó đi, nó nhảy loạn cả lên luôn
                            a ơi, trong chương trình có đoạn :

                            KIEMTRA: ;hieu chinh gia tri cua nhiet do (-)
                            JNB 6,OUT_KT
                            số 6 ở đây là j vậy ạ? a giải thích rõ giúp e nhé

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X