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

  • Chắc là lỗi ở vòng for :
    Nguyên văn bởi CHIBANG
    thu()
    {
    char i;
    for(i=0;i++;i<100)
    {
    //Lam mot viec gi do....
    }
    }
    //--------------------------
    nên đổi lại thành :

    for(i=0;i<100;i++)

    Comment


    • Lỗi do bác trungkt nói trên do em đánh máy sai thôi, bỏ qua cho e nhé, vi em ko định nói cái đó. Vì đố như vậy dễ quá
      He he... bác anthrax phát hiện được rồi. Khà khà.. nhưng bác nào giải thích rõ hơn ??? nếu ko khai báo như bác anthrax nói thì sao?
      -------------------

      Comment


      • Nếu ko khai báo "reentrant" thì ví dụ hàm thu()(mức 1) đang trong main đang chạy và i=50 chẳng hạn. Lúc đó đột ngột có ngắt và khi thực hiện ngắt có lệnh gọi lại hàm thu(). Khi chạy hết hàm thu()(mức 2) trong ngắt thì khi đó i=100 mất rồi. Và hết chương trình phục vụ ngắt thì nó quay về main để nó thực hiện công việc đang dang dở, nghĩa là nó quay lại thực hiện tiếp hàm thu()(mức 1). Nhưng bây giờ giá trị của nó ko là 50 mà là 100 mất rồi nên gây ra lỗi ở đây. Đó là do nguyên nhân biến i được lưu trữ ở 1 ô nhớ cố định trong RAM

        Khai báo "reentrant" thì có thể gọi lại hàm đó, có thể hàm trong hàm...

        Không khai báo "reentrant" : do các biến được lưu ở các ô nhớ cố định, và khi hàm ấy được gọi khi chưa thoát ra thì giá trị mới sẽ đè lên giá trị cũ, và ko có sự cất biến đó vào "Ngăn xếp". Nên có thể dẫn tới các biên cục bộ bị sai.

        Comment


        • Nguyên văn bởi CHIBANG
          Lỗi do bác trungkt nói trên do em đánh máy sai thôi, bỏ qua cho e nhé, vi em ko định nói cái đó. Vì đố như vậy dễ quá
          He he... bác anthrax phát hiện được rồi. Khà khà.. nhưng bác nào giải thích rõ hơn ??? nếu ko khai báo như bác anthrax nói thì sao?
          bác BA trả lời hết rồi

          Comment


          • Bác BA đưa cho cái bài của CB viết khen hay, vào thấy hay thật.

            F nhà ta không làm với C nhưng vì nói chuyện với bác BA vui nên đưa thêm một giải pháp củ chuối cho vui.

            Đặt tên hàm khác nhau.

            Khi yêu cầu biến chung, hoặc cùng biến. Thì khai báo biến dạng volatile. Khi đó, tất cả các bản copy của các biến sẽ thay đổi theo. Như vậy, vẫn đảm bảo hai hàm y nhau, nhưng khi viết thì viết dư ra một hàm (tốn bộ nhớ), nhưng không phải suy nghĩ lằng nhằng. Logic sẽ rõ ràng hơn.

            Chờ thêm các bài của CB hehehee... CB bắt đầu lấy biểu tượng của Nigel rồi à, coi chừng lão kiện, và cũng coi chừng ... bị anh em chúng nó bụp

            Hồi tui mới học PIC, Nigel ỗng giúp tui qua email và tin nhắn trên đó nhiều lắm, cho nên gần như tui coi ỗng là thầy, mặc dù ỗng chẳng biết đã giúp bao nhiêu thằng sinh viên từ tò te tí te lên đến master rồi expert bên electro tech.

            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


            • Tiểu đệ có một câu đố vui vui thế này, ChiBang đã đố chủ yếu về cách lập trình, tiểu đệ đố về phần cứng bên ngoài.
              Vấn đề thế này, trong thiết kế phần cứng của PIC do thiết kế các thành phần khác bây giờ chỉ còn:
              - 1 channel ADC (10bit)
              - 1 bộ CCP
              - 1 chân OSCIN, gẫy mất chân OSCOUT
              - 5 chân IO tự do
              - 8 chân để điều khiển 1 LED 7 thanh (loại 1 số) không dùng dot.
              bây giờ cần lắp thêm các thành phần sau đây: 1 LED 7 thanh nữa (loại 1 số),
              1 keymatrix 4x4, 12 đèn LED đơn, ngoài ra hệ thống phải chạy đa tốc độ tức là có thể điều khiển tốc độ của PIC bằng phần mềm bên trong. Ngoài ra tiểu đệ lỡ lắp mạch như ông TM-eDESIGN, tương 13V vào chân PIC khè khè, làm hỏng mất bộ WATCHDOG bây giờ cần thiết kế một bộ hẹn giờ ngoài (do người dùng định được) để đánh thức PIC dậy khỏi chế độ SLEEP để làm một công việc gì đó.
              Yêu cầu: Nếu dùng bộ CCP thì có đủ các chân của nó, nên dùng PWM thì có 1 chân OUT, capture thì có 1 chân, comparator thì có hai chân, LED 7 thanh là loại 1 số không dùng loại 2 số và 8 chân đã nối cứng với 1 LED 7 thanh bây giờ chỉ có thể nối thêm ra một LED khác mà không thể dùng chân này làm việc khác. Keymatrix thì như bình thường vẫn dùng, LED ở đây là LED phát quang bình thường 2 chân. Hệ thống có hai tốc độ thấp và cao, thấp để tích kiệm năng lượng, cao để tính toán việc chọn tốc độ do phần mềm bên trong quyết định. Không dùng thêm IC ngoài, tụ, trở, diode, trans dùng thoải mái.
              Chắc câu này dễ, chờ tin các bác !
              Last edited by phamthaihoa; 07-12-2005, 15:35.

              Comment


              • Chí Bằng huynh đâu nhỉ ?

                Comment


                • Khiếp, nhìn hoa cả mắt, mấy bác này nhiều mẹo nhỉ. Bái phục

                  Comment


                  • Re

                    Mình không sử dụng PIC nên không rành về phần cứng con này tui nhiên mình xin đáp một phần về Keypad thì chỉ cần dùng 1 chân ADC thì có thể điều khiển được 16 phím dễ dàng. Mình dùng AVR chỉ mới 1 ngõ vào ADC mà kết nối được 32 phím và còn có khả năng mở rộng cho phép khoãng 64 phím.
                    Vcc
                    |
                    | | R1
                    | R2 R3 ..... Rn
                    ADC<----|------/\/\/\-----/\/\/\------.........
                    | | |
                    | | |
                    \ key1 \ key2 ... \ key n
                    | | |
                    gnd gnd gnd

                    Comment


                    • Tôi thấy hay hay nên cũng đố vui một đoạn code, đoạn code này tôi đã được 1 thằng Mỹ chỉ giáo, không ít người mắc phải lỗi này.

                      Cho biết kết quả của chương trình dưới?


                      #define BLOCK_SIZE 1024
                      #define START_RAM 0x0100
                      #define END_RAM START_RAM + BLOCK_SIZE

                      void fill_ram(unsigned int n,unsigned char byte)
                      {
                      unsigned char* p = 0;
                      for (p=START_RAM;p< n*END_RAM;p++)
                      *p = byte;
                      }

                      void main()
                      {
                      fill_ram(10,0xAA); // điền 10 kbs RAM với 0xAA bắt đầu từ 0x0100
                      }

                      Comment


                      • Nguyên văn bởi tam1234
                        Mình không sử dụng PIC nên không rành về phần cứng con này tui nhiên mình xin đáp một phần về Keypad thì chỉ cần dùng 1 chân ADC thì có thể điều khiển được 16 phím dễ dàng. Mình dùng AVR chỉ mới 1 ngõ vào ADC mà kết nối được 32 phím và còn có khả năng mở rộng cho phép khoãng 64 phím.
                        Vcc
                        |
                        | | R1
                        | R2 R3 ..... Rn
                        ADC<----|------/\/\/\-----/\/\/\------.........
                        | | |
                        | | |
                        \ key1 \ key2 ... \ key n
                        | | |
                        gnd gnd gnd
                        Trò này trong board TV chúng nó thường làm

                        Comment


                        • Nguyên văn bởi tam1234
                          Mình không sử dụng PIC nên không rành về phần cứng con này tui nhiên mình xin đáp một phần về Keypad thì chỉ cần dùng 1 chân ADC thì có thể điều khiển được 16 phím dễ dàng. Mình dùng AVR chỉ mới 1 ngõ vào ADC mà kết nối được 32 phím và còn có khả năng mở rộng cho phép khoãng 64 phím.
                          Vcc
                          |
                          | | R1
                          | R2 R3 ..... Rn
                          ADC<----|------/\/\/\-----/\/\/\------.........
                          | | |
                          | | |
                          \ key1 \ key2 ... \ key n
                          | | |
                          gnd gnd gnd
                          Cách này dùng được, vì tôi đã dùng rồi, giải pháp được chấp nhận. Nhưng còn nhiều tính năng khác, bác dùng cái này cẩn thận mất cái kia.

                          Comment


                          • Nguyên văn bởi phamthaihoa
                            Chí Bằng huynh đâu nhỉ ?
                            Câu đố của bác trúc trắc, em tập trung công lực mở hết nhãn quang mã vẫn ko tài nào hiểu được bí kíp.
                            Bác nói ngắn gọn hơn, ko cần gợi ý cũng được, gợi ý mất cả hay...
                            Nhưng em hơi đoán ra ý tưởng của bác, em nói ra một số "tinh hoa" bác có ý định có thể dùng như sau:
                            1-Về bắt phím: có thể dùng 1 kênh ADC--->16 phím như chơi, hoặc có thể dùng chung 8 chân của LED 7T(--> ko tốn thêm bất cứ một chân nào khác).
                            2-Về hẹn thời có thê dùng chức năng counter hoặc compare, và phi một giao đông ngoài vào là OK(tốn 1 chân thui nhé).
                            3-12 LED đơn thì chỉ cần tốn 4 chân là OK hết.
                            Tài nguyên chân như trên mình có thể thiết kế ít chân hơn là cái chắc.
                            Về bộ tạo dao đông thì chỉ cần 1-2 con trans là OK.

                            Thiết kế 2 tốc độ có 2 cách:
                            Cách 1: sử dụng sleep mode kết hợp sự đánh thức của bộ dao động ngoài-->phát ngắt vào chân counter/compare(tốc độ thấp) và tốc độ cao là tốc độ khi config bit của PIC.
                            Cách 2: dùng chức năng điều chỉnh lựa chọn bộ chia tần số dao động của PIC(chỉ một số con có thui: ví dụ 16F88/628, 18F4331...)
                            Ko biết tinh hoa của bạn PTH nằm ở đây cả chưa?
                            -------------------

                            Comment


                            • Re

                              Sao hình nó chạy tùm lum thế không biết lúc viết nhìn đẹp lắm mà
                              còn Led thì có thể dùng thêm 7447 không như vậy chỉ cần tốn 4 chân thôi còn Watchdong thì có thể dùng mạch trể kết nối bên ngoài khi PIC còn hoạt động thì nó tạo một xung ở chân nào đó để ngăn không cho ngõ ra của mạch này xuống thấp còn khi PIC bị treo thì chân này nó hoặc thấp hoặc cao nên không tác động thì sau một thời gian trễ nó sẽ có ngõ ra ở mức thấp nên tác động vô chân reset của PIC

                              C
                              PIN? ---------------| |---------------------tới mạch Reset (mạch trễ) phức
                              |____/\/\/\______| tạp qá nên ko vẽ.
                              R
                              giả sử chân Pic ở mức cao thì tụ sẽ dẩn cho đến khi tụ đầy thì ngưng sau đó chân PIC xuống thấp tụ sẽ xã điện qua điện trở R (~1M) quá trình cứ tiếp tục như vậy nó sẽ giữ cho mạch Reset không hoạt động. Mạch này tui cũng dùng để Reset 8051.

                              Comment


                              • Bái phục, bái phục, tiểu đệ phải nghĩ mất hơn hai tiếng đồng hồ, thế mà đại ca giải được ngay, tuy nhiên đa tốc độ thì chưa OK lắm. Mà 12 LED bằng 4 chân, mong đại ca cho cái schematic.

                                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