Thông báo

Collapse
No announcement yet.

Đố vui về PIC, các câu đố cực vui và cực hay... hehe..

Collapse
This topic is closed.
X
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #91
    Nguyên văn bởi CHIBANG
    Gửi 4MD: câu đố của bác tại chân RA4 có thêm 1 tính năng đặc biệt nữa mà có khi bác ko nghĩ ra cũng nên... he he...
    Bác CHIBANG làm khó em rồi!
    Có phải ý bác là: Chân RA4 có chức năng khác nữa là lối vào cho một timer ngoài nên cần một điện trở PULL-UP kéo lên khoảng 10k ?

    Comment


    • #92
      Em sẽ trả lời câu đố trên sau 1 tuần nữa, hi hi....
      Và thêm 1 câu đố hay nữa cho các bác đê...cac cao thủ về vi điều khiển nhào dô đê. Câu hỏi này ko chỉ áp dụng cho PIC mà còn ap dụng cho mọi loại vi dieu khien.
      Trong C, nếu khi khai báo biến. Ví dụ:
      unsigned char a,b,....;
      Lỡ may nó báo là hết RAM cho việc khai báo biến. Vậy giải pháp nào để có thể khai báo thêm một số biến kiểu unsigned char mà bộ dịch ko báo lỗi và hệ thống vẫn chạy đúng? khà khà
      -------------------

      Comment


      • #93
        Nguyên văn bởi CHIBANG
        Em sẽ trả lời câu đố trên sau 1 tuần nữa, hi hi....
        Và thêm 1 câu đố hay nữa cho các bác đê...cac cao thủ về vi điều khiển nhào dô đê. Câu hỏi này ko chỉ áp dụng cho PIC mà còn ap dụng cho mọi loại vi dieu khien.
        Trong C, nếu khi khai báo biến. Ví dụ:
        unsigned char a,b,....;
        Lỡ may nó báo là hết RAM cho việc khai báo biến. Vậy giải pháp nào để có thể khai báo thêm một số biến kiểu unsigned char mà bộ dịch ko báo lỗi và hệ thống vẫn chạy đúng? khà khà
        bác có thể truy cập external data memory ,dòng 51 đều có vùng XRAM để truy cập
        có thể dùng khai báo unsigned char xdata để khai báo các mảng lớn
        SHARE KHO PHIM LỚN

        Comment


        • #94
          Hổng đúng, nếu vậy thì phải ghép thêm RAM ngoài thì nói làm gi?
          -------------------

          Comment


          • #95
            Các giải pháp như: ghép thêm bộ nhớ ngoài, tối ưu phần mềm để giảm biến đều ko được chấp nhận. Giải pháp dùng EEPROM, FLASH cũng đương nhiên ko được châp nhận bởi liên quan tới tốc độ và số lần ghi xóa...
            -------------------

            Comment


            • #96
              Thấy bác Falleaf cứ để ở mục chú ý nên tui trả lời vậy. Chi Bang xem có đúng ko nhé.
              Lúc đó huy động các thanh ghi chức năng đặc biệt và coi đó như một biến ta lưu trữ, tất nhiên thanh ghi đó phải đảm bảo các yếu tố như:
              +Có thể ghi/đọc.
              +Ko dùng đến module chức năng liên quan đến thanh ghi đó.

              Ví dụ: nếu ta ko sử dụng đến tính năng ghi/đọc EEPROM của PIC thì có thể coi các thanh ghi như: EEADR,EEADRH,EEDATA coi như là biên lưu trữ

              Ví dụ: nếu ta ko sử dụng đến tính năng của timer1 của PIC hay 89(TMR1ON=0), thì có thể sử dụng các thanh ghi TMR1H,TMR1L coi như là biên lưu trữ
              ...

              Comment


              • #97
                Cái này thú thực falleaf đầu hàng bác CB. Một là Falleaf chưa bao giờ dùng hết RAM theo cái kiểu thiếu vài thanh ghi. Hai là falleaf chưa bao giờ xài HT PIC... thế nên chịu chết, không biết đó có phải là thủ thuật của HT PIC chăng, chứ nếu hết RAM thì đúng là chịu.

                Cách của bác BA thì falleaf không cho rằng đó là ý định đố của CB, nếu mà CB định đố vậy thì rõ ràng là cù nhầy rùi ... hehehe... vì nếu chỉ cần thêm vài thanh RAM, thì vẫn dùng các thanh RAM tương tác không đồng thời để sử dụng được. Thực tế thì sẽ chẳng ai làm kiểu vậy, chỉ cần cải tiến cái này cái kia một tí thì sẽ tiết kiệm được vài thanh RAM đó.

                Có lẽ CB có thủ thuật gì đây...

                Chúc vui.
                Falleaf
                Công ty TNHH Thương mại và Giao nhận R&P
                58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
                mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

                Comment


                • #98
                  Nguyên văn bởi CHIBANG
                  Các giải pháp như: ghép thêm bộ nhớ ngoài, tối ưu phần mềm để giảm biến đều ko được chấp nhận. Giải pháp dùng EEPROM, FLASH cũng đương nhiên ko được châp nhận bởi liên quan tới tốc độ và số lần ghi xóa...
                  Vì em đã chú thích ở trên rồi.

                  Ví dụ khi khai báo hết cả RAM mất rồi, người ta thường nghĩ đến chuyện:
                  -Tối ưu thuật toán để giảm RAM, thường thì tăng khả năng tính toán để giảm RAM.
                  -Ghép RAM ngoài.
                  -Chọn con uC khác nhiều RAM.
                  -Dùng giải pháp Flash/EEPROM để thay thế....

                  Lối mòn là như vậy... và như vậy rất mất nhiều máu...
                  Bởi vậy có một cách khác thường mà ít ai để ý đến là chẳng đi đâu xa là dùng ngay các thanh ghi chức năng để làm RAM vì thực chất nó cũng là RAM mà.Thường thì một ứng dụng ta ko thể sử dụng tất cả các chức năng của vi điều khiển, bởi thế thừa rất nhiều chức năng ko dùng tới, vậy tại sao ta ko tận dụng nó vào việc lưu trữ biến???
                  Ví dụ PIC chẳng hạn: module timer1, timer2, I2C, chức năng ghi/đọc EEPROM, rs232, compare/pwm,adc.... rất rất nhiều. Một ứng dụng thường thì cũng chỉ khai thác một phần nào đó nên ---> thừa nhiều module chưa đụng tới. Trong khi ứng dụng của ta thiếu một vài ô RAM để lưu trữ, ví dụ vài biến: unsigned char, vậy ta dại gì mà ko cù nhầy... tận dụng tài nguyên đó.
                  Tuy nhiên để tận dụng tài nguyên này thì cần phải cẩn thận, đọc kỹ datasheet:
                  -Thanh ghi đó có thể ghi/đọc(vì một số thanh ghi chỉ cho ghi hoặc chỉ cho đọc...)
                  -Module của thanh ghi đó thường disable. Ví dụ timer1 thì phải tắt module timer1 đi mới có thể sử dụng các thanh ghi như TMR1H/L chẳng hạn
                  -Và cách trên nên chỉ áp dụng khi bí, nghĩa là chương trình chỉ thiếu một lượng RAM nho nhỏ để khai báo biến thôi.

                  He he.. và cách trên đã làm cho em 01 lần thành công, do dùng con 16F877A thiếu vài biến, ngại chuyển sang dùng 18F nên tương kế tựu kế.. khà khà...

                  Bác Binh Anh đã có đáp án đúng rồi, khà khà, lần sau bác Binh Anh khoan hãy trả lời nhanh vậy, để các cao nhân khác có hứng thú thì suy nghĩ, thê mới thú vị.
                  Mà sao luồng này chỉ em độc diễn mãi vậy? có ai có câu đố hay ko nào?
                  -------------------

                  Comment


                  • #99
                    Một con uC ko có EEPROM (ko có chức năng tự ghi vào Flash, ko dùng chế độ sleep mode) và vì một số lý do nào đó nên thỉnh thoảng bị reset do WATCHDOG gây ra, do đó các nội dung tại các biến bị xóa về mặc định hết. Thế là công cốc. Trong khi yêu cầu bài toán cần lưu trữ một số biến để tiếp tục chạy cho lần sau. Vậy có thể ko dùng EEPROM mà vẫn giải quyết tốt bài toán này ko?
                    Giả thiết là nguồn rất ổn định và ko bao giờ bị mất điện. Và đương nhiên luôn phải enable WD, và ko được thêm linh kiện phụ.
                    Cấm kích động vì câu đố của tui... khà khà..
                    Last edited by CHIBANG; 27-11-2005, 00:09. Lý do: Thêm một câu đố dễ làm các cao nhân kích động
                    -------------------

                    Comment


                    • Có một số thanh ghi không bị thay đổi trạng thái ghi reset bởi watchdog timer, phải chăng CB muốn dùng những thanh ghi này?

                      Thú thực rất khó khi trả lời cho câu hỏi bất kỳ một con uC nào, nhưng nếu con PIC, thì chúng ta hoàn toàn có thể chỉ ra một số thanh ghi không bị thay đổi giá trị do reset bởi WDT. (Xem tài liệu phần RESET)

                      Cái này là dựa vào câu hỏi "cù nhầy" của CB lần trước mà thử trả lời thôi.. hehehe.. bác CB chơi mấy quả này đúng là falleaf cũng đành bó tay.
                      Falleaf
                      Công ty TNHH Thương mại và Giao nhận R&P
                      58/57 Nguyễn Minh Hoàng - Phường 12 - Quận Tân Bình - TP.HCM
                      mail@falleaf.net - VP: (04) 36408561 - (08) 38119870

                      Comment


                      • Có lẽ bác F nói đúng rồi. Một số con uC khi bị reset của WD hoặc một số nguyên nhân reset khác thì một số thanh ghi ko đổi nội dung.Tính năng này tui đã thử nhưng ko áp dụng vì ko an tâm lắm. Bởi nguồn điện chập chờn xuống quá thấp thì nó ko còn đúng nữa.
                        Có lẽ đây cũng là câu trả lời mà CB đố lại 4MD là chân RA4 có tính năng này. Bị reset do WD nhưng ko thay đổi nội dung chân RA4(nêu gán TRISA4=0).

                        Comment


                        • He he... đúng roài.
                          Có bác nào có câu hỏi nào khác hay hay ko?
                          -------------------

                          Comment


                          • Khà khà, thôi, ta lại hành hạ các cao thủ một câu đố nữa.
                            Giả sử tất cả khởi tạo đều đúng, trình dịch báo dịch thành công. Các cao thủ xem đoạn code sau sai ở đâu?

                            //code khởi tạo...
                            //--------------------------Hàm main
                            main()
                            {
                            while(1)
                            {
                            if(P0_0==0) thu();
                            //code...
                            }
                            }
                            //--------------------------Hàm ngắt:
                            {
                            //code...
                            thu();
                            }
                            //--------------------------Hàm con
                            thu()
                            {
                            char i;
                            for(i=0;i++;i<100)
                            {
                            //Lam mot viec gi do....
                            }
                            }
                            //--------------------------
                            -------------------

                            Comment


                            • Chú giải: câu đố trên áp dụng cho 89, PIC , AVR, 68HC
                              Khà khà...
                              -------------------

                              Comment


                              • Nguyên văn bởi CHIBANG
                                Chú giải: câu đố trên áp dụng cho 89, PIC , AVR, 68HC
                                Khà khà...
                                Có trường hợp thu() trong main() dang chạy thì thu() trong ngắt xảy ra
                                do đó nên khai báo thu() là hàm reentrant

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X