Tài liệu HỌ vi điều khiển 8051 cách lập trình và BT minh họa

Thảo luận trong 'Điện - Điện Tử' bắt đầu bởi Thúy Viết Bài, 5/12/13.

  1. Thúy Viết Bài

    Thành viên vàng

    Bài viết:
    198,891
    Được thích:
    167
    Điểm thành tích:
    0
    Xu:
    0Xu
    I. GIỚI THIỆU CẤU TRÚC PHẦN CỨNG HỌ MSC-51 (8951) :
    Đặc điểm và chức năng hoạt động của các IC họ MSC-51 hoàn toàn tương tự
    như nhau. Ở đây giới thiệu IC8951 là một họ IC vi điều khiển do hãng Intel của Mỹ
    sản xuất. Chúng có các đặc điểm chung như sau:
    Các đặc điểm của 8951 được tóm tắt như sau :
    √ 8 KB EPROM bên trong.
    √ 128 Byte RAM nội.
    √ 4 Port xuất /nhập I/O 8 bit.
    √ Giao tiếp nối tiếp.
    √ 64 KB vùng nhớ mã ngoài
    √ 64 KB vùng nhớ dữ liệu ngoại.
    √ Xử lí Boolean (hoạt động trên bit đơn).
    √ 210 vị trí nhớ có thể định vị bit.
    √ 4s cho hoạt động nhân hoặc chia.


    ã LCD_ScanKB
    ;P1 = data/command pin
    ;P3.0 -> RS pin
    ;P3.1 -> R/W pin
    ;P3.2 -> E pin
    ;P2 -> Keypad
    ORG 0
    RS EQU P3.0
    RW EQU P3.1
    EN EQU P3.2


    MOV A,#38H
    ACALL CSTROBE
    MOV A,#0EH
    ACALL CSTROBE
    MOV A,#01H
    ACALL CSTROBE
    MOV A,#06H
    ACALL CSTROBE
    MOV A,#80H
    ACALL CSTROBE


    ;init. LCD 2 lines,5x7 matrix

    ;LCD on, cursor on

    ;clear LCD

    ;cursor dịch phải

    ;cursor: line 1, pos. 0


    AGAIN: LCALL READKP
    ORL A,#30h

    ACALL DELAY
    ACALL DSTROBE
    SJMP AGAIN

    ;command strobe

    CSTROBE:
    ACALL READY
    MOV P1,A


    ;is LCD readỷ
    ;xuất mã lệnh

    CLR RS
    CLR RW
    SETB EN
    CLR EN
    RET

    ;data strobe

    ;RS=0: lệnh
    ;R/W=0: ghi ra LCD
    ;EN=1 -> tạo cạnh xuống
    ;EN=0 ,chốt

    DSTROBE:
    ACALL READY
    MOV P1,A
    SETB RS
    CLR RW


    ;is LCD readỷ
    ;xuất dữ liệu ra P1
    ;RS=1: dữ liệu
    ;R/W=0 ghi ra LCD

    SETB EN
    CLR EN
    RET

    ;EN=1 -> tạo cạnh xuống
    ;EN=0, chốt


    READY: SETB P1.7


    ;P1.7: input

    CLR RS
    SETB RW

    ;RS=0: lệnh
    ;R/W=1: đọc

    BACK: CLR EN
    SETB EN
    JB P1.7,BACK

    ;EN=0 -> tạo cạnh lên
    ;EN=1
    ;chờ busy flag=0

    RET

    ; Đọc bàn phím
    READKP: PUSH 7
    SCAN: MOV A,#11111110B ; col_0 -> GND

    MOV R7,#0
    CONT: MOV P2,A

    ; R7 = i
    ; nối col i -> GND

    MOV A,P2 ; đọc row
    JNB ACC.4,ROW_0 ; xét xem row nàỏ
    JNB ACC.5,ROW_1
    JNB ACC.6,ROW_2
    JNB ACC.7,ROW_3

    RL A
    INC R7

    ; chuẩn bị nối GND
    ; cột tiếp theo


    CJNE R7,#4,CONT ; lần luợt nối GND 4 cột
    SJMP SCAN ; quay lại quét từ cột 0
    ROW_0: MOV A,R7 ; Row=0, Col=R7

    AĐ A,#0
    SJMP EXIT
    ROW_1: MOV A,R7
    AĐ A,#4
    SJMP EXIT
    ROW_2: MOV A,R7
    AĐ A,#8
    SJMP EXIT
    ROW_3: MOV A,R7
    AĐ A,#12

    ; A = 0 + R7

    ; Row=1, Col=R7
    ; A = 4 + R7

    ; Row=2, Col=R7
    ; A = 8 + R7

    ; Row=3, Col=R7
    ; A = 12 + R7

    EXIT: POP 7
    RET

    DELAY: PUSH 6
    PUSH 7
    MOV R7,#0FFh
    LP1: MOV R6,#0FFh
    LP0: DJNZ R6,LP0
    DJNZ R7,LP1
    POP 7
    POP 6
    RET
    END
     

    Các file đính kèm:

Đang tải...