哈工大单片机实验报告(上传)

更新时间:2024-04-19 02:23:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

Harbin Institute of Technology

单片机原理与应用

实验报告

学生姓名 学班专

号 级 业

: : : : : :

任课教师 所在单位

2013年5月

软件实验

在软件实验部分,通过实验程序的调试,使学生熟悉MCS-51的指令系统,了解程序设计过程,掌握汇编语言设计方法以及如何使用实验系统提供的调试手段来排除程序错误。

实验一 清零程序

一、实验目的

掌握汇编语言设计和调试方法,熟悉键盘操作。

二、实验内容

把2000~20FFh的内容清零。

三、程序框图

四、实验过程

实验中利用MOVX语句,将外部存储器指定内容清零。利用数据指针DPTR完成数据传送工作。程序采用用循环结构完成,R0移动单元的个数,可用CJNE比较语句判断循环是否结束。

五、实验结果及分析

清零前 清零后

-1-

【问题回答】清零前2000H~20FFH中为内存里的随机数,清零后全变为0。

六、实验源程序

AJMP MAIN

ORG 0640H

MAIN: MOV R0, #00H

MOV DPL, #00H MOV DPH, #20H

LOOP: MOV A, #00H

MOVX @DPTR, A INC DPTR INC R0

CJNE R0, #0FFH, LOOP MOVX @DPTR, A END

实验二 拆字程序

一、实验目的

掌握汇编语言设计和调试方法。

二、实验内容

把2000h的内容拆开,高位送2001h低位,低位送2002h低位,2001h、2002h高位清零,一般本程序用于把数据送显示缓冲区时用。

三、程序框图

四、实验过程

将寄存器中内容送入2000H,分别将高低四位移到低位,将高四位置零然后移入2001H和2002H中。利用MOVX语句、DPTR指针可实现数据的传送,利用高低四位交换语句SWAP和与语句ANL可进行对高低位的清零。

-2-

五、实验结果及分析

拆字前 拆字后

【问题回答】将ANL A, #0FH改为ORL A, #0F0H可以实现将高位置为1。

六、实验源程序

ORG 0000H

AJMP MAIN ORG 0660H

MAIN: MOV DPL, #00H

MOV DPH, #20H MOVX A, @DPTR SWAP A ANL A, #0FH INC DPTR MOVX @DPTR, A MOV A, DPL

DEC A MOV DPL, A

MOVX A, @DPTR ANL A, #0FH INC DPTR INC DPTR MOVX @DPTR, A END

SJMP $

实验三 拼字程序

一、实验目的

进一步掌握汇编语言设计和调试方法。

二、实验内容

把2000h、2001h的低位分别送入2002h高低位,一般本程序用于把显示缓冲区的数据取出拼装成一个字节。

三、程序框图

-3-

四、实验过程

本实验主要应用与语句ANL对高四位进行屏蔽,利用SWAP语句将2000H低四位交换到高四位,再用或ORL语句将2000H和2001H的高低四位组合在一起送入2002H中,从而实现两个数低四位组合。

五、实验结果及分析

拼字前 拼字后

【问题回答】本实验运行程序后2002H内容为34H,即2000H单元中低四位“3”作为2002H的高四位,2001H的低四位“4”作为2002H的低四位。

六、实验源程序

ORG 0000H

AJMP MAIN ORG 0680H

MAIN: MOV DPL, #00H

MOV DPH, #20H MOVX A, @DPTR ANL A, #0FH SWAP A MOV B, A INC DPTR MOVX A, @DPTR ANL A, #0FH ORL A, B INC DPTR MOVX @DPTR, A END

-4-

实验四 数据区传送子程序

一、实验目的

掌握RAM中的数据操作。

二、实验内容

把R2、R3源RAM区首址内的R6、R7字节数据传送到R4、R5目的RAM区。

三、程序框图

四、实验过程

实验要求将一段内存中数据移动到另一段内存中,本次实验通过寄存器内容截图显示,是把0000H单元开始20H个字节的内容送到1000H开始的连续数据单元中。先把初始地址分别放入源地址寄存器和目的地址寄存器,然后利用一组寄存器作为需转移数据区长度计数器,开始数据转移循环。每进行一次转移地址寄存器向下加一,计数寄存器内容减一,计数寄存器内容为0退出循环移动结束。由于计数以及地址寄存器是由两个八位寄存器组成,需要在加一减一时对其高字节和低字节进行判断。加一时若低字节加一变为0,则高字节加一,否则低字节加一高字节不变。减一时若低字节已是0则高字节减一,同时低字节变为0FFH,否则低字节减一高字节不变。

五、实验结果及分析

寄存器内容 源内存段中内容

-5-

目的内存段中移动前内容 目的内存段中移动后内容

【问题回答】如图R4、R5定义的目的地址单元中转移之前为随机数,转移后内容与以R2、R3开始的的源地址单元中20个字节内容相同,即实现了数据的传送。

六、实验源程序

ORG 0000H AJMP MAIN ORG 07B0H MAIN: MOV R7, #20H MOV R6, #00H MOV R2, #00H MOV R3, #00H MOV R4, #10H MOV R5, #00H LOOP: MOV DPL,R3 MOV DPH, R2 MOVX A, @DPTR MOV DPL, R5 MOV DPH, R4 MOVX @DPTR, A CJNE R3, #0FFH, LOOP1 INC R2 LOOP1: INC R3

CJNE R5, #0FFH, LOOP2 INC R4 LOOP2: INC R5

CJNE R7, #00H, LOOP3 CJNE R6, #00H, LOOP4 SJMP $ LOOP3: DEC R7 SJMP LOOP LOOP4: DEC R6 DEC R7 SJMP LOOP

-6-

SJMP $ END

实验六 查找相同数个数

一、实验目的

熟悉汇编语言编程。

二、实验内容

在2000~200Fh中查出有几个字节是零,把个数放在2100h中。

三、程序框图

四、实验过程

实验中利用R0放置需查找段长度,即从2000H单元开始,每次检查完一个单元R0减一,指针下移,直到R0等于0结束循环。R1存放等于零数据的个数,程序中利用等于零跳转指令JZ,实现找到0则R1加一计数的功能。循环终止后,将R1内容存入2100H中即可。

五、实验结果及分析

2000H到200FH中的内容

2100H显示找6个0

【问题回答】若需查找0FFH,只需将语句JZ LOOP1改为CJNZ R0, #0FFH, LOOP1即可,即数据等于0FFH时跳转到计数+1的程序段进行计数。

六、实验源程序

ORG 0000H

LJMP MAIN

-7-

ORG 0AA0H

MAIN: MOV DPL, #00H

MOV DPH, #20H MOV R0, #10H MOV R1, #00H

LOOP: MOVX A, @DPTR JZ LOOP1

DEC R0 INC DPTR SJMP LOOP2

LOOP1: INC R1

DEC R0 INC DPTR

LOOP2: CJNE R0, #00H, LOOP

MOV DPL, #00H MOV DPH, #21H MOV A, R1 MOVX @DPTR, A

SJMP $ END

实验七 无符号双字节快速乘法子程序

一、实验目的

掌握MCS-51汇编语言程序设计方法。

二、实验内容

将(R2 R3)和(R6 R7)中双字节无符号整数相乘,乘积送R4 R5 R6 R7中。

三、程序框图

-8-

四、实验过程

本程序是利用单字节的乘法指令MUL,根据下面的公式实现双字节数的乘法。

(R2 R3)×(R6 R7)

= ((R2)×28+(R3))×((R6)×28+(R7))

= (R2)×(R6)×216+(R2)×(R7)+(R3)×(R6)×28+(R3)*(R7)

将乘数与被乘数高低字节拆开分别相乘,然后再将每个高字节因子向前移动8位进行调整,进行加权求和。利用ADDC语句可实现带进位的加法运算。得到的最终结果存入R4、R5、R6、R7寄存器中。

五、实验结果及分析

相乘后寄存器内容

Answer:寄存器R2、R3、R6、R7分别输入01、10、11、10,运行程序,即进行0110H×1110H的运算,得到结果为00122100H存放在R4、R5、R6、R7寄存器中,故R4、R6中的内容是00H和21H。

六、实验源程序

ORG 0000H

LJMP MAIN ORG 0970H

MAIN: MOV R2, #01H MOV R3, #10H MOV R6, #11H MOV R7, #10H MOV A, R3 MOV B, R7 MUL AB XCH A, R7 MOV R5, B

-9-

