单片机实验 下载本文

实验二 汇编语言程序设计实验

1、拆字程序实验

一、实验目的:掌握汇编语言设计方法。

二、实验内容:把8000H地址上的内容拆开,高位送8001H地址的低位,低位送8002H地址的低位,8001H、8002H地址的高位清零.本程序通常在把数据送显示缓冲区时使用。

三、实验器材: 计算机 1台

四、实验步骤: 1、按流程图编写程序,以下是通过计算机交叉汇编得到的.LST文件清单,供参考。

2、文件编译连接、装载,用鼠标点击[项目/重建所有目标文件],系统自动进行编译,并弹出信息窗口,若有错误则重新修改再编译;若无错误,点击[调试/启动/停止调试]后进入调试状态。

3、设置观察窗口:(1)用鼠标点击[视图/存储器窗口],在地址栏中输入[0X8000];(2)在8000H中写入数据(任意);(3)单步执行观察寄存器和8000H—8002H的变化。

五、程序框图: 七、实验程序:

8000H内容送A ;把指定字节的高低位拆开分别存放,多用于显示子程序

ORG 0000H

MOV DPTR,#8000H ;指定的字节 高低位交换 屏蔽高位后送8001H MOVX A,@DPTR

MOV B,A ;暂存 SWAP A ;交换

8000内容送A ANL A,#0FH ;屏敝高位 INC DPTR MOVX @DPTR,A 屏蔽高位后送8002H INC DPTR MOV A,B

结 束 ANL A,#0FH ;指定字节的内容屏敝高位

MOVX @DPTR,A LOOP: SJMP LOOP END

2、 数据区传送子程序实验

一、实验目的:学习Windows平台下的编辑、编译、排错调试方法。

二、实验内容:把外部扩展RAM(6264)的8000H-807FH中的内容传送到8080H开始的空间中去。R2.R3存放源RAM区首址,R6.R7存放需传送的字节数,R4.R5存放目的RAM区首址。

三、实验器材:计算机 1 台

开 始 四、程序框图:

五、实验程序:

源地址内容送A ;数据传送子程序

ORG 0000H

MOV R2,#80H A送目的地址 MOV R3,#00H MOV R6, #00H 源地址加1 MOV R7, #7FH

MOV R4,#80H

目地址加1 MOV R5,#80H LOOP0: MOV DPL,R3

MOV DPH,R2 ;建立源程序首地址 字节数到吗? 结 束 MOVX A,@DPTR ;取数 MOV DPL,R5

MOV DPH,R4 ;目标首地址 LOOP: MOVX @DPTR,A ;传送 CJNE R3,#0FFH,LOOPA INC R2

LOOPA: INC R3 ;源地址加1 CJNE R5,#0FFH,LOOP1 INC R4

LOOP1: INC R5 ;目地址加1 CJNE R7,#00H,LOOP2 CJNE R6,#00H,LOOP3 LOOP4: SJMP LOOP4

LOOP2: DEC R7 ;字节数减1 SJMP LOOP0 LOOP3: DEC R7 DEC R6

SJMP LOOP0 ;未完继续

END

3、 清零内存实验

一、实验目的:学习Windows软件的调试方法

二、实验内容:把外部RAM的8000-80FFH RAM空间置数三、实验器材:计算机 1 台 四、程序框图: 五、实验程序:

ORG 0000H

MOV R0,#00H

MOV DPTR,#8000H ;空间首地址送DPTR LOOP: mov a,#12h

MOVX @DPTR,A ;清零 INC DPTR ;DPTR加1 INC R0 ;字节数加1

CJNE R0,#7FH,LOOP ;连续清256个字节 LOOP1:SJMP LOOP1 END

开 始 外部RAM首地#2000H→DPTR 12H送A A→@DPTR N DPTR=#207FH Y 结 束 实验三 P1口应用实验

一、实验目的:掌握P1口的基本方法和编程。

二、实验内容:利用P1口输出高低电平,控制对外部装置的控制。 三、实验步骤 1 采用P1口作输出 P1口是准双向口,它作为输出口使用时具有锁存功能。实验所需要LED电平显示电路如图1所示。

实验平台上有8只发光二极管,由U33的74HC245驱动,以显示电平状态。高电平“1” 点亮发光二极管。

高电平“1”点亮

电平显示电路

在实验系统上如下表所示连线。执行如下程序,发光二极管LED将循环显示。

连线说明表

连线 1 2 3 4 连接孔1 P1.0 P1.1 P1.2 P1.3 连接孔2 L0 L1 L2 L3 四、实验程序: LOOP:

MOV A, #01H MOV R2, #8 OUTPUT: MOV P1, A RL A

LCALL DELAY DJNZ R2, OUTPUT LJMP LOOP

DELAY: ;延时子程序

MOV R6, #0 MOV R7, #0 DELAYLOOP:

DJNZ R6, DELAYLOOP DJNZ R7, DELAYLOOP RET END

关于延时子程序的时间计算,查指令表可知MOV和DJNZ指令均需用两个机器周期,在6MHz晶振时,一个机器周期时间长度为12/6=2μs,所以上面延时子程序该的执行时间为:

(256×255+2)×2×12÷6 ≈ 261ms

2 采用P1口作输入和输出 由P1口的准双向口结构可知,当作为输入口时,必须先对它置“1”。若不先对它置“1”,读入的数据是不正确的。实验所需要LED电平显示电路和逻辑电平开关电路如图2所示。 实验平台上有8只拨动开关K0-K7及相应的驱动电路,以产生“1”、“0”的逻辑电平。开关向上拨相应插孔输出高电平为“1”,反之,输出低电平为“0”。

向上:1

向下:0

逻辑电平开关电路

在实验系统上如下表所示连线。执行如下程序,发光二极管LED将随拨动开关的位置而点亮或熄灭。

连线说明

连线 1 2 3 4 连接孔1 P1.0 P1.1 P1.2 P1.3 连接孔2 k0 k1 L0 L1

实验程序

KEYLEFT EQU P1.0 KEYRIGHT EQU P1.1 LEDLEFT EQU P1.2 LEDRIGHT EQU P1.3

SETB KEYLEFT SETB KEYRIGHT

LOOP:

MOV C,KEYLEFT MOV LEDLEFT,C MOV C,KEYRIGHT MOV LEDRIGHT,C LJMP LOOP END

3、P1口控制继电器

“系统资源区”的P1.0接继电器的Con端,继电器的In接VCC,编制程序,使P1.0电平变化,高电平时继电器吸合,常开触点接上,双色灯亮绿灯,低电平时继电器不工作,常闭触点闭合,亮红灯。 AA: CLR P1.0

MOV R0,#10H LCALL DELY LCALL DELY NOP

SETB P1.0 LCALL DELY LCALL DELY SJMP AA

DELY: MOV R5,#02H ;DELY1: MOV R7,#00H DELY2: DJNZ R7,DELY2 DJNZ R6,DELY2 DJNZ R5,DELY2 RET END

延时

实验四 外部中断实验

1、实验预备知识:

在工业控制中,像冲压、注塑、轻纺、制瓶等生产过程,都是一些继续生产过程,按某种顺序有规律地完成预定的动作,对这类继续生产过程的控制称顺序控制,像注塑机工艺过程大致按“合模→注射→延时→开模→产伸→产退”顺序动作,用单片机最易实现。 2、实验内容

由P1.0~P1.6控制注塑机的七道工序,现模拟控制七只发光二极的点亮,低电平有效,设定每道工序时间转换为延时,P3.4为开工启动开关,低脉冲(原高电平)启动。P3.3为外部故障输入模拟开关,低电平报警,P1.7为报警声音输出,设定6道工序只有一位输出,第七道工序三位有输出。 3、实验步骤:

P1.0~P1.6接 L1~L7,P1.7接喇叭(speaker),P3.4接K1,P3.3接K2,按图接好连线,初始状态K1为低电平,K2为高电平。执行程序,把K1接到高电平(低脉冲),启动开工,观察发光二极管点亮情况,确定工序执行是否正常,然后把K2置为低电平,看是否有声音报警,恢复中断1报警停,又从刚才报警时一道工序执行下去。

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

8031 P1.0-P1.6控制注塑机七道工序,现模拟控制七只发光二极管的点亮,高电平点亮。设定每道工序时间转换为延时,P3.4为开工启动开关,高电平启动。P3.3为外部故障输入模拟开关,低电平报警,P1.7为报警声音输出。设定7道工序只有一位输出。 三、实验器材:

1、超想3000TC综合实验仪 1 台 2、KEIL仿真器 1 台 3、计算机 1 台 4、连线 若干根 四、程序框图:

关输出 开 始

工序7延时 工序2延时 恢复现场 工序1延时 故障清除了吗? 开中断,P1、P3口初始化 保护现场 等开工 报 警 N 返 回 主程序流程图 中断服务子程序

