1 清零实验
1:将30H 40H 单元清零
ORG 0000
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV R0,#0
MOV DPTR,#8000H
MOV A,#0ABH
LOOP: MOVX @DPTR,A
INC DPTR
DJNZ R0,LOOP
AJMP $
END
2 拆字实验
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV DPTR,#0E100H //8155命令口(8155初始化开始)
MOV A,#3 //PA PB 口输出,PC 口输出
MOVX @DPTR,A //(8155初始化完)
MOV 20H,#34H //将34H送20H
MOV A,20H //读出20H单元的数
ACALL CHAI //调用拆字子程序
//**显示子程序送三个入口参数
LOOP: MOV R0,#10H //显示缓冲区首地址
MOV R1,#2 //数码管显示位数(2位)
MOV R2,#1 //显示数码管的低位地址;
ACALL DISPLAY //调用显示子程序
AJMP LOOP
DISPLAY: MOV A,@R0 ;读显示数
MOV 0FH,#8 ;164移位次数
ACALL P164 ;字形码输出子程序
ACALL PBIT ;字位码输出子程序
ACALL DELAY ;延时2ms
MOV A,#0 ;熄灭显示
MOVX @DPTR,A
INC R0 ;指向下一位显示数
DJNZ R1,DISPLAY ;没有显示完继续
RET
P164: MOV DPTR,#TAB
MOVC A,@A+DPTR
P164_1: RRC A
MOV R3,A
MOV ACC.0,C
ANL A,#0FDH
MOV DPTR,#0E102H
MOVX @DPTR,A
ORL A,#0FEH
MOVX @DPTR,A
MOV A,R3
DJNZ 0FH,P164_1
MOV 0FH,#8
RET
PBIT: MOV DPTR,#0E101H
MOV A,R2
MOVX @DPTR,A
RL A
MOV R2,A
RET
DELAY: MOV R6,#4
DEL: MOV R7,#250
DJNZ R7,$
DJNZ R6,DEL
RET
TAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH, 8EH
//拆字子程序
CHAI: MOV B,#10H //立即数10H送B
DIV AB //A/B
MOV 10H,B //B送10H单元(低4位)
MOV 11H,A //A送11H单元(高4位)
RET //子程序返回
END
3 闪烁灯实验
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV R4,#10
LOOP1: CLR P3.3
LOOP3: JB P3.5,LOOP1
JB P3.4,LOOP2
JNB P3.4,$
DJNZ R4,LOOP2
MOV R4,#10 LOOP2: CPL P3.3
MOV 5,4
ACALL DELAY
AJMP LOOP3
MOV R5,#10 DELAY: MOV R6,#200 DEL: MOV R7,#229
DJNZ R7,$
DJNZ R6,DEL
DJNZ R5,DELAY
RET
END
4交通灯实验
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV DPTR,#0AC03H
MOV A,#80H
MOVX @DPTR,A
MOV DPTR,#0AC00H
MOV A,#0F0H
MOVX @DPTR,A
MOV R5,#20
ACALL DELAY LOOP1: MOV A,#5AH
MOVX @DPTR,A
MOV R5,#100
ACALL DELAY
MOV R4,#3
LOOP2: MOV A,#50H
MOVX @DPTR,A
MOV R5,#5
ACALL DELAY
MOV A,#0FAH
MOVX @DPTR,A
MOV R5,#5
ACALL DELAY
DJNZ R4,LOOP2
MOV A,#0A5H
MOVX @DPTR,A
MOV R5,#100
ACALL DELAY
MOV R4,#3
LOOP3: MOV A,#0A0H
MOVX @DPTR,A
MOV R5,#5
ACALL DELAY
MOV A,#0F5H
MOVX @DPTR,A
MOV R5,#5
ACALL DELAY
AJMP LOOP1
DELAY: MOV R6,#200
DEL: MOV R7,#229
DJNZ R7,$
DJNZ R6,DEL
DJNZ R5,DELAY
RET
END
5 定时器实验
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP INT_1
ORG 0030H
MAIN: MOV SP,#60H
MOV TMOD,#10H
MOV TH1, #4BH //定时器初始化
MOV TL1,#0FDH
MOV R1,#20
SETB EA
SETB ET1
SETB TR1
MOV DPTR,#TAB
MOV R2,#0
AJMP $
INT_1: MOV TH1, #4BH
MOV TL1,#0FDH
DJNZ R1,LP1
MOV R1,#20
MOV A,R2
MOVC A,@A+DPTR
MOV P1,A
INC R2
CJNE R2,#8,LP1
MOV R2,#0
LP1: RETI
TAB: DB 0FAH,0F5H,0AFH,5FH
DB 0AAH,55H,00H,0FFH
END
6 计数器
ORG 0000H
AJMP MAIN
ORG 001BH
AJMP INT_1
ORG 0030H
MAIN: MOV SP,#60H
MOV DPTR,#0E100H
MOV A,#3
MOVX @DPTR,A
MOV TMOD, #15H
MOV TH1,#4BH
MOV TL1,#0FDH
MOV R4,#20
MOV TH0,#0
MOV TL0,#0
SETB ET0
SETB ET1
SETB EA
SETB TR1
SETB TR0
LOOP: MOV R0,#10H
MOV R1,#4
MOV R2,#1
ACALL DISPLAY
AJMP LOOP
DISPLAY: MOV A,@R0
MOV 0FH,#8
ACALL P164
ACALL PBIT
ACALL DELAY
MOV A,#0
MOVX @DPTR,A
INC R0
DJNZ R1,DISPLAY
RET
P164: MOV DPTR,#TAB
MOVC A,@A+DPTR
P164_1: RRC A
MOV R3,A
MOV ACC.0,C
ANL A,#0FDH
MOV DPTR,#0E102H
MOVX @DPTR,A
ORL A,#0FEH
MOVX @DPTR,A
MOV A,R3
DJNZ 0FH,P164_1
MOV 0FH,#8
RET
PBIT: MOV DPTR,#0E101H
MOV A,R2
MOVX @DPTR,A
RL A
MOV R2,A
RET
DELAY: MOV R6,#4
DEL: MOV R7,#250
DJNZ R7,$
DJNZ R6,DEL
RET
TAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH, 8EH
INT_1 : MOV TH1,#4BH
MOV TL1,#0FDH
DJNZ R4,EXIT
MOV R4,#20
PUSH ACC //保护现场
MOV A,TL0
MOV B,#10H
DIV AB
MOV 10H,B
MOV 11H,A
MOV A, TH0
MOV B, #10H
DIV AB
MOV 12H, B
MOV 13H, A
MOV TL0, #0
MOV TH0, #0
POP ACC //恢复现场
EXIT: RETI
END
7 串并转换实验
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV R1, #0
MOV DPTR,#TAB
LOOP: CLR C
MOV A,#0
MOV R4,#24
ACALL DISP
MOV A,R1
MOVC A,@A+DPTR
MOV R4,#8
ACALL DISP
MOV R5,#10
ACALL DELAY
INC R1
CJNE R1,#16,LOOP
MOV R1,#0
AJMP LOOP
DISP: RRC A
MOV P1.0,C
CLR P1.1
SETB P1.1
DJNZ R4,DISP
RET
DELAY: MOV R6,#200
DEL: MOV R7,#229
DJNZ R7,$
DJNZ R6,DEL
DJNZ R5,DELAY
RET
TAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H
DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH, 8EH END
8 A D 转换实验
ORG 0000H
AJMP MAIN
ORG 001BH //中断开始地址
AJMP T1_INT //中断入口
ORG 0030H
MAIN: MOV SP,#60H
MOV TMOD,#10H //定时器初始化
MOV TH1, #4BH
MOV TL1,#0FDH
MOV DPTR,#0E100H //8155初始化
MOV A,#3
MOVX @DPTR,A //DPTR需要保护
MOV R4,#2
MOV 15H,#0 //显示区送初值
MOV 14H,#8
MOV 13H,#0
MOV 12H,#9
SETB EA //开启所有中断
SETB ET1
SETB TR1
LOOP: MOV R0,#10H //显示缓存区首地址
MOV R1,#6 //数码管显示位数(6)
MOV R2,#1 //显示数码管的低位地址
ACALL DISPLAY //调用显示子程序
AJMP LOOP
T1_INT: MOV TH1,#4BH //重送初值
MOV TL1 ,#0FDH
DJNZ R4,EXIT //到100ms
MOV R4,#2
PUSH DPH //保护现场
PUSH DPL
PUSH ACC
MOV DPTR,#0AC00H //0809地址送dptr
MOVX A,@DPTR //读转换结果
MOV B,#51 //拆字并保存
DIV AB
MOV 11H,A
MOV A,B
MOV B,#5
DIV AB
MOV 10H,A //启动AD转换
MOVX @DPTR,A
POP ACC //恢复现场
POP DPL
POP DPH
EXIT: RETI //返回
DISPLAY: MOV A,@R0 ;读显示数
MOV 0FH,#8 ;164移位次数
ACALL P164 ;字形码输出子程序
ACALL PBIT ;字位码输出子程序
ACALL DELAY ;延时2ms
MOV A,#0 ;熄灭显示
MOVX @DPTR,A
INC R0 ;指向下一位显示数
DJNZ R1,DISPLAY ;没有显示完继续
RET
P164: MOV DPTR,#TAB
MOVC A,@A+DPTR
CJNE R0,#11H,P164_1
INC A
P164_1: RRC A
MOV R3,A
MOV ACC.0,C
ANL A,#0FDH
MOV DPTR,#0E102H
MOVX @DPTR,A
ORL A,#0FEH
MOVX @DPTR,A
MOV A,R3
DJNZ 0FH,P164_1
MOV 0FH,#8
RET
PBIT: MOV DPTR,#0E101H
MOV A,R2
MOVX @DPTR,A
RL A
MOV R2,A
RET
DELAY: MOV R6,#4
DEL: MOV R7,#250
DJNZ R7,$
DJNZ R6,DEL
RET
TAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH, 8EH END
9 DA 转换实验
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN: MOV SP,#60H
MOV R0,#0
UP: MOV DPTR,#0B000H //初始化
MOV A,R0
MOVX @DPTR ,A
MOV A,#0
MOV R4,#16
CLR C
ACALL S164
MOV A,R0 //拆字显示D/A转换值
MOV B,#51
DIV AB
MOV 11H,A
MOV A,B
MOV B,#5
DIV AB
MOV 10H,A
MOV A,10H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV R4,#8
ACALL S164
MOV A,11H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV R4,#8
ACALL S164
ACALL DELAY
INC R0
CJNE R0,#0FFH,UP
DOWN: MOV DPTR,#0B000H
MOV A,R0
MOVX @DPTR ,A
MOV A,#0
MOV R4,#16
CLR C
ACALL S164
MOV A,R0
MOV B,#51
DIV AB
MOV 11H,A
MOV A,B
MOV B,#5
DIV AB
MOV 10H,A
MOV A,10H
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV R4,#8
ACALL S164
MOV A,11H
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV R4,#8
ACALL S164
ACALL DELAY
DEC R0
CJNE R0,#00H,DOWN
AJMP UP
DELAY: MOV R6,#200
DEL: MOV R7,#229
DJNZ R7,$
DJNZ R6,DEL
RET
S164: RRC A
MOV P1.0,C
CLR P1.1
SETB P1.1
DJNZ R4,S164
RET
TAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH, 8EH TAB1: DB 0FDH,61H,0DBH,0F3H,67H,0B7H,0BFH,0E1H DB 0FFH,0F7H,0EFH,3FH,9DH,7BH,9FH, 8FH END
10 直流电机速度的检测
ORG 0000H
AJMP MAIN
ORG 001BH //中断开始地址
AJMP T1_INT //中断入
ORG 0030H
MAIN: MOV SP,#60H
MOV TMOD,#15H
MOV TH1,#4BH
MOV TL1,#0FDH
MOV TL0,#0
SETB ET1
SETB EA
SETB TR1
SETB TR0
MOV R3,#20
MOV R1,#0
UP: MOV DPTR,#0B000H
MOV A,R1
MOVX @DPTR ,A
ACALL DELAY
INC R1
CJNE R1,#0FFH,UP
DOWN: MOV DPTR,#0B000H
MOV A,R1
MOVX @DPTR ,A
ACALL DELAY
DEC R1
CJNE R1,#0,DOWN
AJMP UP
T1_INT: MOV TH1,#4BH
MOV TL1,#0FDH
DJNZ R3,EXIT
MOV R3,#20
PUSH ACC
PUSH DPH
PUSH DPL
MOV A,TL0
MOV TL0,#0
MOV B,#10H
DIV AB
XCH A,B
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV R4,#8
ACALL S164
XCH A,B
MOVC A,@A+DPTR
MOV R4,#8
ACALL S164
MOV A,#0
CLR C
MOV R4,#16
ACALL S164
POP DPL
POP DPH
POP ACC
EXIT: RETI
DELAY: MOV R6,#200
DEL: MOV R7,#229
DJNZ R7,$
DJNZ R6,DEL
RET
S164: RRC A
MOV P1.0,C
CLR P1.1
SETB P1.1
DJNZ R4,S164
RET
TAB: DB 0FCH,60H,0DAH,0F2H,66H,0B6H,0BEH,0E0H
DB 0FEH,0F6H,0EEH,3EH,9CH,7AH,9EH, 8EH
END
单片机综合实验总复习题
考试内容:
●掌握编程软件的使用(操作类)
项目、文件的建立、相关参数的设置,程序的编写、编译、改错、调试以及各种数据结果的读取等。
●能够根据题目的要求正确接线(接线类)
若要输出125K的脉冲,应如何接线,从哪个端口输出?
●考试内容
历次实验内容、作业及本复习题。
10分题(2题)
1、修改下列有错误的指令,实现指定要求
●将R1中的数据传送到R2中去
MOV R2,R1
●将9000H单元中的数传送到8000H单元中
MOVX 8000H,9000H
●如片内20H单元的数不为零,则转移到标号LOOP处
CJNE 20H,#0,LOOP
●比较20H与21H单元的数,将较大的数显示到数码管上
2、将片内20H单元的数与片外20H单元的数交换。
3、已知0809参考电压为5V,输入的模拟电压为3.5V,经A/D转换后,对应的数字量是多少?
4、已知00H~FFH对应的0832输出模拟量是0V~+5V,若要输出2.5V,写出相应指令。(0832
片选端接YC2)。
5、用定时/计数器1延时277ms,写出其初始化程序。
6、a、计算下列延时子程序的延时时间。b、试编写79ms的延时子程序。
DELAY: MOV R0, #0 (11.0592mhz晶振)
DEL: NOP
NOP
DJNZ R0, DEL
RET
7、欲在串口数码管上显示“-5”,分别写出相应程序指令。
40分题(1题)
8、测量125K脉冲源20ms的脉冲数,确定接线,并分别将其显示在串、并口数码管上。
9、将8个开关量通过P1口或8255的PA口输入单片机,每50ms秒读一次开关(定时器定
时),并将开关值显示在串、并口数码管上。
10、根据开关状态,仅在一位数码管上循环显示下列字符:
K=0,循环显示:H,A,2,B,3,C,L; K=1,循环显示:U,1,P,2,E (每个字符显示1秒,用定时器定时)。
11、试编程使开关K为0时使8个发光二极管按规律1循环发光;开关为1时按规律2循
环发光,每个状态显示1.2s(定时器定时)。
1、L0L1L2--L3L4--L5L6L7
2、L0L7—L1L6—L2L5—L3L5
12、将A/D转换值通过串行方式用数码管显示出来,要求每0.1秒进行一次A/D转换,用
定时器定时。
13、每0.6s读一次开关,当开关K=0时在数码管上显示片内31H、32H单元中较大的数据,
K=1时显示这两个单元中较小的数据。用定时器定时。
14、通过D/A转换输出一个1~3V的三角波,要求每0.1秒输出一个数据,并将输出数据在
串口数码管上显示出来(用定时器定时)。
*15、设计一个100以内的十进制加减计数器,用数码管显示显示计数器的计数值。每0.1秒读一次开关K,当K=0时,按一次按钮计数值加1,当K=1时,按一次按钮计数值减1(不做)。