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 vodienDT4 Xem bài viết
    bạn nào có code C cho việc đọc cờ bận thì up cho mình tham khảo chút,tình hình vẫn chưa cải thiện
    có khi nào là lỗi ở phần cứng không?!
    0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
    ||
    PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK

    Comment


    • Nguyên văn bởi vo_cam Xem bài viết
      READY: SETB BUSY ;P1.7: CHON LAM BIT KIEM TRA CO BUSY
      CLR RS ;RS = 0: LENH
      SETB RW ;R/W = 1:CHON CHUC NANG DOC TU LCD
      BACK: CLR E ;EN = 0 - > TAO CANH LEN
      SETB E ;EN = 1
      JB BUSY,BACK ; Nhảy về lable back nếu busy vẫn =1
      NOP ;CHO DEN KHI CO BUSY = 0,KHONG BUSY
      RET
      code đã chạy với lcd 2 dòng
      nếu dùng C bạn chuyển các câu lệnh trên sang ngôn ngữ C!
      Chúc thành công!
      Lâu lắm không để ý đến điện tử, nên tìm mấy trang gần gần mà không biết các bác nói về vấn đề gì? Em đoán là đang lục bình về cái lcd

      Bảng mã lệnh của LCD

      Mã (HEX) Lệnh đến thanh ghi của LCD
      01 Xoá màn hình hiển thị
      02 Trở về đầu dòng
      04 Giảm con trỏ(dịch con trỏ sang trái )
      06 Tăng con trỏ(dịch con trỏ sang phải)
      05 Dịch hiển thị sang phải
      07 Dịch hiển thị sang trái
      08 Tắt con trỏ, tắt hiển thị
      0a Tắt hiển thị, bật con trỏ
      0c Bật hiển thi, tắt con trỏ
      0e Bật hiển thị, nhấp nháy con trỏ
      0f Tắt con trỏ, nhấp nháy con trỏ
      10 Dịch vị trí con trỏ sang trái
      14 Dịch vị trí con trỏ sang phải
      18 Dịch toàn bộ hiển thị sang trái
      1c Dịch toàn bộ hiển thị sang phải
      80 Ép con trỏ về đầu dòng thứ nhất
      0c0 Ép con trỏ về đầu dòng thứ 2
      38 Hai dòng và ma tận 5x7.

      Chương trình
      /*=========bo tien xu li===============*/
      #include<AT89x51.h>
      #include<string.h>
      /*===========khai bao bien toan cuc============*/
      sfr LCDdata = 0xA0; // cong P2, 8 bit du lieu.
      sbit BF = 0xA7; // co ban, bit DB7.
      sbit RS = P3^0; // chon thanh ghi
      sbit RW = P3^1; // doc/ghi
      sbit EN = P3^2; //cho phep chot du lieu
      /*===========cac chuong trinh con cua LCD==========*/
      /*--------------kiem tra su san sang cua LCD------------------------*/
      void wait(void)
      {
      RS=0; //chon thanh ghi lenh
      RW=1; //đoc tu LCD
      LCDdata=0xff; //gia tri 0xff
      while(BF) //kiem tra co ban
      {
      EN=0; //dua xung cao xuong thap đe chot.
      EN=1; //dua chan cho phep len cao
      }
      }
      /*------------------------thiet lap lenh cho LCD--------------------------*/
      void LCDcontrol(unsigned char x)
      {
      RS=0;//chon thanh ghi lenh
      RW=0;//ghi len LCD.
      LCDdata=x ;// gia tri x
      EN=1;//cho phep muc cao
      EN=0;//xung cao xuong thap
      wait();//đoi LCD san sang.
      }
      /*------------------------------Khoi tao LCD-------------------------*/
      void LCDinit(void)
      {
      LCDcontrol(0x38);//2 dong va ma tran 5x7
      LCDcontrol(0x0e);//bat man hinh, bat con tro
      LCDcontrol(0x01);//xoa man hinh
      }
      /*-------------------------thiet lap du lieu cho LCD-----------------*/
      void LCDwrite(unsigned char c)
      {
      RS=1;//ghi du lieu
      RW=0;//ghi du lieu len LCD
      LCDdata=c;//gia tri C
      EN=1;//cho phep muc cao
      EN=0;//xung cao xuong thap
      wait();//cho
      }
      void LCDwrites(unsigned char *s)
      {
      unsigned char data lens,count;
      lens=strlen(s);
      for(count=0;count<lens;count++){
      LCDwrite(*(s+count));
      }
      }

      /*========================ham chinh==================*/
      void main(void)
      {
      LCDinit(); // khoi tao LCD
      LCDcontrol(0x80);// dua con tro ve dau dong 1
      LCDwrites("VU XUAN LOI");
      LCDcontrol(0xC0);
      LCDwrites("VI DIEU KHIEN");
      while(1); //vong lap vo han
      }
      Last edited by vuxuanloi; 13-10-2009, 16:16.
      Vũ xuân Lợi
      YM!:

      Comment


      • truoc het cam on ban quynh rat nhieu, minh moi bat dau lam quen voi vdk ho 8051, ban co the gioi thieu ve lap trinh hop ngu cua 8051 cho minh nhe . neu co vi du minh hoa thi cang de hieu hon.

        Comment


        • Giup e voi! hic

          Em dang lam do an mon vie dieu khien dung 8051, em thi dung 89s52, adc0804, voi dien ap tham chieu Vef/2 la 2.5V,lam mach do dien ap voi cac dai dien ap tu 0-5V, 0-25V, 0-50V, em lam thi da chay ngon nhung gap mot van de. vi du khi em do dai dien ap 0-5V, ADC0804 se nhan biet duoc gia tri dien ap nho nhat la 20mV, e thay led7thanh cua e nhap nhay rat mach o vi tri hang chuc mV, con khi e do dai dien ap 0-25V thi vi tri hang tram mV nhay, nhin vao, e thay chan, e muon mach cua e that tot, led khong bi nhay, e khong biet phai lam the nao. Mong moi nguoi giuap do e, e xin cam on
          http://www.mediafire.com/?l2zjn5mwt0t

          Comment


          • cam on quynh rat nhieu.mong ban tich cuc post bai nua nhe

            Comment


            • Nguyên văn bởi talaai_89 Xem bài viết
              Giup e voi! hic

              Em dang lam do an mon vie dieu khien dung 8051, em thi dung 89s52, adc0804, voi dien ap tham chieu Vef/2 la 2.5V,lam mach do dien ap voi cac dai dien ap tu 0-5V, 0-25V, 0-50V, em lam thi da chay ngon nhung gap mot van de. vi du khi em do dai dien ap 0-5V, ADC0804 se nhan biet duoc gia tri dien ap nho nhat la 20mV, e thay led7thanh cua e nhap nhay rat mach o vi tri hang chuc mV, con khi e do dai dien ap 0-25V thi vi tri hang tram mV nhay, nhin vao, e thay chan, e muon mach cua e that tot, led khong bi nhay, e khong biet phai lam the nao. Mong moi nguoi giuap do e, e xin cam on
              http://www.mediafire.com/?l2zjn5mwt0t
              bạn làm mạch thật chưa?
              nhấp nháy ở đây là: giá trị của nó bị nhảy hay cụ thể như thế nào!?
              bạn cần nói cụ thể hơn! và post code cùng mạch nên để mọi người cùng giúp đỡ !
              0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
              ||
              PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK

              Comment


              • vang, e da lam mach cu the, con so bi nhap nhay, chi o 1 vi tri thoi,do la gia tri bi nhay, khong phai tat ca cac chu so deu nhay,khi do o dai 0-5V thi chu so hang chuc mV bi nhay,m khi do o dai 0-25 va 0-50 thi chu so o hang tram mV bi nhay,mong moi nguoi giup do e, e xin cam on.Day la mach va code cua e, mong moi nguoi gop y
                http://www.mediafire.com/?sharekey=0...01da0f25e869f4

                Comment


                • Nguyên văn bởi talaai_89 Xem bài viết
                  vang, e da lam mach cu the, con so bi nhap nhay, chi o 1 vi tri thoi,do la gia tri bi nhay, khong phai tat ca cac chu so deu nhay,khi do o dai 0-5V thi chu so hang chuc mV bi nhay,m khi do o dai 0-25 va 0-50 thi chu so o hang tram mV bi nhay,mong moi nguoi giup do e, e xin cam on.Day la mach va code cua e, mong moi nguoi gop y
                  http://www.mediafire.com/?sharekey=0...01da0f25e869f4
                  mình không xem được mạch của bạn!Mình dùng phần mềm eagle nên không mở được!bạn cho biết thêm là giá trị bị nhấp nháy ở đây có phải là nó không ổn định ở một giá trị: ví dụ lúc nó là số 6 lúc là số 7 ?
                  yahoo: vodanhkithuat86
                  0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
                  ||
                  PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK

                  Comment


                  • Quả thực bài viết của bạn Quynh rất có ích đối với những người đang học Vi điều khiển. Rất mong nhận được thêm nhiều bài viết thú vị khác của bạn. Xin cảm ơn!!!!!!!!!

                    Comment


                    • có ai gặp quynh không nói giùm bạn ấy tiếp tục giúp anh em đi,lâu lắm không thấy bạn đấy nên nữa

                      Comment


                      • Nguyên văn bởi quynh Xem bài viết
                        Đây là quyển sách khá hay về lạp trinh C cho 8051.
                        Tui up mãi lên đây ko được.Bạn nào cần thì liên hệ với mình nhé.Quyển này viết bằng tiếng anh, khá cơ bản.Dung lượng gần 5MB
                        Mình biết bài viết đây khá lâu rồi,ở đây Quynh có giới thiệu "1 quyển sách khá hay",nhưng không thấy up lên,không biết ai có không,share cho đàn em tham khảo với!
                        Thanks!
                        Bki4u-University of Technology!

                        Comment


                        • Các bác giải thích giùm hoạt động của times để làm chương trình Delay, thêo mình hiểu thi delay là làm đi làm lại một vấn đề, nhưng mình đọc hoài vẫn không hiểu nó hoạt động ra sao hết, từng lệnh thì hiểu nhưng cấu trúc chung thì ko rõ . Ngoài cách dùng times để làm delay, thì còn nhưng cách nào làm delay nữa không các bác có thể gợi ý một vài chưong trình he!
                          Mình hiểu được dùng times làm bộ dêm thì ro, còn dùng làm bộ định thời thì mơ hồ qua . Bác nào hiểu rõ về ASM giải thích giùm mình nhe! Thanhks
                          DELAY:
                          MOV TMOD,#01H ; chọn time 0 che do 16 bit
                          MOV TL0,#LOW(-250) ; byte thấp
                          MOV TH0,#HIGH(-250); byte cao
                          SETB TR0 ; đặt
                          JNB TF0,$; hiển thi co TF0
                          CLR TF0 ; xóa TF0
                          CLR TR0 ; xóa TF0
                          RET
                          Last edited by se7enlove_3w; 20-10-2009, 11:06.

                          Comment


                          • Nguyên văn bởi se7enlove_3w Xem bài viết
                            Các bác giải thích giùm hoạt động của times để làm chương trình Delay, thêo mình hiểu thi delay là làm đi làm lại một vấn đề, nhưng mình đọc hoài vẫn không hiểu nó hoạt động ra sao hết, từng lệnh thì hiểu nhưng cấu trúc chung thì ko rõ . Ngoài cách dùng times để làm delay, thì còn nhưng cách nào làm delay nữa không các bác có thể gợi ý một vài chưong trình he!
                            Mình hiểu được dùng times làm bộ dêm thì ro, còn dùng làm bộ định thời thì mơ hồ qua . Bác nào hiểu rõ về ASM giải thích giùm mình nhe! Thanhks
                            DELAY:
                            MOV TMOD,#01H ; chọn time 0 che do 16 bit
                            MOV TL0,#LOW(-250) ; byte thấp
                            MOV TH0,#HIGH(-250); byte cao
                            SETB TR0 ; đặt
                            JNB TF0,$; hiển thi co TF0
                            CLR TF0 ; xóa TF0
                            CLR TR0 ; xóa TF0
                            RET
                            Chào bạn !

                            Thực ra delay chỉ là để làm chậm lại thời gian xử lí 1 công việc mà con vxl đang đảm nhiệm, vì tốc độ of vxl rất nhanh nên nếu ko có delay, thì các hệ thống sẽ làm việc rất nhanh => ko đáp ứng được yêu cầu thực tế. Giả sử như bạn cho nhấp nháy 1 con led, nếu ko dùng delay, chắc chắn bạn ko thể nhìn thấy nó nhấp nháy được.

                            Việc tạo hàm delay, thường nếu ko cần chính xác lắm thì người ta dùng các vòng lặp, trong vòng lặp, con vxl ko làm gì cả, chỉ chạy cho hết vòng lặp thì thôi. Còn nếu cần chính xác (cỡ us) thì bạn có thể dùng timer. Chương trình trên của bạn là 1 ví dụ. Timer là 1 bộ đếm lên, như chương trình trên của bạn thì bạn đã thiết đặt chế độ 16bit cho timer, mỗi khi timer đếm đến FFFF thì nó dừng và cờ tràn TF (Timer Flag) được được đặt bằng 1.

                            Khi timer đang đếm, cái lệnh JNB TF0,$ làm nhiệm vụ khi nào TF0 = 0 thì con vxl ko làm gì cả, còn khi TF0 = 1 thì con vxl mới thoát khỏi delay và tiếp tục chương trình. Bạn đặt giá trị cho bộ đếm là -250, có nghĩa là hàm này sẽ tạo độ trễ khoảng 250us (với tần số thạch anh là khoảng 12MHz).

                            Thân ái !

                            Comment


                            • Mình hiểu được dùng times làm bộ dêm thì ro, còn dùng làm bộ định thời thì mơ hồ qua . Bác nào hiểu rõ về ASM giải thích giùm mình nhe! Thanhks
                              Dear se7venlove_3w!
                              Timer là ngoại vi có chức năng đơn giản là đếm các xung nhịp. Khi xung nhịp đưa vào đếm trong timer là xung nhịp hệ thống (xung nhịp của CPU) thì gọi nó là Timer (hay bộ định thời). Khi xung nhịp đưa vào đếm trong timer là tín hiệu lấy từ bên ngoài thì gọi nó là counter (hay bộ đếm sự kiện). Sở dĩ có sự phân biệt như vậy là do tính chất khác nhau của 2 loại tín hiệu này. Xung nhịp của hệ thống thì thường đều đặn (ví dụ: nếu thạch anh dùng cho 8051 là 12M thì mỗi chu kì máy là 1us) do đó có thể dùng nó để xác định thời gian (ví dụ: Cứ 1us có một xung nhịp--> nếu timer đếm được đến 100 tức là đã trôi qua thời gian là 100us). Xung nhịp lấy từ bên ngoài thì không phải luôn luôn đều đặn. ví dụ một dây chuyền đếm sản phẩm, không phải luôn luôn là 1phút có một sản phẩm đi qua.
                              Để lựa chọn việc sử dụng timer hay counter phụ thuộc vào giá trị khởi tạo cho thanh ghi TMOD.

                              MOV TMOD,#01H ; chọn time 0 che do 16 bit
                              MOV TL0,#LOW(-250) ; byte thấp
                              MOV TH0,#HIGH(-250); byte cao
                              SETB TR0 ; đặt
                              Đoạn chương trình này thực hiện việc khởi tạo timer đếm xung nhịp của hệ thống. Timer sẽ bắt đầu đếm từ giá trị nạp vào trong 2 thanh ghi TH và TL cho đến giá trị max là 65535.Thời gian trễ được tính bằng ((65535 - THTL)*(thời gian thực hiện 1 chu kì máy)) Khi timer chưa đếm đến giá trị 65535 thì cờ tràn TF chưa được dựng lên. Khi timer đếm đến 65535 thì xảy ra sự kiện tràn và cờ tràn TF được set =1.
                              JNB TF0,$; hiển thi co TF0
                              CLR TF0 ; xóa TF0
                              CLR TR0 ; xóa TF0
                              RET
                              Sau khi khởi tạo cho timer đếm, công việc của CPU là ngồi "canh chừng" cờ TF. khi TF còn bằng 0 (chưa tràn) thì nó chẳng làm gì cả. khi TF được sét =1 (tràn) thì nó dừng timer lại, xóa TF cho lần sử dụng tiếp theo và thoát khỏi chương trình
                              For a better world

                              Comment


                              • ngắt ngoài 8051

                                Các anh cho em hỏi
                                sau khi xảy ngắt ngoài thì làm thế nào 8051 trở về chương trình chính em thử mô phỏng đă treo chân IT0 lên 5V sau ngắt nhưng 8051 vẫn chạy trong ngắt của nó mà ko trở về main
                                ORG 0000H
                                LJMP MAIN
                                ORG 0000BH
                                LJMP EX0ISR //NGAT BO DINH THOI 0
                                ORG 0013H
                                LJMP EX1ISR //NGAT BO DINH THOI 1
                                ORG 0030H
                                MAIN:
                                MOV IE,#00H
                                MOV IE,#85H
                                SETB IT1
                                SETB IT0
                                MOV A,#66H
                                BACKM:
                                MOV P1,A
                                MOV P2,A
                                RR A
                                CALL DELAY
                                SJMP BACKM
                                EX0ISR: //PHUC VU NGAT 0
                                MOV P1,#00H //DUNG DONG CO PHAI
                                MOV A,#01H
                                BACK0: MOV P2,A
                                RR A
                                CALL DELAY
                                JMP BACK0
                                RETI
                                EX1ISR: //PHUC VU NGAT 1
                                MOV P2,#00H
                                MOV A,#66H
                                BACK1: MOV P1,A
                                RR A
                                CALL DELAY
                                JMP BACK1
                                RETI
                                DELAY:
                                SETB PSW.3
                                SETB PSW.4
                                MOV R2,#12
                                AGAIN: MOV R3,#200
                                HERE1: MOV R4,#206
                                HERE2: DJNZ R4,HERE2
                                DJNZ R3,HERE1
                                DJNZ R2,AGAIN
                                RET
                                END
                                http://www.mediafire.com/?zdj0gmkdmzy

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...
                                X