Thông báo

Collapse
No announcement yet.

Xử lý biến đếm lớn hơn 256 để xuất led

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

  • Xử lý biến đếm lớn hơn 256 để xuất led

    Các anh ơi cho em hỏi, em đang làm mạch đếm sản phẩm, số lượng sản phẩm từ 0 đến 9999, thanh ghi đếm em chọn là DPTR, nhưng khi giá trị đếm vượt quá 256 thì em không biết cách nào hiệu chỉnh để xuất ra 7SEG. Mong các anh giúp đỡ dùm ! Thanks !

  • #2
    Nguyên văn bởi toilq30 Xem bài viết
    Các anh ơi cho em hỏi, em đang làm mạch đếm sản phẩm, số lượng sản phẩm từ 0 đến 9999, thanh ghi đếm em chọn là DPTR, nhưng khi giá trị đếm vượt quá 256 thì em không biết cách nào hiệu chỉnh để xuất ra 7SEG. Mong các anh giúp đỡ dùm ! Thanks !
    bạn có thể dùng vòng lặp để có thể đếm giá trị lớn hơn:
    vd:
    mov R0,#255
    ct1: mov R1,#255
    .....................
    ct2: djnz r1,ct2
    djnz r2,ct1
    kq lặp = 255x255 = 65025 lần
    tha hồ cho bạn đếm nhé. Chúc thành công
    Last edited by lenovo_y410; 05-10-2009, 23:06.

    Comment


    • #3
      Nguyên văn bởi lenovo_y410 Xem bài viết
      bạn có thể dùng vòng lặp để có thể đếm giá trị lớn hơn:
      vd:
      ct1: mov R0,#255
      ct2: mov R1,#255
      .....................
      djnz r1,ct2
      djnz r2,ct1
      kq lặp = 255x255 = 65025 lần
      tha hồ cho bạn đếm nhé. Chúc thành công
      Em cám ơn anh nhiều, nhưng em vẫn chưa hiểu lắm. Bài toán của em đặt ra là khi có sản phẩm đi qua thì giá trị của thanh ghi tăng lên 1, do giá trị đếm tối đa là 9999 nên em chọn thanh ghi để đếm là DPTR (không biết có đúng không), khi giá trị DPTR lớn hơn 256 thì em ko biết xử lý để xuất ra 4 con LED. Giả xử em muốn chọn 2 thanh ghi R0 và R1 thì em phải xử lý thế nào và có khác gì so với chon thanh ghi DPTR không. Mong các anh giúp em dùm ! Thankss!

      Comment


      • #4
        http://8052.com Vào trang này mà xem thuật toán thực hiện phép cộng trừ nhân chia 16 bit sử dụng 2 thanh ghi 8bit

        Comment


        • #5
          Khai báo 1 biến kiểu unsigned int, nó có giá trị từ 0 đến 65535 thì đếm vô tư rồi.
          Mỗi lần có sản phẩm đi qua thi cho biến này tăng thêm 1 giá trị.
          Kết quả ta chia lấy phần nghìn, trăm, chuc và phấn đơn vị xuất ra Led.
          Ví dụ như thế này chẳng hạn:
          PHP Code:
          unsigned int result;
          unsigned char a,b,c,d;
          result/1000;                    // Số hàng nghìn
          =(result%1000)/100;           // Số hàng trăm 
          = ((result%1000)%100)/10;  // Số hàng chục
          =((result%1000)%100)%10;  // Số hàng đơn vị 

          Comment


          • #6
            4 ký số bcd dùng 2byte

            Nguyên văn bởi toilq30 Xem bài viết
            Các anh ơi cho em hỏi, em đang làm mạch đếm sản phẩm, số lượng sản phẩm từ 0 đến 9999, thanh ghi đếm em chọn là DPTR, nhưng khi giá trị đếm vượt quá 256 thì em không biết cách nào hiệu chỉnh để xuất ra 7SEG. Mong các anh giúp đỡ dùm ! Thanks !
            thân gởi bạn, không biết như thế này có đúng ý bạn không. được thì thanks cái nhé
            bcdh equ 30h
            bcdl equ 31h
            buffer_bcd1 equ 32h
            buffer_bcd2 equ 33h
            buffer_bcd4 equ 34h
            buffer_bcd3 equ 35h
            led_num equ 36h

            inc_index_bcd:
            mov a,bcdl ; byte thấp bcd
            add a,#1
            da a ;đổi sang số BCD
            mov bcdl,a
            mov a,bcdh ; byte cao bcd
            addc a,#0 ;nếu bcdl tràn từ 99--00 thì tăng bcd lên 1(C=1)
            da a ;đổi sang số BCD
            mov bcdh,a

            mov a,bcdl
            mov r0,#buffer_bcd1
            xchd a,@r0 ;lấy số hàng đơn vị
            swap a
            mov r0,#buffer_bcd2
            xchd a,@r0 ;hàng chục

            mov a,bcdh
            mov r0,#buffer_bcd3
            xchd a,@r0 ;hàng trăm
            swap a
            mov r0,#buffer_bcd4
            xchd a,@r0 ;hàng nghìn
            ret
            Attached Files

            Email:
            Tel: 0983.497.310

            Comment


            • #7
              em cảm ơn sự nhiệt tình của các anh. Code viết = C nhìn dễ hiểu quá, đúng là C cấp cao thật. Còn ASM nhìn phức tạp quá, em sẽ nghiên cứu kỹ, nếu có gì thắc mắc em nhờ các anh giúp đỡ thêm. Vì em dang làm đồ án về mạch đếm mà . thanks

              Comment


              • #8
                Nguyên văn bởi toilq30 Xem bài viết
                em cảm ơn sự nhiệt tình của các anh. Code viết = C nhìn dễ hiểu quá, đúng là C cấp cao thật. Còn ASM nhìn phức tạp quá, em sẽ nghiên cứu kỹ, nếu có gì thắc mắc em nhờ các anh giúp đỡ thêm. Vì em dang làm đồ án về mạch đếm mà . thanks
                viết C thì dễ nhưng asm mới pro phải không bạn
                code tôi test ok chúc bạn thành công

                Email:
                Tel: 0983.497.310

                Comment


                • #9
                  Mấy anh ơi cho em hỏi sơ đồ kết nối để giao tiếp với EEPROM như trong hình sau đúng hay không vậy ? Do em muốn lưu trữ giá trị đếm lỡ khi mất điện nên em sử dụng con này. Và sẵn tiện các anh có thể giải thích dùm em chương trình đọc và ghi dữ liệu ( kèm file 24c04.asm) vào eeprom được không ?
                  Sao em đính kèm file mà không được !

                  ;RAM LOCATION USED IN THIS MODULE 70H
                  ;THIS IS A WORKING PROGRAM, TESTED ON 24C04 SERIAL MEMORY IC
                  ;THE SAME CODE CAN BE USED FOR OTHER I2C IC'S WITH MODIFICATION.


                  #include <sfr51.inc>

                  WTCMD EQU 10100000B ;24C04 WRITE COMMAND
                  RDCMD EQU 10100001B ;24C04 READ COMMAND
                  ADDRS EQU 70H

                  SCL BIT P3.0 ;SERIAL CLOCK PIN
                  SDA BIT P3.1 ;SERIAL DATA PIN


                  ORG 0000H
                  LJMP MAINLINE

                  ORG 0030H
                  MAINLINE:
                  MOV ADDRS,#00H
                  LOOP:
                  MOV R1,#11110000B
                  LCALL WRITE
                  INC ADDRS
                  MOV A,ADDRS
                  CJNE A,#0FH,LOOP


                  ;************************************************* ****************************
                  ;THIS IS USED TO WRITE INTO 24C04
                  ;ARGUMENTS1 --> ADDRS => ADDRESS TO BE WRITTEN INTO,IN 24C04 MEMORY
                  ;ARGUMENTS2 --> R1 ==> DATA TO BE WRITTEN
                  ;RETURN --> NONE
                  ;************************************************* **************************
                  WRITE:
                  MOV A,#WTCMD
                  ACALL OUTS

                  MOV A,ADDRS
                  ACALL OUT

                  MOV A,R1
                  ACALL OUT

                  ACALL TOP
                  RET
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  ;THIS SUB ROUTINE IS USED TO READ DATA FROM THE 24C04
                  ;ARGUMENTS --> ADDRS ==> ADDRESS IN 24C04,THE DATA SHOULD BE READ FROM.
                  ;RETURN --> R2(DATA THAT WAS READ)
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  READ:
                  MOV A,#WTCMD
                  ACALL OUTS

                  MOV A,ADDRS
                  LCALL OUT

                  MOV A,#RDCMD
                  LCALL OUTS

                  LCALL IN
                  MOV R2,A

                  LCALL STOP

                  RET
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@


                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  OUTS:
                  MOV B,#8
                  SETB SDA ; START CONDITTION
                  SETB SCL
                  NOP
                  CLR SDA
                  NOP
                  CLR SCL
                  NOP
                  NOP

                  OSLOOP:
                  RLC A
                  MOV SDA,C
                  SETB SCL
                  NOP
                  CLR SCL
                  DJNZ B,OSLOOP
                  SETB SDA
                  NOP
                  SETB SCL
                  NOP
                  CLR SCL
                  RET
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@


                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  OUT:
                  MOV B,#8
                  OLOOP:
                  RLC A
                  MOV SDA,C
                  SETB SCL
                  NOP
                  CLR SCL
                  DJNZ B,OLOOP
                  SETB SDA
                  NOP
                  SETB SCL
                  NOP
                  CLR SCL
                  RET
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@


                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  IN:
                  MOV B,#8
                  SETB SDA
                  NOP
                  NOP
                  CLR SCL
                  NOP
                  NOP
                  SETB SCL
                  NOP
                  NOP
                  INLOOP:
                  MOV C,SDA
                  RLC A
                  DJNZ B,INLOOP
                  CLR SCL
                  RET
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@


                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  STOP:
                  CLR SDA
                  NOP
                  SETB SCL
                  NOP
                  SETB SDA
                  LCALL DLAYms
                  RET
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  START:
                  CLR SCL
                  SETB SDA
                  NOP
                  SETB SCL
                  NOP
                  CLR SDA
                  LCALL DLAYms
                  RET
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  DLAYms:
                  MOV R6,#150
                  MOV B,#00
                  MS1: DJNZ B,$ ;((2*255)+(2*255)*150
                  DJNZ B,$ ;=153 MILLI SECONDS
                  DJNZ R6,MS1
                  RET
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@


                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  L_DELAY:
                  MOV R7,#0AH ;153 MILLISECONDS * 10
                  LLL: LCALL DLAYms ;1.53 SECONDS
                  DJNZ R7,LLL
                  RET
                  ;@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@@@@@@@
                  END

                  Comment


                  • #10
                    trong đoạn code co ghi rõ đó bạn "R1==>data tobe writen" R1 là dữ liệu được ghi vào
                    |

                    Comment


                    • #11
                      Nếu dÙng dptr thì khi thao tác nửa thanh ghi là DPL và DPH .Ok.Được chưa.
                      , , ,

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      • mansion123
                        Bật mí những điều ít ai biết về thi công gỗ óc chó
                        bởi mansion123
                        Thi công gỗ óc chó giúp không gian trở nên sang trọng, ấm cúng, gần gũi hơn. Sự kết hợp giữa thẩm mỹ và chất lượng cao của gỗ óc chó chắc chắn sẽ mang lại giá trị lâu dài và làm hài lòng ngay cả những khách hàng khó tính nhất. Vậy đằng
                        ...
                        hôm nay, 16:08
                      • tuyennhan
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi tuyennhan
                        Cái thư sai ngay câu chào Dear sir mới đúng Hi chỉ dùng cho người quen , các vấn đề về kỹ thuật nó không trả lời hoặc nói loanh quanh tránh ảnh hưởng đến công ty .
                        Giup1 người cần không giúp người không cần với lại văn mình vợ người nha đừng quên .
                        hôm nay, 07:44
                      • vi van pham
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi vi van pham
                        Cám ơn những lời chúc tốt đẹp của em.

                        Việc em làm giống như chê sếp dốt, chẳng những không có miếng xôi nào để ăn mà còn chịu nhiều trù dập lên bờ , xuống ruộng.

                        Hãy tránh vết xe đổ của tui đi. Dành thời gian lo cho gia đình....
                        hôm nay, 02:00
                      • nhathung1101
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi nhathung1101
                        Ngoại ngữ là không thể thiếu, nhất là làm việc với công nghệ.

                        Nhưng học để tán gái hay để đọc datasheet, manual là chuyện cần quan tâm.

                        Và đọc ở nguồn nào đáng tin cậy, chứ cứ lên tictok hay facebook học lỏm thì...
                        Hôm qua, 22:18
                      • dinhthuong80
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi dinhthuong80
                        Bác nói rất khách quan và chính xác. Ngoại ngữ là chìa khóa thăng tiến dù làm gì. Chả thế mà nay nước mình dạy tiếng Anh từ tiểu học.

                        Nhớ hồi năm 2006 em ra Hải Phòng, Hải Dương tìm việc, thời đó ở Bình Dương lương công...
                        Hôm qua, 14:51
                      • dinhthuong80
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi dinhthuong80
                        Cảm ơn bạn, ĐT cũng có ý nghĩ như vậy.

                        Thực ra, lỗi của hãng đó ( gọi là hãng vì không chỉ một model sản phẩm) là về phần cứng, ĐT tuy không biết về lập trình phần mềm nhưng cũng thấy rằng sẽ chẳng khó khăn gì đáng...
                        Hôm qua, 14:39
                      • dinhthuong80
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi dinhthuong80
                        Dạ, bác bảy mấy tuổi đời rồi cũng không kém bố cháu bao nhiêu. Tuổi nghề thì bác cũng đáng tuổi cha chú.

                        Nhưng 2 điều trên thì chưa hẳn đã đáng quí và đáng tôn trọng bằng việc bác rất nhiệt tình chia sẻ kinh nghiệm chuyên...
                        Hôm qua, 14:28
                      • bqviet
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi bqviet
                        Đúng, nếu chú tâm thì chỉ cần mỗi tiếng Việt là đã khá đủ để làm đa số công việc thông thường, ở thời đại ngày nay khi tài liệu sách vở phương tiện thông tin liên lạc đã nhiều. Nhưng cũng chính ở thời nay giao lưu các nước nhiều...
                        21-02-2025, 20:26
                      • mèomướp
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi mèomướp
                        Dạ cháu nghĩ chú dinh... cứ mạnh dạn gửi thư đi ạ, chú có thể gửi bằng văn bản in chuyển phát nhanh sẽ có giá trị hơn. Vấn đề chưa hẳn là cần hãng làm gì đó, mà chỉ đơn giản là mình cảm thấy nhẹ lòng vì đã làm những việc bản...
                        21-02-2025, 12:32
                      • vi van pham
                        Trả lời cho Tiếng Anh cho người Việt
                        bởi vi van pham
                        Những lần hắt hơi sổ mũi làm tôi mệt lã, phải dùng rượu uống để ngũ. Tôi cũng đang uống rượu 1 mình, viết vài dòng này cho em ( có lẽ dt chỉ bằng tuổi em tôi).

                        Dinh thuong dang đi vào vết xe đổ của tôi. Càng chứng minh, có...
                        20-02-2025, 21:31
                      Đang tải...
                      X