Thông báo

Collapse
No announcement yet.

vấn đề viết code cho 8051

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

  • vấn đề viết code cho 8051

    đọc một số tài liệu về giao tiếp 8051 với led 7 đoạn, gặp một bài toán như sau:
    "Hiển thị chữ tùy ý trên led 7 đoạn ( 4 con led)", nhìn thấy mạch gồm : các port 8051 nối với 4 transistor nối với 4 led 7 đoạn
    có tài liệu trên web không cần khai báo địa chỉ tranistor nối với led, có tài liệu không cần khai báo địa chỉ transistor:
    ví dụ: SCA1 EQU 8500H
    với SCA1 8500H là địa chỉ chân Led1 nối với transistor

    các huynh cho đệ hỏi EQU là gì?, làm sao mình biết được địa chỉ 8500H?
    Khi viết chương trình mình cần hay không cần khai báo địa chỉ chân transitor ?

    Mình xin cảm ơn ( kỳ này làm bài tập lớn chắc chết quá)

    "P/s: bài tập lớn kỳ này: thiết kế mạch đếm thuận nghịch từ 0000-9999 có thể cài đặt bộ đếm--có ai có bài hướng dẫn cho mình xin với"

  • #2
    Bạn mới học về 89C51 thì việc giao tiếp với LED 7 thanh thì đầu tiên xem về cách mắc led 7 thanh với 89C51 trước đã. Có 2 cách mắc đơn giản :
    - Mắc mỗi post của 89C51 với 1 LED 7 thanh. Cách này đơn giản nhất, chú y thêm về led catot chung hay anot chung để đưa nguồn cho nó nữa. Mắc cách này để làm bài tập lớn của bạn cũng được. Vẫn còn dư 4 chân để mắc thêm nút bấm chuyển chế độ đếm thuận đếm ngược.
    - Mắc 4 led 7 thanh vào 1 post và dùng phương pháp quét LED, mỗi led có thể được điều khiển bật tắt thông qua 1 con tran.
    Bạn nghiên cứu thêm đi nhé.

    ------------------------------------------

    - Nhận làm các loại mạch điện tử, PlC, biến tần, mạng công nghiệp.. Cho các công ty và các bạn sinh viên.
    - Nhận hướng dẫn làm làm các đề tài về điện tử như đồ án môn, đồ án tốt nghiệp.
    - Nhận đăng ký học điện tử cơ bản, vi xử lý cơ bản, vi xử lý nâng cao.

    Mọi chi tiết xin liên hệ :

    Nguyễn Đức Thành – ĐT : 098 9898 891
    Địa chỉ liên hệ : Số 3 – Lai xá – Kim Chung – Hoài Đức – Hà Nội (Gần khu B trường Đại Học Thành Đô).
    Yahoo : themanloves.
    Mail: ducthanhvn86@gmail.com
    - Nhận làm các loại mạch điện tử, điện tử công suất.. Cho các công ty và sinh viên.
    - Nhận hướng dẫn làm làm các đề tài về điện tử như đồ án môn, đồ án tốt nghiệp.

    Comment


    • #3
      bạn cho mình hỏi vậy EQU là gì vậy?

      Comment


      • #4
        EQU ah? Hãy đọc datasheet của con 8051 đi , trong đó có nói đó ! hi!!!

        Comment


        • #5
          Nguyên văn bởi kisutoan Xem bài viết
          bạn cho mình hỏi vậy EQU là gì vậy?
          EQU trong lập trình hợp ngữ dùng để đặt tên cho biến (giúp thuận lợi cho người lập trình). Ví dụ bạn ghi:
          dulieu equ 30h
          nghĩa là mỗi khi bạn muốn dùng đến thanh ghi 30h thì bạn viết, ví dụ
          mov dulieu,#12h
          thay vì phải viết:
          mov 30h,#12h

          Vụ đặt equ này thường duoc viết ở trên cùng, trước cả dòng org 00h.

          Comment


          • #6
            Nguyên văn bởi vodangks Xem bài viết
            EQU trong lập trình hợp ngữ dùng để đặt tên cho biến (giúp thuận lợi cho người lập trình). Ví dụ bạn ghi:
            dulieu equ 30h
            nghĩa là mỗi khi bạn muốn dùng đến thanh ghi 30h thì bạn viết, ví dụ
            mov dulieu,#12h
            thay vì phải viết:
            mov 30h,#12h

            Vụ đặt equ này thường duoc viết ở trên cùng, trước cả dòng org 00h.
            dưới đây là đoạn code của một bài tập lớn:
            mạch đồng hồ số sử dụng vđk 89V51 điều khiển thời gian từ ic DS12C887 hiển thị bằng led 7 đoạn.(hình vẽ bên dưới)
            mình kiếm được trên mạng

            Mính đọc chỗ này chưa hiểu lắm, có 3 câu hỏi mong các bạn giải thích
            ------------
            REGA EQU 0AH
            REGB EQU 0BH
            REGSEC EQU 00H
            REGMIN EQU 02H
            REGHOUR EQU 04H
            HOUR EQU 50H
            MIN EQU 51H
            SEC EQU 52H
            ----------
            Có 3 câu hỏi cần mong các bạn giúp mình:
            câu 1:
            a/ 0Ah, 0bh, 00h, 02h,04h,50h,51h,52h: ở đâu mà có các địa chỉ này( các thanh ghi phải không?)?
            b/ làm sao xác định được các địa chỉ này?
            Câu 2: Nếu mình thay (ví dụ) 02h thành 03h, 52h thành 53h được không?
            Câu 3: Nếu mình không khai báo EQU được không ?
            mong bạn giải thích giùm mình


            Code:
            $MOD51
             ; MA CAC THONG SO **********************************
            REGA  EQU 0AH
             REGB  EQU 0BH
             REGSEC EQU 00H
             REGMIN EQU 02H
             REGHOUR EQU 04H
             HOUR  EQU 50H
             MIN  EQU 51H
             SEC  EQU 52H
             MENU_SW BIT P3.0
             SW_TANG BIT P3.1
             SW_GIAM BIT P3.2
               ORG 00H
               SJMP MAIN
               ORG 30H
             ;*****************************************************  **
            MAIN:
             MOV SP,#6FH ; TAO NGAN NHO SP
             ACALL THIETLAP_DS ;  KHOI DONG DS12C887
            HIENTHI:
             ACALL READ_TIMER_DS ; DOC THOI GIAN  TU DS12C887
             ACALL GM_BCD_7DOAN ; GOI CTC GIAI MA 7 DOAN - BCD
             ACALL QUET6  ;  QUET HIEN THI
             JB MENU_SW,THOAT ; KIEM TRA NUT MEMU CO DUOC NHAN  CHUA
             ACALL XULINUTNHAN ; GOI CTC XULINUTNHAN NEU NUT DUOC NHAN
            THOAT:
             SJMP HIENTHI ;  TIEP TUC HIEN THI NEU KHONG NHAN NUT
            ;///*********************************///********************  ********///***************************
            THIETLAP_DS: ;CHUONG TRINH  CON THIET LAP CHE DO BAN DAU CHO RTC
             PUSH 00H ; CAT TAM GIAI TRI VAO  NGAN XEP
             PUSH ACC
             MOV R0,#REGA ;DIA CHI THANH GHI A
             MOV A,#0A0H ;KHOI  DONG OSC, TAC SQW OUT
             MOVX @R0,A  ; GHI VAO DS
             MOV R0,#REGB
             MOV A,#02H  ;  GIA TRI TOI DA CUA GIO LA 24H, VA CAC NUT LA 9
             MOVX @R0,A
             POP ACC  ;PHUC  HOI GIA TRI THANH GHI
             POP 00H
            RET
            ;///*******************************///
            NAP: ;CHUONG  TRINH CON NAP THOI GIAN VAO RTC
             PUSH 00H
             PUSH ACC
             MOV R0,#REGSEC ;DIA  CHI THANH GHI GIAY
             MOV A,SEC  ;LAY GIA TRI DA QUY DINH
             MOVX @R0,A  ;  NAP VAO DS
             MOV R0,#REGMIN ; DIA CHI THANH GHI PHUT
             MOV A,MIN  
             MOVX @R0,A
             MOV R0,#REGHOUR ;  DIA CHI THANH GHI GIO
             MOV A,HOUR
             MOV @R0,A
             POP ACC
             POP 00H
            RET
            ;///**********************************///
            READ_TIMER_DS:  ;CHUONG  TRINH CON DOC GIA TRI THOI GIAN TU RTC
             PUSH 00H
             PUSH ACC
             MOV R0,#REGSEC ;  DIA CHI THANH GHI GIAY
             MOVX A,@R0  ; DOC TU DS
             MOV R4,A  ; NAP  GIA TRI TREN VAO VUNG NHO R4 DE HIEN THI
             MOV R0,#REGMIN ; DIA CHI  THANH GHI PHUT
             MOVX A,@R0  
             MOV R5,A  
             MOV R0,#REGHOUR ; DIA  CHI THANH GHI GIO
             MOVX A,@R0  
             MOV R6,A  
             
             POP ACC
             POP 00H
            RET
            ;///*********************************///
            XULINUTNHAN:   ;CHUONG  TRINH CON XU LI CAC NUT MODE, INC DEC
             PUSH 00H
             ACALL DELAYPU ;TOI  GIAN NHAN BIET KHI NHAN NUT
             JNB MENU_SW,XULINUTNHAN ;KIEM TRA NUT  NHAN
             ACALL DELAYPU
             MOV R0,#04H  ; DUA GHIA TRI CUA GIAY (R4) VAO  XU LI
             ACALL KHINHANNUT  
             MOV R0,#05H  ; DUA GIA TRI CUA PHUT  (R5) VAO XU LI
             ACALL KHINHANNUT  
             MOV R0,#06H  ; DUA GIA TRI  CUA GIO (R6) VAO DE XU LI
             ACALL KHINHANNUT  
             POP 00H
            RET
            ;///********************************///
            KHINHANNUT:    
             PUSH 07H  
             PUSH 06H  
             PUSH 50H  
             MOV R7,#200  ;  GIA TRI LAP LAI THOI GIAN O TRANG THAI SANG OR TAT
             MOV R6,#10   ;GIA  TRI LAP LAI QUA TRINH SANG_TAC CAC LED
            LOOP_ONOFF:    ;VONG LAP CUA  MOT TRANG THAI SANG_TAT
             MOV 50H,@R0  
             MOV @R0,#12H  
            LOOP_OFF:    ;VONG  LAP CUA THOI GIAN LAM TAT LED DANG DIEU CHINH
             ACALL GM_BCD_7DOAN
             ACALL QUET6  
             DJNZ R7,LOOP_OFF  
             MOV R7,#200  
             MOV @R0,50H  
            LOOP_ON:    ;VONG  LAP CUA THOI GIAN LAM SANG LED DANG DIEU CHINH
             ACALL GM_BCD_7DOAN
             ACALL QUET6
             JNB SW_TANG,TANG_PRESS
             JNB SW_GIAM,GIAM_PRESS
             JNB MENU_SW,MENU_PRESS
             SJMP NO_kEY  
            TANG_PRESS:  
             INC @R0   ;  TANG GIA TRI THOI GIAN
            PU_TANG:    ;NHAN BIET KHI NHAN NUT SW+
             ACALL DELAYPU  
             JNB SW_TANG,PU_TANG
             ACALL DELAYPU  
             MOV R7,#200  
             MOV R6,#10  
             SJMP LOOP_ON  
            GIAM_PRESS:
             DEC @R0   ;GIAM  GIA TRI THOI GIAN
            PU_GIAM:    ;NHAN BIET KHI NHAN NUT SW-
             ACALL DELAYPU  
             JNB SW_GIAM,PU_GIAM
             ACALL DELAYPU
             MOV R7,#200
             MOV R6,10
             SJMP LOOP_ON
            MENU_PRESS:    ;NHAN  BIET KHI NHAN NUT MENU
             ACALL DELAYPU
             JNB MENU_SW,MENU_PRESS
             ACALL DELAYPU
             SJMP EXIT_PROCESS
            NO_KEY:   ;KIEM  TRA KHI KHONG CO NUT NAO DUOC NHAN
             DJNZ R7,LOOP_ON  
             DJNZ R6,LOOP_ONOFF
            EXIT_PROCESS:   ;THOAT  XU LI NUT DE QUAY VE HIEN THI
             POP 50H
             POP 06H
             POP 07H
            RET
            ;///*******************************************///
            ;LED  ANOT CHUNG: DP(MSB)-A(LSB), GIA TRI GIAI MA : 0-9
            ;INPUT: R6=BCD NEN  GIO
            ;  R5=BCD NEN PHUT
            ;  R4=BCD NEN GIAY
            ;OUTPUT: 65H,64H=MA 7  DOAN GIO
            ;  63H,62H=MA 7 DOAN PHUT
            ;  61H,60H=MA 7 DOAN GIAY
            GM_BCD_7DOAN:  ;CTC  GIA MA 7 DOAN
             PUSH DPH
             PUSH DPL
             PUSH ACC
             
             MOV DPTR,#CODE7SEG  
             MOV R7,#0AAH  
             MOV A,R4  
             ANL A,#0FH  
             MOVC A,@A+DPTR  
             MOV 60H,A  
             
             MOV A,R4  
             ANL A,#0F0H  
             SWAP A  
             MOVC A,@A+DPTR  
             MOV 61H,A
             
             MOV A,R5
             ANL A,#0FH
             MOVC A,@A+DPTR
             MOV 62H,A
             
             MOV A,R5
             ANL A,#0F0H
             SWAP A  
             MOVC A,@A+DPTR  
             MOV 63H,A
             
             MOV A,R6
             ANL A,#0FH
             MOVC A,@A+DPTR
             MOV 64H,A
             
             MOV A,R6
             ANL A,#0F0H
             SWAP A  
             MOVC A,@A+DPTR  
             MOV 65H,A
             
             POP ACC
             POP DPL
             POP DPH
            RET
             CODE7SEG:        &am p;am p;nb sp;;VUNG CHUA MA 7 DOAN(0-9)
               DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H&a mp;a mp;n bsp;;SO  0-9
             DB 0FFH         ;MA LAM TAT CAC LED
            ;///***********************************************///
            ;INPUT: 65H,64H=TR  NGAN-CH NGAN
            ;  63H,62H=NGAN-TRAM
            ;  61H,60H=CHUC-DONVI
            ;OUTPUT: P1=7  DOAN-DP(MSB)-A(LSB)
            ;  P2=CHONLED LEFT(MSD)-RIGHT(LSD)
            QUET6:   ;CTC  QUET HIEN THI 6 LED 7 DOAN
             PUSH ACC
             PUSH 00H
             MOV A,#0DFH
             MOV R0,#65H
            DISP:
             MOV P0,@R0
             MOV P1,A  
             LCALL DELAYLED
             MOV P1,#0FFH
             DEC R0  
             RR A  
             CJNE R0,#5FH,DISP
             POP 00H
             POP ACC
            RET
            ;///*************************************************///
            DELAYLED: ;  CTC TAO THOI GIAN TRE 2.5MS KO DUNG TMOD
             PUSH 00H
             PUSH 01H
             MOV R1,#5
            DEL:
             MOV R0,#250
             DJNZ R0,$
             DJNZ R1,DEL
             POP 01H
             POP 00H
            RET
            ;///**************************************************///
            DELAYPU: ;  CTC TAO THOI GIAN TRE 1MS PHAN UNG KHI NHAN HOAC NHA NUT KO DUNG TMOD
             PUSH 00H
             PUSH 01H
             MOV R1,#10
            DEL1:
             MOV R0,#50
            DEL2:
             ACALL GM_BCD_7DOAN
             LCALL QUET6
             DJNZ R0,DEL2
             DJNZ R1,DEL1
             POP 01H
             POP 00H
            RET
            END

            Comment


            • #7
              Câu1:
              a) 0Ah, 0bh, 00h, 02h,04h,50h,51h,52h: các địa chỉ này là các địa chỉ tương ứng lưu các giá trị giờ, phút giây, ngày, tháng, thanh ghi điều khiển hoạt động của DS12c887. Ở đâu mà có các giá trị này: đó là do nhà sx DS12c887 quy định như thế, bạn muốn giao tiếp và điều khiển được con ic này thì bạn phải truy xuất đúng địa chỉ như trong datasheet thì mới được (giống như là lấy đồ trong tủ, bạn muốn lấy món đồ nào thì phải biết vị trí của món đồ đó là ở ngăn nào mà lấy cho đúng).

              b) Muốn xác định được địa chỉ này thì bạn down datasheet của DS12c887 về mà xem, thấy ngay!
              Câu 2: Không thể tùy ý đổi các địa chỉ này!
              Câu 3: Không khai báo EQU cũng được, không sao cả. Tuy nhiên việc khai báo EQU là giúp thuận lợi cho người lập trình, khi lập trình bạn gọi thẳng tên mà bạn đặt thì sẽ dễ hơn là gọi thanh ghi bằng những con số. Điều này khi lập trình thì bạn sẽ thấy. Lưu ý: việc đặt EQU không ảnh hưởng đến chương trình, có nghĩa là đặt nhiều cũng không làm chương trình chậm đi đâu mà lo.
              Attached Files

              Comment


              • #8
                chào bạn kỳ này mình có bài tập lớn là:"bài tập lớn kỳ này: thiết kế mạch đếm thuận nghịch từ 0000-9999 có thể cài đặt bộ đếm"
                vậy thì khi giao tiếp với led 7 đoạn , vậy thì việc xác định các địa chỉ EQU giống như trên thì như thế nào? mong bạn giải thích giùm
                Nếu bạn có tài liệu về việc đặt địa chỉ như chúng ta trao đổi thì bạn có thể share cho mình không?
                Xin cảm ơn bạn

                Comment


                • #9
                  muon hoc vxl thì dau tien phai lam ji

                  Comment


                  • #10
                    giúp mình đi các bạn ơi

                    Comment


                    • #11
                      Nguyên văn bởi kisutoan Xem bài viết
                      đọc một số tài liệu về giao tiếp 8051 với led 7 đoạn, gặp một bài toán như sau:
                      "Hiển thị chữ tùy ý trên led 7 đoạn ( 4 con led)", nhìn thấy mạch gồm : các port 8051 nối với 4 transistor nối với 4 led 7 đoạn
                      có tài liệu trên web không cần khai báo địa chỉ tranistor nối với led, có tài liệu không cần khai báo địa chỉ transistor:
                      ví dụ: SCA1 EQU 8500H
                      với SCA1 8500H là địa chỉ chân Led1 nối với transistor

                      các huynh cho đệ hỏi EQU là gì?, làm sao mình biết được địa chỉ 8500H?
                      Khi viết chương trình mình cần hay không cần khai báo địa chỉ chân transitor ?

                      Mình xin cảm ơn ( kỳ này làm bài tập lớn chắc chết quá)

                      "P/s: bài tập lớn kỳ này: thiết kế mạch đếm thuận nghịch từ 0000-9999 có thể cài đặt bộ đếm--có ai có bài hướng dẫn cho mình xin với"
                      hiểu một cách đơn giản thì EQU là gán cái này cho cái kia. vd bạn bật led ở chân P1.1
                      thay vì viết SET P1.1 khá khó nhớ,
                      nếu bạn gán chân P1.1 bằng cái tên như LED chẳng hạn bằng lệnh EQU như sau: LED EQU P1.1, sau này bạn không càn viết là SET P1.1 nữa mà viết lại là SET LED . cách này cũng có thể dùng cho địa chỉ ô nhớ cũng được.

                      còn việc khai báo địa chỉ cho transistor thì tùy bạn, vd con transistor bạn mắc ở chân P1.2 thì bạn cũng phai nhớ nó được điều khiển bởi chân P1.2 nếu làm vậy sau này đọc lại code sẽ rất khó hiểu, chi bằng bạn gán cho nó một cái tên như TRANSISTOR EQU P1.2, thì sau này khi diều khiển cho con transistor đó vd SET TRANSISTOR sẽ dễ hiểu hơn là SET P1.2
                      khi lập trình cho vdk bằng asm bạn phải biết các thanh ghi nằm ở vị trí nào mới có thể lập trình được, thông thường sẽ có các thanh ghi điều khiển như TIME,NGẮT,.... và các thanh ghi dùng chung, bạn có thể dùng các thanh ghi dùng chung này để lưu dữ liệu 8bit vào, và nếu thao tác với thanh ghi nào đó nhiều lần bạn cũng nên gán cho nó một cái tên để dễ nhớ hơn

                      để biết sơ đồ thanh ghi của nó bạn hãy đọc datasheet của nó, thông thường sẽ có một cái bảng trong đó viết các địa chỉ và tên thanh ghi, bạn nhìn các thanh ghi nào không thuộc nhóm thanh ghi đặc biệt mà thuộc nhóm thanh ghi dùng chung (không có tên) thì lưu các dữ liệu cần thiết vào đó, vd như kết quả đọc một port chẳng hạn

                      chúc bạn lập trình tốt nhé
                      Last edited by congtri1991; 25-02-2010, 14:36.

                      Comment


                      • #12
                        cám ơn các bạn đã giúp mình hiểu rõ vấn đề hơn

                        Sẵn đây các bạn cho mình ý tưởng về bài làm:

                        Thiết kế mạch :
                        • đếm thuận nghịch từ 0000-9999
                        • điều khiển đếm thuận/ nghịch
                        • Thiết lập được số đếm ban đầu


                        Ai có ý tưởng hay thì giúp mình với(
                        Nếu có code thì cho mình xin để mình tham khảo---- )

                        Thanked

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X