Thông báo

Collapse
No announcement yet.

sử dụng ngắt cứng của 8051

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

  • sử dụng ngắt cứng của 8051

    mình đang phải làm về mạch đếm sản phẩm sử dụng vi xử lí 8051. trong quá trình viết code, mình nảy sinh ra 1 khó khăn mà chưa giải quyết được. mọi người xem hộ mình với nhé.

    chương trình chính của mình là gửi liên tục các giá trị số sản phẩm đếm được gửi qua led. sau đó, mình dùng ngắt là INT0. khi có ngắt INT0, nó thực hiện tăng giá trị hiển thị trên bảng led.

    tuy nhiên, khi bắt tay vào làm thì có 1 thực tế như sau đo là khi thực hiện ngắt, các trạng thái của chương trình chính được lưu lại trong ngăn xếp. và, khi thực hiện xong ngắt, trạng thái cũng như giá trị của chương trình chính lại được khôi phục lại như cũ. như vậy, việc ngắt để tăng giá trị cho hiển thị của mình đã không có tác dụng?
    mình phải làm thế nào đây?
    cảm ơn các bạn rất nhiều.
    Code:
       ORG    000H
       LJMP   MAIN
       ORG    0003H
       LJMP   DEM_SP
    
    
    MAIN:
       MOV    IE,#81H
    
    
    
       MOV    P1,#00H
       MOV    R3,#00H
       MOV    R4,#00H
       MOV    R5,#00H
       MOV    R6,#00H
       MOV    R7,#00H
    
    AGAIN:   									 ; CHUONG TRINH HIEN THI
       MOV    P2,R3
       SETB   P1.0
       LCALL  DELAY
       CLR    P1.0
    
       MOV    P2,R4
       SETB   P1.1
       LCALL  DELAY
       CLR    P1.1
    
       MOV    P2,R5
       SETB   P1.2
       LCALL  DELAY
       CLR    P1.2
    
       MOV    P2,R6
       SETB   P1.3
       LCALL  DELAY
       CLR    P1.3
    
       MOV    P2,R7
       SETB   P1.4
       LCALL  DELAY
       CLR    P1.4
    
       LJMP   AGAIN
    
    DEM_SP:					                       ; CHUONG TRINH DEM SAN PHAM
       INC    R3
       CJNE   R3,#0AH,HANG_CHUC
       RETI
    
    HANG_CHUC:
       MOV    R3,#00H
       INC    R4
       CJNE   R4,#0AH,HANG_TRAM
       RETI
    
    HANG_TRAM:
       MOV    R4,#00H
       INC    R5
       CJNE   R5,#0AH,HANG_NGHIN
       RETI
    
    
    HANG_NGHIN:
       MOV    R5,#00H
       INC    R6
       CJNE   R6,#0AH,HANG_VAN
       RETI
    
    
    HANG_VAN:
       MOV    R6,#00H
       INC    R7
       CJNE   R7,#09H,STOP
       RETI
    
    STOP:
       CLR   IE.7												  ; CHUONG TRINH KET THUC
       
    DELAY:
       MOV   R2,#255
    LAP:   DJNZ R2,LAP
       
       RET
    
       END

  • #2
    Nguyên văn bởi trandchien Xem bài viết
    mình đang phải làm về mạch đếm sản phẩm sử dụng vi xử lí 8051. trong quá trình viết code, mình nảy sinh ra 1 khó khăn mà chưa giải quyết được. mọi người xem hộ mình với nhé.

    chương trình chính của mình là gửi liên tục các giá trị số sản phẩm đếm được gửi qua led. sau đó, mình dùng ngắt là INT0. khi có ngắt INT0, nó thực hiện tăng giá trị hiển thị trên bảng led.

    tuy nhiên, khi bắt tay vào làm thì có 1 thực tế như sau đo là khi thực hiện ngắt, các trạng thái của chương trình chính được lưu lại trong ngăn xếp. và, khi thực hiện xong ngắt, trạng thái cũng như giá trị của chương trình chính lại được khôi phục lại như cũ. như vậy, việc ngắt để tăng giá trị cho hiển thị của mình đã không có tác dụng?
    mình phải làm thế nào đây?
    cảm ơn các bạn rất nhiều.
    Code:
       ORG    000H
       LJMP   MAIN
       ORG    0003H
       LJMP   DEM_SP
    
    
    MAIN:
       MOV    IE,#81H
    
    
    
       MOV    P1,#00H
       MOV    R3,#00H
       MOV    R4,#00H
       MOV    R5,#00H
       MOV    R6,#00H
       MOV    R7,#00H
    
    AGAIN:   									 ; CHUONG TRINH HIEN THI
       MOV    P2,R3
       SETB   P1.0
       LCALL  DELAY
       CLR    P1.0
    
       MOV    P2,R4
       SETB   P1.1
       LCALL  DELAY
       CLR    P1.1
    
       MOV    P2,R5
       SETB   P1.2
       LCALL  DELAY
       CLR    P1.2
    
       MOV    P2,R6
       SETB   P1.3
       LCALL  DELAY
       CLR    P1.3
    
       MOV    P2,R7
       SETB   P1.4
       LCALL  DELAY
       CLR    P1.4
    
       LJMP   AGAIN
    
    DEM_SP:					                       ; CHUONG TRINH DEM SAN PHAM
       INC    R3
       CJNE   R3,#0AH,HANG_CHUC
       RETI
    
    HANG_CHUC:
       MOV    R3,#00H
       INC    R4
       CJNE   R4,#0AH,HANG_TRAM
       RETI
    
    HANG_TRAM:
       MOV    R4,#00H
       INC    R5
       CJNE   R5,#0AH,HANG_NGHIN
       RETI
    
    
    HANG_NGHIN:
       MOV    R5,#00H
       INC    R6
       CJNE   R6,#0AH,HANG_VAN
       RETI
    
    
    HANG_VAN:
       MOV    R6,#00H
       INC    R7
       CJNE   R7,#09H,STOP
       RETI
    
    STOP:
       CLR   IE.7												  ; CHUONG TRINH KET THUC
       
    DELAY:
       MOV   R2,#255
    LAP:   DJNZ R2,LAP
       
       RET
    
       END
    Bạn thử tham khảo cái này xem, mạch mình mô phỏng dùng LCD.
    link: http://www.mediafire.com/?8df4oa0qu6aznd6
    Công ty TNHH Tự Động Hóa Đạt Lân
    32/36, Ông Ích Khiêm, F14, Q11
    ĐT: 08.3974 7308 - 0937.197.001
    email:
    Webite:

    Comment


    • #3
      mình đã tìm ra lỗi của mình. do mình thiếu câu lệnh " SETB TCON.0 " mình vừa sửa lại nó chiều nay và kết quả là nó chạy ngon lành rồi. he

      Comment


      • #4
        chúc mừng bạn
        không tiếp nhận cuộc gọi qua điện thoại vì đi làm toàn tập, tính khí thất thường, hay nóng võ công lại cao

        Comment


        • #5
          Nguyên văn bởi trandchien Xem bài viết
          mình đã tìm ra lỗi của mình. do mình thiếu câu lệnh " SETB TCON.0 " mình vừa sửa lại nó chiều nay và kết quả là nó chạy ngon lành rồi. he
          em cũng đang làm mạch đếm sp này, có thể cho em xin code hoàn chỉnh được ko ạ, em đã dùng cách viết code này nhưng ko biết sửa như thế nào!

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X