Thông báo

Collapse
No announcement yet.

Cần giúp về code gọi chương trình con cho IC 8051

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

  • Cần giúp về code gọi chương trình con cho IC 8051

    Chào các bạn. Mình vừa mới học thực hành vi điều khiển, chủ yếu là chíp 8051. Có một số thắc mắc cần các bạn giúp đỡ.
    Do thầy yêu cầu viết code theo kiểu đơn giản (thủ công và dài dòng một tí), mà tụi mình cũng mới học cơ bản thui không có chuyên sau nên các bạn hướng dẫn theo kiểu đơn giản nhé.
    + Đề bài thầy yêu cầu mình làm như sau:
    Lập trình hiển thị đếm tăng dần từ 0-88 rồi đếm giảm dần từ 88-0 cùng trong một chương trình.
    + Mình đã làm như sau:
    Hình mô phỏng Protus:
    Click image for larger version

Name:	Mo phong.jpg
Views:	1
Size:	155.2 KB
ID:	1412547
    Code:
    Code:
    ; 
    CHUONG TRINH CHINH
    ORG 0000H
    DEMHC:
    ;SANG TU SO 0-88
    	MOV P0, #0C0H ;SO 0
    	LCALL DEMDV
    	MOV P0, #0F9H ;SO 1
    	LCALL DEMDV
    	MOV P0, #0A4H ;SO 2
    	LCALL DEMDV
    	MOV P0, #0B0H ;SO 3
    	LCALL DEMDV
    	MOV P0, #99H ;SO 4
    	LCALL DEMDV
    	MOV P0, #92H ;SO 5
    	LCALL DEMDV
    	MOV P0, #82H ;SO 6
    	LCALL DEMDV
    	MOV P0, #0F8H ;SO 7
    	LCALL DEMDV
    	MOV P0, #80H ;SO 8
    	MOV P2, #0C0H ;SO 0 (Dv)
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1 (DV)
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2 (DV)
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3 (DV)
    	CALL DELAY
    	MOV P2, #99H ;SO 4 (DV)
    	CALL DELAY
    	MOV P2, #92H ;SO 5 (DV)
    	CALL DELAY
    	MOV P2, #82H ;SO 6 (DV)
    	CALL DELAY
    	MOV P2, #0F8H ;SO 7 (DV)
    	CALL DELAY
    	MOV P2, #80H ;SO 8 (DV)
    ;NGUNG 5S
    	CALL DELAY
    	CALL DELAY
    	CALL DELAY
    	CALL DELAY
    	CALL DELAY
    ;SANG TU 88-0
    	MOV P2, #0F8H ;SO 7 (DV)
    	CALL DELAY
    	MOV P2, #82H ;SO 6 (DV)
    	CALL DELAY
    	MOV P2, #92H ;SO 5 (DV)
    	CALL DELAY
    	MOV P2, #99H ;SO 4 (DV)
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3 (DV)
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2 (DV)
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1 (DV)
    	CALL DELAY
    	MOV P2, #0C0H ;SO 0 (Dv)
    	CALL DELAY
    	MOV P0, #0F8H ;SO 7 (HC)
    	MOV P2, #90H ;SO 9
    	CALL DELAY
    	MOV P2, #80H ;SO 8
    	CALL DELAY
    	MOV P2, #0F8H ;SO 7
    	CALL DELAY
    	MOV P2, #82H ;SO 6
    	CALL DELAY
    	MOV P2, #92H ;SO 5
    	CALL DELAY
    	MOV P2, #99H ;SO 4
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1
    	CALL DELAY
    	MOV P2, #0C0H ;SO 0
    	CALL DELAY
    	MOV P0, #82H ;SO 6 (HC)
    	MOV P2, #90H ;SO 9
    	CALL DELAY
    	MOV P2, #80H ;SO 8
    	CALL DELAY
    	MOV P2, #0F8H ;SO 7
    	CALL DELAY
    	MOV P2, #82H ;SO 6
    	CALL DELAY
    	MOV P2, #92H ;SO 5
    	CALL DELAY
    	MOV P2, #99H ;SO 4
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1
    	CALL DELAY
    	MOV P2, #0C0H ;SO 0
    	CALL DELAY
    	MOV P0, #92H ;SO 5 (HC)
    	MOV P2, #90H ;SO 9
    	CALL DELAY
    	MOV P2, #80H ;SO 8
    	CALL DELAY
    	MOV P2, #0F8H ;SO 7
    	CALL DELAY
    	MOV P2, #82H ;SO 6
    	CALL DELAY
    	MOV P2, #92H ;SO 5
    	CALL DELAY
    	MOV P2, #99H ;SO 4
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1
    	CALL DELAY
    	MOV P2, #0C0H ;SO 0
    	CALL DELAY
    	MOV P0, #99H ;SO 4 (HC)
    	MOV P2, #90H ;SO 9
    	CALL DELAY
    	MOV P2, #80H ;SO 8
    	CALL DELAY
    	MOV P2, #0F8H ;SO 7
    	CALL DELAY
    	MOV P2, #82H ;SO 6
    	CALL DELAY
    	MOV P2, #92H ;SO 5
    	CALL DELAY
    	MOV P2, #99H ;SO 4
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1
    	CALL DELAY
    	MOV P2, #0C0H ;SO 0
    	CALL DELAY
    	MOV P0, #0B0H ;SO 3 (HC)
    	MOV P2, #90H ;SO 9
    	CALL DELAY
    	MOV P2, #80H ;SO 8
    	CALL DELAY
    	MOV P2, #0F8H ;SO 7
    	CALL DELAY
    	MOV P2, #82H ;SO 6
    	CALL DELAY
    	MOV P2, #92H ;SO 5
    	CALL DELAY
    	MOV P2, #99H ;SO 4
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1
    	CALL DELAY
    	MOV P2, #0C0H ;SO 0
    	CALL DELAY
    	MOV P0, #0A4H ;SO 2 (HC)
    	MOV P2, #90H ;SO 9
    	CALL DELAY
    	MOV P2, #80H ;SO 8
    	CALL DELAY
    	MOV P2, #0F8H ;SO 7
    	CALL DELAY
    	MOV P2, #82H ;SO 6
    	CALL DELAY
    	MOV P2, #92H ;SO 5
    	CALL DELAY
    	MOV P2, #99H ;SO 4
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1
    	CALL DELAY
    	MOV P2, #0C0H ;SO 0
    	CALL DELAY	
    	MOV P0, #0F9H ;SO 1 (HC)
    	MOV P2, #90H ;SO 9
    	CALL DELAY
    	MOV P2, #80H ;SO 8
    	CALL DELAY
    	MOV P2, #0F8H ;SO 7
    	CALL DELAY
    	MOV P2, #82H ;SO 6
    	CALL DELAY
    	MOV P2, #92H ;SO 5
    	CALL DELAY
    	MOV P2, #99H ;SO 4
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1
    	CALL DELAY
    	MOV P2, #0C0H ;SO 0
    	CALL DELAY	
    	MOV P0, #0C0H ;SO 0 (HC)
    	MOV P2, #90H ;SO 9
    	CALL DELAY
    	MOV P2, #80H ;SO 8
    	CALL DELAY
    	MOV P2, #0F8H ;SO 7
    	CALL DELAY
    	MOV P2, #82H ;SO 6
    	CALL DELAY
    	MOV P2, #92H ;SO 5
    	CALL DELAY
    	MOV P2, #99H ;SO 4
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1
    	CALL DELAY
    	MOV P2, #0C0H ;SO 0
    ;NGUNG 5S
    	CALL DELAY
    	CALL DELAY
    	CALL DELAY
    	CALL DELAY
    	CALL DELAY
    ;LAP LAI
    	LCALL DEMHC
    ;CHUONG TRINH CON
    DEMDV:
    	;Đếm số đơn vị từ 0-9
            MOV P2, #0C0H ;SO 0
    	CALL DELAY
    	MOV P2, #0F9H ;SO 1
    	CALL DELAY
    	MOV P2, #0A4H ;SO 2
    	CALL DELAY
    	MOV P2, #0B0H ;SO 3
    	CALL DELAY
    	MOV P2, #99H ;SO 4
    	CALL DELAY
    	MOV P2, #92H ;SO 5
    	CALL DELAY
    	MOV P2, #82H ;SO 6
    	CALL DELAY
    	MOV P2, #0F8H ;SO 7
    	CALL DELAY
    	MOV P2, #80H ;SO 8
    	CALL DELAY
    	MOV P2, #90H ;SO 9
    DELAY:
    		;Delay 1s
                    MOV	R5,#1
    		PUSH	00H
    		MOV	TMOD,#01H
    		MOV	R0,#225
    		LOOP:
    		MOV	TH0,#HIGH(-3000)
    		MOV	TL0,#LOW(-3000)
    		SETB	TR0
    		JNB	TF0,$
    		CLR	TR0
    		CLR	TF0
    		DJNZ	R0,LOOP
    		POP	00H
    		RET
    		END
    Ở trên là bài đã hoàn chỉnh và chạy được, nhưng mình trước khi làm phần code trên thi có một giải pháp để rút ngắn bớt phần viết code nhưng đã không thành công.
    Cụ thể giải pháp như sau:
    - Ở phần đếm tăng dần, đầu tiên mình viết code hiển thị số hàng chục nhảy lên 0, sau đó gọi chương trình con DEMDV: (Đếm số đơn vị như code trên) để hiển thị ra led hiển thị số đơn vị từ 0-9, sau khi chạy hết chương trình con DEMDV: thì led hàng chục lại nhảy lên 1, đến 88 rồi dừng 5s.
    - Tương tự như tăng, lúc đầu cho led hiển thị số hàng chục hiển thị ra số 8, sau đó gọi chương trình con DEMDVNGUOC: (Đếm số đợn vị ngược) để hiển thị ra led số đơn vị giảm dần từ 9-0 (trừ phần 8 ban đầu của số 88 phải viết riêng)
    ==> Nhưng không thành công vì theo sơ đồ mình viết như sau chương trình như sau:
    Code:
    Main1:
    ;Chương trình đếm từ 0-88
        Hiển thị số 0 hàng chục
        Gọi CTC DEMDV
        Hiển thị số 1 hàng chục
        Gọi CTC DEMDV
       ....
        Hiển thị số 8 hàng chục
        Gọi CTC DEMDV
    ;Dừng 5s
        JMP MAIN2
    Main2:
    ;Chương trình đếm từ 88-0
        Hiển thị số 8 hàng chục
        Gọi CTC DEMDVNGUOC
        Hiển thị số 7 hàng chục
        Gọi CTC DEMDVNGUOC
       ....
        Hiển thị số 0 hàng chục
        Gọi CTC DEMDVNGUOC
    ;Dừng 5s
        JMP MAIN1
    ;------
    ;CÁC CHƯƠNG TRÌNH ĐẾM ĐƠN VỊ
    ;------
    DEMDV:
       SỐ 0
       CALL DELAY
       SỐ 1
       .....
       SỐ 9
    DEMDVNGUOC:
       SỐ 9
       CALL DELAY
       SỐ 8
       ....
       SỐ 0
    DELAY:
       1S
       END
    ----------------
    thì trong phần đầu đếm từ 0-88, khi gọi CTC DEMDV: thay vì chạy xong chương trình con CTC DEMDV thì nhảy số hàng chục thì lại chạy tiếp luôn CTC DEMDVNGUOC: rồi mới nhảy số hàng chục, mình biết là vì CTC DEMDVDEMNGUOC: nằm sau CTC DEMDV: nên nó chạy nối tiếp luôn. Còn phần đếm ngược thì không bị sao cả, theo mình hiểu vì CTC DEMDVNGUOC không có CTC nào nữa.

    Vậy làm thế nào để khống chế khi gọi CTC DEMDV: thì không chạy nối tiếp nữa mà sẽ nhảy hàng chục.

  • #2
    Hi,
    Cái vụ này dễ mà, bác nên khai báo một biến chứa giá trị đếm ví dụ Value. Vì phạm vi đếm từ 0-88 nên chỉ chiếm 1 byte, nếu lập trình ASM thì có thể dùng một thanh ghi nào đó. Một chương trình con hiển thị biến Value, một chương trình con dùng để delay. Chương trình khởi tạo với Value = 0. Và lặp lại các thao tác hiển thị, delay, tăng/giảm Value. Để chạy tiết kiệm năng lượng thì hiển thị xong cho chip đi ngủ và WatchDog sẽ thức nó dậy để đếm tiếp (dùng cho chip có WatchDog).
    Thân ái.
    Đường đến những ngày vinh quang không còn xa
    Con đường chúng ta... chúng ta đã chọn.

    Comment


    • #3
      bạn xem chuơng trình con demdv khi bạn gọi bạn chưa ret mà để qua tới hàm delay mới ret:

      DEMDV:
      ;Đếm số đơn vị từ 0-9
      MOV P2, #0C0H ;SO 0
      CALL DELAY
      MOV P2, #0F9H ;SO 1
      CALL DELAY
      MOV P2, #0A4H ;SO 2
      CALL DELAY
      MOV P2, #0B0H ;SO 3
      CALL DELAY
      MOV P2, #99H ;SO 4
      CALL DELAY
      MOV P2, #92H ;SO 5
      CALL DELAY
      MOV P2, #82H ;SO 6
      CALL DELAY
      MOV P2, #0F8H ;SO 7
      CALL DELAY
      MOV P2, #80H ;SO 8
      CALL DELAY
      MOV P2, #90H ;SO 9
      CALL DELAY
      RET


      Tuơng tự hàm DEMDVNGUOC bạn cũng thêm RET vào cuối hàm là được

      Comment


      • #4
        Ở trên là viết bằng ASM,vậy nếu viết bằng C thì Code sẽ viết như nào vậy các anh?!

        Comment


        • #5
          cách viết trên hơi dài, nếu viết thì nên viết theo trình tự là: So sánh -> Đếm -> Giải Mã -> Hiển thị ( quét led ) -> So sánh...Giải thuật này cũng tương tự với C.Bạn cứ theo cách này viết nhớ là khoảng cách giữa các lần Đếm khoảng 1s để thấy rõ việc tăng các giá trị ko thì sẽ không thấy được đâu

          Comment


          • #6
            theo mình thì yêu cầu đề bài đã quá rõ ràng nên nếu bạn viết bằng C thì mình nghĩ bạn có thể tham khảo cách sau:
            tạo 1 vòng lặp for với biến bắt đầu bằng 0, và điều kiện thực hiện vòng lặp là biến đó nhỏ hơn 89, đơn vị tăng là 1. Bên trong vòng lặp for bạn gọi 1 hàm ( hoặc code ) có chức năng biến đổi số thập phân sao cho có thể xuất ra led 7 đoạn và thêm gọi 1 hàm có chức năng xuất ra led 7 đoạn và thêm hàm delay 1s đế có thể thấy được.

            Ngược lại đối với vòng lặp giảm.

            Cách này không cần phải kiểm tra liên tục vì vòng lặp for đã kiểm tra rồi, code viết ra cũng dễ nhìn và dễ hiểu hơn.

            Chúc bạn thành công!

            Comment


            • #7
              Nguyên văn bởi trimen Xem bài viết
              bạn xem chuơng trình con demdv khi bạn gọi bạn chưa ret mà để qua tới hàm delay mới ret:

              DEMDV:
              ;Đếm số đơn vị từ 0-9
              MOV P2, #0C0H ;SO 0
              CALL DELAY
              MOV P2, #0F9H ;SO 1
              CALL DELAY
              MOV P2, #0A4H ;SO 2
              CALL DELAY
              MOV P2, #0B0H ;SO 3
              CALL DELAY
              MOV P2, #99H ;SO 4
              CALL DELAY
              MOV P2, #92H ;SO 5
              CALL DELAY
              MOV P2, #82H ;SO 6
              CALL DELAY
              MOV P2, #0F8H ;SO 7
              CALL DELAY
              MOV P2, #80H ;SO 8
              CALL DELAY
              MOV P2, #90H ;SO 9
              CALL DELAY
              RET


              Tuơng tự hàm DEMDVNGUOC bạn cũng thêm RET vào cuối hàm là được
              Cảm ơn bạn rất nhiều, mình đã làm thử và kết quả rất tốt. Ngắn hơn rất nhiều. Mình có thể ứng dụng phần gọi CTC này trong nhiều bài tập lắm.
              Đây là code viết lại theo giải pháp ban đầu của mình + hướng dẫn của bạn.
              Code:
              ; CHUONG TRINH CHINH
              ORG 00H
              DEMHC:
              ;SANG TU SO 0-88
              	MOV P0, #0C0H ;SO 0
              	LCALL DEMDV
              	MOV P0, #0F9H ;SO 1
              	LCALL DEMDV
              	MOV P0, #0A4H ;SO 2
              	LCALL DEMDV
              	MOV P0, #0B0H ;SO 3
              	LCALL DEMDV
              	MOV P0, #99H ;SO 4
              	LCALL DEMDV
              	MOV P0, #92H ;SO 5
              	LCALL DEMDV
              	MOV P0, #82H ;SO 6
              	LCALL DEMDV
              	MOV P0, #0F8H ;SO 7
              	LCALL DEMDV
              	MOV P0, #80H ;SO 8
              	MOV P2, #0C0H ;SO 0 (Dv)
              	CALL DELAY
              	MOV P2, #0F9H ;SO 1 (DV)
              	CALL DELAY
              	MOV P2, #0A4H ;SO 2 (DV)
              	CALL DELAY
              	MOV P2, #0B0H ;SO 3 (DV)
              	CALL DELAY
              	MOV P2, #99H ;SO 4 (DV)
              	CALL DELAY
              	MOV P2, #92H ;SO 5 (DV)
              	CALL DELAY
              	MOV P2, #82H ;SO 6 (DV)
              	CALL DELAY
              	MOV P2, #0F8H ;SO 7 (DV)
              	CALL DELAY
              	MOV P2, #80H ;SO 8 (DV)
              ;NGUNG 5S
              	CALL DELAY
              	CALL DELAY
              	CALL DELAY
              	CALL DELAY
              	CALL DELAY
              ;SANG TU 88-0
              	MOV P2, #0F8H ;SO 7 (DV)
              	CALL DELAY
              	MOV P2, #82H ;SO 6 (DV)
              	CALL DELAY
              	MOV P2, #92H ;SO 5 (DV)
              	CALL DELAY
              	MOV P2, #99H ;SO 4 (DV)
              	CALL DELAY
              	MOV P2, #0B0H ;SO 3 (DV)
              	CALL DELAY
              	MOV P2, #0A4H ;SO 2 (DV)
              	CALL DELAY
              	MOV P2, #0F9H ;SO 1 (DV)
              	CALL DELAY
              	MOV P2, #0C0H ;SO 0 (Dv)
              	CALL DELAY
              	MOV P0, #0F8H ;SO 7 (HC)
              	LCALL DEMDVNGUOC
              	MOV P0, #82H ;SO 6 (HC)
              	LCALL DEMDVNGUOC
              	MOV P0, #92H ;SO 5 (HC)
              	LCALL DEMDVNGUOC
              	MOV P0, #99H ;SO 4 (HC)
              	LCALL DEMDVNGUOC
              	MOV P0, #0B0H ;SO 3 (HC)
              	LCALL DEMDVNGUOC
              	MOV P0, #0A4H ;SO 2 (HC)
              	LCALL DEMDVNGUOC	
              	MOV P0, #0F9H ;SO 1 (HC)
              	LCALL DEMDVNGUOC	
              	MOV P0, #0C0H ;SO 0 (HC)
              	LCALL DEMDVNGUOC
              ;NGUNG 5S
              	CALL DELAY
              	CALL DELAY
              	CALL DELAY
              	CALL DELAY
              	CALL DELAY
              ;LAP LAI
              	LCALL DEMHC
              ;CHUONG TRINH CON
              DEMDV:
              	MOV P2, #0C0H ;SO 0
              	CALL DELAY
              	MOV P2, #0F9H ;SO 1
              	CALL DELAY
              	MOV P2, #0A4H ;SO 2
              	CALL DELAY
              	MOV P2, #0B0H ;SO 3
              	CALL DELAY
              	MOV P2, #99H ;SO 4
              	CALL DELAY
              	MOV P2, #92H ;SO 5
              	CALL DELAY
              	MOV P2, #82H ;SO 6
              	CALL DELAY
              	MOV P2, #0F8H ;SO 7
              	CALL DELAY
              	MOV P2, #80H ;SO 8
              	CALL DELAY
              	MOV P2, #90H ;SO 9
              	CALL DELAY
              	RET
              DEMDVNGUOC:
              	MOV P2, #90H ;SO 9
              	CALL DELAY
              	MOV P2, #80H ;SO 8
              	CALL DELAY
              	MOV P2, #0F8H ;SO 7
              	CALL DELAY
              	MOV P2, #82H ;SO 6
              	CALL DELAY
              	MOV P2, #92H ;SO 5
              	CALL DELAY
              	MOV P2, #99H ;SO 4
              	CALL DELAY
              	MOV P2, #0B0H ;SO 3
              	CALL DELAY
              	MOV P2, #0A4H ;SO 2
              	CALL DELAY
              	MOV P2, #0F9H ;SO 1
              	CALL DELAY
              	MOV P2, #0C0H ;SO 0
              	CALL DELAY
              	RET
              DELAY:
              		MOV	R5,#1
              		PUSH	00H
              		MOV	TMOD,#01H ;(Bo dấu # thì nhảy nhanh hơn để test)
              		MOV	R0,#225
              		LOOP:
              		MOV	TH0,#HIGH(-3000)
              		MOV	TL0,#LOW(-3000)
              		SETB	TR0
              		JNB	TF0,$
              		CLR	TR0
              		CLR	TF0
              		DJNZ	R0,LOOP
              		POP	00H
              		RET
              		END

              Comment


              • #8
                Nguyên văn bởi tanirac Xem bài viết
                Cảm ơn bạn rất nhiều, mình đã làm thử và kết quả rất tốt. Ngắn hơn rất nhiều. Mình có thể ứng dụng phần gọi CTC này trong nhiều bài tập lắm.
                Đây là code viết lại theo giải pháp ban đầu của mình + hướng dẫn của bạn.
                Code:
                ; CHUONG TRINH CHINH
                ORG 00H
                DEMHC:
                ;SANG TU SO 0-88
                	MOV P0, #0C0H ;SO 0
                	LCALL DEMDV
                	MOV P0, #0F9H ;SO 1
                	LCALL DEMDV
                	MOV P0, #0A4H ;SO 2
                	LCALL DEMDV
                	MOV P0, #0B0H ;SO 3
                	LCALL DEMDV
                	MOV P0, #99H ;SO 4
                	LCALL DEMDV
                	MOV P0, #92H ;SO 5
                	LCALL DEMDV
                	MOV P0, #82H ;SO 6
                	LCALL DEMDV
                	MOV P0, #0F8H ;SO 7
                	LCALL DEMDV
                	MOV P0, #80H ;SO 8
                	MOV P2, #0C0H ;SO 0 (Dv)
                	CALL DELAY
                	MOV P2, #0F9H ;SO 1 (DV)
                	CALL DELAY
                	MOV P2, #0A4H ;SO 2 (DV)
                	CALL DELAY
                	MOV P2, #0B0H ;SO 3 (DV)
                	CALL DELAY
                	MOV P2, #99H ;SO 4 (DV)
                	CALL DELAY
                	MOV P2, #92H ;SO 5 (DV)
                	CALL DELAY
                	MOV P2, #82H ;SO 6 (DV)
                	CALL DELAY
                	MOV P2, #0F8H ;SO 7 (DV)
                	CALL DELAY
                	MOV P2, #80H ;SO 8 (DV)
                ;NGUNG 5S
                	CALL DELAY
                	CALL DELAY
                	CALL DELAY
                	CALL DELAY
                	CALL DELAY
                ;SANG TU 88-0
                	MOV P2, #0F8H ;SO 7 (DV)
                	CALL DELAY
                	MOV P2, #82H ;SO 6 (DV)
                	CALL DELAY
                	MOV P2, #92H ;SO 5 (DV)
                	CALL DELAY
                	MOV P2, #99H ;SO 4 (DV)
                	CALL DELAY
                	MOV P2, #0B0H ;SO 3 (DV)
                	CALL DELAY
                	MOV P2, #0A4H ;SO 2 (DV)
                	CALL DELAY
                	MOV P2, #0F9H ;SO 1 (DV)
                	CALL DELAY
                	MOV P2, #0C0H ;SO 0 (Dv)
                	CALL DELAY
                	MOV P0, #0F8H ;SO 7 (HC)
                	LCALL DEMDVNGUOC
                	MOV P0, #82H ;SO 6 (HC)
                	LCALL DEMDVNGUOC
                	MOV P0, #92H ;SO 5 (HC)
                	LCALL DEMDVNGUOC
                	MOV P0, #99H ;SO 4 (HC)
                	LCALL DEMDVNGUOC
                	MOV P0, #0B0H ;SO 3 (HC)
                	LCALL DEMDVNGUOC
                	MOV P0, #0A4H ;SO 2 (HC)
                	LCALL DEMDVNGUOC	
                	MOV P0, #0F9H ;SO 1 (HC)
                	LCALL DEMDVNGUOC	
                	MOV P0, #0C0H ;SO 0 (HC)
                	LCALL DEMDVNGUOC
                ;NGUNG 5S
                	CALL DELAY
                	CALL DELAY
                	CALL DELAY
                	CALL DELAY
                	CALL DELAY
                ;LAP LAI
                	LCALL DEMHC
                ;CHUONG TRINH CON
                DEMDV:
                	MOV P2, #0C0H ;SO 0
                	CALL DELAY
                	MOV P2, #0F9H ;SO 1
                	CALL DELAY
                	MOV P2, #0A4H ;SO 2
                	CALL DELAY
                	MOV P2, #0B0H ;SO 3
                	CALL DELAY
                	MOV P2, #99H ;SO 4
                	CALL DELAY
                	MOV P2, #92H ;SO 5
                	CALL DELAY
                	MOV P2, #82H ;SO 6
                	CALL DELAY
                	MOV P2, #0F8H ;SO 7
                	CALL DELAY
                	MOV P2, #80H ;SO 8
                	CALL DELAY
                	MOV P2, #90H ;SO 9
                	CALL DELAY
                	RET
                DEMDVNGUOC:
                	MOV P2, #90H ;SO 9
                	CALL DELAY
                	MOV P2, #80H ;SO 8
                	CALL DELAY
                	MOV P2, #0F8H ;SO 7
                	CALL DELAY
                	MOV P2, #82H ;SO 6
                	CALL DELAY
                	MOV P2, #92H ;SO 5
                	CALL DELAY
                	MOV P2, #99H ;SO 4
                	CALL DELAY
                	MOV P2, #0B0H ;SO 3
                	CALL DELAY
                	MOV P2, #0A4H ;SO 2
                	CALL DELAY
                	MOV P2, #0F9H ;SO 1
                	CALL DELAY
                	MOV P2, #0C0H ;SO 0
                	CALL DELAY
                	RET
                DELAY:
                		MOV	R5,#1
                		PUSH	00H
                		MOV	TMOD,#01H ;(Bo dấu # thì nhảy nhanh hơn để test)
                		MOV	R0,#225
                		LOOP:
                		MOV	TH0,#HIGH(-3000)
                		MOV	TL0,#LOW(-3000)
                		SETB	TR0
                		JNB	TF0,$
                		CLR	TR0
                		CLR	TF0
                		DJNZ	R0,LOOP
                		POP	00H
                		RET
                		END
                Em có thể viết như thế này cho gọn:
                Code:
                		  ; CHUONG TRINH CHINH
                ORG 00H
                MOV DPTR,#MA_LED
                DEMHC:
                MOV R1,#00
                LAP:
                MOV A,R1
                MOV B,#10
                DIV AB
                MOVC A,@A+DPTR
                MOV P0,A
                MOV A,B
                MOVC A,@A+DPTR
                MOV P2,A
                CALL DELAY
                INC R1
                CJNE R1,#89,LAP
                ;NGUNG 5S
                	CALL DELAY
                	CALL DELAY
                	CALL DELAY
                	CALL DELAY
                	CALL DELAY
                	MOV R1,#87
                ;DEM LUI
                 LAP_1:
                MOV A,R1
                MOV B,#10
                DIV AB
                MOVC A,@A+DPTR
                MOV P0,A
                MOV A,B
                MOVC A,@A+DPTR
                MOV P2,A
                CALL DELAY
                DEC R1
                CJNE R1,#00,LAP_1
                JMP    DEMHC
                DELAY:
                		MOV	R5,#1
                		PUSH	00H
                		MOV	TMOD,#01H 
                		MOV	R0,#100;225 GIAM GIA TRI DE TEST
                		LOOP:
                		MOV	TH0,#HIGH(-3000)
                		MOV	TL0,#LOW(-3000)
                		SETB	TR0
                		JNB	TF0,$
                		CLR	TR0
                		CLR	TF0
                		DJNZ	R0,LOOP
                		POP	00H
                		RET
                  MA_LED: db	0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
                		END
                Last edited by giahamchoi; 22-04-2012, 12:18.

                Comment


                • #9
                  Nguyên văn bởi giahamchoi Xem bài viết
                  Em có thể viết như thế này cho gọn:
                  Code:
                  		  ; CHUONG TRINH CHINH
                  ORG 00H
                  MOV DPTR,#MA_LED
                  DEMHC:
                  MOV R1,#00
                  LAP:
                  MOV A,R1
                  MOV B,#10
                  DIV AB
                  MOVC A,@A+DPTR
                  MOV P0,A
                  MOV A,B
                  MOVC A,@A+DPTR
                  MOV P2,A
                  CALL DELAY
                  INC R1
                  CJNE R1,#89,LAP
                  ;NGUNG 5S
                  	CALL DELAY
                  	CALL DELAY
                  	CALL DELAY
                  	CALL DELAY
                  	CALL DELAY
                  	MOV R1,#87
                  ;DEM LUI
                   LAP_1:
                  MOV A,R1
                  MOV B,#10
                  DIV AB
                  MOVC A,@A+DPTR
                  MOV P0,A
                  MOV A,B
                  MOVC A,@A+DPTR
                  MOV P2,A
                  CALL DELAY
                  DEC R1
                  CJNE R1,#00,LAP_1
                  JMP    DEMHC
                  DELAY:
                  		MOV	R5,#1
                  		PUSH	00H
                  		MOV	TMOD,#01H 
                  		MOV	R0,#100;225 GIAM GIA TRI DE TEST
                  		LOOP:
                  		MOV	TH0,#HIGH(-3000)
                  		MOV	TL0,#LOW(-3000)
                  		SETB	TR0
                  		JNB	TF0,$
                  		CLR	TR0
                  		CLR	TF0
                  		DJNZ	R0,LOOP
                  		POP	00H
                  		RET
                    MA_LED: db	0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h
                  		END
                  Hay quá. Cảm ơn Anh nhiều.

                  Comment


                  • #10
                    cái org 00h ở đầu chuơng trình nghĩa là gì hả các bác? E gà nên ko biết

                    Comment


                    • #11
                      Nguyên văn bởi byldk2010 Xem bài viết
                      cái org 00h ở đầu chuơng trình nghĩa là gì hả các bác? E gà nên ko biết


                      địa chỉ nhập sau khi reset


                      MOV NHÀ,ANH
                      MOV NHÀ,EM
                      ADD ANH,EM

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      Đang tải...
                      X