Thông báo

Collapse
No announcement yet.

các bác giúp em bài này với! em mới học KeilC ! Gặp bài này không biết làm gì!

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

  • #16
    Nguyên văn bởi hoangnam555 Xem bài viết
    Kiel C chỉ là chương trình hỗ trợ lập trình và biên dịch sang file HEX.Còn mấy cái để mà kiel C dich thì phải học vdk mới biết đc chứ.

    Còn nếu nói như cậu học keil C thì là học cách sử dụng phần mềm rồi.
    em mới đc học qua con 89c52!^^

    Comment


    • #17
      proteus của em không hiểu sao bị lỗi rôi! nên chưa chạy thử đc! e làm bài này tren keilc như sau:
      #include <AT89x.h>
      void delay( unsigned char loop)
      {
      unsigned char x,y;
      for (x=0;x<loop;x++)
      {
      for( y=0;y<33;y++) {}
      }
      }
      void main (void)
      {
      while(1)
      {
      P2_0=0;
      delay(200);
      P2_0=1;
      delay(200);
      }
      }

      ///--------- em viết có đúng không các anh?..???
      Last edited by gagafayfay; 14-07-2012, 13:24.

      Comment


      • #18
        Nguyên văn bởi bienhou Xem bài viết
        timer 0 hay timer 1 đều được. tùy vào mục đích của bạn thôi. còn timer chế độ 2 nó là chế độ autoreload, giá trị tự nạp lại. như vậy bạn ko phải nạp lại giá trị cho các thanh ghi TH và TL nữa
        tại mình đang đọc phần lập trình ngắt, thấy dùng chế độ 1 thì cứ phải dừng lại bộ định thời, thấy hơi miễn cưỡng thế nào ý.

        Nguyên văn bởi gagafayfay Xem bài viết
        anh chạy thử chưa?
        mình chưa thử, tại mới vọc, hôm trước có dịch thử bằng Keil C nhưng nạp vào bão lỗi, nên chưa thử lại (căn bản là chưa tìm hiểu cạch dùng phần mềm)

        Comment


        • #19
          Nguyên văn bởi hoangnam555 Xem bài viết
          D là duty,nghĩa là Ton bao nhiêu,Toff bao nhiêu.Theo như cái đề ko ghi có nghĩa là D= 50,Ton = Toff = 50%.
          Mấy cái Timer này trong sách có nói mà.
          Cho mình hỏi là nếu đề yêu cầu Ton=10000us và Toff=100us thì cách làm thế này được không ?
          đầu tiên là setb P1.0, chời cho đến khi có tràn thì mình CLR P1.0 , trước khi thực hiện lệnh RETI thì mình tạo thêm một vòng lặp 100us để dữ Toff=100us được không nhỉ ? (hơi thủ công tý)

          Comment


          • #20
            Nguyên văn bởi huuthobka Xem bài viết
            Cho mình hỏi là nếu đề yêu cầu Ton=10000us và Toff=100us thì cách làm thế này được không ?
            đầu tiên là setb P1.0, chời cho đến khi có tràn thì mình CLR P1.0 , trước khi thực hiện lệnh RETI thì mình tạo thêm một vòng lặp 100us để dữ Toff=100us được không nhỉ ? (hơi thủ công tý)
            Mình cũng đang học vdk,cách của mình là thường dùng Timer 0 or Timer 1 chế độ 2 (8 bit) hoặc chế độ 1 (16 bit),nếu T lớn quá thì kết hợp với các thanh ghi.Còn đếm cờ tràn mình chưa thử.

            Đang học mà cũng lừơi học lắm,giờ vẫn chưa hiểu hết nên chưa làm đc cái gì với vdk.chán.
            ĐT: 0972 20 58 68
            Gmail:

            Comment


            • #21
              Nguyên văn bởi huuthobka Xem bài viết
              Cho mình hỏi là nếu đề yêu cầu Ton=10000us và Toff=100us thì cách làm thế này được không ?
              đầu tiên là setb P1.0, chời cho đến khi có tràn thì mình CLR P1.0 , trước khi thực hiện lệnh RETI thì mình tạo thêm một vòng lặp 100us để dữ Toff=100us được không nhỉ ? (hơi thủ công tý)
              bạn dùng ngắt timer để làm yêu cầu trên nhé. lên google gõ PWM.
              Nguyễn Huy Biên - 01649 802 694
              gmail :

              Comment


              • #22
                Nguyên văn bởi huuthobka Xem bài viết
                Cho mình hỏi là nếu đề yêu cầu Ton=10000us và Toff=100us thì cách làm thế này được không ?
                đầu tiên là setb P1.0, chời cho đến khi có tràn thì mình CLR P1.0 , trước khi thực hiện lệnh RETI thì mình tạo thêm một vòng lặp 100us để dữ Toff=100us được không nhỉ ? (hơi thủ công tý)
                ORG 00H
                MAIN: SETB P1.0
                ACALL DELAY1
                CLR P1.0
                ACALL DELAY2
                SJMP MAIN
                DELAY1:
                MOV TMOD,#10H
                MOV TH1,#HIGH(-10000)
                MOV TL1,#LOW(-10000)
                SETB TR1
                JNB TF1,$
                CLR TF1
                CLR TR1
                RET
                DELAY2:
                MOV TMOD,#01H
                MOV TH1,#HIGH(-100)
                MOV TL1,#LOW(-100)
                SETB TR1
                JNB TF1,$
                CLR TF1
                CLR TR1
                RET
                END
                Viết như thế này đc ko mí bác!
                ĐT: 0972 20 58 68
                Gmail:

                Comment


                • #23
                  Nguyên văn bởi bienhou Xem bài viết
                  bạn dùng ngắt timer để làm yêu cầu trên nhé. lên google gõ PWM.
                  theo mình thì nếu dùng ngắt time mà không có công đoạn sử lý thời gian xung thấp thì Ton=Toff

                  ý mình là ta cần phải có một bước lặp để dữ xung mức thấp trứoc khi thực hiện lệnh RETI

                  Comment


                  • #24
                    Nguyên văn bởi hoangnam555 Xem bài viết
                    Viết như thế này đc ko mí bác!
                    nếu là mình thì mình làm như thế này :
                    ORG 0H
                    const: EQU #-10000
                    MOV TMOD,00000001
                    MOV R1,#100
                    LAP : MOV TH0,HIGHT const
                    MOV TL0,LOW const
                    SETB P1.0
                    SETB TR0
                    JNB TF0,here
                    CLR TR0
                    CLR TF0
                    CLR P2.0
                    here : DJNZ R1,here
                    SJMP LAP
                    END

                    Comment


                    • #25
                      void timer0(void) interrupt 1
                      {
                      TR0 = 0;
                      TF0 = 0;
                      dem++;
                      if(dem > 100)
                      dem = 0;
                      if(dem<tocdo)
                      PWM = 1;
                      else
                      PWM = 0;
                      TR0 = 1;
                      đại loại nó sẽ như thế này.
                      Nguyễn Huy Biên - 01649 802 694
                      gmail :

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      Đang tải...
                      X