Thông báo

Collapse
No announcement yet.

Code 89c51 cần giúp!^ ^

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

  • Code 89c51 cần giúp!^ ^

    Giúp mình với.Mình đang vướn code 89c51.Tình hình là mình đang làm 1 cái nút nhấn ở chân p3.3 để điều khiển 8 led đơn ở P1.Ví dụ khi cấp nguồn thì sẽ chạy chương trình chính, khi ta nhấn nút nhấn 1 cái thì chương trình sẽ vào chương trình phụ.
    Code em viết đây ạ, nó cứ báo lỗi nhưng em ko biết là nó sai thế nào?
    Mong các bác giúp đỡ nhiều nhiều, xin cảm ơn!!!
    code:
    org 0000h
    main:
    lcall ct1 ;chuong trinh chinh
    lcall ct2 ;chuong trinh phu
    sjmp main
    setb P3.3
    jnb P3.3, ct2 ;bao loi tai cho nay

    ct1:
    mov P1,#07eh
    lcall delay30
    mov P1,#07eh
    lcall delay30
    mov P1,#00h
    lcall delay30
    mov P1,#07eh
    lcall delay30
    mov P1,#07eh
    lcall delay30
    mov P1,#0ffh
    lcall delay30
    mov P1,#0ffh
    lcall delay30

    mov P1,#87h
    lcall delay30
    mov P1,#03h
    lcall delay30
    mov P1,#81h
    lcall delay30
    mov P1,#0c0h
    lcall delay30
    mov P1,#81h
    lcall delay30
    mov P1,#03h
    lcall delay30
    mov P1,#87h
    lcall delay30
    mov P1,#0ffh
    lcall delay30
    mov P1,#0ffh
    lcall delay30

    mov P1,#00h
    lcall delay30
    mov P1,#0feh
    lcall delay30
    mov P1,#0feh
    lcall delay30
    mov P1,#0feh
    lcall delay30
    mov P1,#00h
    lcall delay30
    mov P1,#0ffh
    lcall delay30
    mov P1,#0ffh
    lcall delay30
    ret

    ct2:
    mov p1,#00h
    jmp $
    ret

    delay30:
    mov r6,#30
    lap2: mov r7,#30
    djnz r7,$
    djnz r6,lap2
    ret
    end


    Click image for larger version

