Thông báo

Collapse
No announcement yet.

Xin giúp em đếm 00-99 dung ngat

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

  • Xin giúp em đếm 00-99 dung ngat

    Xin chào các bác. em mới làm quen với vi điều khiển , em đang lập trình đếm cho 2 led 7 đoạn dùng ngắt mong các bác xem giùm em xem có sai phần nào không. Góp ý giùm em xem phương án như thế được chưa có ổn không ạ. đợt này em không có máy nên không thể mô phỏng được .
    Bài của em thế này ạ : AT89C51 P0.0 đến P0.6 nối lần lượt a,b,c,d,e,f,g . P1.0 nối led1 , P1.1 nối led2 . sau đây là code em viết :
    DONVI EQU 30H
    CHUC EQU 31H
    ORG 0000H
    LJMP MAIN
    ORG 000BH
    LJMP T0_ISR
    ORG 001BH
    LJMP T1_ISR
    ORG 0030H

    MAIN:
    MOV P1,#0FFH
    MOV IE,#8AH
    MOV TMOD,#11H
    MOV TH0,#0F2H
    MOV TL0,#0FBH
    MOV TH1,#(-50000)
    MOV TL1,#(-50000)
    MOV R7,#20
    SETB TR0
    SETB TR1
    CLR P1.1
    JMP $


    T1_ISR :
    MOV TH1,#(-50000)
    MOV TL1,#(-50000)
    DJNZ R7,#20,EXIT_T1
    LCALL HIENTHI
    MOV R7,#20
    EXIT_T1 :
    RETI

    T0_ISR :
    MOV TH0,#0F2H
    MOV TL0,#0FBH
    CPL P1.0
    CPL P1.1
    RETI

    HIENTHI :
    MOV A,DONVI
    LCALL MALED7
    MOV P0,A
    INC DONVI
    CJNE DONVI,#0AH,EXIT
    MOV DONVI,#00H
    INC CHUC
    MOV A,CHUC
    LCALL MALED7
    MOV P0,A
    CJNE CHUC,#09H,EXIT
    MOV CHUC,#00H
    EXIT :
    RET

    MALED7 :
    INC A
    MOVC A,@A+PC
    RET
    DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

    END


    Các bác xem giùm em với .sao em cứ thấy không ổn lắm mà nghĩ hoài không ra.em có gà quá các bác đừng cười em nha. mới nhập môn mà .em cám ơn các bác

  • #2
    Thực sự nhìn cái ASM mình ớn lắm, ngày xưa cũng 1 thời nhưng giờ bỏ lâu ròi. Nó hơi rối mắt, thường thì chỉ có người lập trình thì biết mình viét gì, người khác đọc thì hơi lâu hiểu. Mình chỉ xin góp ý thế này thôi:
    Dùng ngắt để đếm thời gian chuẩn, giả sử cứ 1ms thì ngắt xảy ra 1 lần, trong CT phục vụ ngắt bạn tăng 1 biến đếm d nào đó, trong CT chính bạn chỉ cần tách cái số d này thành phần chục và đơn vị rồi xuất ra port đk mấy led 7 đoạn để hiển thị, Bạn cần cái mã 7 vạch cho led, tùy là loại catot hay anot mà mã khác nhau 1 chút. Chỉ đơn giản vậy thôi, dùng ngôn ngữ C thì nhẹ nhàng hơn trong việc chia, nhân.


    Add: 97 Quán Nam - Lê Chân - Hải Phòng.
    Tel: 031 518648 Phone: 0904 283 505

    Comment


    • #3
      Cám ơn bác nhiều nha. để em thử thêm cách của bác.Lập trình C thì em cũng có học nhưng gà mờ lắm bác ạ. có bác nào vào chỉ dùm em đoạn chương trình trên với. em dùng led 7 đoạn anot chung

      Comment


      • #4
        sao ko dung 74147 cho tien hon ko

        Comment


        • #5
          ý bác nói là dùng phương pháp chốt phải không?em đang học cho xong phần quét này đã. sao ko có ai giúp em vậy nè. chắc vấn đề này dễ quá à . em mới làm quen thôi mà

          Comment


          • #6
            CHốt hay quét cũng đc, cái gì cũng có giá cả. Chốt thì tốn phần cứng nhưng đơn giản LT, quét thì đơn giản phần cứng nhưng lập trình khó hơn chốt 1 tí. 1 tí thôi.


            Add: 97 Quán Nam - Lê Chân - Hải Phòng.
            Tel: 031 518648 Phone: 0904 283 505

            Comment


            • #7
              buồn nhỉ không ai chịu giúp em vậy

              Comment


              • #8
                Nguyên văn bởi cafedrao Xem bài viết
                buồn nhỉ không ai chịu giúp em vậy
                CJNE DONVI,#0AH,EXIT;lệnh này sai CJNE chỉ làm việc với thanh ghi A hoặc Rn
                thử code này xem sao:
                #include <sfr51.inc>
                DONVI EQU 30H
                CHUC EQU 31H
                ORG 0000H
                LJMP MAIN
                ORG 001BH
                LJMP T1_ISR
                ORG 0030H

                MAIN:
                MOV P1,#0FFH
                MOV IE,#88H
                MOV TMOD,#11H
                MOV TH1,#(-50000)
                MOV TL1,#(-50000)
                MOV R7,#20
                MOV R2,#00
                SETB TR1
                CLR P1.1
                MOV CHUC,#00
                MOV DONVI,#00
                LAP_LAI:
                LCALL HIENTHI
                AJMP LAP_LAI
                T1_ISR :
                MOV TH1,#(-50000)
                MOV TL1,#(-50000)
                DJNZ R7,EXIT_T1
                INC R2
                CJNE R2,#99,CHUA_DU
                MOV R2,#00
                CHUA_DU:
                MOV A,R2
                MOV B,#10
                DIV AB;phan nguyen luu vao A ,phan du luu vao B
                MOV DONVI,B
                MOV CHUC,A
                MOV R7,#20
                EXIT_T1 :
                CLR TF1
                RETI
                HIENTHI :
                MOV A,DONVI
                LCALL MALED7
                MOV P2,A
                CLR P1.0
                SETB P1.1
                LCALL DELAY
                MOV A,CHUC
                LCALL MALED7
                MOV P2,A
                SETB P1.0
                CLR P1.1
                LCALL DELAY
                RET
                DELAY:
                MOV R6,#255
                DJNZ R6,$
                RET
                MALED7 :
                MOV DPTR,#LED
                MOVC A,@A+DPTR
                RET
                LED:
                DB C0H,F9H,A4H,B0H,99H,92H,82H,F8H,80H,90H;
                END
                |

                Comment


                • #9
                  Bạn có thể tham khảo mạch và Code này: (đã test chạy tốt)



                  $MOD51
                  ;khai bao bien
                  LED_DATA EQU P0 ; XUAT MA LED 7SEG
                  SCAN_LED1 BIT P2.0 ; LED DON VI
                  SCAN_LED2 BIT P2.1 ;LED CHUC
                  LED_38KHz BIT P3.3
                  CLK_IN BIT P3.2 ;SU DUNG E0
                  LED BIT P2.7 ;DK BANG CHUYEN

                  ORG 00H
                  LJMP MAIN
                  ORG 03H
                  LJMP E0_ISR ;Ngat ngoai 0
                  ORG 0BH
                  LJMP T0_ISR ;Ngat Time 0 dung tao dao dong xuat led RF
                  ORG 001BH
                  LJMP T1_ISR ;Ngat Time 1 dung bang chuyen 1 khoan thoi gian
                  ORG 0030H

                  MAIN:
                  MOV TMOD, #12H
                  MOV TH0,#(-13)
                  SETB TR0
                  SETB EA
                  SETB ET0
                  SETB EX0
                  SETB IT0
                  setb LED
                  MOV DPTR,#D_TO_7SEG
                  ;----------------------------------
                  MOV R7,#0
                  ondinh: ;Cho cho xung hong ngoai on dinh
                  mov a,r7
                  cjne a,#1,ondinh
                  mov r7,#0
                  ;-----------------------------------
                  CLR LED
                  MOV R5,#50

                  LOOP:
                  MOV A,R7
                  MOV B,#10
                  DIV AB

                  MOVC A,@A+DPTR
                  CLR SCAN_LED2
                  MOV LED_DATA,A
                  SETB SCAN_LED1
                  ACALL DELAY

                  MOV A,B
                  MOVC A,@A+DPTR
                  CLR SCAN_LED1
                  MOV LED_DATA,A
                  SETB SCAN_LED2
                  ACALL DELAY

                  SJMP LOOP
                  RET
                  ;------------------------------
                  T0_ISR:
                  CPL LED_38KHz
                  RETI
                  ;-------------------------------
                  E0_ISR:
                  INC R7
                  CJNE R7,#20,TIEP ;còn n?u b?ng r?i thì g?i chuong trình TIEPTUC
                  ACALL TIEPTUC
                  TIEP:
                  CJNE R7,#40,TIEP1
                  ACALL TIEPTUC
                  TIEP1:
                  CJNE R7,#60,TIEP2
                  ACALL TIEPTUC
                  TIEP2:
                  CJNE R7,#80,TIEP3
                  ACALL TIEPTUC
                  TIEP3:
                  CJNE R7,#100,EXIT
                  MOV R7,#0
                  ACALL TIEPTUC
                  EXIT:
                  RETI
                  ;--------------------------------
                  DELAY:
                  MOV R6,#200
                  DJNZ R6,$
                  RET
                  ;---------------------------------
                  TIEPTUC:
                  SETB LED
                  SETB ET1 ;
                  MOV TH1,#HIGH(-50000)
                  MOV TL1,#LOW(-50000)
                  SETB TR1
                  RET
                  ;-----------------------------------
                  T1_ISR:
                  DJNZ R5,THOAT
                  CLR LED
                  CLR ET1
                  CLR TR1
                  MOV R5,#50
                  THOAT:
                  RETI
                  ;-----------------------------------------
                  D_TO_7SEG:

                  DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
                  END
                  Last edited by pctcom; 03-08-2010, 14:44.
                  PCT COMPUTER
                  (Để không làm ảnh hưởng đến thời gian và công việc cá nhân. Xin vui lòng không nhắn tin và điện thoại)

                  Comment


                  • #10
                    Cám ơn các bác nha. Chương trình của em em sửa được rồi . Nhưng em thấy chương trình của 2 bác tdm và pctcom viết đọc dễ hiểu thật lại ngắn hơn nữa. chân thành cảm ơn các bác đã giúp em. vậy là em xong phần 7 đoạn rồi . Cho em hỏi thêm cái nha : quét led matrix có phải tương tự như vậy không các bác ?

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    Đang tải...
                    X