27 4月, 2016

微机系统与接口实验(七)—8251串行接口实验

1. 实验目的

  • 了解串行通信的工作原理和通信协议。
  • 掌握串行接口8251的硬件连接和编程方法。

2. 实验内容

  • 题目:编写自收自发程序,将3000H其实的10个单元中的初始数据发送到串口,然后自接受并保存到4000H起始的内存单元中。
  • 实验扩展:编写程序,将字符“a-z”的ASCII码写入3000H开始的存储单元中,然后通过串口以9600波特率传输到4000H开始的存储单元中。要求:当出现帧格式错,溢出错和奇偶校验错时,则停止传输,并将状态字显示在数据灯D7-D0上

3. 主实验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
M8251_DATA EQU 0600H             ;8251数据端口地址
M8251_CON EQU 0602H              ;8251控制端口地址
M8254_2 EQU 06C4H                ;8254计数器2端口地址
M8254_CON EQU 06C6H              ;8254控制寄存器端口地址
 
SSTACK  SEGMENT STACK
    DW 64 DUP(?)
SSTACK  ENDS
 
CODE SEGMENT
    ASSUME CS:CODE
START:  
    MOV AX, 0000H
    MOV DS, AX
 
    ;初始化 8254,得到收发时钟
    MOV AL, 0B6H
    MOV DX, M8254_CON
    OUT DX, AL
    MOV AL, 0CH
    MOV DX, M8254_2
    OUT DX, AL
    MOV AL, 00
    OUT DX, AL
 
    MOV DX, M8251_CON
    MOV AL, 00H
    OUT DX, AL
    CALL DELAY
    ;复位 8251
 
    MOV AL, 40H
    OUT DX, AL
    CALL DELAY
 
    MOV AL,7EH
    OUT DX, AL                   ;写入8251方式字7EH=01111110B,详见实验讲义P59
    CALL DELAY
 
    MOV AL, 34H
    OUT DX, AL                   ;写入8251控制字34H=00110110B,详见实验讲义P60
    CALL DELAY
 
    MOV DI, 4000H                ;写入地址
    MOV SI, 3000H                ;读入地址
    MOV CX, 000AH                ;循环10次
A1: 
    MOV AL, [SI]
    PUSH AX
    MOV AL, 37H
    MOV DX, M8251_CON
    OUT DX, AL
    POP AX
    MOV DX, M8251_DATA
    OUT DX, AL                   ;发送数据
    MOV DX, M8251_CON
A2: 
    IN AL, DX                    ;判断发送缓冲是否为空
    AND AL, 01H
    JZ A2
    CALL DELAY
A3: 
    IN AL, DX                    ;判断是否接收到数据
    AND AL, 02H
    JZ A3
    MOV DX, M8251_DATA
    IN AL, DX                    ;读取接收到的数据
    MOV [DI], AL
    INC DI
    INC SI
    LOOP A1                      ;循环10次
 
    MOV AH,4CH
    INT 21H                      ;程序终止
 
DELAY:                           ;延时子程序
    PUSH CX
    MOV CX,3000H
A5: 
    PUSH AX
    POP AX
    LOOP A5
    POP CX
    RET
CODE ENDS
    END START

4. 实验扩展

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
M8251_DATA EQU 0600H             ;8251数据端口地址
M8251_CON EQU 0602H              ;8251控制端口地址
M8254_2 EQU 06C4H                ;8254计数器2端口地址
M8254_CON EQU 06C6H              ;8254控制寄存器端口地址
M8255_CON EQU 0646H              ;8255控制寄存器端口地址
M8255_B EQU 0642H                ;8255B口地址
 
SSTACK  SEGMENT STACK
    DW 64 DUP(?)
SSTACK  ENDS
 
CODE SEGMENT
    ASSUME CS:CODE
START:  
    MOV AX, 0000H
    MOV DS, AX
 
    MOV DX, M8255_CON
    MOV AL, 90H
    OUT DX, AL
    MOV DX, M8255_B
    MOV AL, 0FFH
    OUT DX, AL
    ;初始化8255,B口输出
 
AA0: 
    MOV SI, 3000H                    ;数据首写入首地址
    MOV CX, 001AH
    MOV AX, 61H
AA1: 
    MOV [SI], AX
    INC AX
    INC SI
    LOOP AA1
 
    ;初始化 8254,得到收发时钟
    MOV AL, 0B6H
    MOV DX, M8254_CON
    OUT DX, AL
    MOV AL, 0CH
    MOV DX, M8254_2
    OUT DX, AL
    MOV AL, 00
    OUT DX, AL
 
    MOV DX, M8251_CON
    MOV AL, 00H
    OUT DX, AL
    CALL DELAY
    ;复位 8251
 
    MOV AL, 40H
    OUT DX, AL
    CALL DELAY
 
    ;8251 方式字
    MOV AL,7EH
    OUT DX, AL
    CALL DELAY
 
    ;8251 控制字
    MOV AL, 34H
    OUT DX, AL
    CALL DELAY
 
    MOV DI, 4000H
    MOV SI, 3000H
    MOV CX, 001AH
A1: 
    MOV AL, [SI]
    PUSH AX
    MOV AL, 37H
    MOV DX, M8251_CON
    OUT DX, AL
    POP AX
    MOV DX, M8251_DATA
    OUT DX, AL  
    ;发送数据
    MOV DX, M8251_CON
A2: 
    IN AL, DX
    AND AL, 01H
    ;判断发送缓冲是否为空
    JZ A2
    CALL DELAY
A3: 
    IN AL, DX 
    MOV DX, M8255_B
    OUT DX, AL
    TEST AL, 02H
    ;判断是否接收到数据
    JZ A3
    TEST AL, 38H
    ;判断是否有错误,如果出现错误则显示在D7-D0上
    JZ CONTINUE
    MOV DX, M8255_B
    OUT DX, AL
    JMP EXIT
CONTINUE:
    MOV DX, M8251_DATA
    IN AL, DX 
    ;读取接收到的数据
    MOV [DI], AL
    INC DI
    INC SI
    LOOP A1
EXIT:    
    MOV AH,4CH
    INT 21H 
    ;程序终止
 
DELAY:
    PUSH CX
    MOV CX,3000H
A5: 
    PUSH AX
    POP AX
    LOOP A5
    POP CX
    RET
CODE ENDS
    END START

You may also like...

2 Responses

  1. 匿名说道:

    关于8251初始化,未初始化前,8251是什么状态,程序中往控制口写00H,是什么意思

  2. 匿名说道:

    po

发表评论

电子邮件地址不会被公开。

This site uses Akismet to reduce spam. Learn how your comment data is processed.