实验二 汇编语言程序设计实验
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 ;