单片机实验例题
- 格式:docx
- 大小:23.20 KB
- 文档页数:16
实验1 LED单灯跑动
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
MOV A,#0FEH
MOV R0,#9 ;循环九次,8个灯亮及1次灯全灭
START:
MOV P0,A ;输出到P0口连接的LED灯上
SETB C ;置进位C
RLC A;带进位左移
CALL D ELAY ;延时一段时间
DJNZ R0,START ;反复循环
AJMP MAIN ;重新开始
;延时子程序
DELAY:
MOV R1,#15
D1: MOV R2,#100
D2: MOV R3,#100
DJNZ R3,$
DJNZ R2,D2
DJNZ R1,D1
RET
END
实验2
****************************步进电机的驱动*************************************
;FOSC = 12MHz
;---------------------------------------------------------------------------------
; 步进电机的驱动信号必须为脉冲信号!!! 转动的速度和脉冲的频率成正比!!!
; 本步进电机步进角为5.625度. 一圈360 度, 需要64个脉冲完成!!! ;---------------------------------------------------------------------------------
; A组线圈对应P0.0
; B组线圈对应P0.1
; C组线圈对应P0.2
; D组线圈对应P0.3
; 正转次序: AB组--BC组--CD组--DA组(即一个脉冲,正转5.625度) ;----------------------------------------------------------------------------------
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN:
;----------------------------正转--------------------------
MOV R3,#192 ;正转3圈共192个脉冲
START:
MOV R0,#00H
START1:
MOV P0,#00H
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ START ;对A的判断,当A=0时则转到START
MOV P0,A
LCALL DELAY
INC R0
DJNZ R3,START1
MOV P0,#00H
LCALL DELAY1
;-----------------------------反转------------------------
MOV R3,#128 ;反转2圈共128个脉冲
START2:
MOV P0,#00H
MOV R0,#05
START3:
MOV A,R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
JZ START2
MOV P0,A
CALL D ELAY
INC R0
DJNZ R3,START3
MOV P0,#00H
LCALL DELAY1
LJMP MAIN
;---------------------------转速控制-----------------------
DELAY: MOV R7,#10 ;步进电机的转速
M3: MOV R6,#248
DJNZ R6,$
DJNZ R7,M3
RET
;---------------------------延时控制----------------------
DELAY1: MOV R4,#5 ;2S 延时子程序
DEL2: MOV R3,#200
DEL3: MOV R2,#250
DJNZ R2,$
DJNZ R3,DEL3
DJNZ R4,DEL2
RET
;---------------------------正反转表----------------------
TABLE:
DB 03H,06H,0CH,09H; 正转表
DB 00; 正转结束
DB 03H,09H,0CH,06H; 反转表
DB 00; 反转结束
END
实验3 8个数码管轮流显示
;
;重要说明:数码管在循环轮流显示的时候,喇叭跟继电器会有规律的发出声音跟吸合,
;解决的办法可以将SE8(SPEAKER),SE2(RELAY)跳线设置为OFF,或者在软件上加入CLR P3.7 就可以解决
ORG 0000H
AJMP MAIN
ORG 0030H
MAIN:
CLR P3.7 ;锁定继电器喇叭数据锁存器
MOV P0,#0c0h ;送0的段码到数码管
CLR P2.0 ;跟P2.0连接的那位数码管点亮CALL D ELAY ;延时
SETB P2.0 ;关闭P2.0连接的数码管显示
CLR P2.1 ;跟P2.1连接的那位数码管点亮CALL D ELAY ;延时
SETB P2.1 ;关闭P2.1连接的数码管显示
CLR P2.2 ;跟P2.2连接的那位数码管点亮CALL D ELAY ;延时
SETB P2.2 ;关闭P2.2连接的数码管显示
CLR P2.3 ;跟P2.3连接的那位数码管点亮CALL D ELAY ;延时
SETB P2.3 ;关闭P2.3连接的数码管显示
CLR P2.4 ;跟P2.4连接的那位数码管点亮CALL D ELAY ;延时
SETB P2.4 ;关闭P2.4连接的数码管显示
CLR P2.5 ;跟P2.5连接的那位数码管点亮CALL D ELAY ;延时
SETB P2.5 ;关闭P2.5连接的数码管显示
CLR P2.6 ;跟P2.6连接的那位数码管点亮CALL D ELAY ;延时
SETB P2.6 ;关闭P2.6连接的数码管显示
CLR P2.7 ;跟P2.7连接的那位数码管点亮CALL D ELAY ;延时
SETB P2.7 ;关闭P2.7连接的数码管显示
AJMP MAIN ;重新开始
;延时子程序
DELAY:
MOV R5,#30
D1: MOV R6,#100
D2: MOV R7,#100
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END