Thông báo

Collapse
No announcement yet.

Bàn về ngắt và CCS compiler

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

  • #16
    Nguyên văn bởi hitkhoi
    Tùy vào từng loại...mỗi con có giới hạn cho ISR (hay là Program counter).
    Như dòng 16F hay dùng là 16F877A thì là 20MHz...chia ra thì có 5 triệu lệnh trên giây.
    Dòng 18Fxx thì chắc cũng thế.
    Thấy bảo dòng DSPIC còn nhanh hơn 30 triệu lệnh trên giây.
    Chả hiểu gì cả. Cụ thể nếu bị giới hạn thì là thời gian thực hiện ISR tối đa là bao nhiêu?
    Mong các bác trả lời chi tiết hơn.
    Cám ơn

    Comment


    • #17
      Nguyên văn bởi tuancdc
      Chả hiểu gì cả. Cụ thể nếu bị giới hạn thì là thời gian thực hiện ISR tối đa là bao nhiêu?
      Mong các bác trả lời chi tiết hơn.
      Cám ơn
      ac...thế này nhé ...xung clock hay dùng cấp từ thạch anh...ở PIC16 tối đa là 20M...xung này làm cho VDK hoạt động theo nhịp...bộ đếm chương trình thì tự động tăng nhờ có clock...cung cấp địa chỉ cho IR ... nói chung là thòi gian để thực hiện lệnh là phụ thuộc một mặt vào tốc độ thạch anh...ở đây PIC thực hiện 4 chu kỳ đồng hồ thì được một lệnh...nghĩa là khoảng (2us với 20M)
      sở thích: Ngắm gái
      Em xinh thế , em đi @

      Comment


      • #18
        Với CCS :PIC 16F dùng ngắt mềm , do đó CCS sinh mã hệt như khi ta dùng ASM , cũng hỏi vòng và kiểm tra cờ ngắt ( nếu bạn lập trình dùng hơn 1 ngắt ) .Làm sao thay đổi ưu tiên hỏi vòng ? dùng #priotity . Còn nếu muốn tự mình làm mọi thứ thì dùng ngắt #GLOBAL để tự viết ngắt , lưu thanh ghi W và hỏi vòng . Nhưng phải nhớ là không được thêm bất cứ hàm ngắt nào khác , VD #Int_timer1 , . . .
        PIC 18 : phức tạp hơn trên CCS , cách dùng tôi có nói rõ trong bản CCS tiếng việt trên picvietnam.com

        Comment


        • #19
          Các bạn có thể gửi cho mình các link nói về ngắt trong CCS của diễn đàn k?
          link của noisepic post lên bị died rùi.
          Mình đang rất cần, rất mong được sự giúp đỡ của các bạn.thanks..........

          Comment


          • #20
            Mình đang học PIC 16F877a nhưng bằng ngôn ngữ ASM.các bạn ai có đoạn Code nào viết về ngắt trên RB4:RB7 bằng ngôn ngữ ASM không cho mình xin với.Thanks!

            Comment


            • #21
              HELP ME
              minh dang hoc con pic 16f877.minh thu test ngat ngoai RB.theo nhu minh chay chuong trinh bang tay thi thay OK.nhung khi mo phong bang protues thi lai gap vande.minh chi thuc hien ngat co 1 lan nhung chuong trinh lai luon chay ham ngat ma ko lam viec trong ham main nua(cu the la no khi thuc hien ngat thi no khong hieu ham WHILE ).cac ban xem giup va chi cho minh cach khac phuc cai nay nhe,day la chuong trinh va file mo phong protues cua minh.
              link: http://www.mediafire.com/?y4zjfjz2lwm

              #include <16f877.h>
              #device *=16 adc = 10
              #fuses hs,nowdt
              #use delay (clock=20000000)
              int8 a[]={0x03F,0x006,0x05B,0x04F,0x066,0x06D,0x07D,
              0x007,0x07F,0x06F};
              int8 dem=0;
              #int_rb
              void demnguoi(){
              dem++;
              output_d(a[dem]);
              delay_ms(500);
              }
              void main(){
              set_tris_b(0xf0);
              set_tris_d(0x00);
              set_tris_c(0x00);
              enable_interrupts(int_rb);
              ext_int_edge(l_to_h);
              while(1){
              output_high(pin_c0);
              delay_ms(500);
              output_low(pin_c0);
              delay_ms(500);
              }
              }

              Comment


              • #22
                ngat ngoai RB

                HELP ME
                minh dang hoc con pic 16f877.minh thu test ngat ngoai RB.theo nhu minh chay chuong trinh bang tay thi thay OK.nhung khi mo phong bang protues thi lai gap vande.minh chi thuc hien ngat co 1 lan nhung chuong trinh lai luon chay ham ngat ma ko lam viec trong ham main nua(cu the la no khi thuc hien ngat thi no khong hieu ham WHILE ).cac ban xem giup va chi cho minh cach khac phuc cai nay nhe,day la chuong trinh va file mo phong protues cua minh.
                link: http://www.mediafire.com/?y4zjfjz2lwm

                #include <16f877.h>
                #device *=16 adc = 10
                #fuses hs,nowdt
                #use delay (clock=20000000)
                int8 a[]={0x03F,0x006,0x05B,0x04F,0x066,0x06D,0x07D,
                0x007,0x07F,0x06F};
                int8 dem=0;
                #int_rb
                void demnguoi(){
                dem++;
                output_d(a[dem]);
                delay_ms(500);
                }
                void main(){
                set_tris_b(0xf0);
                set_tris_d(0x00);
                set_tris_c(0x00);
                enable_interrupts(int_rb);
                ext_int_edge(l_to_h);
                while(1){
                output_high(pin_c0);
                delay_ms(500);
                output_low(pin_c0);
                delay_ms(500);
                }
                }

                Comment


                • #23
                  Hỏi về ngắt trong pic 16f877a

                  Em có đoạn chương trình sau dùng để hiển thị chữ lên LCD dùng ngắt nhưng không được.
                  Dây là code va sơ đồ nghuyên lý.
                  Rất mong mọi người chỉ cho em chỗ sai.

                  #include "16F877A.h"
                  #include <def_877a.h>
                  #device adc=10
                  #fuses NOLVP, NOWDT, HS
                  #use delay(clock=4000000)
                  //#include <lcd_lib_4bit.c>
                  #include "LCD.c"
                  //#include "lcd.c"

                  /*
                  #define UP PINB4
                  #define DOWN PINB5
                  #define ENTER PINB6*/
                  #define MENU PIN_B0
                  #define LCD_D7 PIN_D7
                  #define LCD_D6 PIN_D6
                  #define LCD_D5 PIN_D5
                  #define LCD_D4 PIN_D4
                  #define LCD_RS PIN_D0
                  #define LCD_RW PIN_D1
                  #define LCD_E PIN_D2

                  int menu1=0;
                  #int_ext
                  void ngat_RB0()
                  {
                  if(menu1==12)
                  menu1=0;
                  menu1+=1;
                  // delay_us(100);
                  break;
                  }

                  void Main()

                  {
                  int menu1=0;
                  /*int count = 0;*/
                  set_tris_b(0xFF); //Khoi tao PORTB -> INPUT
                  set_tris_d(0x00);
                  lcd_init(); //Khoi tao LCD
                  printf (LCD_putc,"\f bien");

                  //portD=0b00001111;
                  while(true)
                  {
                  //Printf(LCD_putc,"Lam");
                  if(input(menu)==1)
                  LCD_init();
                  printf(LCD_putc,"Lam");
                  enable_interrupts(int_ext);
                  ext_int_edge(H_to_L);
                  enable_interrupts(global);
                  break;
                  }
                  if(menu1==1)
                  {
                  LCD_init();
                  printf(LCD_putc,"hello");
                  break;
                  }
                  if(menu1==2)
                  {
                  LCD_init();
                  printf(LCD_putc,"hy vong");
                  }
                  }

                  Comment


                  • #24
                    Ban đầu, Khi vào chương trình thực hiện ngắt bạn cho biến menu tưng lên 1 đơn vị chứ.
                    #int_ext
                    void ngat_RB0()
                    menu=menu+1;
                    chúc thành công

                    :

                    Comment


                    • #25
                      Nguyên văn bởi xuanthuytd Xem bài viết
                      HELP ME
                      minh dang hoc con pic 16f877.minh thu test ngat ngoai RB.theo nhu minh chay chuong trinh bang tay thi thay OK.nhung khi mo phong bang protues thi lai gap vande.minh chi thuc hien ngat co 1 lan nhung chuong trinh lai luon chay ham ngat ma ko lam viec trong ham main nua(cu the la no khi thuc hien ngat thi no khong hieu ham WHILE ).cac ban xem giup va chi cho minh cach khac phuc cai nay nhe,day la chuong trinh va file mo phong protues cua minh.
                      link: http://www.mediafire.com/?y4zjfjz2lwm

                      #include <16f877.h>
                      #device *=16 adc = 10
                      #fuses hs,nowdt
                      #use delay (clock=20000000)
                      int8 a[]={0x03F,0x006,0x05B,0x04F,0x066,0x06D,0x07D,
                      0x007,0x07F,0x06F};
                      int8 dem=0;
                      #int_rb
                      void demnguoi(){
                      dem++;
                      output_d(a[dem]);
                      delay_ms(500);
                      }
                      void main(){
                      set_tris_b(0xf0);
                      set_tris_d(0x00);
                      set_tris_c(0x00);
                      enable_interrupts(int_rb);
                      ext_int_edge(l_to_h);
                      while(1){
                      output_high(pin_c0);
                      delay_ms(500);
                      output_low(pin_c0);
                      delay_ms(500);
                      }
                      }
                      Sao không thấy dòng này: enable_interrupts(GLOBAL);
                      Nếu trong hàm ngắt bác sử dụng hàm delay_ms(xx) mà trong chương trình nền cũng dùng hàm này thì rất có khả năng chương trình không chạy. Tui chưa biết nguyên nhân vì sao vì tui cũng mới làm với PIC chưa nhiều nhưng thực tế tui đã gặp tình huống này. Kinh nghiệm nữa của tui là trong hàm xử lý ngắt tốt nhất không dùng hàm delay, các hàm ngắt cần thực thi thời gian càng ngắn càng tốt. Nếu không thể thực hiện thời gian ngắn thì nên set một cờ nào đó rồi chuyển bớt qua chương trình nền. Trong trường hợp xử lý bàn phím thì nên chống rung cứng bằng cách nối song song với 1 tụ gốm 100n (104) không nên dùng hàm delay để chống rung.
                      Đó là chút ít kinh nghiệm tui có được khi làm việc với PIC. Chúc bác thành công.
                      Thân ái.
                      Đường đến những ngày vinh quang không còn xa
                      Con đường chúng ta... chúng ta đã chọn.

                      Comment


                      • #26
                        Nguyên văn bởi Hard Xem bài viết
                        Sao không thấy dòng này: enable_interrupts(GLOBAL);
                        Nếu trong hàm ngắt bác sử dụng hàm delay_ms(xx) mà trong chương trình nền cũng dùng hàm này thì rất có khả năng chương trình không chạy. Tui chưa biết nguyên nhân vì sao vì tui cũng mới làm với PIC chưa nhiều nhưng thực tế tui đã gặp tình huống này. Kinh nghiệm nữa của tui là trong hàm xử lý ngắt tốt nhất không dùng hàm delay, các hàm ngắt cần thực thi thời gian càng ngắn càng tốt. Nếu không thể thực hiện thời gian ngắn thì nên set một cờ nào đó rồi chuyển bớt qua chương trình nền. Trong trường hợp xử lý bàn phím thì nên chống rung cứng bằng cách nối song song với 1 tụ gốm 100n (104) không nên dùng hàm delay để chống rung.
                        Đó là chút ít kinh nghiệm tui có được khi làm việc với PIC. Chúc bác thành công.
                        Thân ái.
                        Dùng delay trong ngắt và cả main ??? Nếu dùng trong ngắt mà quá trình xảy ra ngắt liên tục ( trong lúc delay thì sẽ bị Đệ Qui là cho pic không chạy được nữa . Vì thế nhiều trình dịch thường cảnh báo, cấm không cho dùng ở cả ngắt và main.

                        --- Dĩ nhiên trong ngắt ta vẫn có thể dùng delay (tự tạo hàm) và main dùng delay ( khác - thư viện có sẵn chẳng hạn) .... dùng delay trong ngắt thì trước nó ta disable ngắt đi... để ngắt làm việc bình thường ( như trong main) hết delay ta lại enable ngắt lại.

                        Comment


                        • #27
                          Nguyên văn bởi xuanthuytd than men trong ngat rb thi ban chu y dong chu " cu co mot tac dong canh len or xuong thi xay ra ngat rb ko phan biet la canh nao ,mien la co su thay doi trang thai la ngat rb xay ra.do do trong ngat ban phai xet them tha nút nhấn ra chua roi moi thoat ngat"

                          Comment

                          Về tác giả

                          Collapse

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

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

                          Collapse

                          Đang tải...
                          X