Thông báo

Collapse
No announcement yet.

Dành cho người mới tìm hiểu 8051

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

  • Nguyên văn bởi hiodong Xem bài viết
    Đơn giản chỉ là cấp điện cho cái led dấu phẩy đó , thích phẩy ở đâu thì phẩy
    Bạn đọc kỹ câu hỏi của bạn Mr_Vung đưa ra chưa mà bảo thích phẩy ở đâu thì cấp điện cho dấu phẩy của led đó.
    Giả sử tớ có hàm: display(float x) để hiển thị ra led. Nếu tớ chuyền 1 số thực bất kì vào hàm trên thì đều hiển thị dc! Vấn đề là ở đó, thuật toán để hiển thị ra?
    Mình nghĩ bạn nên làm phép so sánh
    Vd: Ta có số ABCD (giả sử chỉ hiển thị được 4 số, 10000>ABCD>=0)
    Nếu 10000>ABCD>=1000 -> i=1 (ABCD)
    Nếu 1000>ABCD>=100 -> i=2 (ABC,D)
    Nếu 100>ABCD>=10 -> i=3 (AB,CD)
    Nếu 10>ABCD>=0 -> i=4 (A,BCD)
    Dựa vào kết quả của biến i mà bạn cho dấu phẩy xuất hiện ở vị trí nào.
    Ví dụ trên của mình đưa ra là số thập phân không cố định, nếu bạn nhập vào 9.5 -> hiển thị 9.500, nếu 95.5 ->95.50
    Muốn bạn muốn hiển thị số thập phân nhỏ hơn 0, có thể làm tương tự!
    Không TÔI là kẻ phàm phu
    Cái TÔI quá lớn làm ngu muội mình!
    - 0983.886.113

    Comment


    • Nguyên văn bởi khiem Xem bài viết
      các pro ơi!cứu em với, em mới học về VXL mà thầy đã giao cho 1 đống bài tập lớn.cụ thể các đề như sau:
      1-thiết kế hệ thống hiển thị sử dụng màn hình LCD character 40*4 hiển thị dòng chữ"hell world"với họ no-chíp 8051.
      2-thiết kế đồng hồ thời gian sử dụng on-chíp 8051
      3-thiết kế hệ thống điều khiển motor bước sử dụng họ on-chíp 8051
      4-thiết kế mấy đo chiều cao sử dụng on chíp 8051
      5-thiết kế hệ thống điều khiển nhiệt độ sử dụng họ on-chíp 8051

      bác nào có mạch và code thì cho em với.
      chân thành cảm ơn các bac!!!!!!
      Trường bạn giỏi thật đó, mới học VXL mà đã cho nhiều bài tập như thế cho 1 SV, chắc đến khi ra trường, mọi thứ liên quan đến VXL các SV của trường bạn đều làm được hết quá!
      Không TÔI là kẻ phàm phu
      Cái TÔI quá lớn làm ngu muội mình!
      - 0983.886.113

      Comment


      • Nguyên văn bởi trong123 Xem bài viết
        Mình mới sửa một số lỗi, bạn test lại thử xem.
        Thử so sánh 2 code, tìm ra chỗ sai (If)
        Code:
        #include<regx51.h>
        #include<stdio.h>
        sbit led1 = P2^0; //
        sbit led2 = P2^1; //
        sbit button = P2^3; // 
        unsigned int code1[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//code bcd
        int i,d;
        void delay(d)
        	{
        	for (i=0;i<d;i++);
        	}
        void main()
        	{
        	button=1;// cái này có bắt buộc không vậy bác?
        	int a=0,ch,dv;
        	while(a!=100)
        		{
        		if(button==0)
        			{
        			a++;
        			ch=a/10;  //sao lại để phần tách số ở đây bác???
        			dv=a%10;
        			}
        		led1=0;led2=1;
        		P0=code1[ch];
        		delay(10); //Nhỏ quá ???(ko hiểu)
        		led2=0;led1=1;                          // delay khoảng bao nhiêu là được thế bác       
        		P0=code1[dv];
        		delay(10);
        		}
        	}
        Chương trình bạn Post lên nhiều lỗi cú pháp thế mà bạn bảo chạy rồi (nhưng không đếm được)???
        cảm ơn bác đã sửa lỗi cho em ,nhưng 1 số chỗ em vẫn ko hiểu tại sao,mong bác chỉ giáo thêm.thank bác nhiều

        làm theo cách của em là không tối ưu đúng không bác.vì phải mất cả 1 P0 để xuất ra giá trị điều khiển led 7seg.nếu dùng IC 7447 để chuyển mã thì chỉ cần 4 chân là có thể xuất các giá trị rồi,tức là bài này em chỉ cần dùng 1 port thôi,nhưng mà em vẫn không thể hình dung được làm thế nào để có thể xuất các giá trị ra IC 7447 được ,mong các bác chỉ giáo giùm
        Last edited by rongconn2t; 15-04-2008, 16:27.

        Comment


        • Nguyên văn bởi rongconn2t Xem bài viết
          cảm ơn bác đã sửa lỗi cho em ,nhưng 1 số chỗ em vẫn ko hiểu tại sao,mong bác chỉ giáo thêm.thank bác nhiều
          1. unigneed: từ khóa này mình chưa thấy bao giờ-> unsigned
          2. code: từ khóa của C, không dùng làm biến được -> code1
          3. tr=a%10: không có khai báo biến tr -> dv
          4. Hàm If:
          - Nếu bạn để đoạn code trong Else, thì khi bạn nhấn nút, đoạn code trong If thực hiện, sau đó thoát khỏi hàm If mà bỏ qua đoạn code thực hiện phép chia trong Else.
          - Theo cách viết của bạn, thì khi nhấn nút, chưa kịp thả nút ra, giá trị của a đã có thể lên đến 100 và thoát khỏi vòng lặp While.
          - Phần phép chia phải để trong If, bởi vì khi nào nhấn nút (a++) thì phép chia mới thực hiện, nếu để bên ngoài, phép chia luôn được thực hiện dù không nhấn nút, như vậy code không tối ưu.
          5. button=1: không bắt buộc, bởi sau khi Reset P2=0FFH, nên để vẫn chặt chẽ hơn.
          6. delay(10) ->delay(500)
          Bây giờ bạn tăng delay lên rồi test lại CT mình đã sửa nhé.
          ...nhưng mà em vẫn không thể hình dung được làm thế nào để có thể xuất các giá trị ra IC 7447 được
          Nối các chân P0.3, P0.2, P0.1, P0.0 vào các chân D,B,C,A của 7447
          MOV P0,#00H -> hiển thị số 0
          MOV P0,#01H -> ---------- 1
          MOV P0,#09H -> ---------- 9
          Last edited by trong123; 15-04-2008, 23:59.
          Không TÔI là kẻ phàm phu
          Cái TÔI quá lớn làm ngu muội mình!
          - 0983.886.113

          Comment


          • Mình thấy các bài viết của các bạn rất có ích. Nhưng cho mình hỏi xíu, nếu dùng ngôn ngữ lập trình cấp cao để lập trình cho 8051 hay 8951 thì có lẽ khá dễ dàng. Nhất là hầu hết các bạn khá quen thuộc với các ngôn ngữ lập trình C,C++ hay Baíc.
            Tuy nhiên nếu được yêu cầu lập trình bằng ngôn ngữ Asembly thì lại khá rắc rối. Các bạn có thể đưa các ví dụ vừa bằng ngôn ngữ C vừa bằng ngôn ngữ Asembly được không.
            Theo mình biết thì một số chức năng hay chương trình điều khiển không thể viết bằng các ngôn ngữ khác mà phải viết bằng Asm rồi nhúng đoạn code đó vào chương trình viết bằng các ngôn ngữ khác.
            Không biết ý kiến của mình có chính xác không, monh mọi người góp ý thêm.
            Lần sau mình sẽ post một số đoạn code để các bạn tham khảo.

            Comment


            • Các bạn thử dùng ngôn ngữ Asm xem sao

              Comment


              • cảm ơn bác về bài giảng,thực sự thì có những đoạn mà bác không nói thì em không thể hình dung ra.
                hiện em đang tập sử dụng encoder để đo lường,vẫn biết nguyên tắt hoạt động của nó nhưng khi em ghép vào thì không thể hình dung được cái giải thuật như thế nào,em nghĩ như thế này bác xem có được không nhá

                #define encoder P2_0
                long unsigned int dem;
                ........
                {
                .......
                while(encoder!=0)
                {while(encoder!0)
                {
                dem+=1;
                }
                }
                }
                .......

                Comment


                • Nguyên văn bởi hphuong_spkt Xem bài viết
                  Các bạn thử dùng ngôn ngữ Asm xem sao
                  Trước đây, mình dùng ASM, mới tìm hiểu về C trong thời gian gần đây. Mình thấy viết bằng C đơn giản hơn ASM.
                  Vd: Trong ASM, mình phải nhớ thanh ghi nào đã sử dụng và chưa sử dụng, để làm biến đếm...Trong C, chỉ cần khai báo các biến (vd: a,b,c,d...) mà không phải quan tâm đến thanh ghi...
                  Mình thấy đa số các công ty đều dùng C bởi tính đơn giản và dễ quản lý code hơn so với ASM. Nhưng C có 1 khuyết điểm so với ASM, nếu cùng tạo chương trình (vd: đèn chớp tắt) thì file Hex từ C sẽ chiếm nhiều dung lương nhớ hơn so với file Hex từ ASM. Những chương trình lớn thì mình không chắc nhưng những chương trình nhỏ như thế này thì mình thấy điều đó đúng.
                  Nguyên văn bởi hphuong_spkt Xem bài viết
                  Theo mình biết thì một số chức năng hay chương trình điều khiển không thể viết bằng các ngôn ngữ khác mà phải viết bằng Asm rồi nhúng đoạn code đó vào chương trình viết bằng các ngôn ngữ khác.
                  Việc này mình chưa thử nên không biết nhưng có một số bạn đã làm điều đó. Các bạn đã thực hiện thành công, xin góp ý! Thanks!
                  Last edited by trong123; 17-04-2008, 23:40.
                  Không TÔI là kẻ phàm phu
                  Cái TÔI quá lớn làm ngu muội mình!
                  - 0983.886.113

                  Comment


                  • Nguyên văn bởi rongconn2t Xem bài viết
                    #define encoder P2_0
                    long unsigned int dem;
                    ........
                    {
                    .......
                    while(encoder!=0)
                    {while(encoder!0)
                    {
                    dem+=1;
                    }
                    }
                    }
                    .......
                    while(encoder!0)
                    Lệnh này bạn có viết sai không, mình không hiểu?
                    Nếu while(encoder!=0) thì lặp lại vòng lặp trên?
                    Nếu while(encoder=0) mâu thuân với vòng lặp trên?
                    Bạn nên xem lại chỗ này nhé!
                    Last edited by trong123; 17-04-2008, 23:39.
                    Không TÔI là kẻ phàm phu
                    Cái TÔI quá lớn làm ngu muội mình!
                    - 0983.886.113

                    Comment


                    • các bác à!! em cũng mới tập tọe về VDK thôi nhưng em không hiểu các lệnh ngắt lắm. vậy các bác giúp em chút đc không ???
                      rất mong tin từ các bạc tiến bối giúp em với!!
                      thnk !!!
                      nickname: vinh_tb20002000
                      hay SDT: 0983665311

                      Comment


                      • Nguyên văn bởi hero8x Xem bài viết
                        các bác à!! em cũng mới tập tọe về VDK thôi nhưng em không hiểu các lệnh ngắt lắm.
                        Chuyện bình thường thôi!
                        Mình khuyên bạn nên đọc sách, tài liệu, không hiểu chỗ nào thì hãy hỏi mọi người.
                        Không TÔI là kẻ phàm phu
                        Cái TÔI quá lớn làm ngu muội mình!
                        - 0983.886.113

                        Comment


                        • Nguyên văn bởi trong123 Xem bài viết
                          while(encoder!0)
                          Lệnh này bạn có viết sai không, mình không hiểu?
                          Nếu while(encoder!=0) thì lặp lại vòng lặp trên?
                          Nếu while(encoder=0) mâu thuân với vòng lặp trên?
                          Bạn nên xem lại chỗ này nhé!
                          sorry bác là

                          while(encoder!=0)
                          {
                          while(encoder!=1)
                          {
                          dem+=1;
                          }
                          }


                          nhưng mà làm thế này thì khi encoder ở vị trí 0 thì nó sẽ +dem mãi và có khi là trong cùng 1 xung đưa đến nó có thể +dem nhiều lần

                          ==>không ổn
                          bác có cách nào có thể đếm được xung encoder không?
                          thank bác

                          Comment


                          • Mình thử đưa lên một đoạn code

                            Các bạn thảo luận đều sử dụng ngôn ngữ C,mình thử đưa lên một đoạn code điều khiển LED viết bằng Asembly để mọi người cho ý kiến nha

                            LED equ p1 ; gán po rt1 của 8951 là ngõ ra kết nối led

                            org 0000h ; bắt đầu chương trình tại địa chỉ 0000h
                            loop1: mov r0,#01h ;đặt giá trị ban đầu là 00000001b cho thanh ghi r0
                            loop: jb p1.7,loop1 ;vòng lặp để lặp lại khi led thứ 8 đã sáng
                            mov LED,r0 ; xuất giá trị ra led
                            rl r0 ; xoay trái thanh ghi r0 nghĩa là nếu r0=00000001b thì sau đo là 0000010b
                            sjmp loop ;thực hiện tiếp vòng lặp
                            ret

                            Đây là một chương trình nhỏ để điều khiển 8 LED đơn sáng tuần tự từ phải sang trái. Chương trình còn thiếu một đoạn nữa, rất mong các bạn góp ý bổ xung hoặc chữa lại dùm mình.

                            Comment


                            • Nguyên văn bởi trong123 Xem bài viết
                              Trước đây, mình dùng ASM, mới tìm hiểu về C trong thời gian gần đây. Mình thấy viết bằng C đơn giản hơn ASM.
                              Vd: Trong ASM, mình phải nhớ thanh ghi nào đã sử dụng và chưa sử dụng, để làm biến đếm...Trong C, chỉ cần khai báo các biến (vd: a,b,c,d...) mà không phải quan tâm đến thanh ghi...
                              Mình thấy đa số các công ty đều dùng C bởi tính đơn giản và dễ quản lý code hơn so với ASM. Nhưng C có 1 khuyết điểm so với ASM, nếu cùng tạo chương trình (vd: đèn chớp tắt) thì file Hex từ C sẽ chiếm nhiều dung lương nhớ hơn so với file Hex từ ASM. Những chương trình lớn thì mình không chắc nhưng những chương trình nhỏ như thế này thì mình thấy điều đó đúng.

                              Việc này mình chưa thử nên không biết nhưng có một số bạn đã làm điều đó. Các bạn đã thực hiện thành công, xin góp ý! Thanks!
                              Cho mình hỏi nếu dùng ngôn ngữ C thì phải dùng chương trình nào để biên dịch ra file Hex. Do từ trước tới giờ mình chưa dùng C để viết cho 8951

                              Comment


                              • Nguyên văn bởi hphuong_spkt Xem bài viết
                                Cho mình hỏi nếu dùng ngôn ngữ C thì phải dùng chương trình nào để biên dịch ra file Hex. Do từ trước tới giờ mình chưa dùng C để viết cho 8951
                                Bạn có thể dùng Keil C,proView... để biên dịch ra file HEX

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                • mèomướp
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi mèomướp
                                  Dạ hông dám làm thì chắc chắn sẽ mãi ko thể làm được đâu ạ. Nguồn xung dân dụng vài kw giờ rất nhìu ạ, sạc ô tô điện, máy hàn, lò vi sóng, âm ly... tùy chất lượng mà độ phức tạp sẽ khác nhau ạ. Và cái giá phải trả về kinh tế...
                                  hôm nay, 13:11
                                • tuyennhan
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi tuyennhan
                                  Sửa dạng này thì chuyên còn không dám chắc khộng cháy nổ với linh kiện bán ngoài chợ nói gì khộng chuyên .
                                  hôm nay, 09:25
                                • tuyennhan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi tuyennhan
                                  Đúng rồi chọn mua theo tai . ca thì phải toàn dải nhạc thì chỉ cao và thấp thé nên loa ca thì nghe nhạc không hay và ngược lại .
                                  Muốn ca và nhạc đều hay thì phải dúng 2 giàn , còn nếu chỉ có 1 thì phải chỉnh sửa lại sao cho ca và nhạc đều được không quá dở ....
                                  hôm nay, 09:10
                                • Ng.Phuong.5
                                  Vấn đề in lỗ khoan ra pdf ở Orcad 9.2
                                  bởi Ng.Phuong.5
                                  Vấn đề cũ: khi in mạch ra pdf và bấm chọn Keep Drill Holes Open, in ra thì pdf trắng đen các lỗ chân linh kiện như nhau. Mặc dù có linh kiện phần Drill là 1mm, có linh kiện thì là 3mm. Cho em hỏi cách sửa phần này ở Orcad 9.2 với ạ.
                                  Mấy con...
                                  Hôm qua, 19:44
                                • viettinh
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi viettinh
                                  Bác nói đúng quá. Cơ mà muốn mua hàng chính hãng, hàng thương hiệu mà tai lại hợp hàng tầu mới khổ chứ.
                                  Đang tính mua cái loa tầu nữa cột đằng sau loa này, Loa sony chỉ để hát nhép thôi, có dc k các bác ...
                                  Hôm qua, 18:12
                                • nguyendinhvan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi nguyendinhvan
                                  Theo tôi thì khi hpj sản xuất ra cái loa đó, đã có nhiều chuyên gia kỹ thuật hiệu chỉnh, tính toán các phần tử kỹ lưỡng rồi.
                                  Bây giờ tính toán hiệu chỉnh lại cần có đội ngũ tương đương với nhà sản xuất.
                                  Cách đơn giản...
                                  Hôm qua, 00:04
                                • mèomướp
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi mèomướp
                                  Dạ cháu có ý tốt muốn động viên chú ấy ngâm cứu khoa học thôi ạ. Về phần kiểm tra dao động thì chú ấy chưa biết thì sẽ tìm hiểu được là cần những gì ạ, chắc chắn là khi hướng dẫn phần ấy các cô chú nào đó sẽ lưu ý cần loại sò công suất ra tránh cháy nổ rồi ạ....
                                  08-01-2025, 19:02
                                • tuyennhan
                                  Trả lời cho Sửa bộ nguồn DC 60V 45A
                                  bởi tuyennhan
                                  Chủ thớt hỏi có kiểm tra được dao động mà không cấp nguồn thì rõ trình ở mức nào mà mèo còn xúi ngâm cứu nữa ác vậy ....
                                  08-01-2025, 15:43
                                • tuyennhan
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi tuyennhan
                                  Loa bass đấu trực tiếp không qua phân tần để thành loa toàn dải xem có thoát tiếng khộng , nếu không thoát cần phải sửa lại mạch cs hay âm sắc nếu đủ trình còn nếu thoát ca hay nhưng chưa vừa ý vì bass kém chăc thì đấu lại như cũ và đấu thêm loa mid treble bên ngoài .
                                  08-01-2025, 15:28
                                • mèomướp
                                  Trả lời cho Cần tư vấn cải thiện chất âm thanh loa SoNy.
                                  bởi mèomướp
                                  Dạ loa tép bé xíu như ngón chân cái thôi ạ. Thiếu gì chỗ để đâu. Quan trọng là gắn thêm nó loa nghe ok hay ko thôi ạ...
                                  08-01-2025, 11:44
                                Đang tải...
                                X