Thông báo

Collapse
No announcement yet.

Ai có kinh nghiệm giúp với

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

  • Ai có kinh nghiệm giúp với

    Mình đang học lập trình ASM, làm chương trình báo chuông. MÌnh dùng ds12887+89s52 hiện thị led 7 đoạn.Mình đọc hết trong diễn đàn chỉ thấy làm để hiện thị giờ phút giây, chưa thấy ai lập trình báo chuông (dùng ds12887). Ai tưng làm hay có kinh nghiệm chỉ giúp mình với. Hiện thị giờ, phút, giây thì được rồi nhưng làm cách nào để có thể cài đặt số lần báo giờ, đổ chuông theo ý mình cài đặt.
    Last edited by rebelhp; 06-07-2009, 17:22.

  • #2
    Nguyên văn bởi rebelhp Xem bài viết
    Mình đang học lập trình ASM, làm chương trình báo chuông. MÌnh dùng ds12887+89s52 hiện thị led 7 đoạn.Mình đọc hết trong diễn đàn chỉ thấy làm để hiện thị giờ phút giây, chưa thấy ai lập trình báo chuông (dùng ds12887). Ai tưng làm hay có kinh nghiệm chỉ giúp mình với. Hiện thị giờ, phút, giây thì được rồi nhưng làm cách nào để có thể cài đặt số lần báo giờ, đổ chuông theo ý mình cài đặt.
    chi đâu , khai báo 1 hằng số , nếu giá trị đọc ra từ DS = hằng số này thì kích báo chuông .

    Comment


    • #3
      nói vậy ai chả nói được. Ko biết thì mình mới hỏi chứ? bạn có thể nói rõ hơn ko? nếu có tài liệu cụ thể thì hay. muốn đặt bao nhiều lần báo giờ trong ngày chằng hạn?

      Comment


      • #4
        Nguyên văn bởi rebelhp Xem bài viết
        nói vậy ai chả nói được. Ko biết thì mình mới hỏi chứ? bạn có thể nói rõ hơn ko? nếu có tài liệu cụ thể thì hay. muốn đặt bao nhiều lần báo giờ trong ngày chằng hạn?
        Ví dụ bằng asm so sánh giờ phút giây rùi đổ chuông nè, tới đúng giờ hẹn thì loa sẽ kêu trong vòng 15s. Ô nhớ 05h và 06h chứa giá trị giờ phút hiện tại, còn giá trị hẹn được lấy từ ram của DS12c887 (lưu kiểu này khỏi lo mất điện).
        Đây là trích đoạn phần so sánh giúp bạn dễ hình dung:
        SOSANHHEN:
        MOV R0,#REG_PHUTHEN
        MOVX A,@R0
        MOV 3AH,A

        MOV R0,#REG_GIOHEN
        MOVX A,@R0
        MOV 3BH,A

        MOV A,05H
        CJNE A,3AH,THOATSOSANH
        MOV A,06H
        CJNE A,3BH,THOATSOSANH

        MOV A,R4
        IF A < #16H THEN LJMP KICHLOA ;THOI GIAN LOA KEU (TINH BANG GIAY)

        SETB LOA
        RET
        KICHLOA:
        CLR LOA
        RET
        THOATSOSANH:
        SETB LOA
        RET

        Comment


        • #5
          thanks anh rất nhiều. đọc hướng dẫn của anh cũng sáng ra được một ít. ASM lại có cả lệnh IF...THEN ah?Em có một ví dụ lập trình xong về giờ, phút, giây như sau. anh có thể cho hướng đi cụ thể về phần hẹn giờ ko? và mình hẹn nhiều lần để nó tự đổ chuông thì làm thế nào( như chuông báo tiết học
          ;##########P3 điều khiển các đoạn, P1 dk các led, P0 nối vơi AD RTC,
          ; ##########P2.3 chỉnh thời gian, P2.2 TANG_H, P2.1 TANG PHUT,P2.0 UPDATE
          AD EQU P0
          CS BIT P2.7
          AS BIT P2.6
          RW BIT P2.5
          DSS BIT P2.4

          PHUT_CHINH EQU 42H
          GIO_CHINH EQU 43H
          THU_CHINH EQU 44H

          MAIN: SETB CS
          MOV 30H,#0; o nho giây
          MOV 31H,#0; chuc giây
          MOV 32H,#0;phút
          MOV 33H,#0;chuc phút
          MOV 34H,#0; giờ
          MOV 35H,#0; chục giờ
          MOV 36H,#0;lưu ô nhớ giây
          MOV 37H,#0;lưu ô nhớ phút
          MOV 38H,#0; lưu o nhớ giờ
          MOV 39H,#0; luu o nhớ thứ
          MOV 40H,#0; thứ
          MOV 41H,#0; CHUCTHU



          MOV 42H,#0; giá trị phút sau khi đã chỉnh xong
          MOV 43H,#0; giá trị giờ sau khi đã chỉnh xong

          AGAIN: LCALL DOC
          LCALL BIN_BCD
          LCALL OUTLED
          JNB P2.3,TIEPSUC


          SJMP AGAIN
          TIEPSUC: LJMP CHINH_TG

          DOC: MOV A,#00H
          LCALL WRITE_ADD
          MOV A,#0FFH
          MOV AD,A
          LCALL READ
          MOV 36H,A
          MOV A,#02H
          LCALL WRITE_ADD
          MOV A,#0FFH
          MOV AD,A
          LCALL READ
          MOV 37H,A
          MOV A,#04H
          LCALL WRITE_ADD
          MOV A,#0FFH
          MOV AD,A
          LCALL READ
          MOV 38H,A
          MOV A,#06H
          LCALL WRITE_ADD
          MOV A,#0FFH
          MOV AD,A
          LCALL READ
          MOV 39H,A
          RET
          WRITE_ADD: SETB CS
          MOV AD,#0FFH
          CLR RW
          CLR DSS
          CLR AS
          NOP
          SETB DSS
          SETB RW
          NOP
          SETB AS
          CLR CS
          MOV AD,A
          CLR AS
          RET
          READ: CLR DSS
          NOP
          MOV A,AD
          SETB DSS
          SETB CS
          SETB AS
          RET
          BIN_BCD: MOV A,36H
          MOV B,#10
          DIV AB
          MOV 30H,B
          MOV 31H,A
          MOV A,37H
          MOV B,#10
          DIV AB
          MOV 32H,B
          MOV 33H,A
          MOV A,38H
          MOV B,#10
          DIV AB
          MOV 34H,B
          MOV 35H,A
          MOV A,39H
          MOV B,#10
          DIV AB
          MOV 40H,B
          MOV 41H,A
          RET

          OUTLED: MOV A,40H
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.6
          LCALL DELAY500US
          SETB P1.6
          MOV A,41H
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.7
          LCALL DELAY500US
          SETB P1.7

          MOV A,30H
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A

          CLR P1.0

          LCALL DELAY500US
          SETB P1.0
          MOV A,31H
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.1
          LCALL DELAY500US
          SETB P1.1
          MOV A,32H
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.2
          LCALL DELAY500US
          SETB P1.2
          MOV A,33H
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.3
          LCALL DELAY500US
          SETB P1.3
          MOV A,34H
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.4
          LCALL DELAY500US
          SETB P1.4
          MOV A,35H
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.5
          LCALL DELAY500US
          SETB P1.5
          RET

          DELAY500US: MOV R0,#250
          DJNZ R1,$
          RET
          ;##################CHINH_THOI_GIAN################ ########

          CHINH_TG:
          LCALL DELAYNUT
          JB P2.3,TIEPSUC4
          LCALL LED_CHINH; HIEN THI RA LED GIA TRI HIEN TAI
          CHINH_GIO1: LCALL DISPLAY
          JNB P2.2,TIEPSUC1
          JNB P2.1,TIEPSUC2
          JNB P2.0,TIEPSUC3
          JNB P2.3,TIEPSUC5

          SJMP CHINH_GIO1


          TIEPSUC1: LJMP TANG_GIO
          TIEPSUC2: LJMP TANG_PHUT
          TIEPSUC3: LJMP TANG_THU
          TIEPSUC4: LJMP AGAIN
          TIEPSUC5: LCALL DELAYNUT
          JB P2.3 ,CHINH_GIO1
          LJMP UPDATE





          LED_CHINH:

          DV_P EQU 32H; LUU GIA TRI DON VI PHUT VAO DV_P(32H)

          CH_P EQU 33H; LUU GIA TRI CHUC PHUT VO CH_P(33H)


          DV_H EQU 34H; LUU DON VI GIO VAO DV_H(34H)

          CH_H EQU 35H; LUU CHUC GIO VAO CH_H(35H)
          DV_THU EQU 40H
          DISPLAY: MOV A,DV_P
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.2
          LCALL DELAY500US
          SETB P1.2
          MOV A,CH_P
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.3
          LCALL DELAY500US
          SETB P1.3
          MOV A,DV_H
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.4
          LCALL DELAY500US
          SETB P1.4
          MOV A,CH_H
          MOV DPTR,#MALED
          MOVC A,@A+DPTR
          MOV P3,A
          CLR P1.5
          LCALL DELAY500US
          SETB P1.5
          mov a,DV_thu
          mov dptr,#maled
          movc a,@a+dptr
          mov p3,a
          clr p1.6
          lcall delay500us
          setb p1.6





          RET



          TANG_GIO:
          LCALL DELAYNUT ;CHONG NHIEU NUT
          JB P2.2,THOATCHINH

          MOV A,CH_H
          CJNE A,#02,TANG_GIO1
          MOV A,DV_H
          CJNE A,#03,TANG_GIO2
          MOV CH_H,#00
          MOV DV_H,#00
          LJMP CHINH_GIO1
          TANG_GIO1: MOV A,DV_H
          CJNE A,#09,TANG_GIO2
          INC CH_H
          MOV DV_H,#00
          LJMP CHINH_GIO1
          TANG_GIO2:
          INC DV_H
          LJMP CHINH_GIO1


          ;TAÊNG PHUÙT NAØ-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-


          TANG_PHUT: LCALL DELAYNUT
          JB P2.1,THOATCHINH
          INC DV_P
          MOV A,DV_P
          CJNE A,#10,THOATCHINH
          MOV DV_P,#00
          INC CH_P
          MOV A,CH_P
          CJNE A,#06,THOATCHINH
          MOV DV_P,#00
          MOV CH_P,#00

          TANG_THU: LCALL DELAYNUT
          JB P2.0,THOATCHINH
          INC DV_THU
          MOV A,DV_THU
          CJNE A,#08,THOATCHINH
          MOV DV_THU,#00
          THOATCHINH: LJMP CHINH_GIO1



          UPDATE:
          ACALL RE_UPDATE

          MOV A,#00H
          LCALL WRITE_ADD
          MOV A,#00
          LCALL WRITE_BYTE
          NOP
          NOP
          MOV A,#02H
          LCALL WRITE_ADD
          MOV A,42H
          LCALL WRITE_BYTE
          NOP
          NOP
          MOV A,#04H
          LCALL WRITE_ADD
          MOV A,43H
          LCALL WRITE_BYTE
          MOV A,#06H
          LCALL WRITE_ADD
          MOV A,39h
          LCALL WRITE_BYTE
          LJMP AGAIN
          RE_UPDATE: ;CHUYEN 2GT GIOCHINH VA PHUTCHINH - > BINARY

          MOV A,CH_P
          MOV B,#10
          MUL AB



          ADD A,DV_P
          MOV 42H,A
          MOV A, CH_H
          MOV B,#10
          MUL AB


          ADD A,DV_H
          MOV 43H,A
          mov 39h,DV_THU


          RET
          WRITE_BYTE:
          CLR RW
          NOP
          MOV AD,A
          SETB RW
          NOP
          SETB CS
          SETB AS
          ret
          DELAYNUT: MOV R7,#255
          LAP: MOV R6,#200
          DJNZ R6,$
          DJNZ R7,LAP
          RET
          MALED: DB 0C0H
          DB 0F9H
          DB 0A4H
          DB 0b0H
          DB 99H
          DB 92H
          DB 82H
          DB 0f8H
          DB 80H
          DB 90H
          END

          Comment


          • #6
            Muốn xài If...then trong ASM thì bạn phải xài trình biên dịch prog-studio v5.28. Nó hỗ trợ cho bạn lệnh if...then, nhờ lệnh này mà bạn viết ct sẽ gọn nhẹ và dễ dàng hơn nhiều. Muốn hẹn giờ theo nhiều lần thì phải so sánh các gt giờ hiện tại với các gt hẹn đó thôi bạn à.

            Comment


            • #7
              Mình cũng đang làm về bộ báo giờ.Khi nhận đề tài ko đọc kĩ cứ tưởng chỉ làm mạch báo chuông thôi ai ngờ khi đọc lại là làm về mạch báo chuông trường học. Phát sinh ra ở đây là phải làm nhiều lần hẹn chuông, rồi đổ chuông trong ngày. Ai từng làm về vấn để này có thể chỉ giúp ko? Mình dùng vdk + RTC

              Comment

              Về tác giả

              Collapse

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

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

              Collapse

              Đang tải...
              X