Thông báo

Collapse
No announcement yet.

help me chỉnh sửa code cho 8051 đo tốc độ động cơ bằng encoder

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

  • help me chỉnh sửa code cho 8051 đo tốc độ động cơ bằng encoder

    Mong mọi ngưởi chỉ giáo
    em làm đồ án dùng 89c51 đo và hiển thị tốc độ động cơ bằng encoder có độ phân giải 100 xung/vòng
    1 nút start
    1 nút stop dừng đo và lưu lại kết quả cuối
    hiển thị tốc độ bằng led 7 thanh có khoảng từ 0-2500 vòng/phút
    em tính đi tính lại rồi vẫn sai ở T\C2
    (T\C2 dùng ngắt tràn để sau mỗi 20ms lại cập nhật tốc độ mới 1 lần)
    code viết bằng asm ạ Mong mọi người chỉ giáo với
    ;============================================
    org 00h ;power on, reset vector
    ljmp init
    org 03h ;interrupt 0 vector
    reti
    org 0bh ;timer 0 interrupt vector
    reti
    org 13h ;interrupt 1 vector
    reti
    org 1bh ;timer 1 interrupt vector
    reti
    org 23H ;serial port interrupt vector
    reti
    org 2bh ;timer 2 interrupt vector
    ljmp INT_T2 ;chuong trinh con phuc vu ngat
    ;================================================= ==========================================
    ;khai bao bien so
    ;================================================= ==============================================
    D0 equ 50h
    D1 equ 51h
    D2 equ 52h
    D3 equ 53h
    D4 equ 54h
    NxH equ 55h
    NxL equ 56h
    Tic equ 60h
    digit equ 61h
    Dnum equ 62h
    ;================================================= =============================================
    ;khai bao kieu bit
    ;================================================= ================================================== ====
    ZOV equ 00h
    ;================================================= ================================================== ====
    ;cac bien cho truong trinh con
    ;================================================= =====================================
    X0 equ 70h
    X1 equ 71h
    X2 equ 72h
    X3 equ 73h

    Y0 equ 74h
    Y1 equ 75h
    Y2 equ 76h
    Y3 equ 77h

    Z0 equ 78h
    Z1 equ 79h
    Z2 equ 7ah
    Z3 equ 7bh

    XL equ X0
    XH equ X1
    YL equ Y0
    YH equ Y1
    ZL equ Z0
    ZH equ Z1
    ;================================================= ==================
    ;chuong trinh khoi tao
    ;================================================= ================================================== ===
    org 100
    init:
    clr EA ;cam tat ca cac ngat
    mov SP,#2h ;khoi tao ngan xep(bat dau 30h)
    clr P3.0
    mov TMOD,#00100101B; khoi tao timer 0 lam viec o che do la bo dem 16 bit, timer 1 lam viec o che do auto_reload
    mov TH0,#0
    mov TL0,TH0
    mov T2CON,#02H ;T2 lam viec o che do autoreload
    mov TH2,#0ECH
    mov TL2,#77H
    mov RCAP2H,TH2
    mov RCAP2L,TL2
    setb TR2
    setb TR0 ;cho phep timer 0 chay
    setb TR1
    nop
    setb IE.5 ;cho phep timer 2 ngat
    ;================================================= ================================================== ===========
    mov Tic,#0h
    mov digit,#0FFh
    mov Dnum,#4
    ;================================================= ================================================== ===========
    setb EA ;cho phep cac ngat
    here:
    sjmp here ;doi ngat
    ;================================================= =========================================
    ;Interrupt INT_T2
    ;FCT :do va hien thi toc do dong co
    ;Input none
    ;Output none
    ;================================================= ========================================
    INT_T2:
    clr TF2 ;xoa co tran
    inc Tic
    mov a,Tic
    cjne a,#4,CDoc ;td=20ms?
    mov Tic,#0
    clr TR0
    mov NxL,TL0 ;doc so lieu do
    mov NxH,TH0
    mov TL0,#0
    mov TH0,#0 ;xoa bo dem
    setb TR0
    ;================================================= ==============
    mov XL,NxL ;tinh toan ket qua do
    mov XH,NxH
    mov YL,#0FAh
    mov YH,#0
    lcall mul16
    mov XL,Z0
    mov XH,Z1
    mov YL,#3
    mov YH,#0
    lcall div16
    mov XL,Z2
    mov XH,Z3
    ;================================================= ==================================
    lcall hextodec ;chuyen doi hex sang dec
    CDoc:
    lcall display ;hien thi toc do dong co(vong/phut)
    reti
    ;================================================= ========================
    ;subrotine display
    ;FCT :hien thi toc do dong co len led 7 thanh
    ;Input: D3, D2,D1, D0
    ;Output: none
    ;================================================= ================================
    display:
    mov a,@r0
    mov dptr,#bayth
    movc a,@a+dptr ;tra ra 7 thanh
    mov P0,a
    inc r0
    mov P2,digit
    mov a,digit
    rl a
    mov digit,a
    djnz Dnum,KT
    mov r0,#D0
    mov Dnum,#4
    mov digit,#0FEh
    KT:
    ret
    ;================================================= ================================================== =================
    ;subrotine hextodec
    ;FCT bien doi tu do hex sang so BCD
    ;Input XH,XL
    ;Output D4,D3,D2,D1,D0
    ;================================================= ================================================== =================
    hextodec:
    mov YH,#00h
    mov YL,#0ah
    lcall div16 ;chia so can doi cho 10
    mov D0,Z0
    mov XH,Z3
    mov XL,Z2
    lcall div16 ;chia so can doi cho 10
    mov D1,Z0
    mov XH,Z3
    mov XL,Z2
    lcall div16 ;chia so can doi cho 10
    mov D2,Z0
    mov XH,Z3
    mov XL,Z2
    lcall div16 ;chia so can doi cho 10
    mov D3,Z0
    mov XH,Z3
    mov XL,Z2
    lcall div16 ;chia so can doi cho 10
    mov D4,Z0
    ret
    ;================================================= ================================================== ======================
    ;subrotine div16
    ; Z=X/Y
    ;Input X=(XH,XL); Y=(YH,YL)
    ;output Z3,Z2
    ; :quotient
    ;Z1,Z0
    ;ZOV Y=0, i,e., ket qua duoc suat ra
    ;range
    ;calls: sub16
    ;destroys: a, r0, r1, r2, r3, r4, r7, flags
    ;================================================= ================================================== ========================
    div16:
    push 0
    mov a,YH ;gan byte cao
    orl a,YL
    jnz div_ok
    setb ZOV
    ret
    div_ok:
    mov r1,XH
    mov r0,XL
    mov XH,#0
    mov XL,#0
    mov r3,#0
    mov r2,#0
    mov r7,#16
    div_loop:
    clr c
    mov a,r0
    rlc a
    mov r0,a
    mov a,r1
    rlc a
    mov r1,a
    mov a,XL
    rlc a
    mov XL,a
    mov a,XH
    rlc a
    mov XH,a
    lcall subb16
    mov c,ZOV
    cpl c
    jnc div_1
    mov XH,ZH
    mov XL,ZL
    div_1:
    mov a,r2
    rlc a
    mov r2,a
    mov a,r3
    rlc a
    mov r3,a
    djnz r7,div_loop
    mov Z3,r3
    mov Z2,r2
    mov Z1,XH
    mov Z0,XL
    clr ZOV
    pop 0
    ret
    ;================================================= ================================================== =====================
    ;subrotine subb16
    ; Z(ZH,ZL)= X(XH,XL) - Y(YH,YL)
    ; if (Y>X) then ZOV=1
    ;Input X(XH,XL), Y(YH,YL)
    ;Output Z(ZH,ZL)
    ;================================================= ================================================== ===
    subb16:
    push acc
    mov a,XL ;load X low byte into

    ;accumulator
    clr c ; clear carry flag
    subb a,YL ;subract Y low byte
    mov ZL,a ;put result in Z low byte
    mov a,XH ;load X high byte into
    ;accumulator
    subb a,YH ; subtract Y high byte
    ;with the borrow. ..
    ; ... from low byte
    ;operation
    mov ZH,a ; save result in Z hgh
    ;byte
    mov ZOV,c ;set ZOV id an external
    ;borrow is produced
    pop acc
    ret
    ;================================================= ================================================== ==============
    ; subroutine MUL8_16
    ; Z=X*Y
    ;byte multipled by 16 bit word
    ;input: X(XL); Y(YH,YL)
    ;output: Z2, Z1, Z0: Z2 is the most byte, Z0 is the least byte
    ;================================================= ================================================== =================
    MUL8_16:
    mov a,XL
    mov b,YL
    mul ab
    mov Z0,a
    push b
    mov a,XL
    mov b,YH
    mul ab
    pop 0
    add a,r0
    mov Z1,a
    clr a
    addc a,b
    mov Z2,a
    ret
    ;================================================= ================================================== =====================
    ;subrotine MUL16
    ;Multiply two 16_bit unsigned Word
    ;input :X(XH,XL); Y(YH,YL)
    ;output :Z3, Z2, Z1, Z0. Z3 is the most byte, Z0 is the least
    ;================================================= ================================================== =====================
    MUL16:
    lcall MUL8_16
    mov a,Z2
    push acc
    mov a,Z1
    push acc
    mov c,Z0
    push acc
    mov XL,XH
    lcall MUL8_16
    mov b,Z0
    pop Z0
    pop acc
    add a,b
    mov b,Z1
    mov Z1,a
    pop acc
    addc a,b
    mov b,Z2
    mov Z2,a
    clr a
    addc a,b
    mov Z3,a
    ret
    ;================================================= ================================================== ==========================
    bayth: ;bang ma bay thanh
    db 0C0h, 0F9h, 0A4h, 0B0h, 99h, 92h, 82h, 0F8h, 80h,90h
    ; 0 1 2 3 4 5 6 7 8 9
    ;================================================= ================================================== ==============

  • #2
    sơ đồ nguyên lí

    em không biết up file protues nên up tạm pdf
    Attached Files

    Comment


    • #3
      có bác nào có code mạch hẹn giờ mỗi ngày không cho xin với. code lẫn mạch luôn đang làm cái hẹn giờ lặp đi mỗi ngày,không biết làm tư đâu, có thể hẹn nhiều cái hẹn giờ thì các tốt cảm ơn các bác trước

      Comment


      • #4
        bạn ơi bạn làm cái này được chưa cho mh xin cái code này với mh đang làm đề tài tương tự

        Comment

        Về tác giả

        Collapse

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

        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 qua, 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 qua, 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 qua, 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...
          09-01-2025, 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 ...
          09-01-2025, 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...
          09-01-2025, 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