📄 peitao jieshou xitong .asm
字号:
;******************************
;接收控制系统软件程序
;******************************
;
;******************************
;主程序和中断程序入口
;******************************
ORG 0000H ;复位地址
LJMP START
ORG 0003H ;外中断0中断入口地址
LJMP INT0SERVE
ORG 000BH ;定时器T0中断入口地址
RETI
ORG 0013H ;外中断1中断入口地址
RETI
ORG 001BH ;定时器T1中断入口地址
LJMP T1SERVE
ORG 0023H ;串行口中断入口地址
RETI
ORG 002BH ;定时器T2中断入口地址
RETI
; `
;******************************
;主程序
;******************************
START: MOV SP,#60H ;设堆栈
LCALL CLEAR ;调初始化程序
NOP
MAIN: JB P2.0,MAIN ;50Hz交流电过零检测等待
LCALL DELAYXUS ;调用延时子程序即控制导通角
CLR P2.7 ;发开导通角脉冲
LCALL DELAY256US ;延时256μs
SETB P2.7 ;关脉冲
LJMP MAIN
NOP
NOP
LJMP START ;设置软件陷阱
;
;******************************
;初始化程序
;******************************
CLEAR: MOV A,#0FFH
MOV P0,A ;P1~P3口置位
MOV P1,A
MOV P2,A
MOV P3,A
MOV B,#26H ;设置导通角为零的延时值
MOV P1,#0FEH
SETB 50H ;默认设置电机为停标志位
SETB P2.7
MOV IE,#00H ;关总中断
CLR RS0 ;设当前工作区为0区
CLR RS1
MOV IP,#01H ;设优先级
SETB EX0 ;开外中断0
SETB IT0
MOV TMOD,#10H
MOV TH1,#3CH ;开定时器1
MOV TL1,#0B0H
SETB ET1
SETB TR1
MOV R7,#0AH
SETB EA ;开总中断
RET
;
;******************************
;外部中断0服务程序
;******************************
INT0SERVE: CLR EX0 ;关外中断0
JNB P3.1,INT0SERVE1 ;确认中断
INT0RET: SETB EX0 ;开外中断0,返回
RETI
INT0SERVE1: CLR A
MOV DPH,A ;清DPTR
MOV DPL,A
INT0SERVE2: JB P3.1,INT0SERVE3 ;用DPTR对第一个低电平计时
INC DPTR
NOP
NOP
AJMP INT0SERVE2 ;循环周期是8μs
INT0SERVE3: MOV A,DPH ;DPTR的高8位放入A中
JZ INT0RET ;不为0,说明DPL有进位则8μs×255=2ms,
;即是第一个脉冲。为0,说明内小于2ms是一干扰
CLR A
INT0SERVE4: INC A ;脉冲个数加1
INT0SERVE5: JNB P3.1,INT0SERVE5 ;等待低电平
MOV R1,#06H ;帧间高电平宽度判断定时值,即一帧结束的判断
INT0SERVE6: JNB P3.1,INT0SERVE4 ;低电平时转脉冲个数加1
LCALL DELAY513US ;延时513μs
DJNZ R1,INT0SERVE6
DEC A ;超过3ms判定为一帧结束
DEC A
JZ FUNCTION0 ;为0则转功能0
DEC A
JZ FUNCTION1 ;为0则转功能1
DEC A
JZ FUNCTION2 ;为0则转功能2
DEC A
JZ FUNCTION3 ;为0则转功能3
DEC A
JZ FUNCTION4 ;为0则转功能4
DEC A
JZ FUNCTION5 ;为0则转功能5
NOP
NOP
LJMP INT0RET ;返回
FUNCTION0: JB 50H,FUNCTION01
MOV B,#16H ;功能0操作3档转速
MOV P1,#0EDH
FUNCTION01: NOP
NOP
LJMP INT0RET ;返回
FUNCTION1: JB 50H,FUNCTION11
MOV B,#1CH ;功能操作1档转速
MOV P1,#0F9H
FUNCTION11: NOP
NOP
LJMP INT0RET ;返回
FUNCTION2: JB 50H,FUNCTION21
MOV B,#12H ;功能2操作4档转速
MOV P1,#0DDH
FUNCTION21: NOP
NOP
LJMP INT0RET ;返回
FUNCTION3: JB 50H,FUNCTION31
MOV B,#19H ;功能3操作3档转速
MOV P1,#0F5H
FUNCTION31: NOP
NOP
LJMP INT0RET ;返回
FUNCTION4: JB 50H,FUNCTION41
MOV B,#0EH ;功能4操作5档转速
MOV P1,#0BDH
FUNCTION41: NOP
LJMP INT0RET ;返回
FUNCTION5: JB 50H,FUNCTION51 ;功能5操作电机启/停操作
SETB 50H
MOV B,#26H
MOV P1,#0FEH
AJMP FUNCTION52
FUNCTION51: CLR 50H
MOV B,#1CH
MOV P1,#0F9H
FUNCTION52: NOP
NOP
LJMP INT0RET
;
;****************************************
;控制导通角延时程序
;****************************************
DELAYXUS: MOV R2,B
DELAYXUS1: LCALL DELAY256US
DJNZ R2,DELAYXUS1
RET
;
;****************************************
;闪烁调节,定计1中断服务程序
;****************************************
T1SERVE: CLR TR1
CLR ET1
DJNZ R7,T1SERVERET
MOV R7,#0AH
JB 50H,T1SERVE1
CPL P1.1
AJMP T1SERVERET
T1SERVE1: CPL P1.0
T1SERVERET: MOV TH1,#3CH
MOV TL1,#0B0H
SETB ET1
SETB TR1
RETI
;
;****************************************
;延时256μs程序
;****************************************
DELAY256US: MOV R4,#126
DELAY256US1: DJNZ R4,DELAY256US1
RET
;
;****************************************
;延时513μs程序
;****************************************
DELAY513US: MOV R5,#254
DELAY513US1: DJNZ R4,DELAY513US1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -