Thông báo

Collapse
No announcement yet.

cho hỏi về lệnh trong 8051 hay at89c52

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

  • cho hỏi về lệnh trong 8051 hay at89c52

    Mấy bác cho em hỏi chút về lệnh trong vi xử lý:
    Tình hình là em gắn cho port1 có giá trị là 11010110 mà em muốn cho nó xuất giá trị ra port1 01101011( ngược lại) mà em gà quá xem trong sách cũng ko có, bác nào biết dùng lệnh gì hay cách nào chỉ giáo giúp em với, thank mấy bác nhiều

  • #2
    Nguyên văn bởi baoitc Xem bài viết
    Mấy bác cho em hỏi chút về lệnh trong vi xử lý:
    Tình hình là em gắn cho port1 có giá trị là 11010110 mà em muốn cho nó xuất giá trị ra port1 01101011( ngược lại) mà em gà quá xem trong sách cũng ko có, bác nào biết dùng lệnh gì hay cách nào chỉ giáo giúp em với, thank mấy bác nhiều
    Cái này là cơ bản rồi! bạn chỉ cần thực hiện 3 lệnh sau:
    Code:
    mov     a, p1
    rr      a
    mov     p1, a

    Comment


    • #3
      bạn dùng lệnh dịch nhé, trong trường hợp của bạn là dịch phải 1 bit P1=P1>>1;
      Nguyễn Huy Biên - 01649 802 694
      gmail :

      Comment


      • #4
        minh có thử rồi mà ko đc hic, mấy bác có các nào khác ko

        Comment


        • #5
          là làm sao bạn?

          Comment


          • #6
            mình đang nói lệnh trong C đó bạn nhé. bạn có 8 bit ví dụ là 00000001 nếu bạn dịch phải 1 bit có nghĩ lúc này số 1 sẽ được chuyển về vị trị có trọng số cao nhất nó sẽ thành 10000000.
            Nguyễn Huy Biên - 01649 802 694
            gmail :

            Comment


            • #7
              Nguyên văn bởi baoitc Xem bài viết
              Mấy bác cho em hỏi chút về lệnh trong vi xử lý:
              Tình hình là em gắn cho port1 có giá trị là 11010110 mà em muốn cho nó xuất giá trị ra port1 01101011( ngược lại) mà em gà quá xem trong sách cũng ko có, bác nào biết dùng lệnh gì hay cách nào chỉ giáo giúp em với, thank mấy bác nhiều
              Bạn có thể dùng ct con này. Đảm bảo chạy đúng với mọi số 8bit

              unsigned char chuyenma (unsigned char Data)
              {
              unsigned char Val = 0;
              Val|= (Data<<7)&0x80;
              Val|= (Data<<5)&0x40;
              Val|= (Data<<3)&0x20;
              Val|= (Data<<1)&0x10;

              Val|= (Data>>7)&0x01;
              Val|= (Data>>5)&0x02;
              Val|= (Data>>3)&0x04;
              Val|= (Data>>1)&0x08;
              return(Val);
              }
              FPT Service bảo hành, sửa chữa dịch vụ UPS, các loại nguồn công suất.
              Mr Xô : Email :
              ĐT : 01674524129

              Comment


              • #8
                Nguyên văn bởi Ck33spkt Xem bài viết
                Cái này là cơ bản rồi! bạn chỉ cần thực hiện 3 lệnh sau:
                Code:
                mov     a, p1
                rr      a
                mov     p1, a
                Nguyên văn bởi bienhou
                bạn dùng lệnh dịch nhé, trong trường hợp của bạn là dịch phải 1 bit P1=P1>>1;
                mấy lệnh này sử dụng không được. không đúng với yêu cầu của đề bài.
                Nguyên văn bởi baoitc
                Mấy bác cho em hỏi chút về lệnh trong vi xử lý:
                Tình hình là em gắn cho port1 có giá trị là 11010110 mà em muốn cho nó xuất giá trị ra port1 01101011( ngược lại) mà em gà quá xem trong sách cũng ko có, bác nào biết dùng lệnh gì hay cách nào chỉ giáo giúp em với, thank mấy bác nhiều
                cái này là đảo 4 bít cap cho 4 bit thap. bạn sử dụng lệnh SWAP
                Code:
                mov a,p1
                swap a
                mov p1,a
                VD: P1= 00001111
                thì swap p1 => p1= 11110000 và trường hợp của bạn
                Code:
                mov a,p1 ; P1=11010110
                swap a ; A=01101011
                mov p1,a ; P1=01101011

                Comment


                • #9
                  Nguyên văn bởi bienhou Xem bài viết
                  mình đang nói lệnh trong C đó bạn nhé. bạn có 8 bit ví dụ là 00000001 nếu bạn dịch phải 1 bit có nghĩ lúc này số 1 sẽ được chuyển về vị trị có trọng số cao nhất nó sẽ thành 10000000.
                  vầy là không đọc bài kỹ rồi. lệnh RR A làm sao có thể dịch 00000001 thành 10000000 được. nếu muốn điều này thì bạn phải sử dụng thêm cờ C và xoay luôn cả cờ C nữa.
                  Code:
                  mov c,#0
                  loop:mov a, #00000001b
                  rrc a
                  jnc, loop
                  rrc a
                  mov p1,a ;p1=10000000

                  Comment


                  • #10
                    Nguyên văn bởi caovanhuong Xem bài viết
                    vầy là không đọc bài kỹ rồi. lệnh RR A làm sao có thể dịch 00000001 thành 10000000 được. nếu muốn điều này thì bạn phải sử dụng thêm cờ C và xoay luôn cả cờ C nữa.
                    Code:
                    mov c,#0
                    loop:mov a, #00000001b
                    rrc a
                    jnc, loop
                    rrc a
                    mov p1,a ;p1=10000000
                    vâng. thanks bác.@@
                    Nguyễn Huy Biên - 01649 802 694
                    gmail :

                    Comment


                    • #11
                      Nguyên văn bởi caovanhuong Xem bài viết
                      vầy là không đọc bài kỹ rồi. lệnh RR A làm sao có thể dịch 00000001 thành 10000000 được. nếu muốn điều này thì bạn phải sử dụng thêm cờ C và xoay luôn cả cờ C nữa.
                      Code:
                      mov c,#0
                      loop:mov a, #00000001b
                      rrc a
                      jnc, loop
                      rrc a
                      mov p1,a ;p1=10000000
                      viết lệnh ASM sai, và nếu RR A ko xoay A,#00000001B thành A,#10000000B thì tôi đi đầu xuống đất.

                      Nguyên văn bởi caovanhuong Xem bài viết
                      Code:
                      mov a,p1 ; P1=11010110
                      swap a ; A=01101011
                      mov p1,a ; P1=01101011
                      và cả cái này cũng sai luôn. Ko có chuyện SWAP A từ 1101 0110 thành 0110 1011
                      đảo là đổi vị trí 2 byte cho nhau chứ ko phải là lật ngược toàn bộ word

                      Comment


                      • #12
                        Nguyên văn bởi chung1608 Xem bài viết
                        viết lệnh ASM sai, và nếu RR A ko xoay A,#00000001B thành A,#10000000B thì tôi đi đầu xuống đất.
                        tại tôi lâu rồi không sử dụng con này nên quyên là không co mov c, #0 mà phải thay thành clr c
                        còn lệnh RRA có thể xoay A,#00000001B thành A,#10000000B
                        xin lỗi bạn bienhou và cảm ơn bạn chung1608
                        Nguyên văn bởi chung1608 Xem bài viết
                        và cả cái này cũng sai luôn. Ko có chuyện SWAP A từ 1101 0110 thành 0110 1011
                        đảo là đổi vị trí 2 byte cho nhau chứ ko phải là lật ngược toàn bộ word
                        tại
                        cái này là do tôi viết nhầm. A từ 11010110 thành 01101101 chứ không phải 1101 0110 thành 0110 1011. tôi xin lỗi về điều này
                        còn lênh SWAP A là lệnh đổi 4 bit cao cho 4 bít thấp chứ không có chuyện đổi vị trí 2 byte cho nhau.

                        Comment


                        • #13
                          Nguyên văn bởi caovanhuong Xem bài viết
                          mấy lệnh này sử dụng không được. không đúng với yêu cầu của đề bài.

                          cái này là đảo 4 bít cap cho 4 bit thap. bạn sử dụng lệnh SWAP
                          Code:
                          mov a,p1
                          swap a
                          mov p1,a
                          VD: P1= 00001111
                          thì swap p1 => p1= 11110000 và trường hợp của bạn
                          Code:
                          mov a,p1 ; P1=11010110
                          swap a ; A=01101011
                          mov p1,a ; P1=01101011
                          Nguyên văn bởi baoitc Xem bài viết
                          Mấy bác cho em hỏi chút về lệnh trong vi xử lý:
                          Tình hình là em gắn cho port1 có giá trị là 11010110 mà em muốn cho nó xuất giá trị ra port1 01101011( ngược lại) mà em gà quá xem trong sách cũng ko có, bác nào biết dùng lệnh gì hay cách nào chỉ giáo giúp em với, thank mấy bác nhiều
                          Bác xem lại yêu cầu của đề bài đi !

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          Đang tải...
                          X