搜索
您的当前位置:首页单片机实验

单片机实验

来源:智榕旅游
《单片机原理及应用》实验报告

实验一 数据排序实验

一、实验目的 熟悉MCS-51指令系统,掌握程序设计方法。 二、实验内容

编写并调试一个排序子程序,其功能为用起泡法将内容RAM中几个单字

节无符号的正整数,按从小到大的次序重新排列。 三、实验电路(或程序流程)

四、实验步骤

编译、装载程序,在MCS-51的RAM 50~5AH中放入不等的数据,运行

本实验程序后检查50~5AH中内容是否按从小到大排列。 五、实验结论

;数据排序实验

ORG 09B0H QUE: MOV R3,#50H

QUE1: MOV A,R3 ;指针送R0

MOV R0,A

MOV R7,#0AH ;长度送R7 CLR 00H ;标志位为0 MOV A,@R0 QL2: INC R0 MOV R2,A CLR C MOV 22H,@R0

CJNE A,22H,QL3 SETB C QL3: MOV A,R2

JC QL1 SETB 00H XCH A,@R0 DEC R0 XCH A,@R0

INC R0 QL1: MOV A,@R0 DJNZ R7,QL2

JB 00H,QUE1 SJMP $ END

;相等吗? ;大于交换位置 大于交换位置 ;一次循环中有交换继续;无交换退出 ;

实验二 工业顺序控制(中断控制) 一、实验目的

掌握工业顺序控制程序的简单编程:中断的使用。 二、实验内容

MCS-51的P1.0~P1.6控制注塑机的七道工序,现模拟控制七只发光二

极管的点亮,低电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,高电平启动。P3.3为外部故 障输入模拟开关,低电平报警,P1.7为报警声音输出,设定6道工序只有一位输出,第七道工序三位有输出。 三、实验电路(或程序流程)

四、实验步骤

⑴P3.4连K1,P3.3连K2,P1.0~P1.6分别连到L1~L7,P1.7连SIN(电

子音响输入端)。

⑵K1、K2开关拨在高电平“H”位置。

⑶编译、装载,以连续方式运行程序,此时应在等待开工状态。 ⑷K1拨至低电平“L”位置,各道工序应正常运行。

⑸K2拨至低电平“L”位置,模拟故障发生,此时应有报警声。

⑹K2拨至高电平“H”位置,即排除故障,程序应从报警的那道工序继续执行。 五、实验结论

;===================== 工业顺序控制 ======================== ORG 0000H LJMP PO10 ORG 0013H LJMP PO16

;---------------------------- ORG 0190H PO10: MOV P1,#7FH ORL P3,#00H

PO11: JNB P3.4,PO11 ;开工吗? ORL IE,#84H ORL IP,#01H

MOV PSW,#00H MOV SP,#53H

PO12: MOV P1,#7EH ACALL PO1B

MOV P1,#7DH ACALL PO1B

MOV P1,#7BH ACALL PO1B

MOV P1,#77H ACALL PO1B

MOV P1,#6FH ACALL PO1B

MOV P1,#5FH ACALL PO1B

MOV P1,#0FH ;初始化 ;第一道工序;第二道工序 ;第三道工序 ;第四道工序 ;第五道工序 ;第六道工序 ;第七道工序

ACALL PO1B SJMP PO12 ;----------------------------

PO16: MOV B,R2 ;保护现场 PO17: MOV P1,#7FH ;关输出 MOV 20H,#0A0H PO18: SETB P1.7 ACALL PO1A CLR P1.7 ACALL PO1A DJNZ 20H,PO18 CLR P1.7

ACALL PO1A JNB P3.3,PO17 MOV R2,B RETI

PO1A: MOV R2,#06H

ACALL DELY RET

PO1B: MOV R2,#30H

ACALL DELY RET

;振荡次数 ;振荡 ;延时 ;停振 ;延时 ;不为0转 ;停振 ;故障消除吗? ;恢复现场 ;延时 ;延时 ;---------------------------- DELY: PUSH 02H DEL2: PUSH 02H

DEL3: PUSH 02H ;延时 DEL4: DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET ;---------------------------- END

实验三 A/D转换实验 一、实验目的

⑴掌握A/D转换与单片机接口的方法; ⑵了解A/D芯片0809转换性能及编程方法; ⑶通过实验了解单片机如何进行数据采集。 二、实验内容

利用实验仪上的0809做A/D转换实验,实验仪上的W1电位器提供模拟量输入。编制程序,将模拟量转换成数字量,通过发光二极管L1~L8显示。

三、实验电路(或程序流程)

四、实验步骤

1. 138译码电路连接:输入端A.B.C,其中A与A2相连,B与A3相连,C与A4相连,138使能控制输入端G与GS相连。

2. 02门电路连接:第1脚与模数转换单元的SC/ALE相连,第2脚与138译码单元的Y0相连,第3脚与控制总线单元的IOW相连,第4脚与模数转换单元的OE相连,第5脚与控制总线单元的IOR相连,第6脚与138译码单元的Y0相连。

3. 将模数转换单元的CLK与控制总线单元的ALE相连、IN0与0~5V模拟电压电位器W1相连。

4. 用8芯扁平电缆将A/D 0809的D0~D7(位于下方的锁存输出单元)与数据总线单元的D0~D7相连。

连续运行程序,LED显示器右边二位显示当前采集的电压值转换后的数字量,调节W1,LED的内容将随着电压变化而相应变化,LED以十六进制方式对应显示数字量。 五、实验结论

;=================== A/D转换实验 ========================

ORG 05A0H SE11: MOV SP,#53H MOV 7EH,#00H MOV 7DH,#08H MOV 7CH,#00H MOV 7BH,#09H MOV 7AH,#10H

MOV 79H,#10H ;显示缓冲区初值 LO18: CALL DIS ;显示 MOV A,#00H MOV DPTR,#0FFE0H

MOVX @DPTR,A ;0809的0通道采样 CALL DIS ;SSEE

MOVX A,@DPTR ;取出采样值 mov dptr,#0ffe4h ;new add --> 138 Y1

cpl a ;new add

movx @dptr,a ;new add --> 驱动发光二极管 cpl a ;new add MOV R0,#79H

CALL PTDS ;采样值送显示缓冲区 SJMP LO18 ;---------------------------

PTDS: MOV R1,A ACALL PTDS1 MOV A,R1 SWAP A PTDS1: ANL A,#0FH MOV @R0,A INC R0 RET ;--------------------------- DIS: PUSH DPH PUSH DPL SETB RS1 MOV R0,#7EH MOV R2,#20H MOV R3,#00H

;循环 ;拆送显示缓冲区 MOV DPTR,#LS0 LS2: MOV A,@R0 MOVC A,@A+DPTR MOV R1,#0DCH MOVX @R1,A MOV A,R2 inc R1 MOVX @R1,A LS1: DJNZ R3,LS1 CLR C RRC A MOV R2,A DEC R0 JNZ LS2 movx @r0,a

dec r0 cpl a movx @r0,a

CLR RS1 POP DPL POP DPH RET

;-------------------------------------

LS0: DB 0C0H,0F9H,0A4H,0B0H,99H,92H DB 82H,0F8H,80H,90H,88H,83H,0C6H DB 0A1H,86H,8EH,0FFH,0CH,89H,7FH,0BFH ;-------------------------------------- END

实验四 16×16 LED点阵显示实验 一、实验目的

⑴利用单片机I/O口或以扩展锁存器的方式控制点阵显示。 ⑵掌握单片机与16×16点阵块之间接口电路设计及编程。 二、实验内容

利用实验系统16×16点阵实验单元,以两种方式控制点阵显示。要求编制程序实现汉字点阵循环显示。 三、实验电路(或程序流程)

四、实验步骤

按实验电路图连接138译码输入端A.B.C,其中A连A2,B连A3,C连A4,138使能控制输入端G与位于地址线A0引出孔所在位置下方的使能控制输出端G作对应连接,该端的寻址范围为FFE0~FFFFH。 ⑴把点阵单元的片选信号CS插孔与译码输出插孔Y0相连;

⑵用一8芯扁平电缆把点阵单元总线接口与数据总线(D0~D7)任一接口相连;

⑶用一根双头实验线把点阵单元的写信号WR插孔与位于六位LED显示左下方的系统控制信号WR/IOWR相连。

⑷编译、装载、连续运行程序,点阵显示模块应循环显示“欢迎选用启东达爱思计算机有限公司Dais系列产品”字样。 五、实验结论

;16×16点阵显示实验

ORG 0000H LJMP XB13

;==========点阵扫描子程序==================== X01A: CLR A ;清列值 MOV 0EH, A ;指向零列 X023: MOV A, 0EH ;取列值 CLR C

SUBB A, #10H ;减16(十进制数)

JC X0D2 ;末满16列继续扫描下一列 RET ;本次扫描完毕返回主程序 X0D2: MOV 0F0H, #02H MOV A, 0EH

MUL AB ;当前列值与“2”进行十进制调正 MOV 82H, A ;调正结果送数据指针DPTR MOV 83H, 0F0H

LCALL XB1F ;取与当前列对应的扫描代码 MOV 20H, A

;=====================

LCALL XB4E ;扫描代码送高八位锁存器 ;===================== MOV A, 0EH ;取列值

MOV 0F0H, #02H ;当前列值与“2”进行十进制调正

MUL AB

ADD A, #01H ;调正结果加1送数据指针DPTR MOV R7, A CLR A ADDC A, 0F0H MOV 82H, R7 MOV 83H, A

LCALL XB1F ;取与当前列对应的扫描代码 ;====================

PUSH DPH ;扫描代码送低八位锁存器 PUSH DPL

MOV DPTR,#0FFE0H MOVX @DPTR,A

;====================

MOV A, #01H ;代码扫描从第一行开始 MOV R6, #00H

MOV R0, 0EH ;取与当前代码扫描对应的列值 INC R0 ;列指针加1 SJMP X083

X07E: CLR C ;当前代码扫描对应行的查找 RLC A ;行高八位左移一位 XCH A, R6

RLC A ;行低八位带进位左移一位 XCH A, R6

X083: DJNZ R0, X07E ;不为当前代码扫描对应行返上继续调正 ;====================

MOV DPTR,#0FFE2H ;当前行码送高八位锁存器 MOVX @DPTR,A

MOV DPTR,#0FFE1H ;当前行码送低八位锁存器 MOV A,R6 MOVX @DPTR,A

MOV R6,#80H ;当前行锁定显示250u秒 DJNZ R6,$

;==================== CLR A ;关闭显示 MOV DPTR,#0FFE1H

MOVX @DPTR,A ;行高八位锁存器清零 INC DPTR

MOVX @DPTR,A ;行低八位锁存器清零 POP DPL POP DPH

;==================== INC 0EH ;列指针加1 AJMP X023 ;继续下1行

;==================== X097: CLR A

MOV DPTR,#0FFE1H MOVX @DPTR,A INC DPTR MOVX @DPTR,A

;====================

X0A0: CLR A ;清扫描个数寄存器 MOV R5, A ;从第一个开始扫描 X0A2: MOV A, R5 ;取当前扫描个数 CLR C

;========= 确定要显示的汉字个数===========; 用户可自定义汉字个数 SUBB A, #19H ;共扫描83个汉字

JNC X0A0 ;扫描个数满83个返回从第一个开始 MOV A, R5

;========= 确定显示为循环方式============;用户可自定义为移位循环方式 MOV DPTR,#STLS ;指向汉字表首址

MOV 0F0H, #20H ; 设定以完整的一个汉字为最小循环单位 MUL AB ADD A, dpl MOV 0ah, A MOV A, dph

ADDC A, 0F0H MOV 09H, A CLR A MOV R4, A X0BD: MOV A, R4 CLR C

SUBB A, #64H ;每个汉字扫描64次

JNC X0CF ;当前汉字扫描次数满64次转 MOV R2,09H MOV R1, 0AH ACALL X01A

INC R4 ;扫描次数加1 SJMP X0BD

X0CF: INC R5 ;扫描个数加1指向下一个汉字 SJMP X0A2

;============ 汉字代码表====================================== STLS: ;欢 DB

00H,80H,00H,80H,0FCH,80H,04H,0FCH,45H,04H,46H,48H,28H,40H,28H,40H,10H,40H,28H,40H,24H,0A0H,44H,0A0H,81H,10H,01H,08H,02H,0EH,0CH,04H ;迎

DB

00H,00H,41H,84H,26H,7EH,14H,44H,04H,44H,04H,44H,0F4H,44H,14H,0C4H,15H,44H,16H,54H,14H,48H,10H,40H,10H,40H,28H,46H,47H,0FCH,00H,00H ;选 DB

00H,40H,42H,40H,32H,48H,13H,0FCH,02H,40H,04H,44H,0F7H,0FEH,10H,0A0H,10H,0A0H,10H,0A0H,11H,22H,11H,22H,12H,1EH,2CH,00H,44H,06H,03H,0FCH ;用 DB

00H,08H,3FH,0FCH,21H,08H,21H,08H,21H,08H,3FH,0F8H,21H,08H,21H,08H,21H,08H,3FH,0F8H,21H,08H,21H,08H,21H,08H,41H,08H,41H,28H,80H,10H ;启 DB

01H,00H,00H,84H,1FH,0FEH,10H,04H,10H,04H,10H,04H,1FH,0FCH,10H,00H,10H,04H,1FH,0FEH,18H,04H,28H,04H,28H,04H,48H,04H,8FH,0FCH,08H,04H ;东 DB

02H,00H,02H,00H,02H,04H,0FFH,0FEH,04H,00H,09H,00H,09H,00H,11H,10H,3FH,0F8H,01H,00H,09H,40H,09H,20H,11H,10H,21H,18H,45H,08H,02H,00H ;达 DB

00H,80H,40H,80H,20H,80H,20H,80H,00H,88H,0FH,0FCH,0E0H,80H,21H,00H,21H,40H,

22H,20H,22H,10H,24H,18H,28H,08H,50H,06H,8FH,0FCH,00H,00H ;爱 DB

00H,78H,3FH,80H,11H,10H,09H,20H,7FH,0FEH,42H,02H,82H,04H,7FH,0F8H,04H,00H,07H,0F0H,0AH,20H,09H,40H,10H,80H,11H,60H,22H,1CH,0CH,08H ;思 DB

00H,08H,3FH,0FCH,21H,08H,21H,08H,21H,08H,3FH,0F8H,21H,08H,21H,08H,21H,08H,3FH,0F8H,20H,08H,02H,00H,51H,88H,50H,96H,90H,12H,0FH,0F0H ;计 DB

00H,40H,20H,40H,10H,40H,10H,40H,00H,40H,00H,44H,0F7H,0FEH,10H,40H,10H,40H,10H,40H,10H,40H,12H,40H,14H,40H,18H,40H,10H,40H,00H,40H ;算 DB

20H,80H,3EH,0FCH,49H,20H,9FH,0F0H,10H,10H,1FH,0F0H,10H,10H,1FH,0F0H,10H,10H,1FH,0F0H,08H,24H,0FFH,0FEH,08H,20H,08H,20H,10H,20H,20H,20H ;机 DB

10H,00H,10H,10H,11H,0F8H,11H,10H,0FDH,10H,11H,10H,31H,10H,39H,10H,55H,10H,51H,10H,91H,10H,11H,10H,11H,12H,12H,12H,14H,0EH,18H,00H ;有

DB

