Thông báo

Collapse
No announcement yet.

Đồng hồ đếm giây,% giây,lưu 5 kết quả,sử dụng 8051

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

  • Đồng hồ đếm giây,% giây,lưu 5 kết quả,sử dụng 8051

    Đây là bài tập lớn của nhóm mình.Làm đồng hồ thể thao hiện thị giây,%giây và lưu lại được 5 kết quả.
    Mình đã viết được phần hiển thị giây và %giây,nhưng mình vẫn chưa lưu được 5 kết quả.Mong các bạn giúp mình với

    Đây là phần mình đã viết bằng ASM:

    ORG 00H
    LJMP MAIN

    ORG 003H
    LJMP NGAT0

    ORG 0BH
    LJMP NGAT_TIME

    ORG 04AH
    MAIN: MOV 40H ,#0
    MOV 41H ,#0
    MOV 39H,#01111111B
    MOV R0,#0
    MOV IE,#10001111B
    MOV TMOD,#11H
    MOV TL0,#LOW(-170)
    MOV TH0,#HIGH(-170)
    SETB TR0

    LOOP_HIEN_THI:
    LCALL HIENTHI

    SJMP LOOP_HIEN_THI

    HIENTHI:
    MOV DPTR,#TABLE
    MOV A,42H
    MOVC A,@A+DPTR
    MOV P2,A
    SETB P1.0
    LCALL DELAY
    CLR P1.0

    MOV A,43H
    MOVC A,@A+DPTR
    MOV P2,A
    SETB P1.1
    LCALL DELAY
    CLR P1.1

    MOV A,44H
    MOVC A,@A+DPTR
    MOV P2,A
    SETB P1.2
    LCALL DELAY
    CLR P1.2

    MOV A,45H
    MOVC A,@A+DPTR
    MOV P2,A
    SETB P1.3
    LCALL DELAY
    CLR P1.3
    RET

    NGAT0:
    INC 41H
    LCALL HIENTHI
    LCALL HIENTHI
    LCALL HIENTHI
    LCALL HIENTHI
    LCALL HIENTHI
    LCALL HIENTHI
    MOV A,41H
    CJNE A,#60,THOAT_NGAT0
    MOV 41H,#0
    THOAT_NGAT0:
    RETI

    NGAT_TIME:
    INC R0
    MOV TL0,#LOW(-170)
    MOV TH0,#HIGH(-170)
    SETB TR0

    CJNE R0,#100,THOAT_NGAT_TIME
    MOV R0,#0
    INC 40H
    MOV A,40H
    CJNE A,#100,THOAT_NGAT_TIME
    MOV 40H,#0

    INC 41H
    MOV A,41H
    CJNE A,#60,THOAT_NGAT_TIME
    MOV 41H,#0

    THOAT_NGAT_TIME:
    MOV A,40H
    MOV B,#10
    DIV AB ; PHAN NGUYEN LA A, PHAN DU LA B
    MOV 43H,A ;LAY HANG CHUC
    MOV 42H,B ;LAY HANG DON VI
    MOV A,41H
    MOV B,#10
    DIV AB
    MOV 45H,A
    MOV 44H,B
    RETI

    DELAY:
    MOV R7,#200
    DJNZ R7,$
    RET

    TABLE:
    DB 00000011b,10011111b,00100101b,00001101b,10011001b
    DB 01001001b,01000001b,00011111b,00000001b,00001001b
    END
    Attached Files
    |

  • #2
    Ặc ặc,sao không ai giúp mình hết vậy
    mình nghĩ diễn đàn của chúng ta có nhiều nhân tài lắm chứ
    giúp mình với nhé!!!!!!!!!!
    |

    Comment


    • #3
      Bạn nên dùng:
      ORG 30H
      MAIN:
      ....
      Bạn có thể dùng INT1 để lưu 5 kết quả bằng cách ấn 5 lần.
      Khi ấn nút INT1 lần 1 thì thời gian của bạn gồm 4 chữ số, lưu lần lượt vào RAM 30H-33H. Ấn lần 2 thì lưu vào 34H-37H,....
      Khi cần đọc ra thì ngược lại của cất vào.
      anhduc

      Comment


      • #4
        Nguyên văn bởi trunglk Xem bài viết
        Ặc ặc,sao không ai giúp mình hết vậy
        mình nghĩ diễn đàn của chúng ta có nhiều nhân tài lắm chứ
        giúp mình với nhé!!!!!!!!!!
        Hình như bạn không trở lại diễn đàn thì phải?
        Nếu có ai đó giúp bạn thì cũng cần thời gian. Bạn không nên nóng vội như vậy.
        Nhưng dù sao tôi cũng trả lời bạn mặc dù đã hai năm nay tôi không viết Code ASM cho 8051. Tôi phải xem lại sách và Datasheet và sau 2 tối tôi mới viết được đoạn Code sau.
        Code:
        #include <sfr51.inc>
        ;khai bao bien
        giayChuc    equ 7fh
        giay        equ 7eh
        giayPhanMuoi    equ 7dh
        giayPhanTram    equ 7ch
        ketQua1         equ 7ah
        ketqua2         equ 76h
        ketQua3         equ 72h
        ketQua4         equ 6eh
        ketQua5         equ 6ah
        hienThi         equ 61h
        soLanNho        equ 60h
        soHienThi       equ 5fh
                org 00h
                ljmp main
                org 03h
                ljmp int0Isr
                org 0bh
                ljmp t0Isr
                org 13h
                ljmp int1Isr
                org 30h
        main:   
                mov ie,#10000111b
                SETB	IT0	; NGAT INT KHI CO SUON XUONG
                setb    IT1
                mov tmod,#01h
                clr tr0
                mov solanNho,#0
                mov soHienThi,#0
                mov p1,#0
                mov r0,#7fh
                mov r1,#25
                loop:
                mov @r0,#0
                dec r0
                djnz r1,loop
                mov dptr,#table
                mov hienThi,#giayChuc
                loopHT:
                mov r0,hienThi
                ;hien thi
                mov p1,#0
                mov a,@r0
                movc    a,@a+dptr
                mov  p2,a
                mov p1,#00001000b
                lcall   delay
                dec r0
                mov p1,#0
                mov a,@r0
                movc    a,@a+dptr
                mov  p2,a
                clr p2.0            ; cho dau cham sang
                mov p1,#00000100b
                lcall   delay
                dec r0
                mov p1,#0
                mov a,@r0
                movc    a,@a+dptr
                mov  p2,a
                mov p1,#00000010b
                lcall   delay
                dec r0
                mov p1,#0
                mov a,@r0
                movc    a,@a+dptr
                mov  p2,a
                mov  p1,#00000001b
                lcall   delay
                sjmp loopHT
        ;;;;;;;;;;;;;;
        ; luu ket qua
        int0Isr:    CLR	EA
        	 CLR	EX0	   ; xoa ngat INT0    de chong nhieu cho ngat, dieu nay rat quan trong
                    push acc
                    push 0  ; r0
                    mov a,SoLanNho
                    cjne    a,#0,so1
                    setb    tr0
                    mov soLanNho,#1
                    mov r0,#giayChuc
                    mov r1,#25
                    loopInt0:
                    mov @r0,#0
                    dec r0
                    djnz r1,loopint0
                    ljmp    exitInt0
        so1:        cjne a,#1,so2
                    mov r0,#ketQua1
                    mov @r0,giayChuc
                    dec r0
                    mov @r0,giay
                    dec r0
                    mov @r0,giayPhanMuoi
                    dec r0
                    mov @r0,giayPhanTram
                    mov soLanNho,#2
                    ljmp    exitInt0
        so2:        cjne    a,#2,so3
                    mov r0,#ketQua2
                    mov @r0,giayChuc
                    dec r0
                    mov @r0,giay
                    dec r0
                    mov @r0,giayPhanMuoi
                    dec r0
                    mov @r0,giayPhanTram
                    mov soLanNho,#3
                    ljmp    exitInt0
        so3:        cjne    a,#3,so4
                    mov r0,#ketQua3
                    mov @r0,giayChuc
                    dec r0
                    mov @r0,giay
                    dec r0
                    mov @r0,giayPhanMuoi
                    dec r0
                    mov @r0,giayPhanTram
                    mov soLanNho,#4
                    ljmp    exitInt0
        so4:        cjne    a,#4,so5
                    mov r0,#ketQua4
                    mov @r0,giayChuc
                    dec r0
                    mov @r0,giay
                    dec r0
                    mov @r0,giayPhanmuoi
                    dec r0
                    mov @r0,giayPhanTram
                    mov soLanNho,#5
                    ljmp    exitInt0
        so5:        cjne    a,#5,dung
                    clr tr0
                    mov r0,#ketQua5
                    mov @r0,giayChuc
                    dec r0
                    mov @r0,giay
                    dec r0
                    mov @r0,giayPhanMuoi
                    dec r0
                    mov @r0,giayPhanTram
        dung:       mov soLanNho,#0
                    
                    exitInt0:
                    pop 0
                    pop acc
                    CLR	IE0	; KET THUC NGAT PHAI XOA IE0 DE CHONG NHIEU, rat quan trong
        		    SETB	EX0
        		    SETB	EA
                    reti
        ;;;;;;;;;;;;;
        ;xem ket qua
        int1Isr:    push acc
                    CLR	EA
        CLR	EX1	   ; xoa ngat INT1
                    mov a,soHienThi
                    cjne    a,#0,soHT1
                    mov soHienThi,#1
                    mov hienThi,#ketQua1
                    ljmp exitInt1
        soHT1:      cjne    a,#1,soHT2
                    mov soHienThi,#2
                    mov hienThi,#ketQua2
                    ljmp    exitInt1
        soHT2:      cjne    a,#2,soHT3
                    mov soHienThi,#3
                    mov hienThi,#ketQua3
                    ljmp    exitInt1
        soHT3:      cjne    a,#3,soHT4
                    mov soHienThi,#4
                    mov hienThi,#ketQua4
                    ljmp    exitInt1
        soHT4:      cjne    a,#4,soHT5
                    mov soHienThi,#5
                    mov hienThi,#ketQua5
                    ljmp    exitInt1
        soHT5:      mov soHienThi,#0
                    mov giayChuc,#0
                    mov giay,#0
                    mov giayPhanMuoi,#0
                    mov giayPhanTram,#0
                    mov hienThi,#giayChuc
                    exitInt1:
                    CLR	IE1	; KET THUC NGAT PHAI XOA IE0 DE CHONG NHIEU
        	SETB	EX1
        	SETB	EA
                    pop acc
                    reti
        ; Ngat T0 chay 10ms 
        ; voi thanh anh 12M 10ms = 10.000us = -10.000
        t0Isr:
                push    acc
                mov th0,#high(-10000)
                mov tl0,#low(-10000)
                inc giayPhanTram
                mov a,giayPhanTram
                cjne a,#10, exitT0
                mov giayPhanTram,#0
                inc giayPhanMuoi
                mov a,giayPhanMuoi
                cjne a,#10,exitT0
                mov giayPhanMuoi,#0
                inc giay
                mov a, giay
                cjne a,#10,exitT0
                mov giay,#0
                inc giayChuc
                mov a, giayChuc
                cjne a, #10, exitT0
                mov giayChuc,#0
                exitT0:
                pop acc
                
        reti
        ;;;;;;;;;;
        delay:  mov R7,#200
                  djnz    r7,$
                  ret
        ;;;;;;;;;;;;;;;;;;;
        table:
        DB 00000011b,10011111b,00100101b,00001101b,10011001b
        DB 01001001b,01000001b,00011111b,00000001b,00001001b
        ;;;;;;;;;;;;;
        end
        Tôi thêm một button nữa cho ngắt INT1, dùng để xem kết quả.
        Cách hoạt đông của mạch điện như sau: khởi động hiển thị 00.00
        nhấn button INT0 đồng hồ bắt đầu chạy, nhấn tiếp button INT0, sẽ lưu kết quả 1, nhấn tiếp lưu kết quả 2....nhấn tiếp đến kết quả 5, đồng hồ sẽ ngừng chạy. Để xem kết quả, nhấn button INT1 kết quả 1 hiển thị, tiếp tục cho đến kết quả 5, sau đó trở về không, nhấn tiếp sẽ lặp lại...
        Nên nhớ rằng mạch này chỉ chạy trên mô phỏng, trên mạch thực tế cần mắc thêm driver cho LED vì 89C51 không đủ dòng cho LED.
        Trong đoạn code trên, phần hiển thị nên sử dụng ngắt T1 nếu phát triển thêm chương trình. Phần Delay trong thực tế nên viết tăng thời gian lên. Đã chạy thử trên Proteus. mạch điện sửa lại đôi chút như file đính kèm ( do máy tính đang sử dụng khi có winzip nên chuyển sau word)
        Vì thời gian có hạn nên tôi ít ghi chú trong code, bạn nên tự tìm hiểu
        Thân!
        Attached Files

        Comment


        • #5
          Hình như bạn không trở lại diễn đàn thì phải?
          Nếu có ai đó giúp bạn thì cũng cần thời gian. Bạn không nên nóng vội như vậy
          hôm nay em lên rồi đây
          đúng là em hơi vội vàng
          đã thử và mach chay đúng yêu cầu
          cám ơn anh rất nhiều
          |

          Comment


          • #6
            Cám ơn anh về bài viết rất bổ ích ,anh có thể post thêm lưu đồ giải thuật cho anh em cùng tìm hiểu được không ạ .Em chưa hiểu rõ lắm về đoạn code .Cám ơn anh nhiều!

            Comment


            • #7
              Nguyên văn bởi thanhtric5 Xem bài viết
              Cám ơn anh về bài viết rất bổ ích ,anh có thể post thêm lưu đồ giải thuật cho anh em cùng tìm hiểu được không ạ .Em chưa hiểu rõ lắm về đoạn code .Cám ơn anh nhiều!
              Tôi không vẽ được do thời gian, tôi có giải thích trong file đính kèm, bạn đọc và tự vẽ lưu đồ.
              Thân!
              Attached Files

              Comment


              • #8
                Tình hình là mạch của bác em chạy dc rồi, giờ em muốn làm ra mạch in cho ra thực tế luôn. Thế nhưng cái led 7 đoạn này, em muốn làm ra thực tế thì phải chuyển đổi sao hả các bác? ngoài thực tế cũng ko có con led nào như vậy, phải mua 4 con ghép lại, nhưng cách chuyển đổi làm sao, mong các bác giúp em.

                Comment

                Về tác giả

                Collapse

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

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

                Collapse

                Đang tải...
                X