Thông báo

Collapse
No announcement yet.

Giúp mình đoạn code điều khiển 32 LED này với, please!

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

  • Giúp mình đoạn code điều khiển 32 LED này với, please!

    Em hiện là sinh viên, đang học về Assembly lập trình cho 8051. Mới học có mấy buổi thầy cho bt điều khiển 32 LED sáng tắt (ko cho sử dụng thanh ghi DPTR), em đọc sách rồi tự viết đoạn code sau, chương trình dịch ko báo lỗi nhưng khi nạp vào chương trình mô phỏng của proteus thì nó không chạy. Không biết em đã làm sai chỗ nào nữa. (LED nối anot với nguồn) Mong mọi người giúp đỡ!

    org 00h
    batdau:
    mov A, 00H
    mov B, 0FFH

    mov R0, #80H
    mov R1, #07
    led0:
    mov @R0, A
    acall tre_1s
    mov @R0, B
    inc R0
    djnz R1, led0

    mov R0, #90H
    mov R1, #07
    led1:
    mov @R0, A
    acall tre_1s
    mov @R0, B
    inc R0
    djnz R1, led1

    mov R0, #0A0H
    mov R1, #07
    led2:
    mov @R0, A
    acall tre_1s
    mov @R0, B
    inc R0
    djnz R1, led2

    mov R0, #0B0H
    mov R1, #07
    led3:
    mov @R0, A
    acall tre_1s
    mov @R0, B
    inc R0
    djnz R1, led3

    sjmp batdau
    tre_1s:
    mov r1, #10
    loop3:
    mov r2, #100
    loop2:
    mov r3, #100
    loop1:
    djnz r3,loop1
    djnz r2,loop2
    djnz r1,loop3
    ret
    end

  • #2
    Nguyên văn bởi hoangtheanh Xem bài viết
    Em hiện là sinh viên, đang học về Assembly lập trình cho 8051. Mới học có mấy buổi thầy cho bt điều khiển 32 LED sáng tắt (ko cho sử dụng thanh ghi DPTR), em đọc sách rồi tự viết đoạn code sau, chương trình dịch ko báo lỗi nhưng khi nạp vào chương trình mô phỏng của proteus thì nó không chạy. Không biết em đã làm sai chỗ nào nữa. (LED nối anot với nguồn) Mong mọi người giúp đỡ!

    org 00h
    batdau:
    mov A, 00H
    mov B, 0FFH

    mov R0, #80H
    mov R1, #07
    led0:
    mov @R0, A
    acall tre_1s
    mov @R0, B
    inc R0
    djnz R1, led0

    mov R0, #90H
    mov R1, #07
    led1:
    mov @R0, A
    acall tre_1s
    mov @R0, B
    inc R0
    djnz R1, led1

    mov R0, #0A0H
    mov R1, #07
    led2:
    mov @R0, A
    acall tre_1s
    mov @R0, B
    inc R0
    djnz R1, led2

    mov R0, #0B0H
    mov R1, #07
    led3:
    mov @R0, A
    acall tre_1s
    mov @R0, B
    inc R0
    djnz R1, led3

    sjmp batdau
    tre_1s:
    mov r1, #10
    loop3:
    mov r2, #100
    loop2:
    mov r3, #100
    loop1:
    djnz r3,loop1
    djnz r2,loop2
    djnz r1,loop3
    ret
    end
    bạn bảo là gắn led anot với nguồn vậy còn katot bạn gắn ở đâu, trong code của bạn mình ko thấy có lệnh nào để xuất led ra các PORT thì làm gì mà thấy sáng led. mà code của bạn viết gì mà sao không thấy có logic mình đọc chả hiểu gì hết

    Comment


    • #3
      thật sự bây giờ mình đọc lại đoạn code này thì thấy thật buồn cười, mình cũng chẳng hiểu lúc đó sao lại viết như thế nữa.. đúng là không có logic thật

      Comment


      • #4
        Nguyên văn bởi hoangtheanh Xem bài viết
        thật sự bây giờ mình đọc lại đoạn code này thì thấy thật buồn cười, mình cũng chẳng hiểu lúc đó sao lại viết như thế nữa.. đúng là không có logic thật
        post cái code logic lên xem đi bạn.

        Comment


        • #5
          Nguyên văn bởi hoangtheanh Xem bài viết
          Em hiện là sinh viên, đang học về Assembly lập trình cho 8051. Mới học có mấy buổi thầy cho bt điều khiển 32 LED sáng tắt (ko cho sử dụng thanh ghi DPTR), em đọc sách rồi tự viết đoạn code sau, chương trình dịch ko báo lỗi nhưng khi nạp vào chương trình mô phỏng của proteus thì nó không chạy. Không biết em đã làm sai chỗ nào nữa. (LED nối anot với nguồn) Mong mọi người giúp đỡ!

          org 00h
          batdau:
          mov A, 00H
          mov B, 0FFH

          mov R0, #80H
          mov R1, #07
          led0:
          mov @R0, A
          acall tre_1s
          mov @R0, B
          inc R0
          djnz R1, led0

          mov R0, #90H
          mov R1, #07
          led1:
          mov @R0, A
          acall tre_1s
          mov @R0, B
          inc R0
          djnz R1, led1

          mov R0, #0A0H
          mov R1, #07
          led2:
          mov @R0, A
          acall tre_1s
          mov @R0, B
          inc R0
          djnz R1, led2

          mov R0, #0B0H
          mov R1, #07
          led3:
          mov @R0, A
          acall tre_1s
          mov @R0, B
          inc R0
          djnz R1, led3

          sjmp batdau
          tre_1s:
          mov r1, #10
          loop3:
          mov r2, #100
          loop2:
          mov r3, #100
          loop1:
          djnz r3,loop1
          djnz r2,loop2
          djnz r1,loop3
          ret
          end
          code của bạn mình chỉ thấy nó chuyển qua chuyển lại trong các thanh ghi @@ mình có thấy xuất ra port nào đâu mà sáng @@
          đam mê là không sợ khó khăn

          Comment


          • #6
            Nguyên văn bởi hoangtheanh Xem bài viết
            Em hiện là sinh viên, đang học về Assembly lập trình cho 8051. Mới học có mấy buổi thầy cho bt điều khiển 32 LED sáng tắt (ko cho sử dụng thanh ghi DPTR), em đọc sách rồi tự viết đoạn code sau, chương trình dịch ko báo lỗi nhưng khi nạp vào chương trình mô phỏng của proteus thì nó không chạy. Không biết em đã làm sai chỗ nào nữa. (LED nối anot với nguồn) Mong mọi người giúp đỡ!

            org 00h
            batdau:
            mov A, 00H
            mov B, 0FFH

            mov R0, #80H
            mov R1, #07
            led0:
            mov @R0, A
            acall tre_1s
            mov @R0, B
            inc R0
            djnz R1, led0

            mov R0, #90H
            mov R1, #07
            led1:
            mov @R0, A
            acall tre_1s
            mov @R0, B
            inc R0
            djnz R1, led1

            mov R0, #0A0H
            mov R1, #07
            led2:
            mov @R0, A
            acall tre_1s
            mov @R0, B
            inc R0
            djnz R1, led2

            mov R0, #0B0H
            mov R1, #07
            led3:
            mov @R0, A
            acall tre_1s
            mov @R0, B
            inc R0
            djnz R1, led3

            sjmp batdau
            tre_1s:
            mov r1, #10
            loop3:
            mov r2, #100
            loop2:
            mov r3, #100
            loop1:
            djnz r3,loop1
            djnz r2,loop2
            djnz r1,loop3
            ret
            end
            hoàn toàn k có lỗi gì cả Click image for larger version

Name:	Untitled.jpg
Views:	1
Size:	53.8 KB
ID:	1378503
            đam mê là không sợ khó khăn

            Comment


            • #7
              chuong trinh cua ban viet sai khi ket thuc 1 chuog trinh con thi phai co ret chu , va chuong trinh cua ban khong cho xuat led lam sao ma sang duoc , voi lai ban lam cach do that su kho hieu

              Comment


              • #8
                sang tat nhap nhay hay sao ban

                Comment


                • #9
                  Nguyên văn bởi hoangtheanh Xem bài viết
                  Em hiện là sinh viên, đang học về Assembly lập trình cho 8051. Mới học có mấy buổi thầy cho bt điều khiển 32 LED sáng tắt (ko cho sử dụng thanh ghi DPTR), em đọc sách rồi tự viết đoạn code sau, chương trình dịch ko báo lỗi nhưng khi nạp vào chương trình mô phỏng của proteus thì nó không chạy. Không biết em đã làm sai chỗ nào nữa. (LED nối anot với nguồn) Mong mọi người giúp đỡ!

                  org 00h
                  batdau:
                  mov A, 00H
                  mov B, 0FFH

                  mov R0, #80H
                  mov R1, #07
                  led0:
                  mov @R0, A
                  acall tre_1s
                  mov @R0, B
                  inc R0
                  djnz R1, led0

                  mov R0, #90H
                  mov R1, #07
                  led1:
                  mov @R0, A
                  acall tre_1s
                  mov @R0, B
                  inc R0
                  djnz R1, led1

                  mov R0, #0A0H
                  mov R1, #07
                  led2:
                  mov @R0, A
                  acall tre_1s
                  mov @R0, B
                  inc R0
                  djnz R1, led2

                  mov R0, #0B0H
                  mov R1, #07
                  led3:
                  mov @R0, A
                  acall tre_1s
                  mov @R0, B
                  inc R0
                  djnz R1, led3

                  sjmp batdau
                  tre_1s:
                  mov r1, #10
                  loop3:
                  mov r2, #100
                  loop2:
                  mov r3, #100
                  loop1:
                  djnz r3,loop1
                  djnz r2,loop2
                  djnz r1,loop3
                  ret
                  end
                  không có lổi nghỉa là đúng lệnh, mình có thể dùng lệnh reset và end thôi chưng trình dich vẩn không báo lổi. để diều khiển led không cần dùng DPTR mà chỉ cần dùng lệnh chuyển dử liệu là mov thôi. ví dụ như muốn cho P0 nhấp nháy 10 lần:
                  MOV r1,#10
                  lap: mov p0,#0ffh
                  call delay
                  mov P0,#00H
                  CALL DELAY
                  djnz r1,lap
                  RET
                  ★♀♥♂Oº°(¯`◦_ _◦´¯)°ºO♂♥♀ღ ★

                  Comment


                  • #10
                    yêu cầu ra là điều khiển 32 LED sáng tắt. chỉ cần sử dụng l RR hoặc RL là đủ. hồi đó mình ko biết nên dùng chế độ định địa chỉ gián tiếp nên đoạn code vừa dài vừa phức tạp
                    (đoạn code mình viết chưa cho xuất ra port mà khi ấy cứ tưởng sai, giờ nghĩ lại buồn cười

                    Comment


                    • #11
                      Nguyên văn bởi hoangtheanh Xem bài viết
                      Em hiện là sinh viên, đang học về Assembly lập trình cho 8051. Mới học có mấy buổi thầy cho bt điều khiển 32 LED sáng tắt (ko cho sử dụng thanh ghi DPTR), em đọc sách rồi tự viết đoạn code sau, chương trình dịch ko báo lỗi nhưng khi nạp vào chương trình mô phỏng của proteus thì nó không chạy. Không biết em đã làm sai chỗ nào nữa. (LED nối anot với nguồn) Mong mọi người giúp đỡ!

                      org 00h
                      batdau:
                      mov A, 00H
                      mov B, 0FFH

                      mov R0, #80H
                      mov R1, #07
                      led0:
                      mov @R0, A
                      acall tre_1s
                      mov @R0, B
                      inc R0
                      djnz R1, led0

                      mov R0, #90H
                      mov R1, #07
                      led1:
                      mov @R0, A
                      acall tre_1s
                      mov @R0, B
                      inc R0
                      djnz R1, led1

                      mov R0, #0A0H
                      mov R1, #07
                      led2:
                      mov @R0, A
                      acall tre_1s
                      mov @R0, B
                      inc R0
                      djnz R1, led2

                      mov R0, #0B0H
                      mov R1, #07
                      led3:
                      mov @R0, A
                      acall tre_1s
                      mov @R0, B
                      inc R0
                      djnz R1, led3

                      sjmp batdau
                      tre_1s:
                      mov r1, #10
                      loop3:
                      mov r2, #100
                      loop2:
                      mov r3, #100
                      loop1:
                      djnz r3,loop1
                      djnz r2,loop2
                      djnz r1,loop3
                      ret
                      end
                      Chương trình khônng có logic. Sau mỗi chương trình con thì không "RET" hay "Reti" gì cả. Cả đoạn chương trình không có lệnh nào xuất tín hiệu "0" hay"1" ra các Port thì lấy gì Led sáng.
                      nếu như mới lập trình không dùng DPTR thì cứ SETB và CLR đi là dc rồi.
                      Email:
                      Phone: 0969 226 539

                      Comment


                      • #12
                        hi` k out led ra màn hình thì sao mà hiển thị đk
                        sau lệnh
                        move .....
                        out.....
                        call delay

                        Comment


                        • #13
                          oh hô. các pác hay thật đấy. tác giả đã nói
                          Nguyên văn bởi hoangtheanh Xem bài viết
                          thật sự bây giờ mình đọc lại đoạn code này thì thấy thật buồn cười, mình cũng chẳng hiểu lúc đó sao lại viết như thế nữa.. đúng là không có logic thật
                          thế mà các bác cứ chém cậu ấy hoài.

                          Comment


                          • #14
                            Theo mình thì cái này không hẳn là không xuất ra Port đâu vì trong reg51.h có đoạn như sau:
                            Code:
                            /*  BYTE Register  */
                            sfr P0   = 0x80;
                            sfr P1   = 0x90;
                            sfr P2   = 0xA0;
                            sfr P3   = 0xB0;
                            sfr PSW  = 0xD0;
                            sfr ACC  = 0xE0;
                            sfr B    = 0xF0;
                            sfr SP   = 0x81;
                            sfr DPL  = 0x82;
                            sfr DPH  = 0x83;
                            sfr PCON = 0x87;
                            sfr TCON = 0x88;
                            sfr TMOD = 0x89;
                            sfr TL0  = 0x8A;
                            sfr TL1  = 0x8B;
                            sfr TH0  = 0x8C;
                            sfr TH1  = 0x8D;
                            sfr IE   = 0xA8;
                            sfr IP   = 0xB8;
                            sfr SCON = 0x98;
                            sfr SBUF = 0x99;
                            Như vậy theo mình thấy thì ngay đoạn đầu tiên đã xuất 07h ra Port P0 rồi, quan trọng là bạn có để led ở P0.x không thôi và trường hợp này 7=4+2+1 -> nếu bạn mắc led ở toàn bộ Port0 thì Led tại P0.{0,1,2} sẽ sáng.

                            Comment


                            • #15
                              Ơ mình đọc ẩu quá, họ xuất 0xff ra tất cả các cổng mà, nên nếu có mắc LED ở bất kì Px.x nào đó thì đều có thể sáng cả, hay là do mắc ngược chân LED nhỉ?

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X