📄 pic
字号:
RTCC EQU 1
PC EQU 2
STATUS EQU 3
FSR EQU 4
RA EQU 5
RB EQU 6
RC EQU 7
PLJS EQU 8
TIMECOUNT EQU 9
COUNT EQU 0AH
COUNT1 EQU 0BH
SDJS EQU 0CH ; 手动级数 1---4
JSGS EQU 0DH ;接收个数,看接受了几个信号,0--8
SHOW1 EQU 10 ; 放显示的最高位置
SHOW2 EQU 11
SHOW3 EQU 12
SHOW4 EQU 13
LIGHT1 EQU 14 ;放灯管的显示
LIGHT2 EQU 15
LIGHT3 EQU 16
LIGHT4 EQU 17
LIGHT5 EQU 18
TEMP0 EQU 19
TEMP1 EQU 01AH
TEMP2 EQU 01BH
TEMP3 EQU 01CH
TEMP4 EQU 01DH
PIC54 EQU 3FFH
SUB EQU 0
--------------------------------------
ORG PIC54
GOTO MAIN
-----------------------------------
ORG SUB
------------------------------
DELAY1MS
MOVLW 200
MOVWF TEMP1
L1:
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ TEMP1
GOTO L1
RETLW 0
CONVERT ADDWF PC ;共阳数码管显示???
RETLW 03FH ;0
RETLW 006H ;1
RETLW 05BH ;2
RETLW 04FH ;3
RETLW 055H ;4
RETLW 05DH ;5
RETLW 07DH ;6
RETLW 007H ;7
RETLW 07FH ;8
RETLW 06FH ;9
SHOWJS ;显示级数的一段程序 SHOW1 SHOW2 SHOW3 SHOW4 显示到数码管中去
MOVLW 0
TRIC RB
BCF RC,7
BSF RC,6
BSF RC,5
BCF RC,4
MOVF SHOW1,W
CALL CONVERT
MOVWF 6
CALL DELAY1MS
BCF RC,7 ; ABCD,假设A是最高位
BSF RC,6
BSF RC,5
BSF RC,4
MOVF SHOW2,W
CALL CONVERT
MOVWF 6
CALL DELAY1MS
BSF RC,7
BCF RC,6
BCF RC,5
BCF RC,4
MOVF SHOW3,W
CALL CONVERT
MOVWF 6
CALL DELAY1MS
BSF RC,7
BCF RC,6
BCF RC,5
BSF RC,4
MOVF SHOW4,W
CALL CONVERT
MOVWF 6
CALL DELAY1MS
RETLW 0
---------------------------------
MAIN
MOVLW B'00001110'
TRIS RC
BTFSS RC,1
GOTO SENDWAVE
BTFSS RC,2
GOTO SENDWAVE
LOOPC1
MOVLW 160
MOVWF TIMECOUNT
MOVWF COUNT
MOVLW 07H ;定了5.2s时间
OPTION
CLRF RTCC
LOOPC2
MOVLW 255 ;第一次做rtcc判断,防止程序运行时间过长影响TIMECOUNT记数
SUBWF RTCC,W
SKPZ
GOTO PL1
DECF TIMECOUNT,1
CLRF RCTT
SKPNZ
GOTO ENDPC
PL1
MOVLW 1
MOVWF SHOW1
MOVLW 0
MOVWF SHOW4
MOVLW 1
SUBWF PLJS,W
SKPZ
GOTO PL2
MOVLW 1
MOVWF SHOW2
MOVLW 8
MOVWF SHOW3
GOTO PLEND
PL2
MOVLW 2
SUBWF PLJS,W
SKPZ
GOTO PL3
MOVLW 1
MOVWF SHOW2
MOVLW 9
MOVWF SHOW3
GOTO PLEND
PL3
MOVLW 3
SUBWF PLJS,W
SKPZ
GOTO PL4
MOVLW 2
MOVWF SHOW2
MOVLW 0
MOVWF SHOW3
GOTO PLEND
PL4
MOVLW 4
SUBWF PLJS,W
SKPZ
GOTO PL5
MOVLW 2
MOVWF SHOW2
MOVLW 1
MOVWF SHOW3
GOTO PLEND
PL5
MOVLW 5
SUBWF PLJS,W
SKPZ
GOTO PL6
MOVLW 2
MOVWF SHOW2
MOVLW 2
MOVWF SHOW3
GOTO PLEND
PL6
MOVLW 6
SUBWF PLJS,W
SKPZ
GOTO PL7
MOVLW 2
MOVWF SHOW2
MOVLW 3
MOVWF SHOW3
GOTO PLEND
PL7
MOVLW 7
SUBWF PLJS,W
SKPZ
GOTO PL8
MOVLW 2
MOVWF SHOW2
MOVLW 4
MOVWF SHOW3
GOTO PLEND
PL8
MOVLW 8
SUBWF PLJS,W
SKPZ
GOTO PL9
MOVLW 2
MOVWF SHOW2
MOVLW 5
MOVWF SHOW3
GOTO PLEND
PL9
MOVLW 9
SUBWF PLJS,W
SKPZ
GOTO PL10
MOVLW 2
MOVWF SHOW2
MOVLW 6
MOVWF SHOW3
GOTO PLEND
PL10
MOVLW 10
SUBWF PLJS,W
SKPZ
GOTO PL11
MOVLW 2
MOVWF SHOW2
MOVLW 7
MOVWF SHOW3
GOTO PLEND
PL11
MOVLW 11
SUBWF PLJS,W
SKPZ
GOTO PL2
MOVLW 2
MOVWF SHOW2
MOVLW 8
MOVWF SHOW3
GOTO PLEND
PL12
MOVLW 12
SUBWF PLJS,W
SKPZ
GOTO PL13
MOVLW 2
MOVWF SHOW2
MOVLW 9
MOVWF SHOW3
GOTO PLEND
PL13
MOVLW 13
SUBWF PLJS,W
SKPZ
GOTO PL14
MOVLW 3
MOVWF SHOW2
MOVLW 0
MOVWF SHOW3
GOTO PLEND
PL14
MOVLW 14
SUBWF PLJS,W
SKPZ
GOTO PL15
MOVLW 3
MOVWF SHOW2
MOVLW 1
MOVWF SHOW3
GOTO PLEND
PL15
MOVLW 15
SUBWF PLJS,W
SKPZ
GOTO PL16
MOVLW 3
MOVWF SHOW2
MOVLW 2
MOVWF SHOW3
GOTO PLEND
PL16
MOVLW 16
SUBWF PLJS,W
SKPZ
GOTO PL17
MOVLW 3
MOVWF SHOW2
MOVLW 3
MOVWF SHOW3
GOTO PLEND
PL17 ;如果PLJS不在1--16范围内则 显示0 0 0 0
MOVLW 0
MOVWF SHOW2
MOVWF SHOW3
MOVWF SHOW1
MOVWF SHOW4
PLEND
CALL SHOWJS
MOVLW 255 ;第二次做rtcc判断,防止程序运行时间过长影响TIMECOUNT记数
SUBWF RTCC,W
SKPZ ;RTCC 一直保持255,怎么办?会多次TIMECOUNT--
GOTO NEXTRC1 ;如果RTCC 一到255,就清0,就会少256*0.5= 128us =0.13ms
DECF TIMECOUNT,1
CLRF RTCC
SKPNZ
GOTO ENDPC
NEXTRC1
TEFSS RC,1 ;RC1=1 RC2=0 PLJS=PLJS+1
GOTO NEXTRC2
TEFSC RC,2
GOTO LOOPC1
CALL DELAY1MS
TEFSS RC,1
GOTO NEXTRC2
TEFSC RC,2
GOTO LOOPC1
MOVF TIMECOUNT,W ;如果两次加减操作时间间隔小于0.5秒的话,则不做加减!
SUBWF COUNT,W
MOVWF TEMP2
MOVLW 15
SUBWF TEMP2
SKPNC
GOTO NEXTRC2
;MOVF TIMECOUNT,W
;MOVWF COUNT
INCF PLJS,1
MOVLW 16 ; if (pljs>16) pljs=16
SUBWF PLJS,W
SKPC
GOTO LOOPC1
MOVLW 16
MOVWF PLJS
GOTO LOOPC1 ;重新进行5.2s记时
NEXTRC2
TEFSS RC,2
GOTO LOOPC2
TEFSC RC,1
GOTO LOOPC1
CALL DELAY1MS
TEFSS RC,2
GOTO LOOPC2
TEFSC RC,1
GOTO LOOPC1
MOVF TIMECOUNT,W
SUBWF COUNT,W
MOVWF TEMP2
MOVLW 15
SUBWF TEMP2
SKPNC
GOTO LOOPC2
DECF PLJS,1
MOVF PLJS,F ;IF (PLJS==0) PLJS=1
SKPZ
GOTO LOOPC1
MOVLW 1
MOVWF PLJS
GOTO LOOPC1
ENDPC
GOTO SENDWAVE
-----------------------------------------------------
;;;SENDWAVE
CONVERT1 MOVWF PC
TABLE1 RETLW 32 ; 49 ;1
RETLW 30 ; 46 ;2
RETLW 27 ;42
RETLW 25 ;38
RETLW 23 ;35
RETLW 20 ; 32
RETLW 18 ; 28
RETLW 16 ; 25
RETLW 14 ;22
RETLW 12 ; 19 ;10
RETLW 10 ; 16
RETLW 8 ; 13
RETLW 6 ; 10
RETLW 4 ;7
RETLW 2 ; 4
RETLW 0 ;1 ;16
SENDWAVE ;发射子程序
MOVLW B'0000100' ;RC3为发射断口
;这个地方要根据电路图定!!!!!!!!!!!!
TRIS RC
CLRF RC
---------------
MOVLW 32 ;这里增加一个降32及的程序段
MOVLW TEMP1
LOOPS1
;假设他为上升沿触发
BSF RC,0
NOP
NOP
BCF RC,0
DECF TEMP1,1
SKPZ
GOTO LOOPS1
----------------
MOVLW TABLE
MOVWF COUNT
MOVF PLJS,0
ADDWF COUNT,0 ;--->W
CALL CONVERT1
MOVWF COUNT1 ; 得到的数防在COUNT1中
MOVLW 4
MOVWF COUNT
LOOPS2
BSF RC,3 ;!!!!!!!!!!!!!!!发射口选择
MOVLW 186 ;延时 先做750个指令周期,再根据count1做一定时间
MOVWF TIMECOUNT ;186*4=744
LOOPS3 NOP
DECFSZ TIMECOUNT,1
GOTO LOOPS3 ;1+1+(1+1+2)186+2=748
NOP
NOP ;2
LOOPS4 DECFSZ COUNT1,1 ;(1+2)*COUNT1+2
GOTO LOOPS4
;748+(1+2)*COUNT1+2+2 = 752+(1+2)*COUNT1
BCF RC,3 ;这句话也要占时间?????
MOVLW 186 ;延时 先做750个指令周期,再根据count1做一定时间
MOVWF TIMECOUNT ;186*4=744
LOOPS5 NOP
DECFSZ TIMECOUNT,1
GOTO LOOPS5 ;1+1+(1+1+2)186+2=748
;2
LOOPS6 DECFSZ COUNT1,1 ;(1+2)*COUNT1+2
GOTO LOOPS6
;748+(1+2)*COUNT1+2 = 750+(1+2)*COUNT1
DECFSZ COUNT,1 ;发送4次
GOTO LOOPS2 ;748+(1+2)*COUNT1+2+2 = 752+(1+2)*COUNT1 假设他转移的时间内保持原壮
GOTO RECEWAVE
---------------------------------------------------
--------------------------------------------------------------------
RECEWAVE
CLRF RTCC
MOVLW B'0100'
TRIS RA ; RA2用于接收信号根据具体电路图而定
MOVLW
MOVLW 06H
OPTIOIN ; 1:128
MOVLW 0
MOVWF TIMECOUNT
MOVLW 0
MOVWF JSGS
LOOPR1
MOVLW 0
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC0
MOVLW 3
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC3
MOVLW 5
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC5
MOVLW 6
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC6
MOVLW 7
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC7
MOVLW 8
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC8
MOVLW 9
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC9
MOVLW 10
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC10
MOVLW 11
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC11
MOVLW 12
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC12
MOVLW 13
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC13
MOVLW 14
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC14
MOVLW 15
SUBWF TIMECOUNT,0
SKPNZ
GOTO TC15
------;
TC0
MOVLW 250
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC3
MOVLW 60
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC5
MOVLW 1
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC6
MOVLW 73
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC7
MOVLW 67
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC8
MOVLW 14
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 186
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC9
MOVLW 87
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 212
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC10
MOVLW 65
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 174
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC11
MOVLW 12
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 106
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 184
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC12
MOVLW 6
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 84
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 147
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 209
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC13
MOVLW 18
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 94
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 141
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 188
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 235
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
GOTO RECEIVE
TC14
MOVLW 25
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 72
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 119
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 166
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 213
SUBWF RTCC ,0
SKPNZ
GOTO CHULI
MOVLW 144
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -