Cần Giúp Về Code Gọi Chương Trình Con Cho IC 8051

  • Đăng ký hoặc đăng nhập
    • Logging in... Ghi Nhớ? Ðăng Nhập Forgot password or user name? hoặc Đăng ký
    • Log in with Facebook
  • Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
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 Collapse
  • Bài viết
  • Hoạt động gần đây
  • Tìm kiếm
  • Trang of 1
  • Lọc
  • Giờ All Time hôm nay Last Week Last Month
  • Show All Discussions only Photos only Videos only Links only Polls only Events only
Filtered by: Clear All new posts Trước template Next
  • tanirac tanirac Thành viên mới
    • Tham gia: Feb 2009
    • Bài viết: 29
    • Share
    • Tweet
    #1

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

    21-04-2012, 22:27 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. Tags: None
  • Hard Hard Thành viên tích cực
    • Tham gia: Aug 2005
    • Bài viết: 779
    • Share
    • Tweet
    #2 21-04-2012, 22:54 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

    Gửi bài viết Huỷ bỏ
  • trimen trimen Thành viên tích cực
    • Tham gia: Nov 2009
    • Bài viết: 189
    • Share
    • Tweet
    #3 21-04-2012, 23:14 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

    Gửi bài viết Huỷ bỏ
  • transisto transisto Thành viên tích cực
    • Tham gia: Oct 2011
    • Bài viết: 303
    • Share
    • Tweet
    #4 22-04-2012, 00:04 Ở 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

    Gửi bài viết Huỷ bỏ
  • trimen trimen Thành viên tích cực
    • Tham gia: Nov 2009
    • Bài viết: 189
    • Share
    • Tweet
    #5 22-04-2012, 00:34 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

    Gửi bài viết Huỷ bỏ
  • thelaxong thelaxong Thành viên tích cực
    • Tham gia: May 2009
    • Bài viết: 198
    • Share
    • Tweet
    #6 22-04-2012, 00:58 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

    Gửi bài viết Huỷ bỏ
  • tanirac tanirac Thành viên mới
    • Tham gia: Feb 2009
    • Bài viết: 29
    • Share
    • Tweet
    #7 22-04-2012, 07:56 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

    Gửi bài viết Huỷ bỏ
  • giahamchoi giahamchoi Thành viên mới
    • Tham gia: Mar 2012
    • Bài viết: 16
    • Share
    • Tweet
    #8 22-04-2012, 12:11 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

    Gửi bài viết Huỷ bỏ
  • tanirac tanirac Thành viên mới
    • Tham gia: Feb 2009
    • Bài viết: 29
    • Share
    • Tweet
    #9 22-04-2012, 20:06 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

    Gửi bài viết Huỷ bỏ
  • byldk2010 byldk2010 Thành viên mới
    • Tham gia: May 2012
    • Bài viết: 26
    • Share
    • Tweet
    #10 09-11-2012, 12:40 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

    Gửi bài viết Huỷ bỏ
  • boynghean boynghean Thành viên tích cực
    • Tham gia: Dec 2010
    • Bài viết: 448
    • Share
    • Tweet
    #11 09-11-2012, 13:13 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

    Gửi bài viết Huỷ bỏ
Trước template Next Về tác giả Collapse tanirac Tìm hiểu thêm về tanirac Bài viết mới nhất Collapse
  • mèomướp Trả lời cho Xin hỏi về đèn quắc dàn âm thanh bởi mèomướp Mỗi phần hiển thị thì ko dùng được đâu ạ. Nó cần mạch có vài con ic điều khiển...
    • Channel: Điện thanh
    31-12-2025, 21:33
  • bqviet Trả lời cho Tư vấn. Nên mua máy mài, máy khoan cầm tay dùng loại công tắc nào ? bởi bqviet Quan điểm cá nhân bqv, đồng thời quan niệm chung ở diễn đàn, là không so sánh các hãng với nhau. Càng không có chuyện dìm hãng này để nâng hãng kia. Các bài viết chỉ nhằm nêu thêm các lựa chọn cho người làm nghề thôi. Ai cảm thấy dùng...
    • Channel: Điện tử gia dụng
    31-12-2025, 19:07
  • TKM323 Xin hỏi về đèn quắc dàn âm thanh bởi TKM323 E có 1 đèn quắc (đèn nháy theo nhạc) tháo từ dàn âm thanh ( đèn hàn vào mạch) , các bác cho e hỏi giờ e muốn chế đèn này lắp vào mạch công suất thì có đc ko ?
    • Channel: Điện thanh
    31-12-2025, 12:42
  • ittc Trả lời cho Tư vấn. Nên mua máy mài, máy khoan cầm tay dùng loại công tắc nào ? bởi ittc Thế hãng Dewalt không ngon bằng Makita hả 2 bác
    • Channel: Điện tử gia dụng
    31-12-2025, 07:03
  • ittc Trả lời cho Tư vấn. Nên mua máy mài, máy khoan cầm tay dùng loại công tắc nào ? bởi ittc Thế hãng Dewalt không ngon bằng Makita hả 2 bác...
    • Channel: Điện tử gia dụng
    27-12-2025, 05:53
  • bqviet Trả lời cho Tư vấn. Nên mua máy mài, máy khoan cầm tay dùng loại công tắc nào ? bởi bqviet Bạn mèomướp đúng rồi, ở VN cứ Makita là hợp lý hơn cả. Hàng chạy điện lưới có, chạy pin cũng có. Hàng chợ có, hàng nhái không thiếu, chính hãng cũng có luôn. Phụ kiện thay thế cũng sẵn. Còn gì tiện hơn ?
    • Channel: Điện tử gia dụng
    26-12-2025, 19:14
  • mèomướp Trả lời cho Tư vấn. Nên mua máy mài, máy khoan cầm tay dùng loại công tắc nào ? bởi mèomướp Dạ chú dùng makita cho lành ạ...
    • Channel: Điện tử gia dụng
    26-12-2025, 08:02
  • mèomướp Trả lời cho Xin ý kiến về mạch UPS 12v cho Modem/Wifi/Camera/DVR bởi mèomướp Dạ hông cần phức tạp như vậy đâu ạ. Chú cần 1 ắc qui 12v, 1 nguồn 13v để sạc nổi ắc qui và nối cấp cho mô đem luôn ạ. Nếu chú dùng pin thay cho ắc quy thì lại càng tốt vì pin nó có mạch bms ạ...
    • Channel: Điện tử sáng tạo
    26-12-2025, 07:55
  • ittc Trả lời cho Tư vấn. Nên mua máy mài, máy khoan cầm tay dùng loại công tắc nào ? bởi ittc Em đang tìm máy chạy điện, thằng Milwaukee toàn máy chạy Pin thôi, mà thằng này cty em đang dùng, thấy dở ẹc...
    • Channel: Điện tử gia dụng
    26-12-2025, 07:32
  • bqviet Trả lời cho Tư vấn. Nên mua máy mài, máy khoan cầm tay dùng loại công tắc nào ? bởi bqviet Còn cả anh tài Milwaukee mở đại lý ở VN đâu vài năm. Đám máy mài cắt của hãng này vẫn dùng cò bóp kèm nút chốt.
    • Channel: Điện tử gia dụng
    25-12-2025, 18:26
Xem toàn bộ Copyright © 2000-2026 Dientuvietnam.net. Founded by BinhAnh. Developed by R&P. All rights reserved. Forum software powered by vBulletin® Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Múi giờ GMT+7. Trang này được tạo vào lúc 07:54. Đang tải... Ðồng ý Không OK OK Huỷ bỏ X

Từ khóa » Chương Trình Con Trong 8051