Name:	379621_391297580988637_1588173615_n.jpg
Views:	1
Size:	77.6 KB
ID:	1417384
    mo phong.zip
    Bùi Thành Hậu

    Gmail:
    Fb:

  • #2
    các cao thủ đâu rồi, giúp với!!hic hic
    Bùi Thành Hậu

    Gmail:
    Fb:

    Comment


    • #3
      lỗi này là do code vượt quá phép lệnh nhảy sửa thành:
      jnb p3.3,x1
      x1:ljmp ct2
      lập trình asm hay gặp những lỗi khó hiểu dùng C thì hơn

      Comment


      • #4
        dtcn112 nói dễ hỉu đây', mà ông bạn sử dụng trình biên dịch j` vậy
        PHP Code:
        org 0000h
        main
        :
        lcall ct1 ;chuong trinh chinh
        lcall ct2 
        ;chuong trinh phu
        sjmp main
        setb P3.3
        jnb P3.3
        ct2 ;bao loi tai cho nay

        ct1
        :
        mov P1,#07eh
        lcall delay30
        mov P1
        ,#07eh
        lcall delay30
        mov P1
        ,#00h
        lcall delay30
        mov P1
        ,#07eh
        lcall delay30
        mov P1
        ,#07eh
        lcall delay30
        mov P1
        ,#0ffh
        lcall delay30
        mov P1
        ,#0ffh
        lcall delay30

        mov P1
        ,#87h
        lcall delay30
        mov P1
        ,#03h
        lcall delay30
        mov P1
        ,#81h
        lcall delay30
        mov P1
        ,#0c0h
        lcall delay30
        mov P1
        ,#81h
        lcall delay30
        mov P1
        ,#03h
        lcall delay30
        mov P1
        ,#87h
        lcall delay30
        mov P1
        ,#0ffh
        lcall delay30
        mov P1
        ,#0ffh
        lcall delay30

        jnb p3.3
        ,x1noithem ;them 2 dong nay
        x1noithem
        :ljmp ct2

        mov P1
        ,#00h
        lcall delay30
        mov P1
        ,#0feh
        lcall delay30
        mov P1
        ,#0feh
        lcall delay30
        mov P1
        ,#0feh
        lcall delay30
        mov P1
        ,#00h
        lcall delay30
        mov P1
        ,#0ffh
        lcall delay30
        mov P1
        ,#0ffh
        lcall delay30
        ret

        ct2
        :
        mov p1,#00h
        jmp $
        ret

        delay30
        :
        mov r6,#30
        lap2mov r7,#30
        djnz r7,$
        djnz r6,lap2
        ret
        end 

        Comment


        • #5
          sao viết bài xong đưa lên mà thấy được dòng chử quocte [MENTION=214994]thanhhaudt33[/MENTION]
          với ct này nút nhấn có nhấn được thfi củng không có tác dụng vì:
          1- sau lệnh nhảy jmp main thì chương trình trở nhản main chứ không thục thi lệnh phía dưới nó và vòng lặp này lặp vô tận
          2- lệnh lcall ct2 nằm trong nhản main. mà trong ct2 có lệnh lặp tại chổ jmp $ vì thế các led sẻ sáng mải sau khi ct1 chạy xong 1 lượt.
          3- tránh bị lổi thì lệnh jnb chỉ nhảy tới 128-127 byte

          muốn có nút nhán thì viết như sau:
          org 0000h
          main:
          setb p3.3
          call ct1
          jmp main
          ct1:
          jnb p3.3,ctgoict2
          ....
          khoảng 128 byte
          ctgoict2: call ct2
          ....
          ct2:
          ...
          Last edited by thuongdtqb; 29-05-2013, 08:56.
          ★♀♥♂Oº°(¯`◦_ _◦´¯)°ºO♂♥♀ღ ★

          Comment


          • #6
            Xin cảm ơn các bác đã quan tâm giúp đỡ. Vấn đề trên mình đã giải quyết xong rồi.Tình hình là bây giờ khi mình không nhấn thì nó vào chương trình chính, nhấn 1 cái thì nó vào chương trình 1, nhấn 2 cái thì nó vào chương trình 2 thì phải làm thế nào các bác nhỉ??Nghe đâu phải dùng ngắt mới được. Nếu được xin các bác cho em xin cái sườn với yêu cầu trên với! Vi điều khiển mình còn ngốc quá mong được chỉ giáo!
            Bùi Thành Hậu

            Gmail:
            Fb:

            Comment


            • #7
              mình trước đây hay dùng ride và keil C để viết asm nhất còn rất nhiều phần mềm khác nữa nhưng mình ít dùng nên quên vì nó debug khó và ko hỗ trợ nhiều.nếu lập trình asm với các code dài thì nên dùng các câu lệnh nhảy và rẽ nhánh là ljmp hoặc lcall.

              Comment


              • #8
                Nguyên văn bởi thanhhaudt33 Xem bài viết
                Xin cảm ơn các bác đã quan tâm giúp đỡ. Vấn đề trên mình đã giải quyết xong rồi.Tình hình là bây giờ khi mình không nhấn thì nó vào chương trình chính, nhấn 1 cái thì nó vào chương trình 1, nhấn 2 cái thì nó vào chương trình 2 thì phải làm thế nào các bác nhỉ??Nghe đâu phải dùng ngắt mới được. Nếu được xin các bác cho em xin cái sườn với yêu cầu trên với! Vi điều khiển mình còn ngốc quá mong được chỉ giáo!
                cái này trước đây mình làm rùi nhưng lâu nên quên có thể dùng một thanh khi Rx nào đó để lưu một giá trị khi nhấn nút tăng giá trị đó lên ,ứng với mỗi giá trị chọn một chương trình khác nhau.

                Comment


                • #9
                  Nguyên văn bởi dtcn_112 Xem bài viết
                  cái này trước đây mình làm rùi nhưng lâu nên quên có thể dùng một thanh khi Rx nào đó để lưu một giá trị khi nhấn nút tăng giá trị đó lên ,ứng với mỗi giá trị chọn một chương trình khác nhau.
                  bác cố nhớ lại giúp mình đi, mình đang rất cần, bác gửi vào gmail của mình cũng được:gmail:thanhhauhoaan@gmail.com. Xin cảm ơn bác dtcn_112 nhiều
                  Bùi Thành Hậu

                  Gmail:
                  Fb:

                  Comment


                  • #10
                    Nguyên văn bởi nguyennam889 Xem bài viết
                    dtcn112 nói dễ hỉu đây', mà ông bạn sử dụng trình biên dịch j` vậy
                    PHP Code:
                    org 0000h
                    main
                    :
                    lcall ct1 ;chuong trinh chinh
                    lcall ct2 
                    ;chuong trinh phu
                    sjmp main
                    setb P3.3
                    jnb P3.3
                    ct2 ;bao loi tai cho nay

                    ct1
                    :
                    mov P1,#07eh
                    lcall delay30
                    mov P1
                    ,#07eh
                    lcall delay30
                    mov P1
                    ,#00h
                    lcall delay30
                    mov P1
                    ,#07eh
                    lcall delay30
                    mov P1
                    ,#07eh
                    lcall delay30
                    mov P1
                    ,#0ffh
                    lcall delay30
                    mov P1
                    ,#0ffh
                    lcall delay30

                    mov P1
                    ,#87h
                    lcall delay30
                    mov P1
                    ,#03h
                    lcall delay30
                    mov P1
                    ,#81h
                    lcall delay30
                    mov P1
                    ,#0c0h
                    lcall delay30
                    mov P1
                    ,#81h
                    lcall delay30
                    mov P1
                    ,#03h
                    lcall delay30
                    mov P1
                    ,#87h
                    lcall delay30
                    mov P1
                    ,#0ffh
                    lcall delay30
                    mov P1
                    ,#0ffh
                    lcall delay30

                    jnb p3.3
                    ,x1noithem ;them 2 dong nay
                    x1noithem
                    :ljmp ct2

                    mov P1
                    ,#00h
                    lcall delay30
                    mov P1
                    ,#0feh
                    lcall delay30
                    mov P1
                    ,#0feh
                    lcall delay30
                    mov P1
                    ,#0feh
                    lcall delay30
                    mov P1
                    ,#00h
                    lcall delay30
                    mov P1
                    ,#0ffh
                    lcall delay30
                    mov P1
                    ,#0ffh
                    lcall delay30
                    ret

                    ct2
                    :
                    mov p1,#00h
                    jmp $
                    ret

                    delay30
                    :
                    mov r6,#30
                    lap2mov r7,#30
                    djnz r7,$
                    djnz r6,lap2
                    ret
                    end 
                    mình dùng MIDE-51, chúng dịch được cả ASM và C nữa đó
                    Bùi Thành Hậu

                    Gmail:
                    Fb:

                    Comment


                    • #11
                      mình đang lom dom làm đồ án tốt nghiệp,20 tháng 6 bảo vệ mạch chưa đâu vào đâu không dám bê lên diễn đàn hỏi vì đây là cái mạch kết thúc hơn 17 năm học nên mình muốn tự làm(lẽ ra mình nên hỏi mọi người thì có lẽ đã khá hơn),mình viết đoạn code đơn giản thế này xem có được ko giả sử nút chọn chương trình nối vào P1.1
                      bắt đầu:JNB P1.1,TĂNG R0 LÊN
                      TĂNG R0:INC R0
                      trễ khoảng 1 đến 2 giây để kịp ấn nút
                      MOV A,R0
                      JB ACC.0,CHƯƠNG TRÌNH 1
                      ......
                      JB acc.7,CHƯƠNG TRÌNH N
                      cái này có thể chỉ được vài chương trình thôi cứ thử rùi tìm hướng tốt hơn chẳng hạn như mình làm một cái bảng mã chứa các mã lệnh chương trình như
                      mã ct:
                      ljmp ct1
                      ljmp ct2
                      .........
                      ljmp chương trình n

                      bắt đầu phải tăng Rx nào đó sau đó chọn các mã lệnh chẳng hạn như
                      MOV DPTR,#mã ct
                      MOV A,Rx
                      LJMP @A+DPTR (câu lệnh này không biết có đúng không nữa )
                      nhưng theo mình thì cách này có thể chọn được rất nhiều chương trình

                      Comment


                      • #12
                        Nguyên văn bởi dtcn_112 Xem bài viết
                        mình đang lom dom làm đồ án tốt nghiệp,20 tháng 6 bảo vệ mạch chưa đâu vào đâu không dám bê lên diễn đàn hỏi vì đây là cái mạch kết thúc hơn 17 năm học nên mình muốn tự làm(lẽ ra mình nên hỏi mọi người thì có lẽ đã khá hơn),mình viết đoạn code đơn giản thế này xem có được ko giả sử nút chọn chương trình nối vào P1.1
                        bắt đầu:JNB P1.1,TĂNG R0 LÊN
                        TĂNG R0:INC R0
                        trễ khoảng 1 đến 2 giây để kịp ấn nút
                        MOV A,R0
                        JB ACC.0,CHƯƠNG TRÌNH 1
                        ......
                        JB acc.7,CHƯƠNG TRÌNH N
                        cái này có thể chỉ được vài chương trình thôi cứ thử rùi tìm hướng tốt hơn chẳng hạn như mình làm một cái bảng mã chứa các mã lệnh chương trình như
                        mã ct:
                        ljmp ct1
                        ljmp ct2
                        .........
                        ljmp chương trình n

                        bắt đầu phải tăng Rx nào đó sau đó chọn các mã lệnh chẳng hạn như
                        MOV DPTR,#mã ct
                        MOV A,Rx
                        LJMP @A+DPTR (câu lệnh này không biết có đúng không nữa )
                        nhưng theo mình thì cách này có thể chọn được rất nhiều chương trình
                        Mình cũng đã làm đồ án rồi, nếu có khó khăn thì bác cứ mạnh dạn nói, anh/em trong diễn đàn sẽ cố gắng giúp cho^_^
                        Bùi Thành Hậu

                        Gmail:
                        Fb:

                        Comment


                        • #13
                          Nguyên văn bởi dtcn_112 Xem bài viết
                          mình đang lom dom làm đồ án tốt nghiệp,20 tháng 6 bảo vệ mạch chưa đâu vào đâu không dám bê lên diễn đàn hỏi vì đây là cái mạch kết thúc hơn 17 năm học nên mình muốn tự làm(lẽ ra mình nên hỏi mọi người thì có lẽ đã khá hơn),mình viết đoạn code đơn giản thế này xem có được ko giả sử nút chọn chương trình nối vào P1.1
                          bắt đầu:JNB P1.1,TĂNG R0 LÊN
                          TĂNG R0:INC R0
                          trễ khoảng 1 đến 2 giây để kịp ấn nút
                          MOV A,R0
                          JB ACC.0,CHƯƠNG TRÌNH 1
                          ......
                          JB acc.7,CHƯƠNG TRÌNH N
                          cái này có thể chỉ được vài chương trình thôi cứ thử rùi tìm hướng tốt hơn chẳng hạn như mình làm một cái bảng mã chứa các mã lệnh chương trình như
                          mã ct:
                          ljmp ct1
                          ljmp ct2
                          .........
                          ljmp chương trình n

                          bắt đầu phải tăng Rx nào đó sau đó chọn các mã lệnh chẳng hạn như
                          MOV DPTR,#mã ct
                          MOV A,Rx
                          LJMP @A+DPTR (câu lệnh này không biết có đúng không nữa )
                          nhưng theo mình thì cách này có thể chọn được rất nhiều chương trình
                          đoạn chương trình trên mình ráp vào chạy ko ổn rồi bác ơi! Có bác nào giúp mình ko nhỉ??
                          Bùi Thành Hậu

                          Gmail:
                          Fb:

                          Comment


                          • #14
                            Nguyên văn bởi dtcn_112 Xem bài viết
                            mình đang lom dom làm đồ án tốt nghiệp,20 tháng 6 bảo vệ mạch chưa đâu vào đâu không dám bê lên diễn đàn hỏi vì đây là cái mạch kết thúc hơn 17 năm học nên mình muốn tự làm(lẽ ra mình nên hỏi mọi người thì có lẽ đã khá hơn),mình viết đoạn code đơn giản thế này xem có được ko giả sử nút chọn chương trình nối vào P1.1
                            bắt đầu:JNB P1.1,TĂNG R0 LÊN
                            TĂNG R0:INC R0
                            trễ khoảng 1 đến 2 giây để kịp ấn nút
                            MOV A,R0
                            JB ACC.0,CHƯƠNG TRÌNH 1
                            ......
                            JB acc.7,CHƯƠNG TRÌNH N
                            cái này có thể chỉ được vài chương trình thôi cứ thử rùi tìm hướng tốt hơn chẳng hạn như mình làm một cái bảng mã chứa các mã lệnh chương trình như
                            mã ct:
                            ljmp ct1
                            ljmp ct2
                            .........
                            ljmp chương trình n

                            bắt đầu phải tăng Rx nào đó sau đó chọn các mã lệnh chẳng hạn như
                            MOV DPTR,#mã ct
                            MOV A,Rx
                            LJMP @A+DPTR (câu lệnh này không biết có đúng không nữa )
                            nhưng theo mình thì cách này có thể chọn được rất nhiều chương trình
                            ko nhấn nút nó cũng tự tăng.
                            ĐT: 0972 20 58 68
                            Gmail:

                            Comment


                            • #15
                              mình chỉ nhớ là nguyên lý nó như vậy chứ lâu rùi ko code asm nên quên
                              có thể tăng Rx bằng một nút nhấn như JNB nút nhấn,tăng Rx rùi mới thực hiện kiểm tra chọn chương trình dùng asm cái này thực sự là khó.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X