Thông báo

Collapse
No announcement yet.

vi điều khiển 8051

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

  • vi điều khiển 8051

    mình đang tìm hiểu về vi điều khiền 8051
    ai có tài liệu thì cho mình nhá
    cảm ơn

  • #2
    Nguyên văn bởi quydt1 Xem bài viết
    mình đang tìm hiểu về vi điều khiền 8051
    ai có tài liệu thì cho mình nhá
    cảm ơn
    vao google.com lay tai lieu thay tong van onhttp://dientuvietnam.net/forums/images/smilies/53.gif

    Comment


    • #3
      Nguyên văn bởi quydt1 Xem bài viết
      mình đang tìm hiểu về vi điều khiền 8051
      ai có tài liệu thì cho mình nhá
      cảm ơn
      Trước tiên muốn hỏi gì thì bạn vào diễn đàn tìm đã, ở diễn đàn này có 2 luồng về vi điều khiển 8051.

      Comment


      • #4
        Nguyên văn bởi quydt1 Xem bài viết
        mình đang tìm hiểu về vi điều khiền 8051
        ai có tài liệu thì cho mình nhá
        cảm ơn
        Đây là cuốn sách mình vừa viết trong hè vừa rồi, hy vọng sẽ giúp ích được cho bạn.

        http://dientuvietnam.net/forums/atta...4&d=1253248138

        Comment


        • #5
          nút nhấn trong 8051

          các bac ui cho em hỏi chút?
          em đang làm về matran phím như sau:
          em nhấn nút thứ nhất, và kiểm tra nút thứ 2 trong 5s
          trong 5s nếu nút thứ 2 đc nhấn thì thực hiện chương trình với giá trị nhận đc từ 2 nút
          còn sau 5s ma` nút thứ 2 ko đc nhấn thì thực hiên chương trình với giá trị của nút nhấn lần thứ nhất??
          thankkkkkkkSSSSSS!!
          đang làm đồ án

          Comment


          • #6
            Nguyên văn bởi mr.ngoc Xem bài viết
            các bac ui cho em hỏi chút?
            em đang làm về matran phím như sau:
            em nhấn nút thứ nhất, và kiểm tra nút thứ 2 trong 5s
            trong 5s nếu nút thứ 2 đc nhấn thì thực hiện chương trình với giá trị nhận đc từ 2 nút
            còn sau 5s ma` nút thứ 2 ko đc nhấn thì thực hiên chương trình với giá trị của nút nhấn lần thứ nhất??
            thankkkkkkkSSSSSS!!
            đang làm đồ án
            Chào bạn !

            Vấn đề của bạn mình xin giải quyết như sau :

            - Theo như bạn nói thì ma trân phím của bạn chỉ gồm 2 phím.
            - Khi bấm phím 1 -> đợi 5s, nếu phím 2 được bấm sẽ thực hiên chương trình 2, nếu không thì sẽ thực hiện chương trình 1. Như vậy, mình sẽ dùng 2 chương trình con là ct1() và ct2() tương ứng với 2 sự kiện trên, còn việc xây dựng 2 chương trình con thế nào thì bạn ko nói nên mình chỉ làm tượng trưng thế thôi nhé.
            - Đây là chương trình mẫu mình làm, mình gửi kèm bạn bản mô phỏng (mình dùng proteus 7.5 SP3, nếu bạn dùng proteus các phiên bản trước thì không mở được bản mô phỏng đâu)
            Code:
            #define P1_0 phim1
            #define P1_1 phim2
            #include <REGX51.H>
            void ct1(){
            	P2 = 5;
            }
            void ct2(){
            	P2 = 6;
            }
            void main(){
            	int i,j,t = 0,ms = 5000;
            	P1 = 0xFF;
            	P2 = 0x00;
            	while(1){
            		if(phim1 == 0){
            			for(i = 0; i < ms; i++)		// tạo độ trễ 5s
            				for(j = 0; j < 125;j++){ 
            					if(phim2 == 0){	  // Nếu phím 2 được bấm thì dừng vòng lặp
            						t = 1;	
            						break;
            					}
            				}
            			if( t == 0) 
            				ct1();
            			else
            				ct2();
            		}
            		t = 0;ms = 5000;
            	}
            } //hết code
            Nếu chỉ có phím 1 được bấm thì led sẽ hiện số 5, nếu có cả phím 2 được bấm trong vòng 5s thì led sẽ hiện số 6.

            Chương trình trên tạo độ trễ gần chính xác là 5s thôi, nếu bạn muốn chính xác hơn thì có thể dùng timer.

            Chúc bạn thành công !
            Attached Files
            Last edited by pk178; 18-09-2009, 18:58.

            Comment


            • #7
              Dear Mr.Ngoc, Mr.pk178!

              - Thuật toán kiểm tra phím bấm của bạn pk178 chỉ dùng được trong trường hợp chỉ có 2 phím bấm đơn nối riêng rẽ vào hai chân của VDK. Trong trường hợp của bạn Mr.Ngoc cần dùng ma trận phím thì không nhận ra được phím bấm. Muốn nhận ra phím bấm trong ma trận phím cần phải có một chương trình quét.
              - Bạn Mr.Ngoc thử thuật toán này xem:

              Quy định 4 cờ để đánh dấu sự kiện:
              Cờ 1 đánh dấu sự kiện bấm phím 1
              Cờ 2 đánh dấu sự kiện bấm phím 2
              Cờ 3 tương ứng với việc thực hiện công việc của phím 1
              Cờ 4 tương ứng với việc thực hiện công việc của phím 1 và phím 2

              Chương trình chính:
              1. Quét phím
              2. Nếu phím 1 được bấm (không quan tâm đến sự kiện bấm các phím khác)
              {
              + Nếu cờ 1 chưa dựng (chưa bấm lần nào)
              {
              -Dựng cờ 1 lên
              -Bật Timer cho chạy
              }
              + Nếu cờ 1 đã được dựng thì không làm gì cả
              }
              3. Nếu phím 2 được bấm (không quan tâm đến sự kiện bấm các phím khác)
              + Nếu cờ 1 đã được dựng (đã bấm phím 1) thì dựng cờ 2 lên
              + Nếu cờ 1 chưa được dựng thì không làm gì cả
              4. Kiểm tra cờ 3:
              +Nếu được dựng thì thực hiện công việc tương ứng với phím 1
              (Khi vào chương trình thực hiện phải xóa các cờ đã dựng lên đi)
              5. Kiểm tra cờ 4:
              + Nếu được dựng thì thực hiện công việc tương tứng với phím 1 và 2
              (Khi vào chương trình thực hiện phải xóa các cờ đã dựng lên đi)
              6. Quay về bước 1


              Chương trình phục vụ ngắt timer:

              1. Nếu cờ 2 được dựng và chưa quá 5s kể từ thời điểm bật Timer
              + Dựng cờ 4 lên
              2. Nếu quá 5s kể từ thời điểm bật timer (bất kể có bấm phím 2 không)
              + Dựng cờ 3 lên

              (Trong ngắt chỉ nên dựng các cờ báo, sau đó sẽ kiểm tra cờ để thực hiện trong chương trình chính, trong ngắt nên xử lý càng nhanh càng tốt)

              Bạn thử xem kết quả thế nào.

              Thân.
              Toan.lv
              For a better world

              Comment


              • #8
                mình có một yêu cầu về lập trình như sau:viết chương trình điều khiển 2 trong 4 cổng của 89c51 hiển thị ra Led đơn,nhiều trạng thái.các bạn giúp mình nhé,nếu ai có sơ đồ mạch điều khiển thì post nên nha.ok?thanks
                Bạn phải nói rõ yêu cầu bài toán ra thì mọi người mới biết để trả lời. Bạn nói chung chung quá.
                For a better world

                Comment


                • #9
                  Chào bạn Toan.Lv !

                  Ý tưởng của bạn khá hay, vì nếu mình cần mở rộng ma trận phím thì có thể dễ dàng thực hiện. Bạn nói đúng, chương trình của mình chỉ thực hiện được với trường hợp có 2 phím bấm, vì mình thấy bạn Ngọc cũng chỉ yêu cầu vậy thôi mà.

                  Mình không muốn sử dụng thêm timer hay ngắt làm gì, vì như vậy sẽ lãng phí tài nguyên của vđk. Mình nghĩ đây chỉ là bài toán nhỏ trong bài toán tổng thể mà bạn Ngoc đang làm, nên nếu không yêu cầu cao về độ chính xác thì cũng không cần dùng thêm timer làm gì.

                  Hy vọng bạn Ngoc sẽ tìm ra được phương án tối ưu cho bài toán của mình. Chúc bạn thành công !

                  Comment


                  • #10
                    cảm ơn bạn pk178 nhiều.
                    ma trận phím cua mình gồm 16 phím. dùng cổng p2 để giao tiếp p2.0-p2.3 hang, p2.4-p2.7 cot.
                    mình muốn kiểm tra xem trong 5s thì phim2 có được nhấn ko, và sau 5s thì ko kiểm tra nữa và thực hiện chương trình 1. chứ ko phải sau 5s mới kt phím thư2.
                    mình dùng ASM.


                    Nguyên văn bởi pk178 Xem bài viết
                    Chào bạn !

                    Vấn đề của bạn mình xin giải quyết như sau :

                    - Theo như bạn nói thì ma trân phím của bạn chỉ gồm 2 phím.
                    - Khi bấm phím 1 -> đợi 5s, nếu phím 2 được bấm sẽ thực hiên chương trình 2, nếu không thì sẽ thực hiện chương trình 1. Như vậy, mình sẽ dùng 2 chương trình con là ct1() và ct2() tương ứng với 2 sự kiện trên, còn việc xây dựng 2 chương trình con thế nào thì bạn ko nói nên mình chỉ làm tượng trưng thế thôi nhé.
                    - Đây là chương trình mẫu mình làm, mình gửi kèm bạn bản mô phỏng (mình dùng proteus 7.5 SP3, nếu bạn dùng proteus các phiên bản trước thì không mở được bản mô phỏng đâu)
                    Code:
                    #define P1_0 phim1
                    #define P1_1 phim2
                    #include <REGX51.H>
                    void ct1(){
                    	P2 = 5;
                    }
                    void ct2(){
                    	P2 = 6;
                    }
                    void main(){
                    	int i,j,t = 0,ms = 5000;
                    	P1 = 0xFF;
                    	P2 = 0x00;
                    	while(1){
                    		if(phim1 == 0){
                    			for(i = 0; i < ms; i++)		// tạo độ trễ 5s
                    				for(j = 0; j < 125;j++){ 
                    					if(phim2 == 0){	  // Nếu phím 2 được bấm thì dừng vòng lặp
                    						t = 1;	
                    						break;
                    					}
                    				}
                    			if( t == 0) 
                    				ct1();
                    			else
                    				ct2();
                    		}
                    		t = 0;ms = 5000;
                    	}
                    } //hết code
                    Nếu chỉ có phím 1 được bấm thì led sẽ hiện số 5, nếu có cả phím 2 được bấm trong vòng 5s thì led sẽ hiện số 6.

                    Chương trình trên tạo độ trễ gần chính xác là 5s thôi, nếu bạn muốn chính xác hơn thì có thể dùng timer.

                    Chúc bạn thành công !

                    Comment


                    • #11
                      Nguyên văn bởi mr.ngoc Xem bài viết
                      cảm ơn bạn pk178 nhiều.
                      ma trận phím cua mình gồm 16 phím. dùng cổng p2 để giao tiếp p2.0-p2.3 hang, p2.4-p2.7 cot.
                      mình muốn kiểm tra xem trong 5s thì phim2 có được nhấn ko, và sau 5s thì ko kiểm tra nữa và thực hiện chương trình 1. chứ ko phải sau 5s mới kt phím thư2.
                      mình dùng ASM.
                      Chào bạn !

                      Thứ nhất, bạn dùng ma trận phím -> phải dùng phương pháp quét phím để thực hiện.

                      Điều thứ 2 là có thể bạn làm về asm nên ko rành về C lắm. Nhưng bạn đã thử phần mô phỏng của mình chưa? Chương trình thực hiện đúng yêu cầu là sau khi phím 1 được bấm thì kiểm tra phím 2 được bấm trong vòng 5s. Điều này mình hiểu rõ mà

                      Comment


                      • #12
                        rồi hay quá cảm ơn ban Toan.Lv nhé đúng với yêu cầu của mình rồi mình sẽ thực hiện thử xem thankkkkssss nhiều nhé.
                        mình nghĩ 1 thuật toán đơn giản hơn như sau:
                        dùng ngắt timer0. mình sử dụng 2 cờ nhơ như sau
                        C1 cho phím thứ nhất
                        C2 cho phím thứ 2
                        phím thứ nhất đc nhấn thì set C1 (C1=1)
                        khởi tạo timer0(5s)
                        trong 5s đó kiểm tra phím thứ 2 có được nhấn ko? (call KT_PHIM2)
                        -Nếu phím thư2 được nhấn thì xóa cờ C1 (C1=0)
                        - Nếu phím thư2 ko đc nhấn thì sau 5s cờ TF0 đựoc bật lên và nhảy đến trình phục vụ ngắt
                        ngắt_timer0:
                        -nhảy tới thực hiện chuơng trình 1

                        cảm ơn nhiều!

                        Nguyên văn bởi Toan.Lv Xem bài viết
                        Dear Mr.Ngoc, Mr.pk178!

                        - Thuật toán kiểm tra phím bấm của bạn pk178 chỉ dùng được trong trường hợp chỉ có 2 phím bấm đơn nối riêng rẽ vào hai chân của VDK. Trong trường hợp của bạn Mr.Ngoc cần dùng ma trận phím thì không nhận ra được phím bấm. Muốn nhận ra phím bấm trong ma trận phím cần phải có một chương trình quét.
                        - Bạn Mr.Ngoc thử thuật toán này xem:

                        Quy định 4 cờ để đánh dấu sự kiện:
                        Cờ 1 đánh dấu sự kiện bấm phím 1
                        Cờ 2 đánh dấu sự kiện bấm phím 2
                        Cờ 3 tương ứng với việc thực hiện công việc của phím 1
                        Cờ 4 tương ứng với việc thực hiện công việc của phím 1 và phím 2

                        Chương trình chính:
                        1. Quét phím
                        2. Nếu phím 1 được bấm (không quan tâm đến sự kiện bấm các phím khác)
                        {
                        + Nếu cờ 1 chưa dựng (chưa bấm lần nào)
                        {
                        -Dựng cờ 1 lên
                        -Bật Timer cho chạy
                        }
                        + Nếu cờ 1 đã được dựng thì không làm gì cả
                        }
                        3. Nếu phím 2 được bấm (không quan tâm đến sự kiện bấm các phím khác)
                        + Nếu cờ 1 đã được dựng (đã bấm phím 1) thì dựng cờ 2 lên
                        + Nếu cờ 1 chưa được dựng thì không làm gì cả
                        4. Kiểm tra cờ 3:
                        +Nếu được dựng thì thực hiện công việc tương ứng với phím 1
                        (Khi vào chương trình thực hiện phải xóa các cờ đã dựng lên đi)
                        5. Kiểm tra cờ 4:
                        + Nếu được dựng thì thực hiện công việc tương tứng với phím 1 và 2
                        (Khi vào chương trình thực hiện phải xóa các cờ đã dựng lên đi)
                        6. Quay về bước 1


                        Chương trình phục vụ ngắt timer:

                        1. Nếu cờ 2 được dựng và chưa quá 5s kể từ thời điểm bật Timer
                        + Dựng cờ 4 lên
                        2. Nếu quá 5s kể từ thời điểm bật timer (bất kể có bấm phím 2 không)
                        + Dựng cờ 3 lên

                        (Trong ngắt chỉ nên dựng các cờ báo, sau đó sẽ kiểm tra cờ để thực hiện trong chương trình chính, trong ngắt nên xử lý càng nhanh càng tốt)

                        Bạn thử xem kết quả thế nào.

                        Thân.
                        Toan.lv

                        Comment


                        • #13
                          hic mình dung protus7.4 nên ko mở được đợi mình down bản 7.5 về xem hy`.
                          cảm ơn những góp ý của bạn!
                          Nguyên văn bởi pk178 Xem bài viết
                          Chào bạn !

                          Thứ nhất, bạn dùng ma trận phím -> phải dùng phương pháp quét phím để thực hiện.

                          Điều thứ 2 là có thể bạn làm về asm nên ko rành về C lắm. Nhưng bạn đã thử phần mô phỏng của mình chưa? Chương trình thực hiện đúng yêu cầu là sau khi phím 1 được bấm thì kiểm tra phím 2 được bấm trong vòng 5s. Điều này mình hiểu rõ mà

                          Comment


                          • #14
                            rồi ok! ban pk178 chương trình của bạn ko sai với ý của mình. nhưng đấy là 2 nút đơn. mình đang thực hiện theo cách của bạn Toan.Lv
                            cảm ơn nhiều! có mình sẽ hỏi thêm

                            Comment


                            • #15
                              quét phím thì nên dùng timer quét bạn ah`,vì như thế chương trình sẽ linh hoạt hơn và dễ phát triển chương trình hơn về sau. Bạn nhớ quét phím mức thấp nha vì như thế sẽ an toàn hơn cho VXL, còn tại sao thì bạn tự tìm hiểu nha. chúc bạn thành công ....

                              Email:
                              Tel: 0983.497.310

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X