五、接线图案:

六、实验步骤:

按图接好连线。执行程序,把K1和K0接到高电平,观察发光二极管点亮情况,确定工序执行是否正常,然后把K0置为低电平,看是否有声音报警。恢复中断1,报警停,又从刚才报警时一道程序执行下去。 七、实验程序:

;掌握工业顺序控制的简单编程,中断的使用 ORG 0000H SJMP MAIN ORG 0013H LJMP INTO MAIN: MOV P1,#00H ORL P3,#00H

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

ORL IP,#04H MOV PSW,#00H MOV SP,#53H PO12: MOV P1,#01H ACALL PO1BH MOV P1,#02H ACALL PO1BH MOV P1,#04H ACALL PO1BH MOV P1,#08H ACALL PO1BH MOV P1,#10H ACALL PO1BH MOV P1,#20H ACALL PO1BH MOV P1,#40H ACALL PO1BH SJMP PO12 INTO: MOV B,R2 PO17: MOV P1,#00H 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

PO19: MOV R2,#10H ACALL DELY RET

PO1A: MOV R2,#06H ACALL DELY RET

PO1BH: 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

;初始化

;第一道工序 ;第二道工序 ;第三道工序 ;第四道工序 ;第五道工序 ;第六道工序 ;第七道工序

;保护现场 ;关输出

;振荡次数 ;振荡 ;延时 ;停止 ;延时

;不为零转

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

;延时2

;延时3

;延时子程序

DJNZ R2,DELY RET END

实验五 定时/计数器的记数功能实验

一、实验目的:1、熟悉8031定时/计数器的记数功能;2、掌握初始化编程方法;3、掌握中断程序的调试方法。

二、实验内容:定时/记数器0对外部输入的脉冲进行计数,并送显示器显示。 三、实验器材: 1、超想-3000TC综合实验仪 1 台 2、KEIL仿真器 1 台

3、连线 若干 根 4、计算机

1 台

四、实验原理:

MCS-51有两个16位的定时/计数器:T0和T1。计数和定时实质上都是对脉冲信号进行计数,只不过脉冲源不同而已。当工作在定时方式时,计数脉冲来自单片机的内部,每个机器周期使计数器加1,由于计数脉冲的频率是固定的(即每个脉冲为1个机器周期的时间),故可通过设定计数值来实现定时功能。当工作在计数方式时,计数脉冲来自单片机的引脚,每当引脚上出现一个由1到0的电平变化时,计数器的值加1,从而实现计数功能。可以通过编程来指定时计数器的功能,以及它的工作方式。读取计数器的当前值时,应读3次。这样可以避免在第一次读完后,第二次读之前,由于低位溢出向高位进位时的错误。 五、接线图:

接线方案1 接线方案2

六、程序框图:

取出TL0/TH0内容转换 开定时器 开 始 堆栈、定时/计数初始化 显 示 主程序流程

(R7-1)=0 结 束

二转十进制子程序

七、实验步骤:用连线把“系统资源区”的P3.4孔连“脉冲源”的“DOWN”孔 ,执行程

序,按动AN锁按钮,观察数码管上计数脉冲的个数。

八、思考问题:把P3.4孔分别与“脉冲源”的2MHZ、1MHZ、0.5MHZ孔相连时,显示值反而

比连0.25MHZ孔更慢,为什么?当fosc=6MHZ时,能够计数的脉冲信号最高频率为多少?

九、实验程序:

;对定时器0外部输入的脉冲信号进行计数且显示 OUTBIT EQU 0E101H

CLK164 EQU 0E102H ; 段控制口(接164时钟位) DAT164 EQU 0E102H ; 段控制口(接164数据位) LEDBUF EQU 40H IN EQU 0E103H ORG 0000H MOV SP,#60H

MOV DPTR,#0E100H ;8155初始化 MOV A,#03H MOVX @DPTR,A

MOV TMOD,#05H ;定时器初始化 MOV TH0,#00H MOV TL0,#00H SETB TR0 LOOP0: MOV R2,TH0 MOV R3,TL0 LCALL LOOP1 MOV R0,#40H MOV A,R6 LCALL PTDS MOV A,R5 LCALL PTDS MOV A,R4 LCALL PTDS LCALL DISPLAY SJMP LOOP0

LOOP1: CLR A ;二转十子程序 MOV R4,A MOV R5,A MOV R6,A MOV R7,#10H LOOP2: CLR C MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A MOV A,R6 ADDC A,R6 DA A MOV R6,A MOV A,R5

ADDC A,R5 DA A MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A

DJNZ R7,LOOP2 RET

PTDS: MOV R1,A ;拆字子程序 ACALL PTDS1 MOV A,R1 SWAP A PTDS1: ANL A,#0FH MOV @R0,A INC R0 RET DELAY:

MOV R7, #0 ; DELAYLOOP:

DJNZ R7, DELAYLOOP DJNZ R6, DELAYLOOP RET

DISPLAY:SETB 0D3H

MOV R0, #LEDBUF

MOV R1, #6 ; MOV R2, #00000001B ; LOOP:

MOV DPTR, #OUTBIT MOV A, #00H

MOVX @DPTR, A ; MOV A, @R0 MOV DPTR,#LEDMAP MOVC A,@A+DPTR

MOV B, #8 ; DLP:

RLC A MOV R3, A MOV ACC.0, C ANL A,#0FDH

MOV DPTR, #DAT164 MOVX @DPTR, A

MOV DPTR, #CLK164 ORL A,#02H MOVX @DPTR, A ANL A,#0FDH MOVX @DPTR, A MOV A, R3 DJNZ B, DLP

MOV DPTR, #OUTBIT MOV A, R2

MOVX @DPTR, A ; MOV R6, #1

延时子程序 共6个八段管 从左边开始显示关所有八段管 送164 显示一位八段管 CALL DELAY

MOV A, R2 ; 显示下一位 RL A MOV R2, A INC R0

DJNZ R1, LOOP

MOV DPTR, #OUTBIT MOV A, #0

MOVX @DPTR, A ; 关所有八段管 CLR 0D3H RET

LEDMAP: ; DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H END

八段管显示码

实验六 8255输入输出实验

一、实验目的:了解8255和8155 接口方法;了解芯片的性能及编程方法。 二、实验内容: 设计8255与单片机的接口。 三、实验器材:(1)超想-3000TB综合实验仪 1 台

(2)超想3000仿真器 1 台 (3)连线 若干 根 (4)8255芯片 1 片

四、实验原理:8255是一种可编程并行I/O扩展接口芯片,内集成有256字节的静态RAM,一个14位的定时计数器。8255有三个8位的并行口,端口既可以编程为普通I/O口,也可以编程为选通I/O口和双向传输口。

8255为总线兼容型,可以与8051的总线直接接口。其中,口地址取决于片选CS和A1、A0。

1、端口输入输出实验

本实验中8255编程为PB口输入、PC口、PA口输出,根据8255状态控制字选择方法。由于该电路中8255的片选段CS接到YC2,因此PA、PB、PC以及控制口的地址分别为0A000H、0A001H、0A002H、0A003H。编程实现8255的PA口按方式0输出,PB口按方式0输入,将PB口外接8个开关的状态通过PA口外接的LED灯反映出来。

接线图:8255的片选段CS55接到YC2, 8255的PA0-PA7接到L0-L7,PB0-PB7接到K0-K7。

实验程序:

PORTA EQU 0A000H PORTB EQU 0A001H PORTC EQU 0A002H CADDR EQU 0A003H SJMP START ORG 0030H

START: MOV A,#82H MOV DPTR,#CADDR

;8255PA口地址 ;8255PB口地址 ;8255PC口地址 ;8255控制字地址

;方式0,PA,PC输出,PB输入

MOVX @ DPTR,A LOOP: MOV DPTR,#PORTB

MOVX A,@ DPTR ;读入PB口 MOV DPTR,#PORTA

MOVX @DPTR,A ;输出到PA口 LCALL DELAY LJMP LOOP

DELAY: MOV R6,#0 ;延时子程序 DELAY1: MOV R7,#0

DELAY2: DJNZ R7,DELAY2

DJNZ R6,DELAY1 RET

END

2、8255 控制交通灯

8255的片选段CS接到YC2,因此PA、PB、PC以及控制口的地址分别为0A000H、0A001H、0A002H、0A003H。本实验中8255编程为PB口、PC口、PA口均输出,根据8255状态控制字选择方法,8255控制字应为80H。

接线图:8255的片选段CS55接到YC2

实验程程序框图:

ORG 0000H START:

MOV DPTR,#0AC03H MOV A,#080H MOVX @DPTR,A

MOV DPTR,#0AC00H

MOV A,#0FFH

MOVX @DPTR,A ;全灭 LCALL DELAY

MOV DPTR,#0AC00H MOV A,#0F0H

MOVX @DPTR,A ;全红 LCALL DELAY

MOV DPTR,#0AC00H MOV A,#05AH MOVX @DPTR,A LCALL DELAY

MOV DPTR,#0AC00H MOV A,#0F5H MOVX @DPTR,A LCALL DELAY

MOV DPTR,#0AC00H MOV A,#0AH

MOVX @DPTR,A ; LCALL DELAY

MOV DPTR,#0AC00H MOV A,#0A0H MOVX @DPTR,A LCALL DELAY

MOV DPTR,#0AC00H MOV A,#0A5H MOVX @DPTR,A LCALL DELAY SJMP START DELAY:

MOV R7,#08H L1: MOV R6,#0FFH L2: MOV R5,#0FFH L3: DJNZ R5,L3 DJNZ R6,L2 DJNZ R7,L1 RET END

全黄

实验七 D/A转换实验

一、实验目的:了解D/A转换与单片机的接口方法;了解D/A转换芯片DA0832的性能及编程方法。

二、实验内容: 利用0832输出一个从0V开始逐渐升至5V再降至0V的三角波电压,数码管显示数字量值。

三、实验器材: 1、超想-3000TC综合实验仪 1 台 2、KEIL仿真器 1 台

3、连线 若干 根 4、计算机

1 台

四、接线图案:

五、、实验原理:

D/A转换器的功能主要是将输入的数字量转换成模拟量输出,在语音合成等方面得到了广泛的应用。本实验中采用的转换器为DAC0832,该芯片为电流输出型8位D/A转换器,输入设有两级缓冲锁存器,因此可同时输出多路模拟量。本实验中采用单级缓冲连接方式,用0832来产生三角波,具体线路如上图所示。VREF引脚的电压极性和大小决定了输出电压的极性与幅度,超想-3000TC综合实验仪上的DA0832的第8引脚(VREF)的电压已接为-5V,所以输出电压值的幅度为0-5V。

六、实验步骤:

1、把DA0832的片选CS32孔接至YC3(0B000H-0BFFFH)孔。

2、编写程序、编译程序:用单步、断点、连续方式调试程序,排除软件错误。运行程序,8155键显区数码管上显示不断加大或减小的数字量,用万用表测量D/A输出孔AOUT,应能测出不断加大或减小的电压值。

七、思考问题: 修改程序,使能产生锯齿波。

九、实验程序: 程序框图: OUTBIT EQU 0E101H ; 位控制口

CLK164 EQU 0E102H ; 段控制口(接164时钟位) DAT164 EQU 0E102H ; 段控制口(接164数据位) IN EQU 0E103H ; 键盘读入口 LEDBUF EQU 40H ; 显示缓冲 ORG 0000H MOV SP,#60H

MOV DPTR,#0E100H ;8155初始化 MOV A,#03H MOVX @DPTR,A

MOV 40H,#00H ;显示缓冲区置值 MOV 41H,#08H MOV 42H,#03H MOV 43H,#02H LOOP1: MOV R5,#00H

LOOP2: MOV DPTR,#0B000H ;0832DA 从小到大转换 MOV A,R5 MOVX @DPTR,A MOV R0,#45H

MOV 45H,A ;拆字后送显示缓冲区

ACALL PTDS

MOV R6,#15H

DIR10: ACALL DISPLAY ;调用显示子程序 DJNZ R6,DIR10 INC R5

CJNE R5,#00H,LOOP2

LOOP3: MOV DPTR,#0B000H ;0832DA从大到小转换 DEC R5 MOV A,R5 MOVX @DPTR,A MOV R0,#45H ACALL PTDS MOV R6,#15H DIR11: ACALL DISPLAY DJNZ R6,DIR11

CJNE R5,#00H,LOOP3 SJMP LOOP1 DELAY:

MOV R7, #01

MOV R3,#01 ; 延时子程序 DELAYLOOP:

DJNZ R3, DELAYLOOP DJNZ R7, DELAYLOOP DJNZ R6, DELAYLOOP RET

DISPLAY:SETB 0D3H

MOV R0, #LEDBUF

MOV R1, #6 ; 共6个八段管 MOV R2, #00100000B ; 从左边开始显示 LOOP:

MOV DPTR, #OUTBIT

0832初始化 显 示 转换显示加1 输入是否到FF? N 输入显示减Y 1 输入是否到00? N Y

