Thông báo

Collapse
No announcement yet.

"PORTx ghi giá trị 1 khi làm cổng out thì có điện trở kéo" xin giải thích giùm mình ?

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

  • "PORTx ghi giá trị 1 khi làm cổng out thì có điện trở kéo" xin giải thích giùm mình ?

    "Khi PORTx được ghi giá trị 1 khi các chân có cấu tạo như cổng ra thì điện trở kéo là chủ động(được nối với cổng)"

    trong 1 tài liệu ghi vậy nhưng ko rõ như thế nào? câu này có nghĩa là khi set 1 thì nó sử dụng điện trở tích hợp trong chip giùm mình phải ko? hay là sao?

  • #2
    ở một số loại chip thì khi out put là 1 thì chân đó được "thả nổi" nếu không có điện trở kéo lên thì không tạo được mức "high", còn khi có trở kéo thì chân đó đc kéo lên = điện áp kéo đó. Còn khi out put là 0 thì chân đó được nối với đất. Đặc điểm kỹ thuật này thường được sử dụng như kiểu "open drain" cho phép tạo mức logic 1 với mức điện áp khác nhau (tùy thuộc vào trở kéo lên mức cao bao nhiêu). Tuy nhiên nhược điểm là khi xuất mức 0 thì vẫn tiêu thụ dòng. Một số loại chip thì điện trở kéo này được tích hợp luôn bên trong. Một số thì sử dụng kỹ thuật khác kiểu push - pull bằng mosfet (không có trở).

    Comment


    • #3
      Nguyên văn bởi vuhapassall Xem bài viết
      ở một số loại chip thì khi out put là 1 thì chân đó được "thả nổi" nếu không có điện trở kéo lên thì không tạo được mức "high", còn khi có trở kéo thì chân đó đc kéo lên = điện áp kéo đó. Còn khi out put là 0 thì chân đó được nối với đất. Đặc điểm kỹ thuật này thường được sử dụng như kiểu "open drain" cho phép tạo mức logic 1 với mức điện áp khác nhau (tùy thuộc vào trở kéo lên mức cao bao nhiêu). Tuy nhiên nhược điểm là khi xuất mức 0 thì vẫn tiêu thụ dòng. Một số loại chip thì điện trở kéo này được tích hợp luôn bên trong. Một số thì sử dụng kỹ thuật khác kiểu push - pull bằng mosfet (không có trở).
      thank bác đã giải thích giúp, nhưng nói thật tui ko hiểu gì cả hic hic bác có thể giải thích rõ hơn được ko (nếu có ví dụ cụ thể thì tốt quá). Tui người ngoại đạo nên kiến thức còn kém ^^!

      theo bác giải thích + thực hành thì tui hiểu sơ như thế này ko biết phải ko? khi output = 0, 1 led được nối với chân output này đi ra cực âm, chiều dòng điện từ IC ra, ngược lại nếu output = 1, thì chiều dòng điện từ ngoài (led) vào chân IC. Còn vấn đề điện trở kéo gì đó thì tui chưa hiểu, ko biết nó có quan trọng ko?

      cho tui hỏi thêm 1 cách viết code c cho con avr:
      void daydulieu(unsigned char x)// Ham dua du lieu ra PORT
      {
      switch(x) // Tuy thuoc vao bien dau vao ma dua du lieu ra tu 0...9
      { //logic 1 tat led, logic 0 bat led
      case 0: { PORTB=0xC0; break; } // So 0
      case 1: { PORTB=0xF9; break; } // So 1
      case 2: { PORTB=0xA4; break; } // So 2
      case 3: { PORTB=0xB0; break; } // So 3
      case 4: { PORTB=0x99; break; } // So 4
      case 5: { PORTB=0x92; break; } // So 5
      case 6: { PORTB=0x82; break; } // So 6
      case 7: { PORTB=0xF8; break; } // So 7
      case 8: { PORTB=0x80; break; } // So 8
      case 9: { PORTB=0x90; break; } // So 9
      }
      }
      trong hàm này được set cứng PORTB, giờ tui muốn truyền thêm 1 tham số đó là PORTx mà mình muốn xử lý trong hàm, ví dụ muốn dùng PORTD thì daydulieu(PORTB, 9); lúc khai báo hàm này ko biết PORTx là kiểu dữ liệu gì để khai báo tham số PORTx này.
      Last edited by lion080889; 29-12-2013, 23:34.

      Comment


      • #4
        Tùy trình dịch. HT,XC, MikroC thì cứ giã PORTB vào còn CCS thì khai báo
        #byte PORTB = địa chỉ PORTB rồi sau đó làm như mấy thằng kia.

        Comment


        • #5
          Nguyên văn bởi duong_act Xem bài viết
          Tùy trình dịch. HT,XC, MikroC thì cứ giã PORTB vào còn CCS thì khai báo
          #byte PORTB = địa chỉ PORTB rồi sau đó làm như mấy thằng kia.
          tui đang dùng trình CodeVisionAVR, bác có thể chỉ tui cách sử dụng rõ hơn được ko?

          thank bác.

          Comment


          • #6
            tình hình là sau khi mò mẫm đã làm được ^^ code em nó đây cho những ai như mình
            void shownumber(unsigned char *PORTx, unsigned char x)// Ham dua du lieu ra PORT
            {
            switch(x) // Tuy thuoc vao bien dau vao ma dua du lieu ra tu 0...9
            {
            case 0: { *PORTx=0x3F; break; } // So 0
            case 1: { *PORTx=0x06; break; } // So 1
            case 2: { *PORTx=0x5B; break; } // So 2
            case 3: { *PORTx=0x4F; break; } // So 3
            case 4: { *PORTx=0x66; break; } // So 4
            case 5: { *PORTx=0x6D; break; } // So 5
            case 6: { *PORTx=0x7D; break; } // So 6
            case 7: { *PORTx=0x07; break; } // So 7
            case 8: { *PORTx=0x7F; break; } // So 8
            case 9: { *PORTx=0x6F; break; } // So 9
            }
            }
            sử dụng:
            shownumber(&PORTC, 0);
            shownumber(&PORTD, 0);
            Còn vấn đề về con trỏ kéo ở trên có bác nào giải thích cho mình rõ hơn được ko?

            Thanks

            Comment


            • #7
              Nguyên văn bởi lion080889 Xem bài viết
              tui đang dùng trình CodeVisionAVR, bác có thể chỉ tui cách sử dụng rõ hơn được ko?

              thank bác.
              Xin lỗi nhầm sang PIC. CodeVisionAVR cũng làm vậy thôi.

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X