文档库 最新最全的文档下载
当前位置:文档库 › 2012单片机程序及复习

2012单片机程序及复习

2012单片机程序及复习
2012单片机程序及复习

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(不做)。

相关文档