📄 nuanfeng.asm
字号:
CLR DIV3
PRO: BC R3,C ;*1024,标准电阻10K,相当于放大102.4倍
RLC DIV1
RLC DIV2
RLC DIV3
DJZ DCNT1
JMP PRO
;MOV A,@10
;MOV CHENG1,A
;CALL MULTIPLICATION
MOV A,@R10KTC1
MOV R4,A
CALL AVERAGE
MOV A,R_ADL
MOV CHU1,A
CALL DIVISION
BC SHANG1,0 ;防止比较时候益处,将表格最大值置为ff
CLR DCNT1
PRT00: MOV A,SHANG2
SUB A,@5 ;高位与5比较,
JBS R3,C
JMP PRT6
PTRXX: MOV A,SHANG2
JMP PRTTAB
PRT0: MOV A,DCNT1
CALL TEMPTAB0 ;从小到大排列
JMP PRTXX
PRT1: MOV A,DCNT1
CALL TEMPTAB1 ;从小到大排列
JMP PRTXX
PRT2: MOV A,DCNT1
CALL TEMPTAB2 ;从小到大排列
JMP PRTXX
PRT3: MOV A,DCNT1
CALL TEMPTAB3 ;从小到大排列
JMP PRTXX
PRT4: MOV A,DCNT1
CALL TEMPTAB4 ;从小到大排列
JMP PRTXX
PRT5: MOV A,DCNT1
CALL TEMPTAB5 ;从小到大排列
JMP PRTXX
PRT7:
PRT6: MOV A,@15 ;小于最小值,则直接给15度
MOV TEMP,A
RET
PRTXX: SUB A,SHANG1
JBC R3,C
JMP PRDAYU
MOV A,SHANG2
CALL TEMPH
MOV TEMP,A
MOV A,DCNT1
SUB TEMP,A
SUB A,STEMP ;设置温度到
JBC R3,C
RET
BC P6,JDQ1 ;温度则关加热继电器???是不是这样处理
BC P6,JDQ2
BC FLAG1,FKO
RET
PRDAYU: INC DCNT1
JMP PTRXX
;=========================================================================
;取平均数,将采集到的4个电压值平均,
;入口:开始地址,给R4,出口R_ADL(R_ADH计算中,暂存高位)中
;========================================================================
AVERAGE: CLR R_ADL
CLR R_ADH
MOV A,@4
MOV DCNT1,A
A0: MOV A,R0
ADD R_ADL,A
JBS R3,C
JMP A1
MOV A,@1
ADD R_ADH,A
A1: INC R4
DJZ DCNT1
JMP A0
RRC R_ADH
RRC R_ADL
RRC R_ADH
RRC R_ADL
RET
;======================================================================================
;被除数是DIV3(HIGH),DIV2,DIV1(LOW)
;除数是CHU1
;商是SHANG3(HIGH),SHANG2,SHANG1(LOW)
;余数是YU
;======================================================================================
DIVISION:
CLR SHANG1
CLR SHANG2
; CLR SHANG3 ;为见小RAM,将高位去掉
CLR YU
MOV A,@24
MOV DIV_CNT,A
DIV_L:
RLC DIV1
RLC DIV2
RLC DIV3
RLC YU
JBS 3,0
JMP YU_C_0
MOV A,CHU1
SUB YU,A
BS 3,0 ;YU>CHU1
JMP DIV_SHIFT
YU_C_0:
MOV A,CHU1
SUB A,YU
JBC 3,0
MOV YU,A ;YU>CHU1
DIV_SHIFT:
RLC SHANG1
RLC SHANG2
;RLC SHANG3
DJZ DIV_CNT
JMP DIV_L
RET
;====================================================================
;将电容上的残留的电压放掉
;====================================================================
FANGDIAN0: MOV A,@0B00000110 ;1:128:,
CONTW
CLR RF
ENI
FANGDIAN: CLRA
IOW P5
DELAY2:
DELAY1: MOV A,@8
AND P5,A
RET
;=============================================================================================
;红外解码,50MS内没有读到,则返回,接收到的用户码是00FF,只要读数据码就能区分按键
;=============================================================================================
HW_TEST: BC FLAG,FHWKEY ;红外按键清除
/* MOV A,@50 ;50MS没有检测到,则退出
; MOV DCNT1,A
; HW50MS: MOV A,@200
; MOV DCNT2,A
;
; HW50MS1: JBS P6,REM ;5
; JMP ISHEADL
; DJZ DCNT2
; JMP HW50MS1
; DJZ DCNT1
; JMP HW50MS
; RET
*/
MOV A,@0X80
IOW P6 ;设为输入
;NOP
;NOP
CALL DELAY2
JBC P6,REM
JMP HW_RET
ISHEADL: MOV A,@8 ;等待8MS接收底电平
MOV DCNT1,A
HW8MS: MOV A,@200
MOV DCNT2,A
HW8MS1: JBC P6,REM
JMP HW_RET ;头L电平过短,小于8MS
DJZ DCNT2
JMP HW8MS1
DJZ DCNT1
JMP HW8MS
MOV A,@2
MOV DCNT1,A
HW2MS: MOV A,@200
MOV DCNT2,A
HW2MS1: JBC P6,REM
JMP ISHEADH
DJZ DCNT2
JMP HW2MS1
DJZ DCNT1
JMP HW2MS
JMP HW_RET ;4.5MS高电平没有到来
ISHEADH: MOV A,@4
MOV DCNT1,A
HW4MS: MOV A,@200
MOV DCNT2,A
HW4MS1: JBS P6,REM
JMP HW_RET ;4.5MSH电平国过短
DJZ DCNT2
JMP HW4MS1
DJZ DCNT1
JMP HW4MS
MOV A,@3
MOV B3,A
MOV A,@8
MOV B8,A
MOV A,@0X30
MOV R4,A
JBS P6,REM ;等待头高电平结束
JMP $+2
JMP $-2
HEADL: JBS P6,REM ;忽略底电平,根据高电平判断数据
JMP $-1 ;__|~~|__|~~~~|
CLR DCNT1
HEADH: ;NOP ;=560US为0 ,=1560us为1
;NOP
;NOP
;NOP
;NOP
;NOP
CALL DELAY1
INC DCNT1
JBC P6,REM
JMP HEADH
MOV A,DCNT1
SUB A,@100
JBS R3,C
JMP IS1
IS0: BC R3,C
RLC DCNT2
JMP IS10
IS1: BS R3,C
RLC DCNT2
IS10:DJZ B8
JMP HEADL
MOV A,@8
MOV B8,A
;MOV A,DCNT2
;MOV R0,A
;INC R4
DJZ B3
JMP HEADL
CLR DCNT1
N2: MOV A,DCNT1
CALL REMOTETAB
XOR A,DCNT2
JBS R3,Z
JMP N1
MOV A,DCNT1
MOV RKEYTC,A
XOR A,@3
JBS R3,Z
JMP READKEY
JBS FLAG1,FTIME
JMP READKEY
MOV A,@4
MOV RKEYTC,A
JMP READKEY
N1: INC DCNT1
MOV A,DCNT1
SUB A,@7
JBS R3,C
JMP HW_RET ;有借位,错
JMP N2
HW_RET: CLRA
IOW P6
RET ;全部设为输出
;=============================================================================
;每次发送完,WR为高电平,CS保持底电平,WR上升沿有效,CS底电平有效
;每次模式改变,或不连续读写时,调用此程序
;=============================================================================
SENDMODE:
BS 6,CS
;NOP
;NOP
CALL DELAY2
BC 6,CS
CALL DELAY2
;NOP
;NOP
MOV A,@3
MOV DCNT1,A
SENDJ1:
JBS RX,2
JMP SM1
BS 6,DATA
JMP SM2
SM1:
BC 6,DATA
SM2:
BC 6,WR
;NOP
;NOP
CALL DELAY2
BS 6,WR
RLC RX
DJZ DCNT1
JMP SENDJ1
RET
;=============================================================================
;每次发送完,WR为高电平,CS保持底电平,WR上升沿有效,CS底电平有效
;=============================================================================
SENDCOMMAND:
MOV A,@8
MOV DCNT1,A
J2:
JBS RX,7
JMP SC1
BS 6,DATA
JMP SC2
SC1:
BC 6,DATA
SC2:
BC 6,WR
;NOP
;NOP
CALL DELAY2
BS 6,WR
RLC RX
DJZ DCNT1
JMP J2
BC 6,DATA ;发送最后1位X
BC 6,WR
;NOP
;NOP
CALL DELAY2
BS 6, WR
RET
;=============================================================================
;每次发送完,WR为高电平,CS保持底电平,WR上升沿有效,CS底电平有效
;=============================================================================
SENDADDRESS:
MOV A,@6
MOV DCNT1,A
J3:
JBS RX,5
JMP SA1
BS 6,DATA
JMP SA2
SA1:
BC 6,DATA
SA2:
BC 6,WR
;NOP
;NOP
CALL DELAY2
BS 6,WR
RLC RX
DJZ DCNT1
JMP J3
RET
;=============================================================================
;每次发送完,WR为高电平,CS保持底电平,WR上升沿有效,CS底电平有效
;=============================================================================
SENDDATA:
MOV A,@4
MOV DCNT1,A
J4:
JBS RX,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -