Thông báo

Collapse
No announcement yet.

Hỏi về code led cho 89c51!

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

  • Mấy cái thanh ghi R0, R1, R2, R3, R4, R5, R6, R7 nó dùng để làm gì vậy...?

    Comment


    • nó là các thanh ghi 8bit . dùng để lưu gì cũng được. mình thường dùng để lưu các dữ liệu trung gian. thi thoảng lại lôi ra sử dụng

      Comment


      • mà thực ra chương trình của bạn nếu nhiều thì mới là vấn đề vì bạn sẽ phải tính toán thật tiết kiệm bộ nhớ. chứ ít thì cũng không cần lắm. bạn chỉ cần chú ý tập lệnh của nó (8951) vì có 1 số lệnh chỉ thao tác được với thanh ghi A mà từ R0 - R7 thi không được. đọc vđk 8951 đi là hiểu hết bạn ah

        Comment


        • p1.1 & p1.6 ở mức "1" .delay hiểu đơn giản là làm chậm lại.

          Comment


          • Anh, chị nào có sơ đò mạnh điện của mạch trái tim đơn giản nào không giúp em với. Em muốn làm một trái tim tặng người yêu nhưng không biết thiết kế mạch.

            Comment


            • Gửi bác gasa..!
              Mấy cái thanh ghi đấy đc quy định như thế nào trong code vậy..?
              Chắc nó chỉ dùng để lưu chương trình phải không bác..!

              Comment


              • Có 8 thang ghi nghĩ là chúng ta có 8 ngăn để cất dữ liệu phải không bác..!

                Comment


                • Với code này
                  ORG 0000H
                  main:
                  MOV P1,#00000001B
                  CALL DELAY
                  MOV P1,#00000010B
                  CALL DELAY
                  MOV P1,#00000100B
                  CALL DELAY
                  MOV P1,#00001000B
                  CALL DELAY
                  MOV P1,#00010000B
                  CALL DELAY1
                  MOV P1,#00100000B
                  CALL DELAY1
                  MOV P1,#01000000B
                  CALL DELAY1
                  MOV P1,#10000000B
                  CALL DELAY
                  jmp main
                  DELAY:
                  MOV R3, # 255
                  HERE2:
                  MOV R4, # 255
                  HERE:
                  DJNZ R4, HERE
                  DJNZ R3, HERE2
                  RET
                  DELAY1:
                  MOV R6,#55
                  HERE4:
                  MOV R7,#255
                  HERE3:
                  DJNZ R7,HERE3
                  DJNZ R6,HERE4
                  RET
                  END

                  đc chia làm mấy phần chính vậy bác
                  VD:
                  ORG 0000H
                  main: (mở đầu)

                  MOV P1,#00000001B
                  CALL DELAY
                  MOV P1,#00000010B
                  CALL DELAY
                  MOV P1,#00000100B
                  CALL DELAY
                  MOV P1,#00001000B
                  CALL DELAY
                  MOV P1,#00010000B
                  CALL DELAY1
                  MOV P1,#00100000B
                  CALL DELAY1
                  MOV P1,#01000000B
                  CALL DELAY1
                  MOV P1,#10000000B
                  CALL DELAY
                  (phần thân dùng để điều khiển các port P0, P1, P2, P3)

                  jmp main
                  DELAY:
                  MOV R3, # 255
                  HERE2:
                  MOV R4, # 255
                  HERE:
                  DJNZ R4, HERE
                  DJNZ R3, HERE2
                  RET
                  DELAY1:
                  MOV R6,#55
                  HERE4:
                  MOV R7,#255
                  HERE3:
                  DJNZ R7,HERE3
                  DJNZ R6,HERE4
                  RET
                  (không biết, giải đáp giúp e phần này)

                  END
                  (kết thúc chương trình)

                  Comment


                  • 8951 có thanh ghi A,B , R0 - R7 là các thanh ghi 8bit, dptr(16bit) và các thanh ghi đặc biệt. RAM của nó có 128 byte được chia làm 3 phần chính sau:
                    1/ 32byte đầu được dùng làm băng thanh ghi và ngăn xếp
                    2/ 16byte tiếp theo dùng để định địa chỉ theo bit, được dùng làm bộ nhớ đọc or ghi.
                    3/ 80 byte tiếp dùng như bản nháp.
                    32 byte đầu lại được chia thành 4 băng, tính ra mỗi băng có 8 thanh ghi (8bit) từ R0- R7 (nằm trong RAM) tương ứng với các ngăn nhớ 0h -7h đối với băng 0 ; 08h- 0fh với băng 1; tương tự với 2 băng còn lại cho tới địa chỉ ngăn nhớ 7fh. chú ý: tránh nhầm tên địa chỉ R0 -R7 trong các băng với các thanh ghi R0-R7 của 8951.
                    VD thanh ghi R0 (8bit) thì có thể lưu trữ được các giá trị từ 00h- ffh (0-255).
                    hic còn lại các thứ linh tinh khác thì phải đọc thôi chứ tỉ mỉ hơn thì nó thành sách mất . chúc bạn học tốt. mình cũng mới tiếp xúc với em này được gần 1 năm thôi.

                    Comment


                    • Trời..!
                      Bác nói khó hiểu quá..!
                      Bác xem giúp e cái code kia đi..!

                      Comment


                      • Bác nghiên cứu nó 1 năm rùi, em nghiên cứu nó mới chưa đến 1 tháng..!^^

                        Comment


                        • delay và delay1 ở đây là các chương trình con (các chương trình làm chậm). RX ...bạn dùng để làm vòng lặp (các giá trị lặp).để mình giải thích qua cho bạn chương trình delay:
                          DELAY:
                          MOV R3, # 255 ;chuyển giá trị 255 vào R3.
                          HERE2: ; nhãn
                          MOV R4, # 255 ; chuyển giá trị 255 vào R4.
                          HERE: ; nhãn
                          DJNZ R4, HERE ; nhảy tới nhãn here cho tới khi nào r4 giảm về 1 ( nhảy 255 lần)
                          DJNZ R3, HERE2 ; nhảy tới nhãn here2 cho tới khi nào r3 giảm về 1 (nhảy 255 lần)
                          RET ; kết thúc 1 chương trình con
                          ở đây chúng ta có thể tính toán được thời gian trễ bằng cách tính xem lệnh thực hiện tốn bao nhiêu chu trình máy (vd:mov tốn 1 chu trình máy, djnz tốn 2 chu trình máy ) mỗi chu trình máy kéo dài 1.085 micro giây đối với thạch anh 11.0592Mhz sau đó bạn cộng trừ nhân chia với số lần bạn thực hiên lệnh đấy (nhớ tính vòng lặp). thế là bạn đã tính được thời gian trễ bằng tổng thời gian thực hiện delay.

                          Comment


                          • main ở đây là chương trình chính nó cứ lặp đi lặp lại như thế.bạn mới tìm hiểu nó thì cứ từ từ đừng nóng ruột. đọc xong cuốn hướng dẫn lập trình VDK 8951 (khoảng ~ 300 trang) thì thôi bạn khỏi cần hỏi gì về nó nữa .:d

                            Comment


                            • Cảm ơn bác nhé..!
                              Trời ơi..! Như đàn gảy tai trâu..!
                              Khó hiểu quá..!
                              Có cách lập trình nào đơn giản hơn thế này không bác.?

                              Comment


                              • Em kiếm trên mạng có cái lập trình này cũng khá hay..!
                                mo dau 8051 B1 - Wattpad
                                nó gọi là lập trình gì vậy bác..?

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X