红外遥控窗帘.docx
《红外遥控窗帘.docx》由会员分享,可在线阅读,更多相关《红外遥控窗帘.docx(25页珍藏版)》请在冰豆网上搜索。
![红外遥控窗帘.docx](https://file1.bdocx.com/fileroot1/2022-11/15/f561bfc2-e590-4f6d-a6a6-d7e74b005984/f561bfc2-e590-4f6d-a6a6-d7e74b0059841.gif)
红外遥控窗帘
红外遥控窗帘
汇编编程:
REDDATA_FLAGBIT2AH;是否新操作
POSITION_FLAGBIT2BH;现在位置,因为限位只在升完与降完才中断=1在上
STOP_FLAGBIT2CH;停止标志=1则停
UP_FLAGBIT2DH;=1升
DOWN_FLAGBIT2EH;=1降
SPEED_FLAGBIT2FH;=1高速
MIN_FLAGBIT50H;分钟标志
MS256_FLAGBIT51H;256ms标志
SETTIME_FLAGBIT52H;=1正在设置时间
CAN_DEC_TIMEBIT53H;允许倒计时
SETDATA_FLAGBIT54H;=1正在设置机器码
OVER_PL_FLAGBITP2.4;过载测试口
NIGHT_DAY_FLAGBITP2.3;=1天黑
OVER_LEDBITP2.7;过载指示灯
ZZBITP2.5;正反转
ZFBITP2.6
SDABITP3.6;定义24C02数据线
SCLBITP3.7;定义24C02时钟线
RSBITP1.2
RWBITP1.1
EBITP1.0
ORG0000H
SJMPMAIN
ORG0003
LJMPBD_INT0
ORG000BH
LJMPBD_T0
ORG0013H
LJMPBD_INT1
ORG001BH
LJMPBD_T1
MAIN:
MOVSP,#4FH
MOV15H,#0;接收的机器码个数
MOV28H,#0EAH
MOV29H,#060H
MOV27H,#11110000B;占空比
MOV2BH,#8;过载计时
MOV10H,#30H;初始时间为00:
00
MOV11H,#30H
MOV12H,#30H
MOV13H,#30H
MOV14H,#0
;位标志初始化
CLR28H
CLR29H
CLRZZ
CLRZF
CLRMIN_FLAG
SETBSTOP_FLAG
CLRDOWN_FLAG
CLRUP_FLAG
CLRPOSITION_FLAG
CLRREDDATA_FLAG
CLRSPEED_FLAG
CLRSETTIME_FLAG
CLRSETDATA_FLAG
CLRCAN_DEC_TIME
;中断初始化
;--------------
CLRTR1
MOVTH1,#0FCH
MOVTL1,#18H;1MS
MOVIP,#0DH
MOVTMOD,#11H
MOVTH0,#00H
MOVTL0,#00H
CLRTR0
SETBIT1
CLRIE1
SETBP3.3
SETBP3.2
SETBIT0
CLRIE0
SETBEX0
SETBET0
SETBEX1
SETBET1
SETBEA
SETBTR1
;------------
LCALLCLR_DISP_BUFFER
LCALLGETNEWROM
LCALLGETNEWTIME
LCALLLCDDISP
MAINLOOP:
LCALLDELAY50MS
SETBNIGHT_DAY_FLAG
MOVC,NIGHT_DAY_FLAG
JNCCONTINUE
SETBDOWN_FLAG
CLRIE1
SETBEX1
CONTINUE:
JNBMIN_FLAG,CONTINUE2
JBSETTIME_FLAG,CONTINUE2
JNBCAN_DEC_TIME,CONTINUE2
LCALLDECTIME
LCALLGETNEWTIME
LCALLLCDDISP
CONTINUE2:
CLRMIN_FLAG
JNBREDDATA_FLAG,MAINLOOP
LCALLSYSTEM_OPERTION
CLRREDDATA_FLAG
SJMPMAINLOOP
SJMP$
;-----------------------------------
;2AH操作码更新标志
;
(1)R0R1R4R5R6R7BACY
;功能性永久使用:
;
;10H11H12H13H14H15H
;21H~24H25H(28H~2FH)26H27H28H29H2AH(50H~57H)2BH
;显示:
30H~4FH
;SP50H~7FH
;============================================================================================================================================
BD_INT1:
CLRDOWN_FLAG
CLRUP_FLAG
SETBSTOP_FLAG
CPLPOSITION_FLAG
CLREX1;去抖重启在中断0
RETI
;--------------------------
;27H,#00000111B;占空比分钟计数值28H29H=60000ms
BD_T1:
MOVTH1,#0FCH
MOVTL1,#18H;1MS
PUSHPSW
PUSHA
JNBSTOP_FLAG,NOSTOP
CLRDOWN_FLAG
CLRUP_FLAG
CLRZZ
CLRZF
CLRSTOP_FLAG
SJMPTIME_MIN
NOSTOP:
JNBPOSITION_FLAG,ON_DOWN
JBDOWN_FLAG,GO_DOWN
CLRUP_FLAG
SJMPTIME_MIN
ON_DOWN:
JBUP_FLAG,GO_UP
CLRDOWN_FLAG
SJMPTIME_MIN
GO_DOWN:
JNBSPEED_FLAG,SLOW_DOWN
SETBZF
CLRZZ
SJMPTIME_MIN
SLOW_DOWN:
MOVA,27H
RLA
MOV27H,A
MOVC,ACC.0
MOVZF,C
CLRZZ
SJMPTIME_MIN
GO_UP:
JNBSPEED_FLAG,SLOW_UP
SETBZZ
CLRZF
SJMPTIME_MIN
SLOW_UP:
MOVA,27H
RLA
MOV27H,A
MOVC,ACC.0
MOVZZ,C
CLRZF
TIME_MIN:
DEC29H
MOVA,29H
JNZOUT_T1
JNBSPEED_FLAG,TIME_MIN_CONT
SETBOVER_PL_FLAG
MOVC,OVER_PL_FLAG
JCOVER_P
MOV2BH,#12
;SETBMIN_FLAG;要删
SETBOVER_LED
SJMPTIME_MIN_CONT
OVER_P:
CLROVER_LED
DEC2BH
MOVA,2BH
JNZTIME_MIN_CONT
SETBSTOP_FLAG
TIME_MIN_CONT:
DEC28H
MOVA,28H
JNZOUT_T1
SETBMIN_FLAG
MOV28H,#0EAH
MOV29H,#060H
OUT_T1:
POPA
POPPSW
RETI
;----------------------------------------------------------
;24H为所读数据26H为完成位数位28H完成否须操作了位29H标记在取位否2AH在主程序用作是否新操作(循环运行到)(1013.5201.01.72.2)(5.19.521.01.72.2)
;使用的资源:
(2)位28h29h20H~23H26H
BD_INT0:
CLRIE1
SETBEX1
PUSHA
PUSHPSW
MOVA,TH0
SETBTR0
MOVTH0,#00H
MOVTL0,#00H
CLRC
CJNEA,#20,C_5MS
C_5MS:
JCC_1_0
CLRC
CJNEA,#80,C_20MS
C_20MS:
JCC_32
CLR29H
SJMPOUTINTR0
C_32:
SETB29H
MOV26H,#20H
SJMPOUTINTR0
C_1_0:
JNB29H,OUTINTR0
CLRC
CJNEA,#7,C_DATA_1_0
C_DATA_1_0:
;MOV2BH,C
;MOVR2,A
;MOVA,R1
;ADDA,26H
;MOVR0,A;>=0.77GO=0
;MOVA,R2
;MOV@R0,A
;MOVC,2BH
MOVA,23H
RLCA
MOV23H,A
MOVA,22H
RLCA
MOV22H,A
MOVA,21H
RLCA
MOV21H,A
MOVA,20H
RLCA
MOV20H,A
DJNZ26H,OUTINTR0
SETB28H;断点测试点
CLR29H
MOVA,20H
;CPLA
CLRC
SUBBA,21H
JZOK_SEMDATA
CLR28H
SJMPOUTINTR0
OK_SEMDATA:
MOVA,22H
CPLA
CLRC
SUBBA,23H
JZOK_DATA
CLR28H
SJMPOUTINTR0
OK_DATA:
MOVA,23H
MOV24H,A
OUTINTR0:
POPPSW
POPA
RETI
;-----------定时T0
BD_T0:
CLRTR0
MOVTH0,#00H
MOVTL0,#00H
JNB28H,RBK
SETBREDDATA_FLAG
RBK:
CLR28H
CLR29H
RETI
;------------------------------------------------------------------
STOR_DATA:
MOVR0,#30H
LOOPCLRW:
MOVB,@R0
LCALLWRITE_BYTE
LCALLDELAY2MS
INCR0
CJNER0,#40H,LOOPCLRW
RET
GETNEWROM:
MOVR0,#30H
LOOPCLR:
LCALLREAD_BYTE;读EEPROM
MOV@R0,A
CLRC
SUBBA,#20H
LCALLDELAY2MS
JZOUTGET
INCR0
CJNER0,#40H,LOOPCLR
OUTGET:
RET
;----------(1