02H,00H,02H,04H,0FFH,0FEH,04H,00H,04H,10H,0FH,0F8H,08H,10H,18H,10H,2FH,0F0H,48H,10H,88H,10H,0FH,0F0H,08H,10H,08H,10H,08H,50H,08H,20H ;限 DB

00H,08H,7DH,0FCH,45H,08H,49H,08H,49H,0F8H,51H,08H,49H,08H,49H,0F8H,45H,04H,45H,88H,45H,50H,69H,20H,51H,10H,41H,4EH,41H,84H,41H,00H ;公 DB

00H,00H,00H,80H,04H,80H,04H,40H,08H,40H,08H,20H,11H,10H,21H,0EH,0C2H,04H,02H,00H,04H,00H,08H,40H,10H,20H,1FH,0F0H,00H,10H,00H,00H ;司 DB

00H,08H,3FH,0FCH,00H,08H,00H,48H,0FFH,0E8H,00H,08H,00H,88H,3FH,0C8H,20H,88H,20H,88H,20H,88H,20H,88H,3FH,88H,20H,88H,00H,28H,00H,10H ;D DB

00H,00H,7FH,0E0H,20H,10H,20H,08H,20H,08H,20H,08H,20H,08H,20H,08H,20H,08H,20H,08H,20H,10H,7FH,0E0H,00H,00H,00H,00H,00H,00H,00H,00H ;a DB

00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,0FH,80H,10H,40H,00H,40H,0FH,0C0H,1

0H,40H,10H,50H,0FH,0A0H,00H,00H,00H,00H,00H,00H,00H,00H ;i DB

00H,00H,01H,00H,01H,00H,00H,00H,01H,00H,01H,00H,01H,00H,01H,00H,01H,00H,01H,00H,01H,00H,01H,00H,00H,00H,00H,00H,00H,00H,00H,00H ;s DB

00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,07H,80H,08H,40H,08H,00H,07H,80H,00H,40H,08H,40H,07H,80H,00H,00H,00H,00H,00H,00H,00H,00H ;系 DB

00H,38H,7FH,0C0H,04H,00H,04H,10H,08H,20H,3FH,0C0H,01H,00H,02H,20H,04H,10H,3FH,0F8H,01H,08H,09H,20H,09H,10H,11H,08H,25H,08H,02H,00H ;列 DB

01H,04H,7FH,84H,10H,24H,10H,24H,1FH,24H,21H,24H,21H,24H,52H,24H,8AH,24H,04H,24H,04H,24H,08H,24H,10H,04H,20H,04H,40H,14H,00H,08H ;产 DB

02H,00H,01H,00H,01H,08H,7FH,0FCH,08H,10H,04H,20H,04H,48H,1FH,0FCH,10H,00H,10H,00H,10H,00H,10H,00H,20H,00H,20H,00H,40H,00H,80H,00H ;品

DB

00H,10H,1FH,0F8H,10H,10H,10H,10H,10H,10H,1FH,0F0H,10H,10H,02H,04H,7FH,0FEH,42H,84H,42H,84H,42H,84H,42H,84H,42H,84H,7EH,0FCH,42H,84H ;。 DB

00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,18H,00H,24H,00H,24H,00H,18H,00H,00H,00H,00H,00H

;======================================================================

XB13: MOV R0, #7FH CLR A XB16: MOV @R0, A DJNZ R0, XB16 MOV 81H, #20H JMP X097

;============查找与当前列对应的汉字代码子程序==================== XB1F: MOV A, 82H ;本次扫描首址与当前列值相加 ADD A, R1 ;低八位相加 MOV 82H, A ;送DPL MOV A, 83H ;高八位相加

ADDC A, R2 ;再加低八位进位位CY MOV 83H, A ;送DPH

CLR A

MOVC A, @A+DPTR ;取汉字代码 RET ; 返回 ;===================== XB4E: PUSH DPH PUSH DPL

MOV DPTR,#0FFE3H MOVX @DPTR,A POP DPL POP DPH RET ;------------------------------- END

因篇幅问题不能全部显示,请点此查看更多更全内容

Top