Thông báo

Collapse
No announcement yet.

Nhờ các cao thủ giúp đỡ

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

  • Nhờ các cao thủ giúp đỡ

    Tôi muốn dùng 6 bít P1.2 tới P1.7 làm chân ra của AT89C2051. Còn P1.0 và P1.1 làm chân vào cho bộ so sánh tương tự. Vậy làm thế nào để set 6 bit trên (như set byte ấy) mà không ảnh hưởng tới 2 bit P1.0 và P1.1.

  • #2
    Nguyên văn bởi Imhotep Xem bài viết
    Tôi muốn dùng 6 bít P1.2 tới P1.7 làm chân ra của AT89C2051. Còn P1.0 và P1.1 làm chân vào cho bộ so sánh tương tự. Vậy làm thế nào để set 6 bit trên (như set byte ấy) mà không ảnh hưởng tới 2 bit P1.0 và P1.1.
    Có 1 cách như sau:
    1. Đọc cổng P1 và AND cổng P1 với 00000011b ( giữ lại 2 bit 0 và 1)
    2. 6 bit cần đưa ra nằm trong 1 byte và bít 0 và 1 phải =0
    3. OR 1 với 2 và đưa ra P1

    Khi lập trình cụ thể thì giải thuật có thể ngắn hơn
    Chúc bạn thành công

    email:mahaco@fpt.vn

    Comment


    • #3
      Nhưng còn một vấn đề là tôi phải set P1 liên tục, lúc đó có ảnh hưởng tới đầu vào ở hai chân P1.0 và P1.1 không? Vì tôi phải đọc trạng thái của P3.6 liên tục từ hai chân này. Tôi thấy là P3.6 có thể bị sai tại thời điểm set P1.

      Comment


      • #4
        Nguyên văn bởi Imhotep Xem bài viết
        Nhưng còn một vấn đề là tôi phải set P1 liên tục, lúc đó có ảnh hưởng tới đầu vào ở hai chân P1.0 và P1.1 không? Vì tôi phải đọc trạng thái của P3.6 liên tục từ hai chân này. Tôi thấy là P3.6 có thể bị sai tại thời điểm set P1.
        Cái giải thuật trên đã giải quyết đúng mong muốn của bạn rồi mà

        email:mahaco@fpt.vn

        Comment


        • #5
          Xem lại hộ mình với

          Dưới đây là CTC để làm nhiệm vụ này, nhưng tôi mô phỏng = Keil thì nó chạy không đúng lắm. Không hiểu có bị sai gì kô? Giúp mình với?

          void output()
          {
          led=0;
          x=P1; //đọc cổng P1
          y=x&&0x03; //AND nó với 00000011b
          P1=steps[step||y]; //lấy một phần tử trong mảng và OR với y trước khi xuất ra P1.
          wait_a_second();
          }

          Nhưng kết quả là khi mô phỏng, trên P1 chỉ luôn có giá trị 00000001b, mà đáng nhẽ nó phải biến đổi liên tục theo các phần tử trong mảng.

          Comment


          • #6
            y=x&&0x03; //AND nó với 00000011b
            1 dấu "&" thui , && là trong so sánh logic AND.Cũng như thế || là trong so sánh logic OR

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X