📄 遥控器s.asm
字号:
;************************************************************************
sel equ p1.7
jian equ p1.6
jia equ p1.5
seljian equ p1.4
seljia equ p1.3
jiajian equ p1.2
sd equ p3.7
;************************************************************************
;中断向量表
org 0000h
ljmp main
org 0003h ;外部中断0
ljmp main
org 000bh ;定时器/计数器0溢出
ljmp time0int
org 0013h ;外部中断1
ljmp main
org 001bh ;定时器/计数器1溢出
ljmp main
org 0023h ;串行口
ljmp main
;*************************************************************************
;这是主控程序,
; 寄存器堆为:00H至07H
; 起始地址为:0100H
; CPU的晶振频率为:1.0592MHZ
; 工作原理: 当三相不平衡时,中线上就会有一较大电流,如连续采样,该电流
; 持续0.5S,即确定三相电源不平衡
;*************************************************************************
org 0100h
main: mov sp,#30H
clr rs0
clr rs1
;main1: lcall checkcpu ;CPU内存单元检测
; cjne a,#00h,main1
main2: lcall initmachine ; 调系统数据初使化
lcall initcpu ; 调CPU 初使化
mov a,key
cjne a,#55h,main21
mov r7,#0ah ;1s延时
main22: lcall yanshi
djnz r7,main22
mov r7,#0ah
setb tr0 ;已启动100us定时
mov key,#66h
mov a,workway
cjne a,#11h,main3
mov workway,#00h
main21: mov a,workway
main3: cjne a,#00h,main4
sjmp main21
main4: cjne a,#55h,main5
mov r3,#05h
main42: lcall yanshi
mov a,p1
anl a,#0fch
cjne a,#0f8h,main41
mov p1,#0fch
djnz r3,main42
mov r3,#05h
main45: clr led_0
clr out_0
mov workway,#0ffh
mov r5,#0f0h ;10分钟延时
main44: mov r4,#19h ;2.5s延时
main43: lcall yanshi
djnz r4,main43
djnz r5,main44
mov r4,#19h
mov r5,#0f0h
setb out_0
setb led_0
lcall yanshi
lcall yanshi
lcall yanshi
mov a,p1
anl a,#0fch
cjne a,#0f8h,main41
mov workway,#55h
mov r3,#05h
sjmp main4
main41: setb out_0
setb led_0
mov r4,#19h
mov r5,#0f0h
mov r3,#05h
mov tl0,#0a3h
mov th0,#0ffh
mov workway,#00h
mov key,#66h
setb tr0
sjmp main21
main5: cjne a,#0ffh,main6
clr tr0
sjmp main45
main6: clr tr0
mov key,#55h
ljmp main
;*************************************************************************
; 系统数据初使化
initmachine: mov p1,#0fch
mov p3,#0ffh
mov workway,#11h
mov key,#55h
mov r3,#05h
mov r4,#19h
mov r5,#0f0h
ret
;************************************************************************
;************************************************************************
; CPU内存检测
;出错: A=0FFH,p1.7=0(ceshi) 正常: A=00H,p1.7=1(ceshi)
;************************************************************************
;checkcpu: mov r0,#00h
; mov r1,#20h
;checkcpu1: mov a,#55h
; mov @r0,a
; mov a,@r0
; cjne a,#55h,checkcpu2
; mov a,#0aah
; mov @r0,a
; mov a,@r0
; cjne a,#0aah,checkcpu2
; inc r0
; djnz r1,checkcpu1
; mov a,#00h
; setb ceshi
; ret
;checkcpu2: mov a,#0ffh
; clr ceshi
; ret
;***********************************************************************
;**********************************************************************
;对CPU中有关的SFR进行初始化
;***********************************************************************
initcpu: ; mov tmod,#01h
mov tcon,#00h
mov ie,#00h
;**********************************************************************
;设置定时器0 ;定时100us
;定时器0:设置成由TR0使能工作方式
; 它是对内部时钟进行定时操作
; 它按十六位计数,在中断处理中重新设置
;***********************************************************************
mov tmod,#01h
mov tl0,#0a3h
mov th0,#0ffh
;***********************************************************************
;设置中断优先级控制寄存器
;***********************************************************************
mov ip,#02h
clr es ;禁止串口中断
setb et0 ;定时器0允许中断
setb ea ;开放所有中断
ret
;***********************************************************************
time0int: clr tr0
time0int1: mov a,p1
anl a,#0fch
cjne a,#0f8h,time0int2
mov workway,#55h
mov a,workway
mov key,#66h
mov tl0,#0a3h
mov th0,#0ffh
mov p1,#0fch
reti
time0int2: mov tl0,#0a3h
mov th0,#0ffh
setb tr0
mov workway,#00h
mov a,workway
mov key,#66h
reti
;***********************************************************************
;延时100ms
yanshi: mov r2,#64h
yanshi1: mov r1,#0ah
dl2: mov r0,#18h
dl1: nop
nop
djnz r0,dl1
nop
djnz r1,dl2
djnz r2,yanshi1
ret
;**********************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -