📄 deng3.elc
字号:
;#EMC78P156
;时钟频率8MHz(晶振),指令周期2,TCC分频1/4
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLl
#include D:\lyk\pro\DENG\DENG\INC156.inc
R_ACC == 0X10 ;通用计数器
cnt3 == 0X11
PPCNT == 0X12
PWM == 0X13
temp4 == 0X14
FLAG == 0X15
KEYBUF == 0X16
KEYCODE == 0X17
KEYCNT == 0X18
OLDKEY == 0X19
DD == 0X1A
SACC == 0X1B
SPSW == 0X1C
SACC2 == 0X1D
SPSW2 == 0X1E
TTCNT1 == 0X1F
N16_H8 == 0X20
N16_L8 == 0X21
temp9 == 0X22
temp3 == 0X23
TCON == 0X24
TCON2 == 0X25
delaycnt == 0X26
breakcnt == 0X27
begincnt == 0X28
kp5 == 0X29
kp6 == 0X2a
ktemp == 0X2b
zstep == 0X2c
flag1 == 0X2d
PTCNT == 0X2e
TTcnt == 0X2f
TT2 == 0X30
TT1 == 0X31
TCON3 == 0X32
PWM2 == 0X33
ramd2 == 0X34
ramd == 0X35
cntkey == 0X36
sstep == 0X38
cnt1 == 0X39
cnt8 == 0X3a
IRDATA == 0X3b
rec00 == 0X3c
rec11 == 0X3d
rec22 == 0X3e
rec33 == 0X3f
;*********************************************************************
#DEFINE e0_s FLAG1.7
#DEFINE e1_s FLAG1.6
#DEFINE is_rec FLAG1.5
#DEFINE b0_s FLAG1.4
#DEFINE b1_s FLAG1.3
#DEFINE is_key FLAG1.2 ;有键标志位
#DEFINE ir_key FLAG1.1 ;有键标志位
#DEFINE ttt_s FLAG1.0 ;标志位
#DEFINE POWER_S FLAG.1 ;可控硅总控制继电器开关标志位
#DEFINE J1_S FLAG.0 ;继电器1开关标志位
#DEFINE J2_S FLAG.7 ;继电器2开关标志位
#DEFINE J3_S FLAG.6 ;继电器3开关标志位
#DEFINE DANG 10 ;档调制最小单位
#DEFINE DDMAX 4 ;分4档
;#DEFINE T_CC 0xc3 ;(1/3.92M)*2*4*(256-195)=124.48us
;#DEFINE T_CC 0xc8 ;(1/3.58M)*2*4*(256-200)=150us
;#DEFINE T_CC 0xc3 ;(1/8M)*2*4*(256-195)=62us
#DEFINE T_CC 0xd2 ;(1/8M)*2*4*(256-210)=46us
;**************键值定义***********************************************
#DEFINE KUP 0X02 ;加键
#DEFINE J1 0X20 ;J1
#DEFINE KPOWER 0X04 ;灯开关
#DEFINE J2 0X80 ;J2
#DEFINE KDOWN 0X08 ;减键
#DEFINE J3 0X40 ;J3
;**************遥控键值定义***********************************************
;------LCCK003L遥控器L---------------------------
#DEFINE K1_KUP 0X01
#DEFINE K2_J2 0X08
#DEFINE K3_KPOWER 0X04
#DEFINE K4_J3 0X05
#DEFINE K5_KDOWN 0X07
#DEFINE K6_J1 0X02
;------LCCK003R新遥控器R---------------------------
;#DEFINE K1_KUP 0X0c
;#DEFINE K2_J2 0X09
;#DEFINE K3_KPOWER 0X0d
;#DEFINE K4_J3 0X06
;#DEFINE K5_KDOWN 0X0e
;#DEFINE K6_J1 0X03
;*************遥控器地址***************************************************
#define ADDR1 0x80
#define ADDR0 0x7f
;**************************************************************************
#define PPP0 160 ;100-255
#define PPP1 100
;======================================================================================
ORG 0 ;上电时程序入口
JMP RESET
nop
nop
NOP
NOP
NOP
NOP
nop
;//中断入口
ORG 8 ;中断程序入口
disi
if EXIF==1
MOV SACC,A ;backup A
SWAPA 0X03
MOV SPSW,A ;backup PSW
RF=0
PPCNT=0
_if POWER_S==0
jmp _stoppwm
if DD==4
if PWM>=245
jmp _fool22
endif
endif
_stoppwm:
P6.5=0
_fool22:
;*******************以是输出处理程序****************
;------------------------------------------------------------------
;------------------------------------------------------------------
if DD==4
PWM2=250
endif
if DD==3
PWM2=177
endif
if DD==2
PWM2=155
endif
if DD==1
PWM2=140
endif
;******************档与PWM的转换********************
if PWM==PWM2
PTCNT=0
jmp _nnn
endif
if ++PTCNT>1
PTCNT=0
if PWM<PWM2
PWM++
if PWM<245
if PWM>183
PWM=PWM+3
if DD==4
if PWM>=242
PWM=PWM2
endif
endif
jmp _nnn
endif
endif
endif
if PWM>PWM2
PWM--
if PWM>183
PWM=PWM-3
jmp _nnn
endif
endif
endif
_nnn:
;***************************************************
TCC=PWM
ttt_s=0
if begincnt>0
begincnt--
endif
if is_rec==0
SCANKEY() ;读键
endif
wdtc
!IOCF=1
SWAPA SPSW ;restore PSW
MOV PSW,A
SWAP SACC ;restore A
SWAPA SACC
RETI
endif
;*********************************************************************************
if TCIF==1 ;TCC时间中断
MOV SACC2,A ;backup A
SWAPA 0X03
MOV SPSW2,A ;backup PSW
TCIF=0
if begincnt==0
if POWER_S==1
P6.5=1
nop
nop
nop
nop
nop
endif
endif
if ttt_s==0
ttt_s=1
TCC=PPP1 ;TCC置初值
else
ttt_s=0
!IOCF=4
endif
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
if ttt_s==1
if is_rec==0
jmp TIMER
endif
endif
jmp back
endif
RF=0
eni
jmp main
;*******************初始化**********************
;//判断复位方式,决定复位程序
RESET:
DISI
SWAPA PSW
AND A,@0X01
IF A==0X01
;是上电复位,执行完全复位
initRST() ;定义特殊寄存器
P6=0
P5=0
init() ;清零通用寄存器
flag=0
flag1=0
TCC=T_CC
DD=4 ;上电预置为4档
ttt_s=0
PWM2=200
PWM=200
begincnt=100 ;上电后10个电网周期不对可控硅控制
ENI
ELSE
;非上电复位
initRST()
ENI
ENDIF
;*********************主程序********************
MAIN:
;==========红外接收前处理========
_if P6.4==1
jmp _no_ir
delay()
_if P6.4==1
jmp _no_ir
delay()
_if P6.4==1
jmp _no_ir
delay()
_if P6.4==1
jmp _no_ir
delay()
_if P6.4==1
jmp _no_ir
delay()
_if P6.4==1
jmp _no_ir
;----检测start-------
breakcnt=0
do
_if P6.4==1
jmp _ir0
delay()
while ++breakcnt<96
jmp _no_ir
_ir0:
breakcnt=0
do
delay()
_if P6.4==0
jmp _no_ir
while ++breakcnt<21
;-----是start---------
b0_s=1
breakcnt=0
do
delay()
_if P6.4==0
jmp _ir1
while ++breakcnt<96
jmp _no_ir
_ir1:
cnt1=20
is_rec=0
do
read() ;红外接收
delay()
while is_rec==1
_no_ir:
if P6.4==1
delay()
if cnt1<250
cnt1++
else
cnt8=0
is_rec=0
endif
endif
cnt8=0
is_rec=0
;=========================================
wdtc
_IF is_key==1
jmp _is_key_jmp
;----红外遥控键处理-----------
if ir_key==1
ir_key=0
switch IRDATA
case k1_KUP
KEYCODE=KUP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -