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