Thông báo

Collapse
No announcement yet.

Các khối lệnh chạy song song

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

  • Các khối lệnh chạy song song

    - Cho em hỏi trong MCU 89S52 có thể lập trình để thực hiện những khối lệnh song song dc ko??

    VD: Trong bảng led, Em muốn viết riêng một khối lệnh cho phần Chữ và một khối lệnh riêng cho phần viền, vậy em phải làm thế nào. Vì nếu viết chung sẽ rất là rối giữa hiệu ứng chữ và hiệu ứng viền . thank regard !!

  • #2
    hiệu ứng viền bạn làm riêng thành một hàm
    VD hiển thị chẳng hạn, sau đó mỗi lần bạn cần cho hiển thị viền thì bàn gọi hàm đó ra, đơn giản thôi mà

    Comment


    • #3
      Nếu muốn lập trình đa nhiệm (real time) thì tất cả các trình biên dịch C đề hỗ trợ. Còn xử lý led thì thiếu gì cách, bạn làm thử đi, khoảng 12Mhz thì thoải mái viết lệnh nó cũng xử lý kịp đó. Nếu không chắc chắn thì dùng timer

      Comment


      • #4
        VD: Por1 có 8 bit .

        /// Phần chữ - 4 bit đầu
        mov p1, # 1010
        delay
        mov p1, # 0101

        // Phần viền - 4 bit cuoi
        mov p1, # 1111
        delay
        mov p1, #0000


        Mình muốn viết 2 phần này riêng biệt ra để dễ xử lý. Nhưng ko biết làm sao để 2 phần này chạy song song voi nhau. Nếu gọi hàm thì trong khi gọi hàm của viền thì phần hiệu ứng chữ sẽ ko chay. Ko biết mình nói có dúng ko. Mong các ban cho mi`nh một giải pháp. Thnk !!

        Comment


        • #5
          Nguyên văn bởi traisanhdieu Xem bài viết
          VD: Por1 có 8 bit .

          /// Phần chữ - 4 bit đầu
          mov p1, # 1010
          delay
          mov p1, # 0101

          // Phần viền - 4 bit cuoi
          mov p1, # 1111
          delay
          mov p1, #0000


          Mình muốn viết 2 phần này riêng biệt ra để dễ xử lý. Nhưng ko biết làm sao để 2 phần này chạy song song voi nhau. Nếu gọi hàm thì trong khi gọi hàm của viền thì phần hiệu ứng chữ sẽ ko chay. Ko biết mình nói có dúng ko. Mong các ban cho mi`nh một giải pháp. Thnk !!
          ai bảo thế? gọi hàm thì gọi hàm chứ nó cũng giống như quét led mà thôi, người ta còn điều khiển riêng ở nhiều port chư đâu phải một port

          Comment


          • #6
            Nguyên văn bởi lee_nguyen Xem bài viết
            ai bảo thế? gọi hàm thì gọi hàm chứ nó cũng giống như quét led mà thôi, người ta còn điều khiển riêng ở nhiều port chư đâu phải một port
            Vậy cho mi`nh một chút code demo đi. Mình dang làm cái thư viện hiệu ứng cho led. Xong rui` sẽ share cho tất cả anh em xài, mình ko rành điện tử lắm, chỉ mới tìm hiểu thui . Thank !! Version 1 của mình chưa có thư viện hiệu ứng. Mình dang làm version 2...

            Comment


            • #7
              Không chỉ với 89S51. Nhiều khi mình muốn 2 hoặc nhiều hơn các chương trình mà bắt buộc nó phải chạy song song thì thế nào. Với yêu cầu của chương trình thì các chương trình con bắt buộc phải chạy cùng 1 lúc.
              Ví dụ:
              Po xuất xung 20KHz
              P1 xuất xung 3KHz
              P2 xuất xung 5KHz
              P3 xuất xung 7KHz
              Thạch anh 12M

              Comment


              • #8
                ANh em cho mi`nh ý kiến đi !! viết chung cung dc nhưng ko rõ ràng, khó sửa chữa lắm . !!

                Comment


                • #9
                  up.......................................

                  Comment


                  • #10
                    Cách này cơ bản cho mọi ứng dụng không phải chỉ chạy led, em sẽ tìm giải thích sao cho gọn nhất để mấy bác dễ thực hiện, có thể làm vài chục hiệu ứng cũng được, chạy trên chip nào tùy ý. Viết tạm trên C mấy bác sửa lại bằng ASM hen

                    1. Hai hiệu ứng không thể chạy đồng thời mà xen kẽ nhau, nhanh chậm không biết. Cứ cờ đến tay là fấk.
                    2. Phân tích hai cái hiệu ứng ra thành mỗi bước, mỗi lần thực hiện một bước. Giả sử hiện 2 hàng led, mục tiêu là cho led chạy từ trái qua phải thì mỗi bước phải thực hiện như sau
                    hàng 1
                    Code:
                    void h1(void)
                    {
                     if (++i1==8)  i1=0;
                     PORTA= 1<<i1;
                    }
                    hàng 2
                    Code:
                    void h1(void)
                    {
                     if (++i2==8)  i2=0;
                     PORTB= 1<<i2;
                    }
                    3. Đặt hai biến t1, t2, mỗi lần tràn timer lại giảm đi 1, khi nào bằng 0 thì đặt lại cho t1 t2 VÀ:
                    3a. Nếu hiệu ứng ngắn gọn như trên thì cho ngay hiệu ứng vào trong ISR
                    Code:
                    interrupt ISR_TIMER(void)
                    {
                       if (--t1==0) 
                        { 
                          t1= T1_INIT;
                          h1();  //hoặc flag1=1
                        }
                    
                       if (--t2==0) 
                        { 
                          t2= T2_INIT;
                          h2(); //hoặc flag2=1
                        }
                    }
                    Chương trình chính chỉ ngồi chơi
                    Code:
                    while(1) {};
                    3b Nếu hiệu ứng dài quá các bác đặt cờ flag1, flag2 và xử lý hiệu ứng trong chương trình chính

                    4. Với T1_INIT khác T2_INIT, ta sẽ có hai hiệu ứng chạy nhanh chậm khác nhau và xem ra có vẻ như "đồng thời"

                    Code:
                    while(1)
                    {
                    if flag 1{
                        flag1=0;
                        h1();
                       }
                    if flag2 {
                       flag2=0; 
                       h2();
                       }
                    //flag3
                    //flag4
                    }}
                    Đã bỏ nghề về quê chăn gà...

                    Comment


                    • #11
                      Bán cho em 500 đồng ASM đi

                      Comment


                      • #12
                        các bác ơi có ct nào dùng ASM không chỉ cho bọn đàn em với .Em cũng đang nghiên cứu thử nhưng chưa có kinh nghiệm .Xin các bác giúp đỡ

                        Comment


                        • #13
                          Hok ai quan tam het vay !!!!!!

                          Comment


                          • #14
                            Xin lỗi, tôi chỉ có thể chỉ các bác phương pháp. Thực hiện trên chip nào ngôn ngữ nào là việc các bác. Thân
                            Đã bỏ nghề về quê chăn gà...

                            Comment


                            • #15
                              Nguyên văn bởi duong_act Xem bài viết
                              Không chỉ với 89S51. Nhiều khi mình muốn 2 hoặc nhiều hơn các chương trình mà bắt buộc nó phải chạy song song thì thế nào. Với yêu cầu của chương trình thì các chương trình con bắt buộc phải chạy cùng 1 lúc.
                              Ví dụ:
                              Po xuất xung 20KHz
                              P1 xuất xung 3KHz
                              P2 xuất xung 5KHz
                              P3 xuất xung 7KHz
                              Thạch anh 12M
                              Chạy cùng 1 lúc chứ không phải là chạy cùng 1 chu kì máy, do đó vẫn xử lí được, tùy trường hợp thôi bạn! Như vd trên của bạn thì ít nhất 50us mới lật cờ để xuất xungg cho P0 1 lần, do đó thời gian còn lại vẫn đủ để làm cho P1, P2, P3 và các thứ khác. Ta có thể dùng 1 timer để định 1 khoảng thời gian cơ sở, mỗi lần tràn thì tăng 4 biến đếm (dùng cho 4 port xuất xung), khi đủ số lần (tg tương đương với chu kì của xung) thì lật cờ tương ứng thôi.
                              !e

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X