Thông báo

Collapse
No announcement yet.

Cho e hỏi chút về đoạn code này trong giao tiếp nối tiếp dùng 2 con 89c51

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

  • Cho e hỏi chút về đoạn code này trong giao tiếp nối tiếp dùng 2 con 89c51

    NAME SAMPLE

    ; Khai báo chuong trinh con
    PUBLIC TXTBIT

    PROG SEGMENT CODE ; Khai bao vung nho ma lenh
    CONST SEGMENT CODE ; Khai bao hang so trong vung ma lenh
    VAR1 SEGMENT DATA ; Khai bao vung nho cho bien
    BITVAR SEGMENT BIT ; Khai bao cac bien dang bit
    ----------------------
    khai bao stack
    --------------------
    STACK SEGMENT IDATA ; Khai bao ngan xep (thuong dung cho ngat, chuong trinh con)
    RSEG STACK ; Chon DATA segment(chon STACK)
    DS 10H ; Ngan xep chua duoc 16 bytes
    ----------------------------------------------------
    bang khoi dong va vecto ngat
    ----------------------------------------------------
    CSEG AT 0
    USING 0

    JMP START ;chuyen lenh dieu khien toi START(Bit khoi dau trong mode2)
    RSEG PROG ;chon CODE segment
    START: MOV SP,#STACK-1 ;khoi tao bit bat dau start
    --------------------------------------------
    code chuong trinh chinh
    -------------------------------------------
    ; Khoi tao timer cho UART
    MOV TMOD,#20H ;C/T = 0, Mode = 2(do toc do truyen thap nen de 2 bit dung de du thoi gian cho vc nhan tin hieu)
    MOV TH1,#0FDH ;Tao toc do baud cho timer 1(toc do truyen tin)
    SETB TR1 ;TR1=1 khoi dong timer1
    MOV SCON,#52H ;gan gia tri 52H cho thanh ghi dieu khien cong noi tiep SCON(8bit tin,2 bit dung)

    ; Khoi tao LCD
    MOV A,#38H ;init. LCD 2 do`ng, ma tra^.n 5x7 (LCD dung mode 8bit)
    ACALL LENH ;xuat lenh
    MOV A,#0EH ;hien thi man hinh va con tro
    ACALL LENH
    MOV A,#01H ;clear LCD
    ACALL LENH
    MOV A,#06H ;con tro man hinh di.ch pha?i
    ACALL LENH
    MOV A,#80H ;chuye^?n con tro man hinh dde^'n line 1, pos. 6
    ACALL LENH
    ; clear TXTBIT to read form CODE-Memory
    CLR TXTBIT
    MOV A,#255
    MOV P2,A

    LAP:
    ;----Quet ban phim
    QUET_PHIM:
    MOV A,#255
    MOV P1,A
    PHIM_1:
    CLR P1.4
    JB P1.3, PHIM_4
    MOV A, #14
    MOV PHIM_AN, A
    SJMP HIEN
    PHIM_4:
    JB P1.2, PHIM_7
    MOV A,#17
    MOV PHIM_AN, A
    SJMP HIEN
    PHIM_7:
    JB P1.1,PHIM_SAO
    MOV A,#20
    MOV PHIM_AN, A
    SJMP HIEN
    PHIM_SAO:
    JB P1.0,PHIM_2
    MOV A,#7
    MOV PHIM_AN, A
    SJMP HIEN
    PHIM_2:
    CLR P1.5
    SETB P1.4
    JB P1.3, PHIM_5
    MOV A,#15
    MOV PHIM_AN,A
    SJMP HIEN
    PHIM_5:
    JB P1.2, PHIM_8
    MOV A,#18
    MOV PHIM_AN,A
    SJMP HIEN
    PHIM_8:
    JB P1.1, PHIM_0
    MOV A,#21
    MOV PHIM_AN,A
    SJMP HIEN
    PHIM_0:
    JB P1.0, PHIM_3
    MOV A,#13
    MOV PHIM_AN,A
    SJMP HIEN
    PHIM_3:
    CLR P1.6
    SETB P1.5
    JB P1.3, PHIM_6
    MOV A,#16
    MOV PHIM_AN,A
    SJMP HIEN
    PHIM_6:
    JB P1.2, PHIM_9
    MOV A,#19
    MOV PHIM_AN,A
    SJMP HIEN
    PHIM_9:
    JB P1.1, PHIM_THANG
    MOV A,#22
    MOV PHIM_AN,A
    SJMP HIEN
    PHIM_THANG:
    JB P1.0,XOA_NUT
    MOV A,#0
    MOV PHIM_AN, A
    SJMP HIEN
    XOA_NUT:
    MOV A,#10
    MOV PHIM_AN, A

    ;---------HIEN THI.
    HIEN:
    ACALL DELAY100ms
    MOV A,PHIM_AN
    ADD A,#35
    CJNE A,#45, HIEN_THI
    SJMP NHAN
    HIEN_THI:
    ; Di chuyen ve dau hang 1
    MOV A, #80H
    ACALL LENH
    MOV A,PHIM_AN
    ADD A,#35
    ACALL DULIEU

    TRUYEN:
    MOV A,PHIM_AN
    ADD A,#35
    ACALL SEND

    NHAN:
    MOV A, #0
    ACALL RECV
    MOV PHIM_NHAN, A
    CJNE A, #0, HIEN_THI_NHAN
    LJMP LAP
    HIEN_THI_NHAN:
    MOV A, #0C0h
    ACALL LENH
    MOV A,PHIM_NHAN
    ACALL DULIEU
    LJMP LAP

    ;------Chuong trinh con
    LENH:
    ACALL READY ;is LCD ready?
    MOV P2,A ;xua^'t ma~ le^.nh
    CLR P0.0 ;RS=0: le^.nh
    CLR P0.1 ;R/W=0 -> ghi ra LCD
    SETB P0.2 ;E=1 -> ta.o ca.nh xuo^'ng
    CLR P0.2 ;E=0 ,cho^'t
    RET
    DULIEU:
    ACALL READY ;is LCD ready?
    MOV P2,A ;xua^'t du+~ lie^.u
    SETB P0.0 ;RS=1 for data
    CLR P0.1 ;R/W=0 to write to LCD
    SETB P0.2 ;E=1 -> ta.o ca.nh xuo^'ng
    CLR P0.2 ;E=0, cho^'t
    RET
    ; kie^?m tra co+` BF
    READY: SETB P2.7 ;P1.7: input
    CLR P0.0 ;RS=0: thanh ghi le^.nh
    SETB P0.1 ;R/W=1: ddo.c
    BACK: CLR P0.2 ;E=0 -> ta.o ca.nh le^n
    SETB P0.2 ;E=1
    JB P2.7,BACK ;cho+` busy flag=0
    RET
    DELAY100ms: MOV R2,#150
    DL5: MOV R1,#250
    DL4: NOP
    NOP
    DJNZ R1,DL4
    DJNZ R2,DL5
    RET
    SEND:
    JNB TI,$
    CLR TI
    MOV SBUF,A
    RET
    RECV:
    MOV A, #0
    JNB RI, RETURN
    MOV A,SBUF
    CLR RI
    RETURN: RET

    RSEG CONST
    TXT: DB 'TEST PROGRAM',00H
    RSEG VAR1
    PHIM_AN: DS 01H // Do dai 33 byte
    SUM: DS 01H
    PHIM_NHAN: DS 01H
    BIEN_GHI: DS 01H

    RSEG BITVAR
    TXTBIT: DBIT 1

    END
    Các cao thủ cho e hỏi ý nghĩa của mấy cái chỗ e in đậm,có cần thiết phải có cái XÓA NÚT hay không,tại sao đã kiểm tra cờ bf mà vẫn phải có trễ?tại sao lại cộng 35,tại sao DS gán bằng 01H,DBIT 1 là gì,và ý nghĩa của TXTBIT.CẢm ơn các bạn:beauty::beauty::beauty:

Về tác giả

Collapse

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

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

Collapse

Đang tải...
X