MOV A, #00H

MOVX @DPTR, A ; 关所有八段管 MOV A, @R0 MOV DPTR,#LEDMAP MOVC A,@A+DPTR

MOV B, #8 DLP:

RLC A MOV R3, A MOV ACC.0, C ANL A,#0FDH

MOV DPTR, #DAT164 MOVX @DPTR, A

MOV DPTR, #CLK164 ORL A,#03H MOVX @DPTR, A ANL A,#0FDH MOVX @DPTR, A MOV A, R3 DJNZ B, DLP

MOV DPTR, #OUTBIT MOV A, R2

MOVX @DPTR, A ; 显示一位八段管 MOV R6, #01 CALL DELAY

MOV A, R2 ; 显示下一位 RR A MOV R2, A INC R0

DJNZ R1, LOOP

MOV DPTR, #OUTBIT MOV A, #0

MOVX @DPTR, A ; 关所有八段管 CLR 0D3H RET

LEDMAP: ; 八段管显示码

DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H PTDS: MOV R1,A ACALL PTDS1 MOV A,R1 SWAP A PTDS1: ANL A,#0FH MOV @R0,A DEC R0 RET

DELAY1:MOV R7,#03H SJMP DELAYLOOP END

实验八 A/D转换实验

一、实验目的:掌握A/D转换与单片机接口的方法;了解A/D芯片0809转换性能及编程方法。

二、实验内容:利用综合实验仪上的0809做A/D转换器,综合实验仪上的电位器提供模拟量输入,编制程序,将模拟量转换成数字量,通过8155键显区数码管显示出来。

三、实验器材:1、超想-3000TC综合实验仪 1 台 2、KEIL仿真器 1 台

3、连线 若干 根 4、计算机

1 台

四、实验原理:

A/D转换器的功能主要是将输入的模拟信号转换成数字信号,如电压、电流、温度测量等都属于这种转换。本实验中采用的转换器为ADC0809,它是一个8位逐次逼近型A/D转换器,可以对8个模拟量进行转换,转换时间为100μS。其工作过程如下:首先由地址锁存信号ALE的上升沿将引脚ADDA、ADDB和ADDC上的信号锁存到地址寄存器内,用以选择模拟量输入通道;START信号的下降沿启动A/D转换器开始工作;当转换结束时,AD0809使EOC引脚由低电平变成高电平,程序可以通过查询的方式读取转换结果,也可以通过中断方式读取结果。CLOCK为转换时钟输入端,频率为100KHz-1.2MHz,推荐值为640KHz。

五、、实验步骤:

1、设定仿真模式为程序空间在仿真器上,数据空间在用户板上,即点击[设置]下的[仿真模式],在RAM区选中用户RAM,ROM区选中系统ROM(注:本书中的实验除另行说明外,均与此相同)。把AD0809的零通道09IN0孔用连线接至模拟信号发生器的VIN孔,AD0809的片选信号CS09孔接“译码器”YC2(0A000-0AFFFH)孔,“脉冲源”中的0.5MHZ孔连AD0809的CLOCK孔。

2、编写程序,并编译通过。本程序使用查询的方式读取转换结果。在读取转换结果的指令后设置断点,运行程序,在断点处检查并读出A/D转换结果,数据是否与VIN相对应。修改程序中错误,使显示值随VIN变化而变化。

六、接线图:

七、思考问题:1、试编写循环采集8路模拟量输入A/D转换程序;2、以十进制方式显示。

八、实验程序: 程序框图:

OUTBIT EQU 0E101H ; 位控制口

0809初始化 开 始 CLK164 EQU 0E102H ; 段控制口(接164时钟位)

DAT164 EQU 0E102H ; 段控制口(接164数据位) IN EQU 0E103H ; 键盘读入口

显示 0809.0通道采样 LEDBUF EQU 40H ; 显示缓冲 ORG 0000H MOV SP,#60H

MOV DPTR,#0E100H ;8155初始化 MOV A,#03H MOVX @DPTR,A

MOV 40H,#00H ;显示缓冲器初始化 MOV 41H,#08H MOV 42H,#00H MOV 43H,#09H MOV 44H,#00H MOV 45H,#00H LOOP1: MOV R7,#40 VI: LCALL DISPLAY DJNZ R7,VI MOV A,#00H

MOV DPTR,#0A000H ;0809AD的通道开始转换吗? MOVX @DPTR,A MOV R7,#0FH LOOP2: DJNZ R7,LOOP2