MOV B, R2 MUL AB ADD A, R5 MOV R4, A CLR A ADDC A, B MOV R5, A MOV A, R6 MOV B, R3 MUL AB ADD A, R4 XCH A, R6 XCH A, B ADDC A, R5 MOV R5, A MOV F0, C MOV A, R2 MUL AB ADD A, R5 MOV R5, A CLR A MOV ACC.0, C MOV C, F0 ADDC A, B MOV R4, A SJMP $ END

实验八 多分支程序

一、实验目的

掌握汇编语言的编程。

二、实验内容

编写程序,根据送入的数据转移运行。

三、程序框图

-10-

四、实验过程

实验中利用散转指令JMP @A+DPTR实现程序的多分支跳转,这里A为变址寄存器,DPTR为基址寄存器。跳转到不同分支的运行结果由LED进行显示,每个分支对应的数码管上显示不同的数字。显示数字由数字七段码送至I/O口显示。在显示程序中利用循环左移加延时子程序调用,实现数字循环显示的效果。

编程中需要注意的是,A需乘以2即左移一位再作为变址寄存器,这是程序中由于分支跳转语句为2个字节所致。

五、实验结果及分析

实验中可以看到选择不同的数字进入不同分支,LED管上会出现不同数字的循环左移显示。

【问题回答】如需将循环速度减慢,只要将延时子程序初值变大,或增加循环层数,或者再增加一段循环语句即可,如可进行以下修改:

DELAY: 改为 DELAY:

MOV R3, #0FFH MOV R2, #0FFH DL1: MOV R4, #0FFH DL1: MOV R3, #0FFH DL2: NOP DL2: MOV R4, #0FFH NOP DL3: NOP DJNZ R4,DL2 NOP DJNZ R3,DL1 DJNZ R4,DL3 RET DJNZ R3,DL2

END DJNZ R2,DL1

RET

END

若将0字循环改为4字循环只需将0字七段码0C0H改为4字七段码99H即可。

六、实验源程序

ORG 0000H

LJMP MAIN

ORG 0DA0H LJMP SOX0 ORG 0A10H

MAIN: MOV 20H, #03H ;每次实验,这里可以改为0、1、2和3 MOV A, 20H ;取预置数据

-11-

MOV DPTR, #LOOP ;散转表起始地址 RL A JMP @A+DPTR LOOP: AJMP LOOP1 AJMP LOOP2 AJMP LOOP3 AJMP LOOP4

LOOP1: MOV 21H, #0C0H ;\字的7段码 SJMP SOX0

LOOP2:MOV 21H, #0F9H SJMP SOX0

LOOP3: MOV 21H, #0A4H

SJMP SOX0

;\字的7段码 ;循环显示程序 ;取来7段码 ;显示器段地址 ;显示器位地址 ;将7段码输出 ;最\右\边的位发光 ;\字的7段码 ;\字的7段码 ;A 乘以 2 ;散转指令

LOOP4: MOV 21H, #0B0H SOX0:

MOV A, 21H MOV R0, #0DCH MOV R1, #0DDH MOVX @R0, A MOV A, #01H SOX1:

MOVX @R1, A MOV R2, #20H

;准备延时

LCALL DELAY ;调用延时子程序 RL A SJMP SOX1 DELAY:

MOV R3, #0FFH DL1: MOV R4, #0FFH DL2: NOP NOP DJNZ R4,DL2 DJNZ R3,DL1 RET

END

;左移显示的位 ;无穷循环

实验十一 二进制转换到BCD

-12-

一、实验目的

将给定的一个二进制数,转换成二进制编码的十进制(BCD)码。

二、实验内容

掌握简单的数值转换算法,基本了解数值的各种表达方法。

三、程序框图

四、实验过程

本程序中需要转换的二进制数为F4H。由于八位内存存储的最大数据为FFH即十进制的255,故所转换的十进制数只有百位、十位和个位。百位的BCD码即待转换二进制数除以100得到的商,余数保存;用余数除以10得到十位BCD码,所得余数即为个位BCD码。将转换后BCD码三位装入20H-22H内存即可。

五、实验结果及分析

转换后BCD码

0020H-0022H单元中中存放的244即为二进制数F4H转换后得到的BCD码。

六、实验源程序

;待调整数A=0F4H ORG 0000H

LJMP MAIN ORG 100H

MAIN: CLR A

-13-

MOV R5, A MOV R6, A MOV A, #0F4H MOV B, #64H DIV AB MOV 20H, A MOV A, B MOV B, #0AH DIV AB MOV 21H, A MOV 22H, B

SJMP $ END

-14-

硬 件 实 验

硬件实验部分可使学生能进一步掌握单片机系统扩展和输入输出程序的设计方法,熟悉对扩展系统的软件、硬件设计,调试方法和技巧。

实验一 P1口亮灯实验

一、实验目的

(1)学习P1口的使用方法; (2)学习延时子程序的编写。

二、实验内容

P1口作为输出口,接八个发光二极管,编写程序,使发光二极管循环点亮。

三、程序框图

四、实验电路

五、实验过程

连接电路,编写程序,然后观察LED灯的显示情况。

此程序运用定时器中断实现计数定时功能。使用中断时,需设置中断控制字TMOD,

-15-

使定时器1工作于中断方式,然后设置延时子程序初值即TH1和TL1,利用ACALL语句即可申请中断。运行程序时,调用延时子程序,开启计数器,计数器满时发出中断返回中断处,等待下次开始,从而实现循环定时计数功能。

六、实验结果及分析

实验中LED灯管闪亮并维持一定时间,按循环左移方式点亮。

【问题回答】若要增加LED灯闪亮时间,可以使延时子程序中计数器计数周期增长,即初值TL1、TH1值减小即可。改变亮灯方向,只需将RL A变为RR A即可。

七、实验源程序

ORG 100H

START: MOV R0, #08H MOV A, #11111110B LOOP: MOV P1, A ACALL DELAY RL A

DJNZ R0, LOOP JMP START

DELAY: MOV TMOD, #00010000B MOV TL1, #0c0H MOV TH1, #63H SETB TR1 JNB TF1, $ CLR TF1 RET END

实验三 P3.3口输入 P1口输出

一、实验目的

1.掌握P3口、P1口简单使用。

2.学习延时程序的编写和使用。

二、实验内容

1.P3口做输入口,外接一脉冲,每输入一个脉冲,P1口按十六进制加一。

2.P1口做输出口,编写程序,使P1口接的8 个发光二极管L1—L8按16进制加一方式点亮发光二极管。

-16-

三、程序框图

四、实验电路

五、实验过程

实验是将P3.3口串行输入的电压变换次数变为累加器中的数并用P1口并行显示出来。P3.3读入数据前应加高电平防止误读。每次读入电压负跳变,累加器中数值加一,取反送至P1口。P1口八位分别控制8个LED灯管,若为高电平则灭,低电平则亮,从而通过灯的亮灭来表示按键次数。

六、实验结果及分析

实验中每开合一次开关K1,LED灯的显示情况表示的数字就加一,如同二进制数,灯亮表示1,灯灭表示0。

【问题回答】L3和L4。 开合K1开关13次即对应的二进制数为1101,点亮的LED灯为L1、

七、实验源程序

ORG 100H

-17-

START: MOV A, #00H CLR C

LOOP: MOV C, P3.3 JC LOOP ACALL DELAY LOOP1: MOV C, P3.3 JC LOOP LOOP2: MOV C, P3.3 JNC LOOP2 ACALL DELAY INC A CPL A MOV P1, A JMP LOOP

DELAY: MOV R6, #00H DELAY1: MOV R7, #80H DJNZ R7, $ DJNZ R6, DELAY1 RET END

实验四 工业顺序控制

一、实验目的

掌握工业顺序控制程序的简单编程,中断的使用。

二、实验内容

8032的P1.0—P1.6控制注塑机的七道工序,现模拟控制七只发光二极管的点亮,高电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,高电平启动。P3.3为外故障输入模拟开关,P3.2为0时不断警告。P1.7为报警声音输出,设定6道工序只有一位输出,第七道工序三位有输出。

三、程序框图

-18-

四、实验电路

五、实验过程

实验中用外部中断0,编中断服务程序的关键是:

1.保护进入中断时的状态,并在退出中断之前恢复进入的状态。

2.必须在中断程序中设定是否允许中断重入,即设置EX0位。 运行过程:

(1)连续方式开始运行程序,此时应在等待开工状态。 (2)K1拨至低电平“L”位置,各道工序应正常运行。

(3)K2拨至低电平“L”位置,应有声音报警(人为设置故障)。

