Thông báo

Collapse
No announcement yet.

[Hỏi] Nháy sáng từng led nối với các port của 89C51

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

  • [Hỏi] Nháy sáng từng led nối với các port của 89C51

    tình hình là em mới làm quen với VXL và viết cái lệnh quay để cho nháy sáng từng led nhưng em không biết làm thế nào để viết cho nháy sáng lần lượt từng led nối ở các port 0, 1, 2, 3 mà chỉ biết cho nháy sáng từng led nối với 1 port thôi
    các bác giải đáp giùm em với!
    Chân thành cảm ơn!

  • #2
    đơn giản nhất là mov vào từng port sau mỗi lần mov cho time delay là đc

    Comment


    • #3
      Nguyên văn bởi quockimthanh Xem bài viết
      đơn giản nhất là mov vào từng port sau mỗi lần mov cho time delay là đc
      em cũng biết cách đấy đơn giản, nhưng cái mạch của em có 22 cái LED mà viết lệnh đấy thì hơi dài bác ạ, đây là bài tập lớn, làm cách dài dòng như thế sợ thầy cho bay thì khổ

      Comment


      • #4
        mình cũng mới tập viết code,mình viết thế này thấy proteus chạy cg dc,ko biết đúng ý bạn ko
        .
        Code:
        	 #include<REG51.h>                                               
         unsigned char i;      
        
        void delay(unsigned int x) 
        { 
          while(x--);
        }
        void main(void)
        {
        while(1)
        {
        P1=0x01 ;
        
         delay(50000) ;
        for(i=0;i<8;i++)
        {
        P1=P1<<1;
        delay(50000) ;
        }
        
        P2=0x01 ;
        delay(50000) ;
        for(i=0;i<8;i++)
        {P2=P2<<1;
        delay(50000) ;
        }
        
        P3=0x1  ;
          delay(50000) ;
        for(i=0;i<8;i++)
        {
        P3=P3<<1;
        delay(50000) ;
        }
        }
        }

        Comment


        • #5
          Nguyên văn bởi TiAnO Xem bài viết
          em cũng biết cách đấy đơn giản, nhưng cái mạch của em có 22 cái LED mà viết lệnh đấy thì hơi dài bác ạ, đây là bài tập lớn, làm cách dài dòng như thế sợ thầy cho bay thì khổ
          bạn viết code ASM à. Mà cụ thể là no sáng như thế nào mới có hướng lập giải thuật

          Comment


          • #6
            suy nghĩ chút xíu nào ... đã nháy sáng rùi lại còn phải lần lượt nữa??????

            Comment


            • #7
              Nguyên văn bởi tranvanhung Xem bài viết
              suy nghĩ chút xíu nào ... đã nháy sáng rùi lại còn phải lần lượt nữa??????
              đã nói là dùng lệnh quay thì sáng rồi delay tới tắt sau đó cái kế tiếp sáng

              Comment


              • #8
                Nguyên văn bởi TiAnO Xem bài viết
                tình hình là em mới làm quen với VXL và viết cái lệnh quay để cho nháy sáng từng led nhưng em không biết làm thế nào để viết cho nháy sáng lần lượt từng led nối ở các port 0, 1, 2, 3 mà chỉ biết cho nháy sáng từng led nối với 1 port thôi
                các bác giải đáp giùm em với!
                Chân thành cảm ơn!
                mình chưa hiểu ý bạn lắm,nói rõ hơn đc ko?
                nếu muốn nháy sáng cả 8 led ở 1 port nào đó thì bạn viết
                mov p0,1 thay cho việc viết p0.1,1
                vd như vậy

                Comment


                • #9
                  Thuật toán :
                  Khai báo số nguyên 8 hoặc 16 bit.
                  Khai báo bảng mã DB.
                  Dùng kiểu DPTR ấy.

                  Comment


                  • #10
                    đầu tiên cảm ơn các bác đã vào đây giúp em
                    mạch của em nó gồm 22 LED, em nối với 3 port, em chỉ biết viết lệnh quay cho 1 port, giờ không biết làm kiểu gì để nó chuyển sang port tiếp theo
                    hiệu ứng em mong muốn là: sáng rồi tắt từng LED, với tất cả các LED nối với 3 port đó
                    em viết chương trình bằng Reads51, ngôn ngữ ASM
                    mong các bác giúp cho, nếu được thì hộ em cái lệnh thì tốt quá, tại em cũng không hiểu lắm

                    Comment


                    • #11
                      viết thế này đc ko

                      Code:
                      	ORG	0000H
                      	MAIN:
                      LOOPR1:	MOV	R1,#8
                      	MOV	A,#0FFH
                      LOOPR0:	CLR	C
                      	RLC	A
                      	CALL	PORT
                      	CALL	DELAY
                      	DJNZ	R1,LOOPR0
                      	SJMP	LOOPR1
                      PORT:
                      	MOV	R0,P1
                      	CJNE	R0,#00H,NEXT_P0
                      	SJMP	NEXT_P1
                      NEXT_P0:MOV	P1,A
                      	SJMP	OUT
                      NEXT_P1:MOV	R0,P3
                      	CJNE	R0,#00H,NEXT_P2
                      	SJMP	NEXT_P3
                      NEXT_P2:MOV	P3,A
                      	SJMP	OUT
                      NEXT_P3:MOV	R0,P2
                      	CJNE	R0,#0F0H,NEXT_P4
                      	SJMP	NEXT_P5
                      NEXT_P4:MOV	P2,A
                      	SJMP	OUT
                      NEXT_P5:MOV	P1,#0FFH
                      	MOV	P3,#0FFH
                      	MOV	P2,#0FFH
                      	MOV	R1,#01H
                      OUT:
                      RET
                      DELAY:	
                      	MOV	R7,#5
                      	MOV	TMOD,#11H
                      LOOPD:	MOV	TH0,#HIGH(-50000)
                      	MOV	TL0,#LOW(-50000)
                      	SETB	TR0
                      	JNB	TF0,$
                      	CLR	TF0
                      	DJNZ	R7,LOOPD
                      	CLR	TR0
                      RET
                      END

                      Comment


                      • #12
                        Nguyên văn bởi chung1608 Xem bài viết
                        viết thế này đc ko

                        Code:
                        	ORG	0000H
                        	MAIN:
                        LOOPR1:	MOV	R1,#8
                        	MOV	A,#0FFH
                        LOOPR0:	CLR	C
                        	RLC	A
                        	CALL	PORT
                        	CALL	DELAY
                        	DJNZ	R1,LOOPR0
                        	SJMP	LOOPR1
                        PORT:
                        	MOV	R0,P1
                        	CJNE	R0,#00H,NEXT_P0
                        	SJMP	NEXT_P1
                        NEXT_P0:MOV	P1,A
                        	SJMP	OUT
                        NEXT_P1:MOV	R0,P3
                        	CJNE	R0,#00H,NEXT_P2
                        	SJMP	NEXT_P3
                        NEXT_P2:MOV	P3,A
                        	SJMP	OUT
                        NEXT_P3:MOV	R0,P2
                        	CJNE	R0,#0F0H,NEXT_P4
                        	SJMP	NEXT_P5
                        NEXT_P4:MOV	P2,A
                        	SJMP	OUT
                        NEXT_P5:MOV	P1,#0FFH
                        	MOV	P3,#0FFH
                        	MOV	P2,#0FFH
                        	MOV	R1,#01H
                        OUT:
                        RET
                        DELAY:	
                        	MOV	R7,#5
                        	MOV	TMOD,#11H
                        LOOPD:	MOV	TH0,#HIGH(-50000)
                        	MOV	TL0,#LOW(-50000)
                        	SETB	TR0
                        	JNB	TF0,$
                        	CLR	TF0
                        	DJNZ	R7,LOOPD
                        	CLR	TR0
                        RET
                        END
                        nó báo lỗi bác ạ

                        Comment


                        • #13
                          Nguyên văn bởi TiAnO Xem bài viết
                          nó báo lỗi bác ạ
                          sài MIDE mà dịch, cái reads51 cùi quá.
                          http://www.opcube.com/software/midepack02518.exe

                          Comment


                          • #14
                            Nguyên văn bởi chung1608 Xem bài viết
                            viết thế này đc ko

                            Code:
                            	ORG	0000H
                            	MAIN:
                            LOOPR1:	MOV	R1,#8
                            	MOV	A,#0FFH
                            LOOPR0:	CLR	C
                            	RLC	A
                            	CALL	PORT
                            	CALL	DELAY
                            	DJNZ	R1,LOOPR0
                            	SJMP	LOOPR1
                            PORT:
                            	MOV	R0,P1
                            	CJNE	R0,#00H,NEXT_P0
                            	SJMP	NEXT_P1
                            NEXT_P0:MOV	P1,A
                            	SJMP	OUT
                            NEXT_P1:MOV	R0,P3
                            	CJNE	R0,#00H,NEXT_P2
                            	SJMP	NEXT_P3
                            NEXT_P2:MOV	P3,A
                            	SJMP	OUT
                            NEXT_P3:MOV	R0,P2
                            	CJNE	R0,#0F0H,NEXT_P4
                            	SJMP	NEXT_P5
                            NEXT_P4:MOV	P2,A
                            	SJMP	OUT
                            NEXT_P5:MOV	P1,#0FFH
                            	MOV	P3,#0FFH
                            	MOV	P2,#0FFH
                            	MOV	R1,#01H
                            OUT:
                            RET
                            DELAY:	
                            	MOV	R7,#5
                            	MOV	TMOD,#11H
                            LOOPD:	MOV	TH0,#HIGH(-50000)
                            	MOV	TL0,#LOW(-50000)
                            	SETB	TR0
                            	JNB	TF0,$
                            	CLR	TF0
                            	DJNZ	R7,LOOPD
                            	CLR	TR0
                            RET
                            END
                            a ơi ,a có viết thì chú thik cho dễ dò ạ =.=

                            Comment


                            • #15
                              Nguyên văn bởi chung1608 Xem bài viết
                              sài MIDE mà dịch, cái reads51 cùi quá.
                              http://www.opcube.com/software/midepack02518.exe
                              em dùng mà nó vẫn báo lỗi bác ạ, nó báo "Integer Overflow"

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X