MCS-51单片机汇编语言编程实例
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(256*256+256+1)R2+(256+1)R1+R0-(256*256+2*256-2)=1000000 65793R2+257R1+R0=1066046 R2=15, R1=50, R0=255
程序2
ORG LOOP: MOV MOV RR CALL MOV RR CALL MOV CALL SJMP 0000H A, #0FBH P1 , A A DT P1 , A A DT P1 , A DT LOOP
例3
步进电机
任务3:定时器中断实现延时程序
TIM3: CJNE R1,#1H,TIM3 DJNZ R3,TIM4 MOV TH0,#2FH MOV TL0,#70H SETB TR0 MOV R1,#0H TIM5: CJNE R1,#1H,TIM5 TIM2: RET T0IN:;中断程序 MOV R1,#1H RETI;中断返回
例3
步进电机
任务4:开关设置
NEXT: JB P3.7,OPP ;如果P3.7等于1则转移(开关S2按下) MOV R0,#00101101B;按下,顺时针 LJMP S1 OPP: MOV R0,#01111000B;松开,逆时针 S1: JB P3.6,SPD MOV R2,#0H ;未按下,快速 LJMP L1 SPD: MOV R2,#1H ;按下,慢速
例3
步进电机
任务2:定时器中断实现演示程序
TIME: CJNE R2,#0,TIM0 ;R2不等于0则是慢速,跳转 ;;;;;;;快速,60转/分 MOV TH0,#5BH MOV TL0,#0F0H SETB TR0 MOV R1,#0H TIM1: CJNE R1,#1H,TIM1 SJMP TIM2 ;;;;;;;;慢速,Leabharlann Baidu0转/分 TIM0: MOV R3,#2H TIM4: MOV TH0,#0H MOV TL0,#0H SETB TR0 MOV R1,#0H
例3
任务:主程序
步进电机
MOV A,R0 RLC A ;带进位的循环左移操作 MOV P3.2,C ;IN1 RLC A MOV P1.0,C ;IN2 MOV R0,A LCALL LED LCALL TIME MOV A,R0 RLC A MOV P3.2,C RLC A MOV P1.0,C MOV R0,A LCALL LED LCALL TIME
L1:
例3
任务:主程序
步进电机
MOV A,R0 RLC A MOV P3.2,C RLC A MOV P1.0,C MOV R0,A LCALL LED LCALL TIME MOV A,R0 RLC A MOV P3.2,C RLC A MOV P1.0,C MOV R0,A LCALL LED LCALL TIME LJMP NEXT
例1
方波产生
任务:从P1.0引脚输出一个方波
VCC
D0
R1 1 P1.0 89C51
2
1
程序1:
LOOP:
ORG CPL SJMP
0000H 90H LOOP
机器码 0000 0001 0002 0003 0004
B2 90 80 FC --
程序2:加软延时 ORG LOOP: CPL MOV MOV LOOP1: DJNZ DJNZ SJMP
DT:
DT1:
MOV MOV MOV DJNZ DJNZ DJNZ RET
R2 , #0FH R1 , #32H R0 , #0FFH R0 , DT1 R1 , DT1 R2 , DT1
;#15 ;#50 ;#255
T= (2 * ( 256*256*(R2-1) + 256*(R1-1) + R0 +256*(R2-1) + R1 +R2) +3+1) * (12/fosc)
0000H 90H R1 , #100 R0 , #100 R0 , LOOP1 R1 , LOOP1 LOOP
例2 跑马灯
任务:D1,D2,D3循环亮灭, D1 →D2→D3 ↑ ↓ 一个时间只有一个亮, 每个1秒转换一次。
VCC
VCC
VCC
1
1
D1
D2
D3
2
2
R1
R2
R3 1 2 3 P1.0 P1.1 P1.2 89C51
程序3
ORG LOOP: LOOP0: MOV MOV MOV RR CALL DJNZ SJMP 0000H A, #0FBH R0, #3 P1 , A A DT R0, LOOP0 LOOP
7行
程序4
LOOP0: LOOP1: LOOP2: ORG 0000H MOV R7 , #0 ORL P1 , #07H CJNE R7 , #0 , LOOP3 INC R7 ANL P1 , #0FBH SJMP LOOP5 CJNE R7 , #1 , LOOP4 INC R7 ANL P1 , #0FDH SJMP LOOP5 CJNE R7 , #02 , LOOP0 MOV R7 , #0 ANL P1 , #0FEH CALL DT SJMP LOOP1 ;全熄灭 ; D1亮
2
1
程序1: LOOP0: ORG 0000H ORL P1 , #07H ANL P1 , #0FBH CALL DT ORL ANL CALL P1 , #07H P1 , #0FDH DT ; 全熄灭 ; D1亮 ;延时 ;全熄灭 ; D2亮 ;延时 ;全熄灭 ; D3亮 ;延时
ORL P1 , #07H ANL P1 , #0FEH CALL DT SJMP LOOP0
LOOP3:
; D2亮
LOOP4:
LOOP5:
; D3亮 ;延时
例3
步进电机
任务1:初始化步进电机
START: ;初始化 MOV DPTR,#30H;表基址 L5: MOV R7, #0H;百位 L9: MOV R6, #0H;十位 L10: MOV R5, #0H;个位 MOV IE,#82H ;全局中断,T0中断允许 ORL IP,#2H ;逻辑或,T0中断优先级高 MOV TMOD,#11H ;定时器方式字,T1和T0都工作在方式1,16位的计 数器GATE等于0,不受外部控制 P4 EQU 0C0H ;声明P4地址 MOV P4,#0FFH P4SW EQU 0BBH ;声明P4SW寄存器的地址 MOV P4SW,#70H SETB p1.1 SETB P1.4 ;CE2置高 SETB P1.3 ;CE1置高
程序2
ORG LOOP: MOV MOV RR CALL MOV RR CALL MOV CALL SJMP 0000H A, #0FBH P1 , A A DT P1 , A A DT P1 , A DT LOOP
例3
步进电机
任务3:定时器中断实现延时程序
TIM3: CJNE R1,#1H,TIM3 DJNZ R3,TIM4 MOV TH0,#2FH MOV TL0,#70H SETB TR0 MOV R1,#0H TIM5: CJNE R1,#1H,TIM5 TIM2: RET T0IN:;中断程序 MOV R1,#1H RETI;中断返回
例3
步进电机
任务4:开关设置
NEXT: JB P3.7,OPP ;如果P3.7等于1则转移(开关S2按下) MOV R0,#00101101B;按下,顺时针 LJMP S1 OPP: MOV R0,#01111000B;松开,逆时针 S1: JB P3.6,SPD MOV R2,#0H ;未按下,快速 LJMP L1 SPD: MOV R2,#1H ;按下,慢速
例3
步进电机
任务2:定时器中断实现演示程序
TIME: CJNE R2,#0,TIM0 ;R2不等于0则是慢速,跳转 ;;;;;;;快速,60转/分 MOV TH0,#5BH MOV TL0,#0F0H SETB TR0 MOV R1,#0H TIM1: CJNE R1,#1H,TIM1 SJMP TIM2 ;;;;;;;;慢速,Leabharlann Baidu0转/分 TIM0: MOV R3,#2H TIM4: MOV TH0,#0H MOV TL0,#0H SETB TR0 MOV R1,#0H
例3
任务:主程序
步进电机
MOV A,R0 RLC A ;带进位的循环左移操作 MOV P3.2,C ;IN1 RLC A MOV P1.0,C ;IN2 MOV R0,A LCALL LED LCALL TIME MOV A,R0 RLC A MOV P3.2,C RLC A MOV P1.0,C MOV R0,A LCALL LED LCALL TIME
L1:
例3
任务:主程序
步进电机
MOV A,R0 RLC A MOV P3.2,C RLC A MOV P1.0,C MOV R0,A LCALL LED LCALL TIME MOV A,R0 RLC A MOV P3.2,C RLC A MOV P1.0,C MOV R0,A LCALL LED LCALL TIME LJMP NEXT
例1
方波产生
任务:从P1.0引脚输出一个方波
VCC
D0
R1 1 P1.0 89C51
2
1
程序1:
LOOP:
ORG CPL SJMP
0000H 90H LOOP
机器码 0000 0001 0002 0003 0004
B2 90 80 FC --
程序2:加软延时 ORG LOOP: CPL MOV MOV LOOP1: DJNZ DJNZ SJMP
DT:
DT1:
MOV MOV MOV DJNZ DJNZ DJNZ RET
R2 , #0FH R1 , #32H R0 , #0FFH R0 , DT1 R1 , DT1 R2 , DT1
;#15 ;#50 ;#255
T= (2 * ( 256*256*(R2-1) + 256*(R1-1) + R0 +256*(R2-1) + R1 +R2) +3+1) * (12/fosc)
0000H 90H R1 , #100 R0 , #100 R0 , LOOP1 R1 , LOOP1 LOOP
例2 跑马灯
任务:D1,D2,D3循环亮灭, D1 →D2→D3 ↑ ↓ 一个时间只有一个亮, 每个1秒转换一次。
VCC
VCC
VCC
1
1
D1
D2
D3
2
2
R1
R2
R3 1 2 3 P1.0 P1.1 P1.2 89C51
程序3
ORG LOOP: LOOP0: MOV MOV MOV RR CALL DJNZ SJMP 0000H A, #0FBH R0, #3 P1 , A A DT R0, LOOP0 LOOP
7行
程序4
LOOP0: LOOP1: LOOP2: ORG 0000H MOV R7 , #0 ORL P1 , #07H CJNE R7 , #0 , LOOP3 INC R7 ANL P1 , #0FBH SJMP LOOP5 CJNE R7 , #1 , LOOP4 INC R7 ANL P1 , #0FDH SJMP LOOP5 CJNE R7 , #02 , LOOP0 MOV R7 , #0 ANL P1 , #0FEH CALL DT SJMP LOOP1 ;全熄灭 ; D1亮
2
1
程序1: LOOP0: ORG 0000H ORL P1 , #07H ANL P1 , #0FBH CALL DT ORL ANL CALL P1 , #07H P1 , #0FDH DT ; 全熄灭 ; D1亮 ;延时 ;全熄灭 ; D2亮 ;延时 ;全熄灭 ; D3亮 ;延时
ORL P1 , #07H ANL P1 , #0FEH CALL DT SJMP LOOP0
LOOP3:
; D2亮
LOOP4:
LOOP5:
; D3亮 ;延时
例3
步进电机
任务1:初始化步进电机
START: ;初始化 MOV DPTR,#30H;表基址 L5: MOV R7, #0H;百位 L9: MOV R6, #0H;十位 L10: MOV R5, #0H;个位 MOV IE,#82H ;全局中断,T0中断允许 ORL IP,#2H ;逻辑或,T0中断优先级高 MOV TMOD,#11H ;定时器方式字,T1和T0都工作在方式1,16位的计 数器GATE等于0,不受外部控制 P4 EQU 0C0H ;声明P4地址 MOV P4,#0FFH P4SW EQU 0BBH ;声明P4SW寄存器的地址 MOV P4SW,#70H SETB p1.1 SETB P1.4 ;CE2置高 SETB P1.3 ;CE1置高