(4)K2拨至高电平“H”位置,即排除故障,程序应从报警的那道工序继续执行。

K2分别模拟总开关和外部紧急事件,实验中运用外部中断0来实现报警功能,由K1、

一旦有外界中断或人为控制,系统则停在当前工序,执行中断程序。报警时调用响铃子程序设定蜂鸣器响铃,时间由延时长度控制。外部中断消失,且允许工作时,系统按工序一步一步循环进行,由亮灯表示工序进行过程,由延时子程序设定工序持续时长。

六、实验结果及分析

-19-

实验中工序进行由小灯亮灭表示,一旦遇到K1変高电平或者K2为低电平系统即停止K2为低时产生报警声响,K2为高时才继续正常工作。 工作等待中断被处理,只有K1为低,

【问题回答】工序一L1、L2亮工序二L2、L3亮,需将工序一中MOV P1, #7EH改为MOV P1, #7CH,同时将工序二中MOV P1, #7DH改为MOV P1, #79H.

七、实验源程序

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 POa: JNB P3.4,POa ACALL PO1B MOV P1,#7DH POc: JNB P3.4,POc ACALL PO1B MOV P1,#7BH POe: JNB P3.4,POe ACALL PO1B MOV P1,#77H POg: JNB P3.4,POg ACALL PO1B MOV P1,#6FH POb: JNB P3.4,POb ACALL PO1B MOV P1,#5FH POf: JNB P3.4,POf ACALL PO1B MOV P1,#3FH POd: JNB P3.4,POd

;第一道工序

-20-

ACALL PO1B SJMP PO12

PO16: MOV B,R2

;保护现场

PO17: MOV P1,#0FFH ;关输出 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 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

实验七 一、实验目的

;延时 ;不为0转

;停振 ;故障消除吗? ;恢复现场 ;延时

8255控制交通灯

-21-

了解8255芯片的结构及编程方法,学习模拟交通灯控制的实现方法。

二、实验内容

用8255做输出口,控制十二个发光二极管燃灭,模拟交通灯管理。

三、程序框图

四、实验电路

五、实验过程

假设一个十字路口为东西南北走向。初始状态0为东西红灯,南北红灯。然后转状态1东西绿灯通车,南北红灯。过一段时间转状态2,东西绿灯灭,黄灯闪烁几次,南北仍然红灯。再转状态3,南北绿灯通车,东西红灯。过一段时间转状态 4,南北绿灯灭,闪几次黄灯,延时几秒,东西仍然红灯。最后循环至状态1。

实验中调用延时子程序实现交通灯点亮持续一段时间再转变。通过对输出口写入特定数值,实现灯亮灭的控制。延时程序可通过对R2寄存器的压栈和出栈操作实现。在程序实现的过程中,需要对现场进行保护和恢复。交通灯闪烁由调用较短延时实现。

六、实验结果及分析

在连续运行方式下,初始态为四个路口的红灯全亮之后,东西路口的绿灯亮南北路口的红灯亮,东西路口方向通车。延时一段时间后东西路口的绿灯熄灭,黄灯开始闪耀。闪耀若干次后,东西路口红灯亮,而同时南北路口的绿灯亮,南北路口方向开始通车,延时一段时间后,南北路口的绿灯熄灭,黄灯开始闪耀。闪耀若干次后,再切换到东西路口方

-22-

向。之后重复以上过程。

【问题回答】东西方向的红灯是L6和L12。

七、实验源程序

ORG 0BB0H

;制定一个空间 ;保护现场

;写控制字的地址FFDB

D0: MOV SP,#60H MOV DPTR,#0FFDBH

MOV A,#88H ;控制字A口输出工作在方式0 C口高4位

MOVX @DPTR,A MOV DPTR,#0FFD8H

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

MOV A,#0DH MOVX @DPTR,A MOV R2,#25H LCALL DELY D3: MOV DPTR,#0FFD8H MOV A,#75H

MOVX @DPTR,A INC DPTR

MOV A,#0DH MOVX @DPTR,A MOV R2,#55H LCALL DELY MOV R7,#05H D1: MOV DPTR,#0FFD8H

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

MOV A,#0CH MOVX @DPTR,A MOV R2,#20H LCALL DELY MOV DPTR,#0FFD8H

MOV A,#0F7H 输入,C口低4位输出工作在方式0,B口输出

;设置控制字

