?? 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 + -