Thông báo

Collapse
No announcement yet.

89c52 giao tiếp với sram 6264

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

  • 89c52 giao tiếp với sram 6264

    chả là e đang tìm hiểu con 89c52 giao tiếp với ram ngoài ạ nhưng mà đến đây hơi mắc các bác à, ai rành về món này giúp e với, e có giao tiếp với ds1307 để đọc giờ và hiển thị trên led matrix 16*48 em đã cho hiển thị lên được rồi nhưng giờ em muốn ngày và giờ hiển thị chạy như chạy chữ mà chưa biết làm thế nào, nghe có bác congdt hướng dẫn là dùng ram 62256 load tất cả ngày giờ vào đó rồi dùng lệnh movx đọc ra. code đó như thế này ạ

    Code:
    GHI_LICHVN:
    MOV RXL,#00
    MOV RXH,#00
    LCALL CLEAR_PAGE_RAM ;-------------^ XOA PHAN DAU
    
    MOV DPTR,#HOM_NAY
    MOV END_WRITE_RAM,#112
    LCALL WRITE_62C256
    
    MOV R0,THU
    CJNE R0,#8,NAP_THU ; KIEM TRA NGAY CHU NHAT
    MOV DPTR,#_CN
    MOV END_WRITE_RAM,#100
    LCALL WRITE_62C256
    LJMP NAP_NGAY
    
    NAP_THU:
    MOV DPTR,#_THU
    MOV END_WRITE_RAM,#48
    LCALL WRITE_62C256
    
    MOV R0,THU
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    NAP_NGAY:
    MOV DPTR,#_NGAY
    MOV END_WRITE_RAM,#60
    LCALL WRITE_62C256
    
    MOV TMP1,NGAY
    LCALL BINBCD1
    
    MOV R0,TMP1
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV R0,TMP2
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    NAP_THANG:
    MOV DPTR,#_THANG
    MOV END_WRITE_RAM,#72
    LCALL WRITE_62C256
    
    MOV TMP1,THANG
    LCALL BINBCD1
    
    MOV R0,TMP1
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV R0,TMP2
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    NAP_NAM:
    MOV DPTR,#_NAM
    MOV END_WRITE_RAM,#52
    LCALL WRITE_62C256
    
    MOV R0,#2 ; NAM 20xx
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV R0,#0
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV TMP1,NAM
    LCALL BINBCD1
    
    MOV R0,TMP1
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV R0,TMP2
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    BAO_GIO:
    MOV DPTR,#LUC_NAY_LA
    MOV END_WRITE_RAM,#126
    LCALL WRITE_62C256
    
    NHAP_GIO:
    MOV TMP1,GIO
    LCALL BINBCD1
    
    MOV R0,TMP1
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV R0,TMP2
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV DPTR,#_GIO
    MOV END_WRITE_RAM,#40
    LCALL WRITE_62C256
    
    NHAP_PHUT:
    MOV TMP1,PHUT
    LCALL BINBCD1
    
    MOV R0,TMP1
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV R0,TMP2
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV DPTR,#_PHUT
    MOV END_WRITE_RAM,#58
    LCALL WRITE_62C256
    
    BAO_NDO:
    MOV DPTR,#NHIET_DO
    MOV END_WRITE_RAM,#120
    LCALL WRITE_62C256
    
    MOV TMP1,NDO
    LCALL BINBCD1
    
    MOV R0,TMP1
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV R0,TMP2
    LCALL LAY_SO
    MOV END_WRITE_RAM,#14
    LCALL WRITE_62C256
    
    MOV DPTR,#_DO_C
    MOV END_WRITE_RAM,#24
    LCALL WRITE_62C256
    ghi vào ram:
    WRITE_62C256:
    MOV A,#00h
    MOVC A,@A+DPTR
    MOV R7,A
    INC DPTR
    MOV RCH,DPH
    MOV RCL,DPL
    
    MOV DPH,RXH
    MOV DPL,RXL
    MOV A,R7
    MOVX @DPTR,a
    INC DPTR
    MOV RxH,DPH
    MOV RxL,DPL
    
    MOV DPH,RCH
    MOV DPL,RCL
    
    DJNZ END_WRITE_RAM,WRITE_62C256
    bang mã:
    so_0:
    db 0c0h,007h,080h,003h,0bfh,0fbh,0bfh,0fbh,080h,003h, 0c0h,007h,0ffh,0ffh
    
    so_1:
    DB 0EFH,0FBH,0DFH,0FBH,080H,003H,080H,003H,0FFH,0FBH, 0FFH,0FBH,0FFH,0FFH
    
    so_2:
    DB 0C7H,0E3H,087H,0D3H,0BFH,033H,0BCH,073H,081H,0F3H, 0C3H,0E3H,0FFH,0FFH
    
    so_3:
    DB 0CFH,0E7H,08FH,0E3H,0BDH,0FBH,0BCH,0FBH,082H,007H, 0C7H,00FH,0FFH,0FFH
    
    so_4:
    DB 0FFH,09FH,0FEH,05FH,0F9H,0DBH,0E0H,003H,080H,003H, 0FFH,0DBH,0FFH,0FFH
    
    so_5:
    DB 0FFH,0E7H,081H,0EBH,09DH,0FBH,09DH,0F3H,09CH,007H, 0FEH,00FH,0FFH,0FFH
    
    so_6:
    DB 0C0H,007H,080H,003H,0BEH,0FBH,0BEH,0FBH,08EH,003H, 0CFH,007H,0FFH,0FFH
    
    so_7:
    DB 08FH,0FFH,09FH,0FFH,09FH,0C3H,09CH,003H,083H,0FFH, 08FH,0FFH,0FFH,0FFH
    
    so_8:
    DB 0C3H,087H,0B9H,073H,0BCH,0FBH,0BCH,07BH,081H,033H, 0C3H,087H,0FFH,0FFH
    
    so_9:
    DB 0C0H,0E7H,080H,063H,0BFH,07BH,0BFH,07BH,080H,003H, 0C0H,007H,0FFH,0FFH
    
    HAI_CHAM:
    DB 0FFH,0FFH,0FFH,0FFH,0F9H,0E7H,0F9H,0E7H,0FFH,0FFH, 0FFH,0FFH,0FFH,0FFH
    
    _CN: ;100
    db 0e0h,07fh,080h,007h,07fh,0f3h,07fh,0fbh,00fh,0f3h, 08fh,0c7h,0ffh,0ffh
    db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
    db 0fch,007h,0fch,003h,0dfh,0fbh,0b4h,003h,0cch,003h, 0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
    db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
    db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
    db 0feh,0c7h,0f4h,083h,0edh,0bah,0f4h,007h,0feh,003h, 0ffh,0fbh,0ffh,0ffh
    db 0fdh,0ffh,0e0h,007h,0e0h,003h,0fdh,0fbh,0ffh,0f7h, 0ffh,0ffh
    
    _THU: ;48
    db 01fh,0ffh,07fh,0fbh,000h,003h,000h,003h,07fh,0fbh, 01fh,0ffh,0ffh,0ffh
    db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
    db 0fch,007h,0fch,003h,0f7h,0fbh,0ech,003h,0ech,003h, 0feh,0ffh,0fdh,0ffh,0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh
    
    _NGAY: ;60
    db 0ffh,0ffh,0ffh,0ffh
    db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
    db 0feh,012h,0fch,002h,0fdh,0d2h,0fch,012h,0fch,039h, 0ffh,0ffh
    db 0feh,0c7h,0ech,083h,0edh,0bbh,0f4h,007h,0feh,003h, 0ffh,0fbh,0ffh,0ffh
    db 0fdh,0fdh,0fch,01eh,0fch,000h,0ffh,0c1h,0fch,03fh, 0fdh,0ffh,0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh
    
    _THANG: ;72
    db 0ffh,0ffh,0ffh,0ffh
    db 0efh,0ffh,000h,007h,000h,003h,0efh,0fbh,0ffh,0f7h, 0ffh,0ffh
    db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
    db 0feh,0c7h,0fch,083h,0f5h,0bbh,0ech,007h,0eeh,003h, 0ffh,0fbh,0ffh,0ffh
    db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
    db 0feh,012h,0fch,002h,0fdh,0d2h,0fch,012h,0fch,039h, 0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh
    
    _NAM: ;52
    db 0ffh,0ffh,0ffh,0ffh
    db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
    db 0feh,0c7h,0ech,083h,0f5h,0bbh,0f4h,007h,0eeh,003h, 0ffh,0fbh,0ffh,0ffh
    db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0fch,003h, 0fdh,0ffh,0fch,003h,0feh,003h,0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh
    
    _GIO: ;40
    db 0ffh,0ffh,0ffh,0ffh
    db 0feh,012h,0fch,002h,0fdh,0d2h,0fch,012h,0fch,039h, 0ffh,0ffh
    db 0e4h,003h,0e4h,003h,0ffh,0ffh
    db 0feh,007h,0fch,003h,0edh,0fbh,0ech,003h,0f6h,007h, 0fch,0ffh,0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh
    
    _PHUT: ;58
    db 0ffh,0ffh,0ffh,0ffh
    db 0fch,000h,0fch,000h,0fdh,0fbh,0fch,003h,0feh,007h, 0ffh,0ffh
    db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
    db 0fch,007h,0fch,003h,0f7h,0fbh,0ech,003h,0ech,003h, 0ffh,0ffh
    db 0fdh,0ffh,0e0h,007h,0e0h,003h,0fdh,0fbh,0ffh,0f7h, 0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh
    HOM_NAY: ;112
    db 07fh,0fbh,000h,003h,000h,003h,07dh,0fbh,0fdh,0ffh, 0fdh,0ffh,07dh,0fbh,000h,003h,000h,003h,07fh,0fbh, 0ffh,0ffh
    db 0feh,007h,0f4h,003h,0edh,0fbh,0f4h,003h,0feh,007h, 0ffh,0ffh
    db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0fch,003h, 0fdh,0ffh,0fch,003h,0feh,003h,0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
    db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
    db 0feh,0c7h,0fch,083h,0fdh,0bbh,0fch,007h,0feh,003h, 0ffh,0fbh,0ffh,0ffh
    db 0fdh,0fdh,0fch,01eh,0fch,000h,0ffh,0c1h,0fch,03fh, 0fdh,0ffh,0ffh,0ffh
    db 0ffh,0f2h,0ffh,0f1h,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh, 0ffh,0ffh
    
    LUC_NAY_LA: ;126
    db 0ffh,0f2h,0ffh,0f1h,0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
    db 07fh,0ffh,000h,003h,000h,003h,0ffh,0ffh
    db 0fch,007h,0fch,003h,0f7h,0fbh,0ech,003h,0ech,003h, 0ffh,0ffh
    db 0feh,007h,0fch,003h,0fdh,0fbh,0feh,067h,0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
    db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
    db 0feh,0c7h,0ech,083h,0edh,0bbh,0f4h,007h,0feh,003h, 0ffh,0fbh,0ffh,0ffh
    db 0fdh,0fdh,0fch,01eh,0fch,000h,0ffh,0c1h,0fch,03fh, 0fdh,0ffh,0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
    db 07fh,0ffh,000h,003h,000h,003h,0ffh,0ffh
    db 0feh,0c7h,0ech,083h,0edh,0bbh,0f4h,007h,0feh,003h, 0ffh,0fbh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
    
    NHIET_DO: ;120
    db 0ffh,0f3h,0ffh,0f3h,0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
    db 07fh,0fbh,000h,003h,007h,0fbh,0c0h,0ffh,0f8h,03fh, 07eh,007h,000h,003h,07fh,0ffh,0ffh,0ffh
    db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
    db 0e4h,003h,0e4h,003h,0ffh,0ffh
    db 0feh,007h,0f4h,003h,0edh,0bah,0f4h,03bh,0feh,037h, 0ffh,0ffh
    db 0fdh,0ffh,0e0h,007h,0e0h,003h,0fdh,0fbh,0ffh,0f7h, 0ffh,0ffh
    db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
    db 0feh,007h,0fch,003h,0edh,0fbh,000h,003h,000h,003h, 0efh,0ffh,0ffh,0ffh
    db 0feh,007h,0f4h,003h,0edh,0fah,0f4h,003h,0feh,007h, 0ffh,0ffh
    db 0f9h,0e7h,0f9h,0e7h,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
    
    _DO_C: ;24
    ;db 0ffh,0ffh
    db 09fh,0ffh,06fh,0ffh,06fh,0ffh,09fh,0ffh,0e0h,00fh, 0c0h,007h,09fh,0f3h,0bfh,0fbh,0bfh,0fbh,0cfh,0e7h, 0e7h,0cfh,0ffh,0ffh
    và có 1 số chỗ em chưa hiểu lắm như trong chương trình con ghi vào ram
    WRITE_62C256:
    MOV A,#00h
    MOVC A,@A+DPTR
    MOV R7,A
    INC DPTR
    MOV RCH,DPH
    MOV RCL,DPL

    MOV DPH,RXH
    MOV DPL,RXL

    MOV A,R7
    MOVX @DPTR,a
    INC DPTR
    MOV RxH,DPH
    MOV RxL,DPL

    MOV DPH,RCH
    MOV DPL,RCL


    DJNZ END_WRITE_RAM,WRITE_62C256

    những dòng lệnh đó có tác dụng gì ạ, và sau khi làn ghi thứ 2 thì e có phải xoá dữ liệu trên ram trước khi lưu dữ liệu mới không và còn rất nhiều chỗ muốn hỏi rất mong các bác giúp đỡ.

    sau khi tìm hiểu nhiều tài liệu thì e đã vẽ được cái sơ đồ như file đính kèm, do giao tiếp với ram ngoài mất khá nhiều chân VXL nên e đã thêm phần giao tiếp với 8255A để mở rộng chân cho VXL và phần code cho quang báo mất khá nhiều dung lượng ROM mà ROM nội con 89c52 chỉ có 8k không đủ để đảm nhiệm công việc đó vậy phải làm thế nào ạ. các bác chỉ em thêm phần đó nữa.

    phần giao tiếp với 8255 thì em đã hiểu và lập trình vào ra đơn giản cho nó được rồi nhưng còn 6264 thì vẫn mắc chưa giải quyết được trên diễn đàn e thấy rất nhiều bạn hỏi về 8051 giao tiếp với RAM ngoài nhưng không được giải đáp và giúp đỡ, những phần khác thì em thấy các bác giúp đỡ rất nhiệt tình nhưng cứ đến giao tiếp với RAM thì lại thấy trầm xuống. e tìm mãi vẫn chưa có 1 bài viết nào cụ thể và chi tiết 1 chút nên rất mong các bác giành chút ít thời gian để giúp e phần này.
    em gửi mạch và phần code giao tiếp đơn giản với 8255 xuất ra portC của 8255 các bit xen kẽ để các bác tiện giúp đỡ.
    up lên diễn đàn mãi không được nên e cho nên mediafire
    89c52.zip

    cảm hơn các bác rất nhiều

  • #2
    mình thấy là tại sao bạn lại sử dụng ram ngoài để nhớ giá trị chứ, làm như thế thì bạn phải nạp cho ram mỗi khi cấp nguồn cho mạch rồi. Đồng nghĩa với việc VDK cũng sẽ gánh cái mớ data để nạp cho ram => ram vô dụng. Còn về mở rộng port thì tùy mục đích mà bạn chọn IC mở rộng, ví dụ đối với mở rộng 2 chiều thì dùng 74245, mở rộng chỉ xuất thì dùng 74573 hoặc 74595 ko nhất thiết dùng 8255 vừa tốn chân vừa rắc rối.

    Comment


    • #3
      WRITE_62C256:
      MOV A,#00h
      MOVC A,@A+DPTR
      MOV R7,A
      INC DPTR
      MOV RCH,DPH lưu lại địa chỉ của bảng mã đang trỏ tới (nằm trong 89)trước trước khi trỏ tới địa chỉ của ram ngoài ( rch,rcl là 2 vùng nhớ tạm)
      MOV RCL,DPL

      MOV DPH,RXH nạp lại địa chỉ của ram ngoài để lưu giá trị (rxh,rxl cũng là 2 vùng nhơ tạm)
      MOV DPL,RXL
      MOV A,R7
      MOVX @DPTR,a
      INC DPTR
      MOV RxH,DPH sau khi lưu xong giá trị vào ram thì lưu địa chỉ của ram lại cho lần nạp giá trị tiếp
      MOV RxL,DPL

      MOV DPH,RCH quay lại địa chỉ của bảng mã ( trong chíp) để lấy nội dung lưu tiếp vào ram.
      MOV DPL,RCL

      trong ctrinh có đoạn này LCALL CLEAR_PAGE_RAM ;-------------^ XOA PHAN DAU ko phải là để xóa ram mà là tạo khoảng trắng lúc đầu trước khi chữ đc dịch chuyển ra
      - không cần phải xóa ram trước khi ghi, giá trị ghi lần sau sẽ thay thế cho lần trước ( cùng địa chỉ)
      - bạn nên thiết kế các chân dùng chung với nhau đâu nhất thiết phải mở rộng thêm port.
      Last edited by congdt; 04-01-2012, 10:44.

      Comment


      • #4
        Nguyên văn bởi chung1608 Xem bài viết
        mình thấy là tại sao bạn lại sử dụng ram ngoài để nhớ giá trị chứ, làm như thế thì bạn phải nạp cho ram mỗi khi cấp nguồn cho mạch rồi. Đồng nghĩa với việc VDK cũng sẽ gánh cái mớ data để nạp cho ram => ram vô dụng. Còn về mở rộng port thì tùy mục đích mà bạn chọn IC mở rộng, ví dụ đối với mở rộng 2 chiều thì dùng 74245, mở rộng chỉ xuất thì dùng 74573 hoặc 74595 ko nhất thiết dùng 8255 vừa tốn chân vừa rắc rối.
        cái này bác chúng68 không hiểu ý em rồi, ý của em là dùng ram để load các giá trị giờ phút giây ngày tháng năm vào ram để khi lấy ra 1 chuỗi mã từ ram là liên tục, để chạy chữ ngày giờ như thế này ạ
        LED matrix digital clock - YouTube
        vâng đúng là dùng ram phải nạp giá trị mỗi khi khởi động, em làm theo cách này thì phải nạp ram liên tục ấy chứ, em làm như thế này bác xem hợp lý không nhé, đầu tiên 89c52 đọc giá trị giờ phút giây...sau đó load tất cả nó vào ram rồi dùng lệnh movx a,@dptr để đọc dữ liệu từ ram ra rồi cho chạy chữ như bình thường thì ta sẽ được các chuỗi giờ phút giây ngày tháng năm chạy trên led matrix, cả đêm ngồi suy nghĩ em đã tìm ra phương án giải quyết rồi, em đã biết giao tiếp với 62c64 nhưng còn phần bộ nhớ ROM lưu mã lệnh của 89c52 thì chưa có phương án vì ROM nội của con 89c52 chỉ có 8k, chạy được có vài dòng chữ là đã hết rồi, theo e tìm hiểu thì phải dùng ROM ngoại nhưng con ROM ngoại thì e chưa hiểu là phải nạp chương trình nó như thế nào ạ.

        còn về phần mở rộng cổng cho 89c52 theo mấy phương án bác đưa ra thì cũng khả thi nhưng nó chỉ mở rộng output vậy còn input thì sao, có dùng nó để quét bàn phím được không ạ, vậy nên e mới nghĩ đến dùng 8255. cảm ơn bác đã quan tâm, hãy cùng em mổ sẻ vấn đề này nhé

        Comment


        • #5
          Nguyên văn bởi congdt Xem bài viết
          WRITE_62C256:
          MOV A,#00h
          MOVC A,@A+DPTR
          MOV R7,A
          INC DPTR
          MOV RCH,DPH lưu lại địa chỉ của bảng mã đang trỏ tới (nằm trong 89)trước trước khi trỏ tới địa chỉ của ram ngoài ( rch,rcl là 2 vùng nhớ tạm)
          MOV RCL,DPL

          MOV DPH,RXH nạp lại địa chỉ của ram ngoài để lưu giá trị (rxh,rxl cũng là 2 vùng nhơ tạm)
          MOV DPL,RXL
          MOV A,R7
          MOVX @DPTR,a
          INC DPTR
          MOV RxH,DPH sau khi lưu xong giá trị vào ram thì lưu địa chỉ của ram lại cho lần nạp giá trị tiếp
          MOV RxL,DPL

          MOV DPH,RCH quay lại địa chỉ của bảng mã ( trong chíp) để lấy nội dung lưu tiếp vào ram.
          MOV DPL,RCL

          trong ctrinh có đoạn này LCALL CLEAR_PAGE_RAM ;-------------^ XOA PHAN DAU ko phải là để xóa ram mà là tạo khoảng trắng lúc đầu trước khi chữ đc dịch chuyển ra
          - không cần phải xóa ram trước khi ghi, giá trị ghi lần sau sẽ thay thế cho lần trước ( cùng địa chỉ)
          - bạn nên thiết kế các chân dùng chung với nhau đâu nhất thiết phải mở rộng thêm port.
          cảm ơn anh công dt rất nhiều, cả đêm không ngủ ngồi suy nghĩ e đã hiểu ra vấn đề rồi ạ, giờ e đã giao tiếp được với ram rồi , nhưng còn phần bộ nhớ của con 89c52 nó chỉ có 8k thì làm sao bây giờ ạ, nó không đủ để chạy 1 dòng chữ dài
          , nếu máy tính tuyền xuống 1 chuỗi kí tự thì ta sẽ lưu nó vào đâu ạ
          Last edited by lengo90; 04-01-2012, 11:27.

          Comment


          • #6
            dữ liệu từ máy tính truyền xuống bạn phải chọn 1 con ic nào đó mà ko mất dữ liệu khi mất điện để lưu vào như epprom,flash..24c256, 29c010...
            các bước như sau: pc truyền xuống lưu hết vào con vào ram 62c64. sau đó lấy từ con ram này lưu lại vào con epprom. mỗi khởi động lại ctrinh chỉ cần lấy từ con epprom này ra con ram 62c64 rồi đem hiện thị( chỉ nạp 1 lần vào con ram trước khi khởi động "on/off nguồn" chứ ko phải lần hiện thị nào cũng phải lấy từ con epprom sang con ram). còn ko nữa thì bạn dùng mấy con 89v có dung lượng bộ nhớ lớn hơn.

            Comment


            • #7
              Nguyên văn bởi lengo90 Xem bài viết
              chả là e đang tìm hiểu con 89c52 giao tiếp với ram ngoài ạ nhưng mà đến đây hơi mắc các bác à, ai rành về món này giúp e với, e có giao tiếp với ds1307 để đọc giờ và hiển thị trên led matrix 16*48 em đã cho hiển thị lên được rồi nhưng giờ em muốn ngày và giờ hiển thị chạy như chạy chữ mà chưa biết làm thế nào, nghe có bác congdt hướng dẫn là dùng ram 62256 load tất cả ngày giờ vào đó rồi dùng lệnh movx đọc ra. code đó như thế này ạ

              Code:
              GHI_LICHVN:
              MOV RXL,#00
              MOV RXH,#00
              LCALL CLEAR_PAGE_RAM ;-------------^ XOA PHAN DAU
              
              MOV DPTR,#HOM_NAY
              MOV END_WRITE_RAM,#112
              LCALL WRITE_62C256
              
              MOV R0,THU
              CJNE R0,#8,NAP_THU ; KIEM TRA NGAY CHU NHAT
              MOV DPTR,#_CN
              MOV END_WRITE_RAM,#100
              LCALL WRITE_62C256
              LJMP NAP_NGAY
              
              NAP_THU:
              MOV DPTR,#_THU
              MOV END_WRITE_RAM,#48
              LCALL WRITE_62C256
              
              MOV R0,THU
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              NAP_NGAY:
              MOV DPTR,#_NGAY
              MOV END_WRITE_RAM,#60
              LCALL WRITE_62C256
              
              MOV TMP1,NGAY
              LCALL BINBCD1
              
              MOV R0,TMP1
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV R0,TMP2
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              NAP_THANG:
              MOV DPTR,#_THANG
              MOV END_WRITE_RAM,#72
              LCALL WRITE_62C256
              
              MOV TMP1,THANG
              LCALL BINBCD1
              
              MOV R0,TMP1
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV R0,TMP2
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              NAP_NAM:
              MOV DPTR,#_NAM
              MOV END_WRITE_RAM,#52
              LCALL WRITE_62C256
              
              MOV R0,#2 ; NAM 20xx
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV R0,#0
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV TMP1,NAM
              LCALL BINBCD1
              
              MOV R0,TMP1
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV R0,TMP2
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              BAO_GIO:
              MOV DPTR,#LUC_NAY_LA
              MOV END_WRITE_RAM,#126
              LCALL WRITE_62C256
              
              NHAP_GIO:
              MOV TMP1,GIO
              LCALL BINBCD1
              
              MOV R0,TMP1
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV R0,TMP2
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV DPTR,#_GIO
              MOV END_WRITE_RAM,#40
              LCALL WRITE_62C256
              
              NHAP_PHUT:
              MOV TMP1,PHUT
              LCALL BINBCD1
              
              MOV R0,TMP1
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV R0,TMP2
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV DPTR,#_PHUT
              MOV END_WRITE_RAM,#58
              LCALL WRITE_62C256
              
              BAO_NDO:
              MOV DPTR,#NHIET_DO
              MOV END_WRITE_RAM,#120
              LCALL WRITE_62C256
              
              MOV TMP1,NDO
              LCALL BINBCD1
              
              MOV R0,TMP1
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV R0,TMP2
              LCALL LAY_SO
              MOV END_WRITE_RAM,#14
              LCALL WRITE_62C256
              
              MOV DPTR,#_DO_C
              MOV END_WRITE_RAM,#24
              LCALL WRITE_62C256
              ghi vào ram:
              WRITE_62C256:
              MOV A,#00h
              MOVC A,@A+DPTR
              MOV R7,A
              INC DPTR
              MOV RCH,DPH
              MOV RCL,DPL
              
              MOV DPH,RXH
              MOV DPL,RXL
              MOV A,R7
              MOVX @DPTR,a
              INC DPTR
              MOV RxH,DPH
              MOV RxL,DPL
              
              MOV DPH,RCH
              MOV DPL,RCL
              
              DJNZ END_WRITE_RAM,WRITE_62C256
              bang mã:
              so_0:
              db 0c0h,007h,080h,003h,0bfh,0fbh,0bfh,0fbh,080h,003h, 0c0h,007h,0ffh,0ffh
              
              so_1:
              DB 0EFH,0FBH,0DFH,0FBH,080H,003H,080H,003H,0FFH,0FBH, 0FFH,0FBH,0FFH,0FFH
              
              so_2:
              DB 0C7H,0E3H,087H,0D3H,0BFH,033H,0BCH,073H,081H,0F3H, 0C3H,0E3H,0FFH,0FFH
              
              so_3:
              DB 0CFH,0E7H,08FH,0E3H,0BDH,0FBH,0BCH,0FBH,082H,007H, 0C7H,00FH,0FFH,0FFH
              
              so_4:
              DB 0FFH,09FH,0FEH,05FH,0F9H,0DBH,0E0H,003H,080H,003H, 0FFH,0DBH,0FFH,0FFH
              
              so_5:
              DB 0FFH,0E7H,081H,0EBH,09DH,0FBH,09DH,0F3H,09CH,007H, 0FEH,00FH,0FFH,0FFH
              
              so_6:
              DB 0C0H,007H,080H,003H,0BEH,0FBH,0BEH,0FBH,08EH,003H, 0CFH,007H,0FFH,0FFH
              
              so_7:
              DB 08FH,0FFH,09FH,0FFH,09FH,0C3H,09CH,003H,083H,0FFH, 08FH,0FFH,0FFH,0FFH
              
              so_8:
              DB 0C3H,087H,0B9H,073H,0BCH,0FBH,0BCH,07BH,081H,033H, 0C3H,087H,0FFH,0FFH
              
              so_9:
              DB 0C0H,0E7H,080H,063H,0BFH,07BH,0BFH,07BH,080H,003H, 0C0H,007H,0FFH,0FFH
              
              HAI_CHAM:
              DB 0FFH,0FFH,0FFH,0FFH,0F9H,0E7H,0F9H,0E7H,0FFH,0FFH, 0FFH,0FFH,0FFH,0FFH
              
              _CN: ;100
              db 0e0h,07fh,080h,007h,07fh,0f3h,07fh,0fbh,00fh,0f3h, 08fh,0c7h,0ffh,0ffh
              db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
              db 0fch,007h,0fch,003h,0dfh,0fbh,0b4h,003h,0cch,003h, 0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
              db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
              db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
              db 0feh,0c7h,0f4h,083h,0edh,0bah,0f4h,007h,0feh,003h, 0ffh,0fbh,0ffh,0ffh
              db 0fdh,0ffh,0e0h,007h,0e0h,003h,0fdh,0fbh,0ffh,0f7h, 0ffh,0ffh
              
              _THU: ;48
              db 01fh,0ffh,07fh,0fbh,000h,003h,000h,003h,07fh,0fbh, 01fh,0ffh,0ffh,0ffh
              db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
              db 0fch,007h,0fch,003h,0f7h,0fbh,0ech,003h,0ech,003h, 0feh,0ffh,0fdh,0ffh,0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh
              
              _NGAY: ;60
              db 0ffh,0ffh,0ffh,0ffh
              db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
              db 0feh,012h,0fch,002h,0fdh,0d2h,0fch,012h,0fch,039h, 0ffh,0ffh
              db 0feh,0c7h,0ech,083h,0edh,0bbh,0f4h,007h,0feh,003h, 0ffh,0fbh,0ffh,0ffh
              db 0fdh,0fdh,0fch,01eh,0fch,000h,0ffh,0c1h,0fch,03fh, 0fdh,0ffh,0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh
              
              _THANG: ;72
              db 0ffh,0ffh,0ffh,0ffh
              db 0efh,0ffh,000h,007h,000h,003h,0efh,0fbh,0ffh,0f7h, 0ffh,0ffh
              db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
              db 0feh,0c7h,0fch,083h,0f5h,0bbh,0ech,007h,0eeh,003h, 0ffh,0fbh,0ffh,0ffh
              db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
              db 0feh,012h,0fch,002h,0fdh,0d2h,0fch,012h,0fch,039h, 0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh
              
              _NAM: ;52
              db 0ffh,0ffh,0ffh,0ffh
              db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
              db 0feh,0c7h,0ech,083h,0f5h,0bbh,0f4h,007h,0eeh,003h, 0ffh,0fbh,0ffh,0ffh
              db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0fch,003h, 0fdh,0ffh,0fch,003h,0feh,003h,0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh
              
              _GIO: ;40
              db 0ffh,0ffh,0ffh,0ffh
              db 0feh,012h,0fch,002h,0fdh,0d2h,0fch,012h,0fch,039h, 0ffh,0ffh
              db 0e4h,003h,0e4h,003h,0ffh,0ffh
              db 0feh,007h,0fch,003h,0edh,0fbh,0ech,003h,0f6h,007h, 0fch,0ffh,0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh
              
              _PHUT: ;58
              db 0ffh,0ffh,0ffh,0ffh
              db 0fch,000h,0fch,000h,0fdh,0fbh,0fch,003h,0feh,007h, 0ffh,0ffh
              db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
              db 0fch,007h,0fch,003h,0f7h,0fbh,0ech,003h,0ech,003h, 0ffh,0ffh
              db 0fdh,0ffh,0e0h,007h,0e0h,003h,0fdh,0fbh,0ffh,0f7h, 0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh
              HOM_NAY: ;112
              db 07fh,0fbh,000h,003h,000h,003h,07dh,0fbh,0fdh,0ffh, 0fdh,0ffh,07dh,0fbh,000h,003h,000h,003h,07fh,0fbh, 0ffh,0ffh
              db 0feh,007h,0f4h,003h,0edh,0fbh,0f4h,003h,0feh,007h, 0ffh,0ffh
              db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0fch,003h, 0fdh,0ffh,0fch,003h,0feh,003h,0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
              db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
              db 0feh,0c7h,0fch,083h,0fdh,0bbh,0fch,007h,0feh,003h, 0ffh,0fbh,0ffh,0ffh
              db 0fdh,0fdh,0fch,01eh,0fch,000h,0ffh,0c1h,0fch,03fh, 0fdh,0ffh,0ffh,0ffh
              db 0ffh,0f2h,0ffh,0f1h,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh, 0ffh,0ffh
              
              LUC_NAY_LA: ;126
              db 0ffh,0f2h,0ffh,0f1h,0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
              db 07fh,0ffh,000h,003h,000h,003h,0ffh,0ffh
              db 0fch,007h,0fch,003h,0f7h,0fbh,0ech,003h,0ech,003h, 0ffh,0ffh
              db 0feh,007h,0fch,003h,0fdh,0fbh,0feh,067h,0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
              db 0fch,003h,0fch,003h,0fdh,0ffh,0fch,003h,0feh,003h, 0ffh,0ffh
              db 0feh,0c7h,0ech,083h,0edh,0bbh,0f4h,007h,0feh,003h, 0ffh,0fbh,0ffh,0ffh
              db 0fdh,0fdh,0fch,01eh,0fch,000h,0ffh,0c1h,0fch,03fh, 0fdh,0ffh,0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
              db 07fh,0ffh,000h,003h,000h,003h,0ffh,0ffh
              db 0feh,0c7h,0ech,083h,0edh,0bbh,0f4h,007h,0feh,003h, 0ffh,0fbh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
              
              NHIET_DO: ;120
              db 0ffh,0f3h,0ffh,0f3h,0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
              db 07fh,0fbh,000h,003h,007h,0fbh,0c0h,0ffh,0f8h,03fh, 07eh,007h,000h,003h,07fh,0ffh,0ffh,0ffh
              db 07fh,0ffh,000h,003h,000h,003h,0fdh,0ffh,0fch,003h, 0feh,003h,0ffh,0ffh
              db 0e4h,003h,0e4h,003h,0ffh,0ffh
              db 0feh,007h,0f4h,003h,0edh,0bah,0f4h,03bh,0feh,037h, 0ffh,0ffh
              db 0fdh,0ffh,0e0h,007h,0e0h,003h,0fdh,0fbh,0ffh,0f7h, 0ffh,0ffh
              db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
              db 0feh,007h,0fch,003h,0edh,0fbh,000h,003h,000h,003h, 0efh,0ffh,0ffh,0ffh
              db 0feh,007h,0f4h,003h,0edh,0fah,0f4h,003h,0feh,007h, 0ffh,0ffh
              db 0f9h,0e7h,0f9h,0e7h,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh
              
              _DO_C: ;24
              ;db 0ffh,0ffh
              db 09fh,0ffh,06fh,0ffh,06fh,0ffh,09fh,0ffh,0e0h,00fh, 0c0h,007h,09fh,0f3h,0bfh,0fbh,0bfh,0fbh,0cfh,0e7h, 0e7h,0cfh,0ffh,0ffh
              và có 1 số chỗ em chưa hiểu lắm như trong chương trình con ghi vào ram
              WRITE_62C256:
              MOV A,#00h
              MOVC A,@A+DPTR
              MOV R7,A
              INC DPTR
              MOV RCH,DPH
              MOV RCL,DPL

              MOV DPH,RXH
              MOV DPL,RXL

              MOV A,R7
              MOVX @DPTR,a
              INC DPTR
              MOV RxH,DPH
              MOV RxL,DPL

              MOV DPH,RCH
              MOV DPL,RCL


              DJNZ END_WRITE_RAM,WRITE_62C256

              những dòng lệnh đó có tác dụng gì ạ, và sau khi làn ghi thứ 2 thì e có phải xoá dữ liệu trên ram trước khi lưu dữ liệu mới không và còn rất nhiều chỗ muốn hỏi rất mong các bác giúp đỡ.

              sau khi tìm hiểu nhiều tài liệu thì e đã vẽ được cái sơ đồ như file đính kèm, do giao tiếp với ram ngoài mất khá nhiều chân VXL nên e đã thêm phần giao tiếp với 8255A để mở rộng chân cho VXL và phần code cho quang báo mất khá nhiều dung lượng ROM mà ROM nội con 89c52 chỉ có 8k không đủ để đảm nhiệm công việc đó vậy phải làm thế nào ạ. các bác chỉ em thêm phần đó nữa.

              phần giao tiếp với 8255 thì em đã hiểu và lập trình vào ra đơn giản cho nó được rồi nhưng còn 6264 thì vẫn mắc chưa giải quyết được trên diễn đàn e thấy rất nhiều bạn hỏi về 8051 giao tiếp với RAM ngoài nhưng không được giải đáp và giúp đỡ, những phần khác thì em thấy các bác giúp đỡ rất nhiệt tình nhưng cứ đến giao tiếp với RAM thì lại thấy trầm xuống. e tìm mãi vẫn chưa có 1 bài viết nào cụ thể và chi tiết 1 chút nên rất mong các bác giành chút ít thời gian để giúp e phần này.
              em gửi mạch và phần code giao tiếp đơn giản với 8255 xuất ra portC của 8255 các bit xen kẽ để các bác tiện giúp đỡ.
              up lên diễn đàn mãi không được nên e cho nên mediafire
              89c52.zip

              cảm hơn các bác rất nhiều
              Lengo90 muốn chạy ngày giờ thì như thế này:
              - Tạo một bảng fonts 8x8 các ký tự và chữ số ASCII lưu vào bộ nhớ flash(ROM)
              - Đọc dữ liệu ngày tháng năm rồi tra trong bảng fonts để load dữ liệu và xuất ra màn hình led

              Giao tiếp với Ram ngoài, mục đích chính là mở rộng kích thước bảng led matrix lên thôi. Nhưng ở IC 89xx thì cũng có giới hạn vì hạn chế tốc độ

              Email:
              Tel: 0983.497.310

              Comment


              • #8
                16x48 thì dÙng 48x2 =96 byte ram.Quét ok.Nhưng phải dÙng kĩ thuật cuộn ram phối hợp rom.Tốc độ kô thua kém gì khi lấy trực tiếp từ rom.Cái này tự tư duy nhé.Cách này cho việc tra bảng font tiếng việt có dấu của mình.
                , , ,

                Comment


                • #9
                  Nguyên văn bởi rptdnmqs Xem bài viết
                  16x48 thì dÙng 48x2 =96 byte ram.Quét ok.Nhưng phải dÙng kĩ thuật cuộn ram phối hợp rom.Tốc độ kô thua kém gì khi lấy trực tiếp từ rom.Cái này tự tư duy nhé.Cách này cho việc tra bảng font tiếng việt có dấu của mình.
                  89S52 có 256 RAM --> matrix 16 hàng x128 cột. Nói thế thôi chứ trừ này nọ đi thì còn khoảng 16 hàng x 96 cột là OK. Còn muốn viết dài hơn nữa thì thêm tí code là xong
                  Tốc độ ở đây hạn chế là không thể làm bảng led matrix lớn hơn thôi. Ví dụ 64x 1024 chẳng hạn, rptdnmqs tính thử tần số ngắt timer và thời gian để con 89 dịch được 64x1024 bit là bao nhiêu? Chắc lúc này được cái màn hình led nhạy loạn hoa cả mắt luôn.
                  Cái bảng fonts tiếng việt nói chung là gõ kiểu telex hay VNI gì cũng được quan trọng là ép tất cả các ký tự việt nam vô thành mã 1 byte để tra bảng cho nhanh hơn thôi
                  Last edited by tienhuypro; 04-01-2012, 15:07.

                  Email:
                  Tel: 0983.497.310

                  Comment


                  • #10
                    Tất nhiên là ép vào rồi.Kô thì tra sao nổi.Đối với bảng led cỡ nhỏ thì dÙng cách này.Kô dÙng thêm ram ngoài.Bảng led lớn thì phải dÙng avr,arm sài cho nó khỏi phải lăn tăn.Anh tienhuypro kô hiểu cách cuộn ram của em rồi.Khi xuất bit cuối 1 byte là từ động dịch byte trên ram và lấy 1 byte trên rom đè vào byte cuối trên 1 hàng data của buffer.Matrix 128 cột thì sợ ku 8051 kô sơi được.
                    , , ,

                    Comment


                    • #11
                      sao mọi người cứ hay chê e 89xx thế nhỉ, đúng là nó ko bằng avr,arm nhưng để đk 1 bảng led cỡ 32x512 thì nhiều cao nhân đã làm rồi chứ đùng nói tới matrix128 cột, chủ yếu là thiết kế và giải thuật cho nó thôi.

                      Comment


                      • #12
                        Nguyên văn bởi tienhuypro Xem bài viết
                        Lengo90 muốn chạy ngày giờ thì như thế này:
                        - Tạo một bảng fonts 8x8 các ký tự và chữ số ASCII lưu vào bộ nhớ flash(ROM)
                        - Đọc dữ liệu ngày tháng năm rồi tra trong bảng fonts để load dữ liệu và xuất ra màn hình led

                        Giao tiếp với Ram ngoài, mục đích chính là mở rộng kích thước bảng led matrix lên thôi. Nhưng ở IC 89xx thì cũng có giới hạn vì hạn chế tốc độ
                        em muốn hỏi giả sử máy tính truyền xuống 1 chuỗi mã ascii thì chuỗi mã đó có dạng như thế nào, có phải là các mã ascii được đánh số lần lượt từ 1->256 rồi ta lập các bảng mã đó ra rồi dùng phương pháp so sánh cjne a,#data,nhãn
                        để so sánh chọn bảng mã phải không, vì e chưa giao tiếp với máy tính bao giờ nên khó hiểu quá.

                        với lại em muốn hỏi thêm là bây giờ em đang tính làm bảng led matrix 16*80 2 màu để tăng độ sáng em quét theo phương pháp dùng 74ls138 quét 8 hàng 1 tức là quét 2 hàng cùng 1 lúc ấy => mất 40 con 74ls595 để dịch mã vậy các anh cho em hỏi làm như vậy con 89c52 có đáp ứng được không, khi đó nó tương tự như quét matrix 8*320 đấy ạ vì em quét 8 hàng còn tất cả e đưa về cột

                        Comment


                        • #13
                          Nguyên văn bởi lengo90 Xem bài viết
                          em muốn hỏi giả sử máy tính truyền xuống 1 chuỗi mã ascii thì chuỗi mã đó có dạng như thế nào, có phải là các mã ascii được đánh số lần lượt từ 1->256 rồi ta lập các bảng mã đó ra rồi dùng phương pháp so sánh cjne a,#data,nhãn
                          để so sánh chọn bảng mã phải không, vì e chưa giao tiếp với máy tính bao giờ nên khó hiểu quá.

                          với lại em muốn hỏi thêm là bây giờ em đang tính làm bảng led matrix 16*80 2 màu để tăng độ sáng em quét theo phương pháp dùng 74ls138 quét 8 hàng 1 tức là quét 2 hàng cùng 1 lúc ấy => mất 40 con 74ls595 để dịch mã vậy các anh cho em hỏi làm như vậy con 89c52 có đáp ứng được không, khi đó nó tương tự như quét matrix 8*320 đấy ạ vì em quét 8 hàng còn tất cả e đưa về cột
                          Matrix 16x80 2 màu --> dung lượng RAM cần thiết là 80*(16/2)*2=320Byte. 89S52 có 256 RAM--> kết nối Ram ngoài hoặc dịch trực tiếp từ bảng mã tạo ra.
                          Tính giá trị 2 thanh ghi TH0,TL0 của timer0 :24000000(tần số thạch anh max 89Sxx)/12/60(tần số quét)/8(số hàng quét) = 4166, nghĩa là ta có dư 4166 chu kì máy mỗi khi timer0 tràn.
                          Khi giao tiếp với RAM ngoài hay đọc trực tiếp từ bộ nhớ chương trình ta tốn 2 chu kì máy -->Số chu kì máy cần dùng cho dịch hết all bit ra bảng led là: 2ck*160(=80*2)*4(dịch được 2bit)= 1280. Tính thêm này nọ nữa thì vô tư rồi.
                          Cái mã ASCII nói sau vì hơi phức tạp

                          Email:
                          Tel: 0983.497.310

                          Comment


                          • #14
                            Kô biết có chip nào shift từ 1 byte ra lẫn lượt từng bit 1 kô.Có cái này nữa là 8051 cũng sơi được bảng led 32x512.Em thì chỉ nghịch cho vui thôi.Nên kô rành vụ này.Đừng có nói giải thuật mà xơi cái led matrix khủng với con 8051.Mình chịu thua.Bạn congdt chắc luyện code nhiều.Mình thì nhác code.
                            , , ,

                            Comment


                            • #15
                              chủ yếu là do đam mê thôi. để làm bảng dài với 8051 thì phải kết hợp nhiều thứ khác vào chứ mình e 8051 thì làm ko nổi.con 74hc165 chuyển từ ss sang nối tiếp có lẽ đúng ý bạn. con này cũng có thể kết hợp vào qb đc đấy.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X