;101100110点亮6 9 12号灯 ;00001101点亮3号灯 ;点亮4个红灯 ;设定一个延时时间 ;延时

;01110101点亮5 9 11 ;00001101点亮3号灯 ;东西绿灯亮,南北红灯亮 ;设定一个延时时间 ;延时

;设定闪烁次数 ;11110011 点亮9 10 ;1100点亮3 4

;东西黄灯亮,南北红灯亮 ;设定一个延时时间 ;延时

;11110111点亮9号灯 -23-

MOVX @DPTR,A INC DPTR

MOV A,#0DH MOVX @DPTR,A MOV R2,#20H

LCALL DELY DJNZ R7,D1

MOV DPTR,#0FFD8H MOV A,#0AEH

MOVX @DPTR,A INC DPTR

MOV A,#0BH MOVX @DPTR,A MOV R2,#55H

LCALL DELY MOV R7,#05H D2: MOV DPTR,#0FFD8H

MOV A,#9EH MOVX @DPTR,A INC DPTR

MOV A,#07H MOVX @DPTR,A MOV R2,#20H

LCALL DELY MOV DPTR,#0FFD8H

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

MOV A,#07H MOVX @DPTR,A MOV R2,#20H

LCALL DELY DJNZ R7,D2

LJMP D3 ;--------------------------------------------- DELY: PUSH 02H DEL2: PUSH 02H

DEL3: PUSH 02H

-24-

;00001101点亮3号灯 ;南北红灯亮

;延时

;闪烁次数未到继续 ;10101110点亮6 8 12 ;1011点亮2号

;东西红灯亮,南北绿灯亮 ;延时 ;闪烁次数 ;10011110点亮6 7 12 ;0111点亮1号

;东西红灯亮,南北黄灯亮 ;延时

;10111110点亮6 12——把7号黄灯灭了 ;把1号黄灯灭了 ;东西红灯亮

;延时

;闪烁次数未到继续 ;循环

;延时

DEL4: DJNZ R2,DEL4 POP 02H DJNZ R2,DEL3 POP 02H DJNZ R2,DEL2 POP 02H DJNZ R2,DELY RET

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

END

实验十九 小直流电机调速试验

一、实验目的

1.掌握直流电机的驱动原理。 2.了解直流电机调速的方法。

二、实验内容

1.用0832 D/A转换电路后的输出经放大后驱动直流电机。

2.编制程序改变0832输出经放大后的方波信号的占空比来控制电机转速。本实验中 D/A输出为双极性输出,因此电机可以正反向旋转。

三、程序框图

四、实验电路

-25-

五、实验过程

实验时,需先进行D/A电压调零,然后再运行电机调速主程序。实验中,通过中断和循环延时的方法通过D/A产生一定占空比的方波信号,通过数据送缓冲区,将控制信号送入D/A产生控制脉冲。由于D/A输出为双极性输出,因此电机可以正反向旋转驱动电机。通过控制方波信号的占空比,即控制一段时间内的平均电压,从而控制电机转速。

六、实验结果及分析

实验中可以观察到运行调零程序后小电机停转,运行调速程序后小电机开始旋转并以一定的周期变换转动方向。

【问题回答】实验中,可通过控制方波信号的占空比来改变电机转速。可修改LO20程序段中语句MOV A,#80H中立即数80H的值,来修改占空比。80H即占空比为1/2,将其值改小,即可增大占空比,从而使电机转速加快。

七、实验源程序

;小直流电机调速程序 ORG 05E0H SE13: MOV SP,#53H MOV 7EH,#00H MOV 7DH,#08H MOV 7CH,#03H

MOV 7BH,#02H ;显示缓冲区初值 LO20: MOV A,#80H ;停止 CALL LO21

MOV A,#00H ;反转 CALL LO21

MOV A,#80H ;停止

-26-

CALL LO21

MOV A,#0FFH ;正转 CALL LO21 SJMP LO20

;====D/A直流电机正转、反转、停止=== LO21: MOV DPTR,#0FFE0H

MOVX @DPTR,A ;送0832转换 MOV R0,#79H LCALL PTDS MOV R2,#00H

L023: LCALL DIS DJNZ R2,L023 RET ;---------------------------

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

;显示 ;拆送显示缓冲区 -27-

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

-28-

本文来源:https://www.bwwdw.com/article/c0fp.html

Top