undefined-0's Blog

历添新岁月 春满旧山河

0%

实验二 数据库的建立和维护实验

一、实验目的

​ 要求学生熟练掌握使用SQL命令和SQL Server Management Studio向数据库输入数据、修改数据和删除数据的操作。

二、实验内容:

1、基本操作实验

  • 按照书上10.4.2的要求完成基本操作实验和提高操作实验。要求:在每个基本表中各输入至少10条记录,能使用SQL命令进行数据输入、修改和删除操作。

(1)通过SQL Server Management Studio,向图书_读者库中的图书、读者和借阅3个表输入记录。数据记录内容如表10-8~表10-10所示(序号项是为了查看方便,实际数据不含序号项)。

img

img

要求:
a)先检查并表结构,使其符合表10-6图书读者库本表结构和约束。
b)数据输入后进行检查,并进行增删改操作,保证数据正确。

1. 将数据记录插入图书表
1
2
3
4
5
6
7
8
9
10
11
--插入图书表的数据记录
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('1000000001','计算机','机械工业出版社','李明','计算机引论','18')
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('1000000002','计算机','机械工业出版社','王小红','数据结构','22')
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('1000000003','计算机','机械工业出版社','李和明','C语言编程','25.5')
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('1000000004','计算机','电子工业出版社','刘宏亮','操作系统','49.8')
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('1000000006','计算机','机械工业出版社','刘宏亮','数据结构','21.6')
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('1000000005','计算机','电子工业出版社','王小红','计算机文化','20')
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('2000000007','数学','机械工业出版社','吴非','高等数学','18')
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('2000000008','数学','机械工业出版社','丁玉应','概率统计','22.3')
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('2000000009','数学','电子工业出版社','赵明','线性代数','15')
INSERT INTO 图书(书号,类别,出版社,作者,书名,定价) VALUES('3000000010','物理','电子工业出版社','张共可','力学','19.8')
  • 命令执行结果:
    image-20240510170754317
2. 将数据记录插入读者表
1
2
3
4
5
6
7
8
9
10
11
12
--插入读者表的数据记录
INSERT INTO 读者(编号,姓名,单位,性别,电话) VALUES('10000001','李小明','计算机系','男','13826388323')
INSERT INTO 读者(编号,姓名,单位,性别,电话) VALUES('10000002','王红','计算机系','男','13826388378')
INSERT INTO 读者(编号,姓名,单位,性别,电话) VALUES('10000003','李和平','计算机系','女','13826385523')
INSERT INTO 读者(编号,姓名,单位,性别,电话) VALUES('10000004','刘宏亮','计算机系','男','13826387623')
INSERT INTO 读者(编号,姓名,单位,性别,电话) VALUES('10000005','刘宏亮','计算机系','男','13826356323')
INSERT INTO 读者(编号,姓名,单位,性别,电话) VALUES('10000006','王小红','数学系','女','13826381223')
INSERT INTO 读者(编号,姓名,单位,性别,电话) VALUES('10000007','吴小','数学系','男','13826366323')
INSERT INTO 读者(编号,姓名,单位,性别,电话) VALUES('10000008','丁玉应','数学系','男','13826898323')
INSERT INTO 读者(编号,姓名,单位,性别,电话) VALUES('10000009','赵名','数学系','女','13826348323')
INSERT INTO 读者(编号,姓名,单位,性别,电话) VALUES('10000010','张共可','计算机系','男','13826384523')

  • 命令执行结果:
    image-20240510171006434
3. 将数据记录插入借阅表
1
2
3
4
5
6
7
8
9
10
11
--插入借阅表的数据记录
INSERT INTO 借阅(书号,读者编号,借阅日期) VALUES('1000000001','10000001','19981125')
INSERT INTO 借阅(书号,读者编号,借阅日期) VALUES('1000000002','10000002','19981220')
INSERT INTO 借阅(书号,读者编号,借阅日期) VALUES('1000000003','10000003','19990605')
INSERT INTO 借阅(书号,读者编号,借阅日期) VALUES('1000000004','10000004','20061125')
INSERT INTO 借阅(书号,读者编号,借阅日期) VALUES('1000000006','10000001','20061125')
INSERT INTO 借阅(书号,读者编号,借阅日期) VALUES('1000000005','10000001','20061125')
INSERT INTO 借阅(书号,读者编号,借阅日期) VALUES('2000000007','10000001','20061125')
INSERT INTO 借阅(书号,读者编号,借阅日期) VALUES('2000000008','10000003','20061125')
INSERT INTO 借阅(书号,读者编号,借阅日期) VALUES('2000000009','10000004','20061125')
INSERT INTO 借阅(书号,读者编号,借阅日期) VALUES('3000000010','10000001','20061125')
  • 命令执行结果:
    image-20240510171201685

(2)通过SQL Server Management Studio,向学生_课程库中的学生、课程和选课3个表输入记录。数据记录内容如表10-11~表10-13所示(序号项是为了查看方便,实际数据不含序号项)。

img

img

要求:
a)先检查并表结构,使其符合表10-7学生课程库基本表结构和约束。
b)数据输入后进行检查,并进行增删改操作,保证数据正确。

1.将数据记录插入学生表
1
2
3
4
5
6
7
8
9
10
11
--插入学生表的数据记录
INSERT INTO 学生(学号,姓名,年龄,性别,所在系) VALUES('S1','李明',21,'男','计算机')
INSERT INTO 学生(学号,姓名,年龄,性别,所在系) VALUES('S2','张小红',21,'男','计算机')
INSERT INTO 学生(学号,姓名,年龄,性别,所在系) VALUES('S3','李和明',22,'女','计算机')
INSERT INTO 学生(学号,姓名,年龄,性别,所在系) VALUES('S4','张三',21,'男','计算机')
INSERT INTO 学生(学号,姓名,年龄,性别,所在系) VALUES('S5','刘宏',23,'男','计算机')
INSERT INTO 学生(学号,姓名,年龄,性别,所在系) VALUES('S6','王红应',20,'女','计算机')
INSERT INTO 学生(学号,姓名,年龄,性别,所在系) VALUES('S7','吴非',19,'男','数学')
INSERT INTO 学生(学号,姓名,年龄,性别,所在系) VALUES('S8','丁玉',21,'男','数学')
INSERT INTO 学生(学号,姓名,年龄,性别,所在系) VALUES('S9','赵名',21,'女','数学')
INSERT INTO 学生(学号,姓名,年龄,性别,所在系) VALUES('S10','张共可',21,'男','物理')
  • 命令执行结果:
    image-20240510171921278
2.将数据记录插入课程表
1
2
3
4
5
6
7
8
9
10
11
--插入课程表的数据记录
INSERT INTO 课程(课程号,课程名,先行课) VALUES('C1','计算机引论',NULL)
INSERT INTO 课程(课程号,课程名,先行课) VALUES('C3','C语言编程','C1')
INSERT INTO 课程(课程号,课程名,先行课) VALUES('C2','数据结构','C3')
INSERT INTO 课程(课程号,课程名,先行课) VALUES('C5','数据库','C2')
INSERT INTO 课程(课程号,课程名,先行课) VALUES('C6','计算机文化',NULL)
INSERT INTO 课程(课程号,课程名,先行课) VALUES('C4','软件工程','C6')
INSERT INTO 课程(课程号,课程名,先行课) VALUES('C7','高等数学',NULL)
INSERT INTO 课程(课程号,课程名,先行课) VALUES('C9','线性代数','C7')
INSERT INTO 课程(课程号,课程名,先行课) VALUES('C8','概率统计','C9')
INSERT INTO 课程(课程号,课程名,先行课) VALUES('C10','力学',NULL)
  • 命令执行结果:
    image-20240510172203520
3.将数据记录插入选课表
1
2
3
4
5
6
7
8
9
10
11
12
13
--插入选课表的数据记录
INSERT INTO 选课(学号,课程号,成绩) VALUES('S1','C1',60)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S2','C1',93)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S3','C1',NULL)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S4','C1',89)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S1','C2',79)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S2','C2',NULL)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S3','C2',80)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S4','C3',90)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S1','C3',92)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S2','C3',81)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S3','C7',85)
INSERT INTO 选课(学号,课程号,成绩) VALUES('S4','C7',75)
  • 命令执行结果:
    image-20240510172706546

2、 提高操作实验

向自设计的数据库应用系统的数据库中的各表,输入多条实际数据,并实现数据的增、删、改操作。

1)增
  1. 将数据记录插入医生表
    1
    2
    3
    4
    5
    6
    --插入医生表的数据记录
    INSERT INTO 医生(工号,姓名,年龄,性别,职称,科室) VALUES('D1','张一',40,'女','主任医师','内科')
    INSERT INTO 医生(工号,姓名,年龄,性别,职称,科室) VALUES('D2','张二',45,'男','副主任医师','病理科')
    INSERT INTO 医生(工号,姓名,年龄,性别,职称,科室) VALUES('D3','张三',47,'女','主治医师','放射科')
    INSERT INTO 医生(工号,姓名,年龄,性别,职称,科室) VALUES('D4','张四',48,'男','医师','康复科')
    INSERT INTO 医生(工号,姓名,年龄,性别,职称,科室) VALUES('D5','张五',42,'女','主任医师','眼科')
  • 命令执行结果
    image-20240510202811745
  1. 将数据记录插入患者表
    1
    2
    3
    4
    5
    6
    7
    --插入患者表的数据记录
    INSERT INTO 患者(患者号,姓名,性别,身份证号码) VALUES('P1','李一','女','510681195901102885')
    INSERT INTO 患者(患者号,姓名,性别,身份证号码) VALUES('P2','李二','男','65312219670803739X')
    INSERT INTO 患者(患者号,姓名,性别,身份证号码) VALUES('P3','李三','女','530112199806295721')
    INSERT INTO 患者(患者号,姓名,性别,身份证号码) VALUES('P4','李四','男','520523201410124976')
    INSERT INTO 患者(患者号,姓名,性别,身份证号码) VALUES('P5','李五','女','210711198812258326')
    INSERT INTO 患者(患者号,姓名,性别,身份证号码) VALUES('P6','李六','男','130207196808088415')
  • 命令执行结果
    image-20240510203421550
  1. 将数据记录插入病历表
    1
    2
    3
    4
    5
    6
    --插入病历表的数据记录
    INSERT INTO 病历(病历号,患者号,医生工号,就诊日期,病情描述) VALUES('1001','P1','D5','20240508','轻度')
    INSERT INTO 病历(病历号,患者号,医生工号,就诊日期,病情描述) VALUES('1002','P2','D4','20240508','中度')
    INSERT INTO 病历(病历号,患者号,医生工号,就诊日期,病情描述) VALUES('1003','P3','D3','20240509','轻度')
    INSERT INTO 病历(病历号,患者号,医生工号,就诊日期,病情描述) VALUES('1004','P4','D2','20240510','重度')
    INSERT INTO 病历(病历号,患者号,医生工号,就诊日期,病情描述) VALUES('1005','P5','D1','20240510','轻度')
  • 命令执行结果
    image-20240510224018410
2)删
1
DELETE 病历 WHERE 患者号='P1'
  • 命令执行结果:
    image-20240511081038704
3)改
1
UPDATE 医生 SET 职称='主任医师' WHERE 工号='D2'
  • 命令执行结果:
    image-20240511081228911

3、选择操作实验

  • 读懂以下T-SQL的数据插入、删除和修改语句,在SSMS的查询分析器中正确输入每条语句,执行后检查结果。

(1) 数据插入操作

1
2
3
USE 图书读者数据库
INSERT INTO 图书
VALUES('10000000001', '计算机', '机械工业出版社', '李明', '计算机引论', '25.00')
  • 命令执行结果:
    image-20240511082305128

  • 原因分析:图书表限制书号应为10位,命令中输入的书号为11位。

  • 修改图书表限制后的命令执行结果:
    image-20240511083039530

(2) 数据删除操作

1
DELETE 图书 WHERE 书号='10000000001'
  • 命令执行结果:
    image-20240511083454649

(3) 数据修改操作

1
UPDATE 图书 SET 定价=26.5 WHERE 书号='10000000001'
  • (重新执行插入操作后的)命令执行结果:
    image-20240511083657847

实验八 综合实验 十字路口交通灯

南北红灯(D1、D7)亮维持15秒,在南北红灯亮的同时东西绿灯(D5、D11)也亮,并维持10s。
到10s时,东西绿灯(D5、D11)闪亮,闪亮3s后熄灭。
在东西绿灯(D5、D11)熄灭时,东西黄灯(D6、D12)亮,并维持2秒。
到2秒时,东西黄灯(D6、D12)熄灭,东西红灯(D4、D10)亮,同时南北红灯(D1、D7)熄灭,绿灯(D2、D8)亮。

接线方法:
P1.0—P3.5 T1输入
P1.1—D1 D7 南北红
P1.2—D2 D8 南北绿
P1.3—D3 D9 南北黄
P1.4—D4 D10 东西红
P1.5—D5 D11 东西绿
P1.6—D6 D12 东西黄
注:交通灯模块的LED为置低点亮

T0定时50ms,使P1.0口输出周期为100ms的方波,作为计数器T1的输入
T1重装载值:
0FB—0.5s
0F6—1s
0EC—2s
0E2—3s
9C—10s
6A—15s

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
; EW -> East & West,东西
; SN -> South & North,南北

ORG 0000H
SJMP MAIN

ORG 000BH ;T0(定时器)中断服务程序入口
LJMP T0_ISR

ORG 0030H
MAIN:
MOV A,#0FFH
MOV P1,A ;所有灯熄灭
MOV TMOD,#61H ;0110 0001:设置T1为计数器,方式2;设置T0为定时器,方式1
MOV TH0,#4CH
MOV TL0,#01H
SETB ET0 ;允许T0中断
SETB TR0 ;启动T0
SETB EA ;开中断总控

LOOP:
MOV TH1,#9CH ;10s
MOV TL1,#9CH
;T1采用查询方式,不允许中断
SETB TR1 ;启动T1

CLR P1.5 ;点亮东西绿
CLR P1.1 ;点亮南北红
JNB TF1,$ ;若10s未到,等待
MOV R0,#06H ;10s到了,装载R0(为控制绿灯闪烁次数而设的计数变量)
CALL_EW_GREEN_FLASH:
ACALL GREEN_EW_FLASH ;绿灯闪烁(闪烁三秒--->调用六次)
DJNZ R0,CALL_EW_GREEN_FLASH
SETB P1.5;东西绿闪烁结束,熄灭东西绿
CLR TR1 ;停止T1
CLR P1.6;点亮东西黄
MOV TH1,#0ECH ;2s
MOV TL1,#0ECH
SETB TR1 ;启动T1
JNB TF1,$ ;若2s未到,等待
CLR TR1 ;2s到了,停止T1
CLR TF1 ;清中断标志位
SETB P1.6;熄灭东西黄
SETB P1.1;熄灭南北红
CLR P1.4;点亮东西红
CLR P1.2;点亮南北绿
MOV TH1,#9CH ;10s
MOV TL1,#9CH
SETB TR1;启动T1
JNB TF1,$ ;若10s未到,等待
MOV R0,#06H ;10s到了,装载R0(为控制绿灯闪烁次数而设的计数变量)
CALL_SN_GREEN_FLASH:
ACALL GREEN_SN_FLASH ;绿灯闪烁(闪烁三秒--->调用六次)
DJNZ R0,CALL_SN_GREEN_FLASH
SETB P1.2;南北绿闪烁结束,熄灭南北绿
CLR TR1 ;停止T1
CLR P1.3;点亮南北黄
MOV TH1,#0ECH ;2s
MOV TL1,#0ECH
SETB TR1 ;启动T1
JNB TF1,$ ;若2s未到,等待
CLR TR1 ;2s到了,停止T1
CLR TF1 ;清中断标志位
SETB P1.3;熄灭南北黄
SETB P1.4;熄灭东西红
SJMP LOOP

T0_ISR: ;50ms到了
MOV TH0,#4CH ;重装载
MOV TL0,#01H
CPL P1.0
RETI

GREEN_EW_FLASH:
JNB TF1,$ ;若0.5s未到,等待(第一次进入GREEN_EW_FLASH时,标志位TF1未清零,不会等待)
CLR TR1 ;0.5s到了,停止T1
CLR TF1 ;清中断标志位
CPL P1.5 ;东西绿开始闪烁
MOV TH1,#0FBH ;0.5s
MOV TL1,#0FBH
SETB TR1 ;启动T1
RET

GREEN_SN_FLASH:
JNB TF1,$ ;若0.5s未到,等待(第一次进入GREEN_SN_FLASH时,标志位TF1未清零,不会等待)
CLR TR1 ;0.5s到了,停止T1
CLR TF1 ;清中断标志位
CPL P1.2 ;南北绿开始闪烁
MOV TH1,#0FBH ;0.5s
MOV TL1,#0FBH
SETB TR1 ;启动T1
RET

END

实验七 综合实验 (定时器控制方式)

test 7_1

用 P1 口作为输出口实现循环彩灯。(至少要有 5 种形式)

中断第一次,8个发光二极管循环点亮;
中断第二次,8个发光二极管逐个点亮;
中断第三次,8个发光二极管高四位和低四位交替亮灭。
中断第四次,8个发光二极管间隔1个交替亮灭;
中断第五次,8个发光二极管间隔2个交替亮灭;
如此循环往复。

接线方法:P1口接8个LED,P3.5(T1输入)接P2.1(周期为100ms的方波输出)
配置T0为定时器,T1为计数器
T1计数20,T0计时50ms(0.1s*20 = 2s)

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
	ORG 0000H
SJMP MAIN

ORG 000BH ;T0(定时器)中断服务程序入口
LJMP T0_ISR

ORG 0030H
MAIN:
MOV A,#0FFH
MOV P1,A ;所有灯熄灭
MOV TMOD,#61H ;0110 0001:设置T1为计数器,方式2;设置T0为定时器,方式1
MOV TH0,#4CH
MOV TL0,#01H
SETB ET0 ;允许T0中断
SETB TR0 ;启动T0
SETB EA ;开中断总控
MOV TH1,#0DCH ;2s
MOV TL1,#0DCH
;T1采用查询方式,不允许中断
MOV R4,#0H


MODE1:
MOV A,#0FEH
MOV P1,A ;点亮P1.0所接的灯
LOOP1:
ACALL DELAY
RL A
MOV P1,A
INC R4 ;计算是否满8次
CJNE R4,#08H,LOOP1;不满8次,继续循环点亮
LCALL MODE_SWITHCING

MODE2:
MOV A,#0FEH
MOV P1,A
MOV R4,#00H
LOOP2:
ACALL DELAY
ADD A,ACC
MOV P1,A
INC R4 ;计算是否满8次
CJNE R4,#08H,LOOP2 ;不满8次,继续逐个点亮
LCALL MODE_SWITHCING

MODE3:
MOV A,#0FH
MOV P1,A
LOOP3:
ACALL DELAY
CPL A
MOV P1,A
INC R4 ;计算是否满8次
CJNE R4,#08H,LOOP3 ;不满8次,继续翻转
LCALL MODE_SWITHCING

MODE4:
MOV A,#33H ;0011 0011
MOV P1,A
LOOP4:
ACALL DELAY
CPL A
MOV P1,A
INC R4 ;计算是否满8次
CJNE R4,#08H,LOOP4 ;不满8次,继续翻转
LCALL MODE_SWITHCING

MODE5:
MOV A,#55H ;0101 0101
MOV P1,A
LOOP5:
ACALL DELAY
CPL A
MOV P1,A
INC R4 ;计算是否满8次
CJNE R4,#08H,LOOP5 ;不满8次,继续翻转
LCALL MODE_SWITHCING
LJMP MODE1

DELAY: MOV R0,#0AH
DELAY1: MOV R1,#00H
DELAY2: MOV R2,#0C3H
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET

MODE_SWITHCING:
MOV P1,#0FFH
MOV R4,#0H
SETB TR1
JNB TF1,$
CLR TR1
CLR TF1
RET

T0_ISR:
MOV TH0,#4CH
MOV TL0,#01H
CPL P2.1
RETI

END

test 7_2

设计一个简易数字钟。 选择一位开关作为数字钟的开关。
开关合上后,数字钟从0开始运行;
开关断开后,数字钟的显示关闭;
开关再次合上后,数字钟又从0开始运行。
led0–led5 表示为6位二进制数,显示数字钟的秒值;
led6–led7 表示为2位二进制数,显示数字钟的分钟值,
如达到4分钟,分钟值又从0开始;如此循环往复。

接线方法:P1接8个LED,P2.1(周期为100ms的方波输出)接P3.5(T1输入),P2.2连一拨码开关(低电平:关闭;高电平:开始计时)

T1计数10,T0计时50ms(0.1s*10 = 1s)

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
ORG 0000H
SJMP MAIN

ORG 000BH ;T0中断服务程序入口
SJMP T0_ISR

ORG 001BH ;T1中断服务程序入口
SJMP T1_ISR

MAIN:
MOV TMOD,#61H ;0110 0001:设置T1为计数器,方式2;设置T0为定时器,方式1
MOV TH0,#4CH
MOV TL0,#01H
MOV TH1,#0F6H
MOV TL1,#0F6H
SETB ET0 ;允许T0中断
SETB TR0 ;启动T0
SETB ET1 ;允许T1中断
SETB TR1 ;启动T1
SETB EA ;开中断总控
MOV R1,#00H;计数变量(分钟)
MOV R2,#00H;计数变量(秒)
CLR A
SJMP $

T1_ISR: ;1秒到了
;计数器T1采用的是方式2,无需重装载
MOV A,R1
ADD A,R2
;CLR P2.2
JB P2.2,JUDGE ;若P2.2连接的拨码开关拨向高电平,则开始计时,否则停止计时(每隔一秒检测一次)
MOV A,#0FFH ;开关被拨向低电平,计时清零
MOV P1,A
MOV R1,#00H ;计数变量(分钟)
MOV R2,#00H ;计数变量(秒)
SJMP EXIT

JUDGE: ;判断是否计到了3分59秒
CJNE A,#0FBH,ADD_S ;11111011,若没有到3分59秒则加一秒(11H->3;111011H->59)
MOV R1,#00H ;若到了3分59秒则清零
MOV R2,#00H
MOV A,#00H
CPL A
MOV P1,A
CPL A

ADD_S:
MOV A,R2
CJNE A,#3BH,ADD_1S ;00111011,若没有到59秒则直接加一秒
MOV R2,#00H ;若到了59秒,则秒数清零,分钟数加一
MOV A,R1
ADD A,#40H ;01000000,加一分钟
MOV R1,A
;此处不必再让A加上R2,因为秒数已被清零。直接将A赋给P1即可。
CPL A
MOV P1,A
CPL A
SJMP EXIT

ADD_1S:
MOV A,R2
INC A
MOV R2,A
ADD A,R1
CPL A
MOV P1,A
CPL A
SJMP EXIT

EXIT:
RETI

T0_ISR: ;50ms到了
MOV TH0,#4CH ;重装载
MOV TL0,#01H
CPL P2.1
RETI

END

实验六 A/D D/A 实验

test 6_1

A/D实验
用AT89S52的MCU驱动ADC0809进行模数转换。程序启动时,由8个LED显示AD0809通道0的电压值(以二进制数形式)。
接线方法:实验书P108硬件连接表(忽略数码管部分,将P1口连至LED处)

image-20240722150702777
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
EOC 	BIT 	P3.0

ORG 0000H
LJMP MAIN
ORG 0100H

MAIN:
MOV A,#0FFH
MOV P0,A
MOV A,#00H
MOV P2,A

LOOP:
MOV DPTR,#7FFFH ;选择P2.7(若给P2口赋全0,则接线时可以选取P2口的任意一位接片选信号CS)
MOV A,#00H ;任意值
MOVX @DPTR,A ;给AD一个写操作,启动转换
JNB EOC,$ ;等待转换结束
MOVX A,@DPTR ;将转换结果读入A
MOV P1,A ;将转换结果从P1输出
LJMP LOOP

END

test 6_2

D/A实验
实现D/A接口设计,编写程序输出占空比为1/3的方波、锯齿波、三角波、正弦波。
用2个开关控制输出波形的类型,使用示波器观察波形。

接线方法:P0接数模转换区DB0-DB7,P2.7接数模转换区CS,P3.6接数模转换区WR。
示波器红表笔接DA输出,黑表笔接GND。
P3.2(INT0)、P3.3(INT1)各接一个拨码开关,初始时置为高。

效果:11-锯齿波 10-三角波 01-方波 00-正弦波

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
ORG 0000H
AJMP MAIN

ORG 0003H
LJMP INT0_ISR

ORG 0013H
LJMP INT1_ISR

ORG 0050H
MAIN:
MOV IE,#85H ;1000 0101,允许外部中断INT1和INT0,开中断总开关
SETB PX1 ;设外部中断1为高优先级中断
; TCON不作其他配置,保持复位时的全0(外部中断触发方式为低电平)

;MOV R0 #02H ;为控制方波占空比而设置的计数变量

SAWTOOTH: ;锯齿波
CLR A
MOV DPTR,#7FFFH
LOOP_SAWTOOTH:
MOVX @DPTR,A
INC A
SJMP LOOP_SAWTOOTH

INT0_ISR: ;P3.2所接的开关置为低时进入外部中断0
SQUARE:
MOV DPTR,#7FFFH
CLR A ;对A清零
MOVX @DPTR,A
LOOP_SQUARE:
CPL A
MOVX @DPTR,A
ACALL DELAY ;高电平 一段延时
CPL A
MOVX @DPTR,A
ACALL DELAY ;低电平 两段延时
ACALL DELAY
JB P3.2,EXIT ;若P3.2所接的开关被置为高,则退出中断
SJMP LOOP_SQUARE ;若P3.2所接的开关仍为低,则继续输出方波

DELAY:
MOV R7,#0FFH
DJNZ R7,$
RET

EXIT:
RETI

INT1_ISR: ;P3.3所接的开关置为低时进入外部中断1
JB P3.2,TRIANGLE ;若P3.2所接的开关被置为高,则输出三角波。否则输出正弦波。
JB P3.3,EXIT ;若P3.3所接的开关被置为高,则退出中断

SIN:
MOV R1,#63 ;一个周期内输出64个点
LOOP_SIN:
MOV DPTR,#TAB
MOV A,R1
MOVC A,@A+DPTR
MOVX @DPTR,A
NOP ;延时,可根据实际情况更改
DJNZ R1,LOOP_SIN
SJMP INT1_ISR

TAB: ;正弦波数据表
DB 80H,8CH,98H,0A5H,0B0H,0BCH,0C7H,0D1H
DB 0DAH,0E2H,0EAH,0F0H,0F6H,0FAH,0FDH,0FFH
DB 0FFH,0FFH,0FDH,0FAH,0F6H,0F0H,0EAH,0E3H
DB 0DAH,0D1H,0C7H,0BCH,0B1H,0A5H,99H,8CH
DB 80H,73H,67H,5BH,4FH,43H,39H,2EH
DB 25H,1DH,15H,0FH,09H,05H,02H,00H
DB 00H,00H,02H,05H,09H,0EH,15H,1CH
DB 25H,2EH,38H,43H,4EH,5AH,66H,73H

TRIANGLE:
MOV DPTR,#7FFFH
CLR A ;对A清零
LOOP_TRIANGLE_INC:
MOVX @DPTR,A
INC A
CJNE A,#0FFH,LOOP_TRIANGLE_INC
LOOP_TRIANGLE_DEC:
MOVX @DPTR,A
DEC A
JNZ LOOP_TRIANGLE_DEC
JB P3.3,EXIT ;若P3.3所接的开关被置为高,则退出中断
JNB P3.2,INT1_ISR ;若P3.2所接的开关被置为低,则进入中断服务程序1
LJMP LOOP_TRIANGLE_INC

END

实验五 计数器实验

test 5_1

采用定时器与计数器相结合的方法使P1.7所接的发光二极管亮1秒、灭1秒,周而复始。
用三种组合实现:①查询方式+中断方式;②查询方式+查询方式;③中断方式+中断方式。

接线方法:P1.7接一LED,P3.5(T1输入)接P1.0(周期为100ms的方波输出)

①查询方式+中断方式
T1计数10,T0计时50ms
T1采用查询,T0采用中断

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
ORG 0000H
SJMP MAIN

ORG 000BH ;T0中断服务程序入口
SJMP T0_ISR

ORG 0030H
MAIN:
CLR P1.0 ;设P1.0初始为低电平(为输出周期为100ms的方波做准备)
CLR P1.7 ;设P1.7初始为低电平(LED点亮)
MOV TMOD,#61H ;0110 0001:设置T1为计数器,方式2;设置T0为定时器,方式1
MOV TH0,#4CH
MOV TL0,#01H
MOV TH1,#0F6H
MOV TL1,#0F6H
SETB ET0 ;允许T0中断
;SETB ET1 ;允许T1中断
SETB TR0 ;启动T0
SETB TR1 ;启动T1
SETB EA ;开中断总开关

CHECK: ;查询T1是否有中断溢出请求
JBC TF1,HANDLE ;若中断请求标志位TF1为1,则将其清零并跳转到处理程序
SJMP CHECK

HANDLE: ;若T1有中断溢出请求,则取反P1.7
CPL P1.7
SJMP CHECK

;T0中断服务程序
T0_ISR:
CPL P1.0
MOV TH0,#4CH ;重装载
MOV TL0,#01H
RETI

END

test 5_2

②查询方式+查询方式
T1、T0皆采用查询

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
ORG 0000H
SJMP MAIN

ORG 0030H
MAIN:
CLR P1.7 ;设P1.7初始为低电平(LED点亮)
SETB P1.0 ;设P1.0初始为高电平(为输出周期为100ms的方波做准备)
MOV TMOD,#61H ;0110 0001:设置T1为计数器,方式2;设置T0为定时器,方式1
MOV TH1,#0F6H
MOV TL1,#0F6H
SETB TR1 ;启动T1(定时)

LABEL1:
CPL P1.7

LABEL2:
MOV TH0,#4CH
MOV TL0,#01H
SETB TR0 ;启动T0(计数)

LABEL3:
JBC TF0,LABEL4 ;若50ms到了,则将中断请求标志位TF0清零并跳转LABEL4(翻转P1.0)
SJMP LABEL3 ;50ms未到,继续查询中断请求标志位TF0状态

LABEL4:
CPL P1.0
JBC TF1,LABEL1 ;若1s到了,则将中断请求标志位TF1清零并跳转LABEL1(翻转P1.7)
AJMP LABEL2 ;某一个50ms到了,但1s没到,回到LABEL2对T0进行重装载

END

test 5_3

③中断方式+中断方式
T1、T0皆采用中断

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
ORG 0000H
SJMP MAIN

ORG 000BH ;T0中断服务程序入口
SJMP T0_ISR

ORG 001BH ;T1中断服务程序入口
SJMP T1_ISR

ORG 0030H
MAIN:
CLR P1.0 ;设P1.0初始为低电平(为输出周期为100ms的方波做准备)
CLR P1.7 ;设P1.7初始为低电平(LED点亮)
MOV TMOD,#61H ;0110 0001:设置T1为计数器,方式2;设置T0为定时器,方式1
MOV TH0,#4CH
MOV TL0,#01H
MOV TH1,#0F6H
MOV TL1,#0F6H
SETB ET0 ;允许T0中断
SETB ET1 ;允许T1中断
SETB TR0 ;启动T0
SETB TR1 ;启动T1
SETB EA ;开中断总开关
SJMP $

;T0中断服务程序
T0_ISR:
CPL P1.0
MOV TH0,#4CH ;重装载
MOV TL0,#01H
RETI

;T1中断服务程序
; T1采用方式2,无需重装载
T1_ISR:
CPL P1.7
RETI

END

test 5_4

输入计数脉冲,将计数脉冲的个数显示出来(小于15次),循环往复
接线方法:P1口接八个LED,P3.5(T1输入)接按钮(按下一次,产生一个脉冲)

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
;采用T1进行计数

ORG 0000H
SJMP MAIN

ORG 001BH ;T1中断服务程序入口
SJMP T1_ISR

ORG 0030H
MAIN:
CLR A
CPL A
MOV P1,A
CPL A
MOV TMOD,#60H ;0110 0000:设置T1为计数器,方式2
MOV TH1,#0FFH ;按下一次按钮,进入一次中断
MOV TL1,#0FFH
SETB ET1 ;允许T1中断
SETB TR1 ;启动T1
SETB EA ;开中断总开关
SJMP $

;T1中断服务程序
; T1采用方式2,无需重装载
T1_ISR:
CJNE A,#0FH,INCA ;若脉冲个数未到15个,则A直接加1
MOV A,#0 ;若脉冲个数已到15个,则从零开始计数
INCA:INC A
CPL A
MOV P1,A
CPL A
RETI

END

实验四 定时器实验

注:本实验所用单片机外接晶振频率为11.059MHz

test 4_1

采用定时器控制从P1.0口输出1000Hz方波信号,占空比为1/4。

接线方法:P1.0接示波器红表笔,任找一低电平接黑表笔。

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
ORG 0000H
SJMP MAIN

ORG 000BH ;T0中断服务程序入口
SJMP T0_ISR

ORG 0030H
MAIN:
CLR P1.0 ;设P1.0、P1.1初始为低电平
MOV TMOD,11H ;0000 0001:设置T0为定时器,工作在方式1
MOV TH0,#0FFH ;开启后立即进入中断
MOV TL0,#0FEH
SETB ET0 ;允许T0中断
SETB TR0 ;启动T0
SETB EA ;开中断总开关
SJMP $

;T0中断服务程序
T0_ISR:
CLR TR0 ;停止T0
CPL P1.0 ;反转P1.0
JNB P1.0, T0_CHANGE_TIME ;如果P1.0为低电平,设置T0为低电平持续时间
MOV TH0, #0FFH ;重装载(250μs,高电平持续时间)
MOV TL0, #01AH
SETB TR0;重新启动T0
RETI

T0_CHANGE_TIME:
MOV TH0, #0FDH ;重装载(750μs,低电平持续时间)
MOV TL0, #4DH
SETB TR0 ;重新启动T0
RETI

END

test 4_2

采用定时器控制从P1.0和P1.1分别输出周期为3ms占空比为1/3的方波和周期为为500μs占空比为1/5的方波。

接线方法:P1.0接示波器红表笔(CH1),任找一低电平接黑表笔
P1.1接示波器红表笔(CH2),任找一低电平接黑表笔

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
ORG 0000H
SJMP MAIN

ORG 000BH ;T0中断服务程序入口
SJMP T0_ISR

ORG 001BH ;T1中断服务程序入口
SJMP T1_ISR

ORG 0050H
MAIN:
CLR P1.0 ;设P1.0、P1.1初始为低电平
CLR P1.1
MOV TMOD,#11H ;0001 0001:设置T1、T0都为定时器,都工作在方式1
MOV TH0,#0FFH ;开启后立即进入中断
MOV TL0,#0FEH
MOV TH1,#0FFH
MOV TL1,#0FEH
SETB ET0 ;允许T0中断
SETB ET1 ;允许T1中断
SETB TR0 ;启动T0
SETB TR1 ;启动T1
SETB EA ;开中断总开关
SJMP $

;T0中断服务程序
T0_ISR:
CLR TR0 ;停止T0
CPL P1.0 ;反转P1.0
JNB P1.0, T0_CHANGE_TIME ;如果P1.0为低电平,设置T0为低电平持续时间
MOV TH0, #0FCH ;重装载(1ms,高电平持续时间)
MOV TL0, #066H
SETB TR0;重新启动T0
RETI

T0_CHANGE_TIME:
MOV TH0, #0F8H ;重装载(2ms,低电平持续时间)
MOV TL0, #0CDH
SETB TR0 ;重新启动T0
RETI

;T1中断服务程序
T1_ISR:
CLR TR1 ;停止T1
CPL P1.1 ;反转P1.1
JNB P1.1, T1_CHANGE_TIME ;如果P1.1为低电平,设置T1为低电平持续时间
MOV TH1, #0FFH ;重装载(100μs,高电平持续时间)
MOV TL1, #0A4H
SETB TR1;重新启动T1
RETI

T1_CHANGE_TIME:
MOV TH1, #0FEH ;重装载(400μs,低电平持续时间)
MOV TL1, #8FH
SETB TR1 ;重新启动T1
RETI

END

来自其他人的一种更好的写法:

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
;采用定时器控制从P1.0和P1.1分别输出周期为3ms占空比为1/3的方波和周期为500微秒占空比为1/5的方波。
;11.0592MHz,1.085069微秒
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIMER0_ISR
ORG 001BH
AJMP TIMER1_ISR
ORG 0100H
MAIN:MOV TMOD, #00010010H ; 设置定时器0为模式1、定时器1为模式2 (16位定时器、8位定时器)
MOV TH0, #0FCH ; 设置定时器0初始值 (1ms)
MOV TL0, #03FH
MOV TH1, #0A4H ; 设置定时器1初始值 (100微秒)
MOV TL1, #0A4H
MOV R0, #2 ; 计数2(低电平2ms)
MOV R1, #4 ; 计数4(低电平400微秒)
CLR P1.0 ; 低电平
CLR P1.1 ; 低电平
SETB ET0 ; 使能定时器0中断
SETB ET1 ; 使能定时器1中断
SETB EA ; 使能全局中断
SETB TR0 ; 启动定时器0
SETB TR1 ; 启动定时器1
LOOP: SJMP LOOP ; 无限循环

TIMER0_ISR: MOV TH0, #0FCH ; 重装载定时器0初始值
MOV TL0, #03FH
DJNZ R0, EXIT ; R0=0 P1.0=1
CPL P1.0
JB P1.0, CYCLE1 ; P1.0=1->CYCLE1&P1.0=0->R0=2
MOV R0, #2
SJMP EXIT
CYCLE1: MOV R0, #1
SJMP EXIT

TIMER1_ISR: MOV TH1, #0A4H ; 重装载定时器1初始值
MOV TL1, #0A4H
DJNZ R1, EXIT ; R1=0 P1.0=1
CPL P1.1
JB P1.1, CYCLE2 ; P1.1=1->CYCLE2&P1.1=0->R1=4
MOV R1, #4
SJMP EXIT
CYCLE2: MOV R1, #1
SJMP EXIT

EXIT:RETI
END

实验三 外部中断实验

test 3_1

通过外部中断使P1口的开关控制8个发光二极管,开始是P1.0所接的灯亮,以后每中断一次,下一个灯亮,顺序左移,周而复始。

接线方法:P0口接8个LED,P3.2接信号发生器(输出方波)红表笔,任找一低电平接黑表笔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ORG 0000H
AJMP MAIN
ORG 0003H ;INT0入口
AJMP INTERRUPT1
MAIN:
MOV A,#0FEH
MOV P1,A ;P1.0所接的灯亮
SETB IT0 ;边沿触发中断
SETB EX0 ;允许INT0中断
SETB EA ;开中断总开关
SJMP $
INTERRUPT1:
RL A
MOV P1,A
RETI
END

test 3_2

外部中断控制P1口连接的8个发光二极管,同时亮,或同时灭,每中断一次,变反一次

接线方法:P1口接8个LED,P3.2接信号发生器(输出方波)红表笔,任找一低电平接黑表笔

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ORG 0000H
AJMP MAIN
ORG 0003H ;INT0入口
AJMP INTERRUPT1
MAIN:
MOV A,#0FFH
MOV P1,A ;开始灯全灭
SETB IT0 ;边沿触发中断
SETB EX0 ;允许INT0中断
SETB EA ;开中断总开关
SJMP $
INTERRUPT1:
CPL A
MOV P1,A
RETI
END

test 3_3

外部中断控制P1口连接的8个发光二极管。
中断第一次,8个发光二极管循环点亮;
中断第二次,8个发光二极管逐个点亮;
中断第三次,8个发光二极管高四位和低四位交替亮灭。
如此循环往复。

接线方法:P1口接8个LED,P3.2接按键

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
ORG 0000H
AJMP MAIN

ORG 0003H ;INT0入口
AJMP INTERRUPT1

ORG 0030H
MAIN:
MOV A,#0FFH
MOV P1,A ;开始灯全灭
SETB IT0 ;边沿触发中断
SETB EX0 ;允许INT0中断
SETB EA ;开中断总开关
RELOAD:MOV R3,#03H ;计数变量
MOV A,#0FEH
MOV P1,A ;点亮P1.0所接的灯

LOOP0:
RL A
MOV P1,A
ACALL DELAY
CJNE R3,#03,LOOP1
SJMP LOOP0

LOOP1:
MOV A,#0FEH
MOV P1,A
MOV R4,#00H
ACALL DELAY
LOOP11:
ADD A,ACC
MOV P1,A
INC R4 ;计算是否满8次
ACALL DELAY
CJNE R3,#02,LOOP2
CJNE R4,#08H,LOOP11 ;不满8次,继续逐个点亮
SJMP LOOP1 ;满8次,重新从全灭开始逐个点亮

LOOP2:
MOV A,#0FH
MOV P1,A
ACALL DELAY
CPL A
MOV P1,A
ACALL DELAY
CJNE R3,#01,RELOAD
SJMP LOOP2

INTERRUPT1:
DEC R3 ;R3减一
RETI

DELAY: MOV R0,#0AH
DELAY1: MOV R1,#00H
DELAY2: MOV R2,#0C3H
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET

END

实验二 并行接口输入输出实验

test 2_1

选用输出口接八只发光二极管,编写程序,使发光二极管循环点亮(采用软件延时)
接线方法:使用P1口连接LED

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ORG 0000H
MOV A,#0FEH
LOOP:
MOV P1,A ;点亮P1.0连接的LED
LCALL DELAY
RL A
MOV P1,A
SJMP LOOP

DELAY: MOV R0,#0AH ;延时子程序(延时时间约1秒)
DELAY1: MOV R1,#00H
DELAY2: MOV R2,#0C3H
DJNZ R2,$
DJNZ R1,DELAY2
DJNZ R0,DELAY1
RET
END

test 2_2

采用一个输入口和一个输出口,将开关的状态反映在发光二极管上
接线方法:P1口接开关,P0口接LED

1
2
3
4
5
6
7
ORG 0000H
LOOP:
ORL P1,#0FFH ;读P1口之前先对其写1
MOV A,P1 ;将P1口状态(按键状态)读入A
MOV P0,A ;将按键状态送至P0,使其在LED上反映出来
SJMP LOOP
END

写在最前面

本分类内使用的单片机皆为AT89S52,外接晶振频率为11.059MHz。

实验一 验证实验

test 1_1

将外部数据存储器0000H-0010H中的内容传送到片内数据存储器60H-70H单元。

1
2
3
4
5
6
7
8
9
10
11
ORG 0000H
MOV DPTR,#0000H
MOV R0,#60H
LOOP:
MOVX A,@DPTR
MOVX @R0,A
INC DPTR
INC R0
CJNE R0 ,#71H,LOOP
SJMP $
END

test 1_2

程序跳转表

(1)运行程序,打开数据窗口,观察地址 30H、31H、32H、33H的数据变化。用键盘输入改变地址 30H、31H、32H、33H 的值,观察其实验效果。修改源程序中给30H~33H的赋值,观察实验效果。

(2)打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化。

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
ORG 0
LJMP START // 改动此处,改变的是赋值
FUNC0:MOV 30H,#0
RET
FUNC1:MOV 31H,#1
RET
FUNC2:MOV 32H,#2
RET
FUNC3:MOV 33H,#3
RET

FUNCENTER:
ADD A,ACC // AJMP是一个2字节指令,故A需要乘以2,使得程序在JMP指令中跳转到正确的位置
MOV DPTR,#FUNCTAB
JMP @A+DPTR

FUNCTAB:
AJMP FUNC0
AJMP FUNC1
AJMP FUNC2
AJMP FUNC3

START:
MOV A,#0
CALL FUNCENTER
MOV A,#1
CALL FUNCENTER
MOV A,#2
CALL FUNCENTER
MOV A,#3
CALL FUNCENTER
LJMP $
END

test 1_3

test1_3_1

教材第55页5题。

1
2
3
4
5
6
ORG 0000H
MOV A,#56H
ADD A,#74H ; CAH+CAH = 194H,高位舍弃
ADD A,ACC
SJMP $
END

test1_3_2

教材第55页7题。

1
2
3
4
5
6
7
8
9
10
11
ORG 0000H
MOV 59H,#50H
MOV A,59H
MOV R0,A
MOV A,#0
MOV @R0,A
MOV A,#25H
MOV 51H,A
MOV 52H,#70H
SJMP $
END

test1_3_3

教材第55页8题。

1
2
3
4
5
6
7
8
9
10
11
ORG 0000H
MOV SP,#60H
MOV 30H,#24H
MOV 31H,#10H
PUSH 30H
PUSH 31H
POP DPL
POP DPH
MOV A,#00H
MOVX @DPTR,A
SJMP $