MOVX A,@DPTR

MOV R0,#45H ;拆字 LCALL PTDS SJMP LOOP1 PTDS: MOV R1,A LCALL PTDS1 MOV A,R1 SWAP A PTDS1: ANL A,#0FH MOV @R0,A DEC R0 RET DELAY:

MOV R7, #0 ; DELAYLOOP:

DJNZ R7, DELAYLOOP DJNZ R6, DELAYLOOP RET

DISPLAY:SETB 0D3H

MOV R0, #LEDBUF

MOV R1, #6 ; MOV R2, #00100000B ; LOOP:

MOV DPTR, #OUTBIT MOV A, #00H

MOVX @DPTR, A ; MOV A, @R0 MOV DPTR,#LEDMAP MOVC A,@A+DPTR

MOV B, #8 ; DLP:

RLC A MOV R3, A MOV ACC.0, C ANL A,#0FDH

MOV DPTR, #DAT164 MOVX @DPTR, A

MOV DPTR, #CLK164 ORL A,#02H MOVX @DPTR, A ANL A,#0FDH MOVX @DPTR, A MOV A, R3 DJNZ B, DLP

MOV DPTR, #OUTBIT MOV A, R2

MOVX @DPTR, A ; MOV R6, #1 CALL DELAY

延时子程序 共6个八段管 从左边开始显示关所有八段管 送164 显示一位八段管 MOV A, R2 ; 显示下一位 RR A MOV R2, A INC R0

DJNZ R1, LOOP

MOV DPTR, #OUTBIT MOV A, #0 MOVX @DPTR, A

CLR 0D3H ; 关所有八段管 RET

LEDMAP: ; DB 3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H DB 7FH, 6FH, 77H, 7CH, 39H, 5EH, 79H, 71H

END

八段管显示码

实验十一 步进电机控制实验

一、实验目的: 了解步进电机工作原理,掌握用单片机的步进电机控制系统的硬件设计方法,熟悉步进电机驱动程序的设计与调试,提高单片机应用系统设计和调试水平。

二、实验内容: 编写并调试出一个实验程序按下图所示控制步进电机旋转:

三、工作原理:步进电机是工业过程控制及仪表中常用的控制元件之一,例如在机械装置中可以用丝杠把角度变为直线位移,也可以用步进电机带螺旋电位器,调节电压或电流,从而实现对执行机构的控制。步进电机可以直接接收数字信号,不必进行数模转换,用起来非常方便。步进电机还具有快速启停、精确步进和定位等特点,因而在数控机床、绘图仪、打印机以及光学仪器中得到广泛的应用。

步进电机实际上是一个数字/角度转换器,三相步进电机的结构原理如图所示。从图中可以看出,电机的定子上有六个等分磁极,A、A′、B、B′、C、C ′,相邻的两个磁极之

o

间夹角为60,相对的两个磁极组成一相(A-A′,B-B′,C-C′),当某一绕组有电流通过时,该绕组相应的两个磁极形成N极和S极,每个磁极上各有五个均匀分布矩形小齿,电机的转子上有40个矩形小齿均匀地分布的圆周上,相邻两个齿之间夹角为9°。

当某一相绕组通电时,对应的磁极就产生磁场,并与转子形成磁路,如果这时定子的小齿和转子的小齿没有对齐,则在磁场的作用下,转子将转动一定的角度,使转子和定子的齿相互对齐。由此可见,错齿是促使步进电机旋转的原因。

三相步进电机结构示意图

例如在三相三拍控制方式中,若A相通电,B、C相都不通电,在磁场作用下使转子齿和A相的定子齿对齐,我们以此作为初始状态。设与A相磁极中心线对齐的转子的齿为0号齿,由于B相磁极与A相磁极相差120°,不是9°的整数倍(120÷9=40/3),所以此时转子齿没有与B相定子的齿对应,只是第13号小齿靠近B相磁极的中心线,与中心线相差3°,如果此时突然变为B相通电,A、C相不通电,则B相磁极迫使13号转子齿与之对齐,转子就转动3°,这样使电机转了一步。如果按照A→B→C的顺序轮流通电一周,则转子将动9°。

步进电机的运转是由脉冲信号控制的,传统方法是采用数字逻辑电路——环形脉冲分配器控制步进电机的步进。 下图为环形脉搏冲分配器的简化框图。

三相六拍环形脉搏冲分配器

1、运转方向控制。如图所示,步进电机以三相六拍方式工作,若按A→AB→B→BC→C→CA→A次序通电为正转,则当按A→AC→C→CB→B→BA→A次序通电为反转。

2、运转速度的控制。图中可以看出,当改变CP脉冲的周期时,ABC三相绕组高低电平的宽度将发生变化,这就导致通电和断电时速率发生了变化,使电机转速改变,所以调节CP脉冲的周期就可以控制步进电机的运转速度。

3、旋转的角度控制。因为每输入一个CP脉冲使步进电机三相绕组状态变化一次,并相应地旋转一个角度,所以步进电机旋转的角度由输入的CP脉冲数确定。

超想-3000TC实验仪选用的是20BY-0型4相步进电机,其工作电压为4.5V,在双四拍运

O

行方式时,其步距角为18,相直流电阻为55Ω,最大静电流为80Ma。采用8031单片机控制步进电机的运转,按四相四拍方式在P1口输出控制代码,令其正转或反转。因此P1口输出代码的变化周期T控制了电机的运转速度:n=60/T.N

式中:n —— 步进电机的转速(转/分);N —— 步进电机旋转一周需输出的字节数;

T —— 代码字节的输出变化周期。

设N=360°/ 18°=20,T=1.43ms,则步进电机的转速为2100转/分。 控制P1口输出的代码字节个数即控制了步进电机的旋转角度。

正方向: A B C D

反方向: A D C B 四、接线图:

根据步进电机工作原理,使用8031的 P1.0-P1.3分别驱动步进电机A、B、C、D相,用软件控制P1口输出一脉冲序列,控制步进电机转速、方向、步距。同时为能观察步进电机旋转状态,在A、B、C、D相输出到状态发光二极管指示灯。

五、实验步骤: 1、“系统资源”区的P1.0-P1.3孔接步进电机的BA-BD孔,“发光二极管组”的L0-L3孔接步进电机A、B、C、D孔 。P1.7孔连L7。

2、编写程序、编译程序。用单步、全速断点、连续方式调试程序,观察发光二极管的变化,检查程序运行结果,观察步进电机的转动状态。 六、程序框图: 开 始

清状态寄存器

置正转A相通电

(42)→ R6 步计数器R7置100步 延时计数器42H置200

调用延时1ms子程序

N

(R6)-1=0?

Y

(32H)-1→32H

步计数器R7置100步 调用步进电机子程序

N (42)→ R6 (R7)-1=0?

Y

调用延时1ms子程序 步计数器R7置100步 N (R6)-1=0? (42)→ R6 Y

调用步进电机子程序 调用延时1ms子程序

N (42H)+1 →42H (R6)-1=0?

Y (R7)-1=0? N 调用步进电机子程序 Y N (R7)-1=0? Y 步进电机控制主程序框图

七、思考问题:若将步进电机A、B、C、D相分别接到P1.4--P1.7,软件功能与本实验要求一致,需要修改那几处程序?

八、实验程序: ORG 0000H

STRT: MOV SP,#6FH ;初始化

MOV 20H,#0 ;状态寄存器清零 MOV P1,#0F1H ;正转A相通电

MLP: MOV R7,#64H ;R7为步计数器,正转100步 MOV 42H,#0C8H ;42H为延时计数器

MLP0: MOV R6,42H ;调用延时200MS子程序 MLP9: LCALL DEL DJNZ R6,MLP9 DEC 42H

LCALL STEPS ;调用步进子程序 DJNZ R7,MLP0 ;以上为加速程序 MOV R7,#64H ;以下为恒速程序 MLP1: MOV R6,42H MLPX: LCALL DEL DJNZ R6,MLPX LCALL STEPS DJNZ R7,MLP1

MOV R7,#64H ;以下为减速程序 MLP2: MOV R6,42H MLPY: LCALL DEL DJNZ R6,MLPY LCALL STEPS INC 42H

DJNZ R7,MLP2 CPL 7 LJMP MLP

STEPS:INC 20H ;正反转步进子程序 ANL 20H,#83H MOV A,20H ANL A,#3 JB 7,STPSC MOV DPTR,#FTAB SJMP STPW

STPSC:MOV DPTR,#CTAB STPW: MOVC A,@A+DPTR MOV P1,A RET

FTAB: DB 0F3H,0F6H,0FCH,0F9H CTAB: DB 79H,7cH,76H,73H

DEL: MOV R5,#0 ;延时子程序 DEL0: DJNZ R5,DEL0

RET

END ;