⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pic

📁 以PIC16C57为核心
💻
📖 第 1 页 / 共 2 页
字号:
   SUBWF RTCC ,0
   SKPNZ
   GOTO CHULI
   GOTO RECEIVE
   
TC15
   MOVLW  19
   SUBWF RTCC ,0
   SKPNZ
   GOTO CHULI
   MOVLW  50
   SUBWF RTCC ,0
   SKPNZ
   GOTO CHULI
   MOVLW  88
   SUBWF RTCC ,0
   SKPNZ
   GOTO CHULI
   GOTO RECEIVE
   
CHULI
   MOVF RTCC ,0                ;在一个时间点上不要多次增加级数,COUNT1记录了上次增加级数是的RTCC值
   SUBWF COUNT1,0
   SKPNZ
   GOTO RECEIVE
   MOVF RTCC ,0
   MOVWF COUNT1
   BSF RC,1
   NOP  
   BCF RC,1
   
RECEIVE
   BTFSS RA,2                         ; RA2 为高电平则接受到声波
   GOTO TIMEJS
   NOP
   NOP
   NOP
   BTFSS RA,2;  再次判断
   GOTO TIMEJS
  MOVF TIMECOUNT,W
  SKPZ
  GOTO RECEIVE1
  MOVLW 138                        ;138大概是9ms,也就是1.5m 
  SUBWF RTCC ,W
  SKPNC 
  GOTO TIMEJS
 
 RECEIVE1
    INCF JSGS,F                   ;;如何把时间存下来???
    BSF  4,5
    BCF  4,6                ;选择BANK1
    MOVLW 1
    SUBWF JSGS,W
    SKPZ
    GOTO REJS2
    MOVF  RTCC,W
    MOVWF 10
    MOVF TIMECOUNT,W
    MOVWF 11
    GOTO TIMEJS
  REJS2
     MOVLW 2
    SUBWF JSGS,W
    SKPZ
    GOTO REJS3
    MOVF  RTCC,W
    MOVWF 12
    MOVF TIMECOUNT,W
    MOVWF 13
    GOTO TIMEJS
   REJS3
     MOVLW 3
    SUBWF JSGS,W
    SKPZ
    GOTO REJS4
    MOVF  RTCC,W
    MOVWF 14
    MOVF TIMECOUNT,W
    MOVWF 15 
    GOTO TIMEJS
   REJS4
     MOVLW 4
    SUBWF JSGS,W
    SKPZ
    GOTO REJS5
    MOVF  RTCC,W
    MOVWF 16
    MOVF TIMECOUNT,W
    MOVWF 17 
    GOTO TIMEJS
 REJS5
     MOVLW 5
    SUBWF JSGS,W
    SKPZ
    GOTO REJS5
    MOVF  RTCC,W
    MOVWF 18
    MOVF TIMECOUNT,W
    MOVWF 19 
    GOTO TIMEJS
  REJS6
     MOVLW 6
    SUBWF JSGS,W
    SKPZ
    GOTO REJS7
    MOVF  RTCC,W
    MOVWF 01AH
    MOVF TIMECOUNT,W
    MOVWF 01BH
    GOTO TIMEJS
  REJS7
     MOVLW 7
    SUBWF JSGS,W
    SKPZ
    GOTO REJS8
    MOVF  RTCC,W
    MOVWF 01CH
    MOVF TIMECOUNT,W
    MOVWF 01DH
    GOTO TIMEJS 
REJS8
       MOVLW 8
    SUBWF JSGS,W
    SKPZ
    GOTO TIMEJS                   ;如果超过8个怎么办?   就记录他最后一个了?????
    MOVF  RTCC,W
    MOVWF 16
    MOVF TIMECOUNT,W               ;TIMECOUNT放在高位,RTCC放在低位
    MOVWF 17  
   
TIMEJS
   MOVLW 255
   SUBWF RTCC,0
   SKPNZ
   INCF TIMECOUNT ,1
   MOVLW 16
   SUBWF TIMECOUNT,0
   SKPNZ
   GOTO DATAOP
   GOTO LOOPR1
   
   ----------------------------------------
 DATAOP                          ;数据处理部分,将采集得到的数据,最终得出结果
MOVF JSGS ,W
MOVWF TEMP4
BSF 4,5
BSF 4,6              ;BANK3
OP0 
   MOVF TEMP4 ,W
   SKPZ
   GOTO OP1
   MOVLW 0
   MOVWF TEMP2                   ;注意TEMP2 TEMP3在BANK3中      
MOVWF TEMP3                 ;TEMP2 TEMP3是得到最终结果
   
   GOTO ENDOP
OP1  MOVLW  1
    SUBWF TEMP4 ,W
    SKPZ
    GOTO OP2
                         
    MOVF 10,W
    MOVWF TEMP2
    MOVF 11,W
    MOVWF TEMP3
    GOTO ENDOP
 
OP2                               ;得到两个及两个以上的结果
  
    MOVF TEMP4 ,W
    MOVWF COUNT1                ;COUNT1作为 循环变量
OP3 
    DECF COUNT1,F
    MOVF COUNT1,F
    SKPZ                     ;如果COUNT循环完,为0,则认为没有谐波
    GOTO OPJS
    
    
    MOVF TEMP4,W
   MOVWF COUNT                 ;COUNT可以看做指针
   DECF COUNT
   RLF  COUNT,F             ;       左移一位,为找存储位置服务
   MOVLW 10H
   IORWF COUNT,F         ;跟10H或操作
   MOVF COUNT,W            
   MOVWF 4                 ;放到F4中去
   MOVF 0,W                       ;F0--》W中去    这里有问题吗?                          
   MOVWF TEMP2
   INCF COUNT,F
   MOVF COUNT,W 
   MOVWF 4
   MOVF 0,W
   MOVWF TEMP3
    
    GOTO ENDOP            ;退出
  
OPJS 
   MOVF TEMP4,W
   MOVWF COUNT                 ;COUNT可以看做指针
   DECF COUNT
   RLF  COUNT,F             ;       左移一位,为找存储位置服务
   MOVLW 10H
   IORWF COUNT,F         ;跟10H或操作
   MOVF COUNT,W            
   MOVWF 4                 ;放到F4中去
   MOVF 0,W                       ;F0--》W中去    这里有问题吗?                          
   MOVWF TEMP2
   INCF COUNT,F
   MOVF COUNT,W 
   MOVWF 4
   MOVF 0,W
   MOVWF TEMP3
   
   
   MOVF COUNT1,W
   MOVWF COUNT
   DECF COUNT
   RLF COUNT,F
   MOVLW 10H
   IORWF COUNT,F
   MOVF COUNT,W
   MOVWF 4
   MOVF 0,W                 ;f0的内容
   MOVWF TEMP0
   INCF COUNT,F
   MOVF COUNT,W
   MOVF 0,W
   MOVF TEMP1
   RLF TEMP1           ;TEMP1*2 看是否是2次谐波
   RLF TEMP0           ;temp0记录的是RTCC
   BTFSS STATUS ,C
   GOTO OP4
   INCF TEMP1,F       
OP4 
   MOVF TEMP1
   SUBWF TEMP3,W
   SKPZ
   GOTO OP3
   MOVF TEMP0
   SUBWF TEMP2,W
   MOVWF TEMP0             ;将他们的差值放在TEMP0中合适吗
   MOVLW 3
   SUBWF TEMP0
   TEFSS STATUS,C          ;TEMP0-3 如果有借位说明是有谐波的!
   GOTO OP3                ;3没有借位说明再对 1234   8    在对2进行判断
   DECF TEMP4 ,F
  GOTO OP1               ;1234   8  8已经有谐波了,再对7进行判断重新开始         
 
ENDOP
  GOTO CALRESULT             ;计算结果
-------------------------------------------------------------------------------------
JSMS                            ;计算米数的函数 TEMP5 TEMP6是接受参数,TEMP6=TIMECOUNT TMEP5=RTCC
                                ;TEMP7 TEMP8 TEMP9 TEMP10 TEMP11 是结果(5 BYTE)
     
     MOVLW 0
     MOVWF TEMP11
     MOVWF TEMP10
     MOVWF TEMP9
     MOVWF TEMP8
     MOVWF TEMP7
 JSTESTTEMP6         
     MOVF TEMP6                  ;最大误差0.004
     SKPNZ 
     GOTO  JSTESTTEMP5
     
     DECF TEMP6,F             
     MOVLW 5
     ADDWF TEMP11 ,F
     MOVLW 8
     ADDWF TEMP10,F
     MOVLW 7
     ADDWF TEMP9
     MOVLW 2
     ADDWF TEMP8
     GOTO JSTESTTEMP6
     
  
JSTESTTEMP5  
   MOVLW 200                 ;+2.176
   SUBWF TEMP5,W
   SKPNC                    ;没有借位说明>=200
   GOTO JST5100
   MOVLW 6
   ADDWF TEMP11,F
   MOVLW 7
   ADDWF TEMP10,F
   MOVLW 1
   ADDWF TEMP9
   MOVLW 2
   ADDWF TEMP8
   MOVLW 200
   SUBWF TEMP5,F
   GOTO JST590          ;>90?
 JST5100  
   MOVLW  100                 ;+1.088
   SUBWF TEMP5,W
   SKPNC                    ;没有借位说明>=100
   GOTO JST590
   MOVLW 8
   ADDWF TEMP11,F
   MOVLW 8
   ADDWF TEMP10,F
   MOVLW 0
   ADDWF TEMP9
   MOVLW 1
   ADDWF TEMP8
   MOVLW 100
   SUBWF TEMP5,F
                
 
JST590           ;        处理完百位后,处理十位  有一个,就加0.109 (最大误差0.003) 
    MOVLW 10
    SUBWF TEMP5,W
    SKPNC
    GOTO JST59
    INCF TEMP9,F                        
    MOVLW 9
    ADDWF TEMP11
    MOVLW 10
    SUBWF TEMP5,F
    GOTO JST590
    
   
 JST59                       ;有一个,就加0.011   误差0.001
   MOVF TEMP5
   SKPNZ
   GOTO JSTZ
   DECF TEMP5,F
   INCF TEMP11
   INCF TEMP10
   GOTO JST59
   
   
   
   
JSTZ                    ; JSTZ  调整成0---9 ,不要出现TEMP>9
  JSTZ1
    MOVLW 10
    SUBWF TEMP11,W
    SKPNC                  ;没有借位说明大于9,要调整
    GOTO JSTZ2
    MOVLW 10
    SUBWF TEMP11,F
    INCF TEMP10
    GOTO JSTZ1
  JSTZ2
    MOVLW 10
    SUBWF TEMP10,W
    SKPNC
    GOTO JSTZ3
     MOVLW 10
    SUBWF TEMP10,F
    INCF TEMP9
    GOTO JSTZ2
JSTZ3
    MOVLW 10
    SUBWF TEMP9,W
    SKPNC
    GOTO JSTZ4
     MOVLW 10
    SUBWF TEMP11,F
    INCF TEMP8
    GOTO JSTZ3
    
JSTZ4
    MOVLW 10
    SUBWF TEMP8,W
    SKPNC
    GOTO JSTZEND
     MOVLW 10
    SUBWF TEMP8,F
    INCF TEMP7
    GOTO JSTZ8
    
JSTZEND
    RETLW 0              

CONVERT2 MOVWF PC                            ;共阳数码管显示???
 TABLE2 RETLW              C0H ;0
   RETLW              F9H ;1
   RETLW              A4H ;2  
   RETLW              B0H ;3  
   RETLW              99H ;4  
   RETLW              92H ;5  
   RETLW              82H ;6  
   RETLW              F8H ;7  
   RETLW              80H ;8  
   RETLW              90H  ;9  


                            

CALRESULT              ;得到的结果放在TEMP2 TEMP3中,现在要把它们转化为show1 show2 show3 show4
                       ;另外还要计算出LIGHT1 LIGHT2 LIGHT3 LIGHT4 LIGHT5
  
    MOVF TEMP2 ,W         ;如果没有结果,则TEMP2,TEMP3为0
    MOVWF TEMP5
    MOVF TEMP3
    MOVWF TEMP6
    CALL JSMS
     MOVLW TABLE2      ; 最高位
     MOVWF COUNT
     MOVF TEMP7,W
     ADDWF COUNT,W
     CALL CONVERT2
     MOVWF SHOW1
     
     MOVLW TABLE2      ; 次高位
     MOVWF COUNT
     MOVF TEMP8,W
     ADDWF COUNT,W
     CALL CONVERT2
     MOVWF SHOW2
     
       MOVLW TABLE2      ; 3位
     MOVWF COUNT
     MOVF TEMP9,W
     ADDWF COUNT,W
     CALL CONVERT2
     MOVWF SHOW3
     
       MOVLW TABLE2      ; 4位
     MOVWF COUNT
     MOVF TEMP10,W
     ADDWF COUNT,W
     CALL CONVERT2
     MOVWF SHOW4
     
     
     
     MOVLW 0
     MOVWF LIGHT1
     MOVWF LIGHT2
     MOVWF LIGHT3
     MOVWF LIGHT4
     MOVWF LIGHT5
     
     MOVF JSGS,W
     MOVWF COUNT
            
     
 JSLIGHT
     DECF COUNT           ;COUNT--
    
     
     MOVF COUNT,W
     MOVWF COUNT1
     RLF COUNT1,F
     MOVLW 10H
     IORWF COUNT1,F
     MOVF COUNT1,W
     MOVWF 4                ;F4  
     MOVF 0,W         ;F0
     MOVWF TEMP5
     INCF COUNT1
     MOVF COUNT1,W
     MOVWF 4
     MOVF 0,W
     MOVWF TEMP6
     CALL JSMS               ;返回 TEMP7 TEMP8 TEMP9 TEMP10
     MOVF TEMP7,W
     MOVWF TEMP0
     RLF TEMP0,F
     RLF TEMPO,F
     RLF TEMP0,F
     MOVF TEMP7,W
     ADDWF TEMP0,W
     ADDWF TEMP7                ;TEMP7*10=TEMP7
     MOVF TEMP8,W
     ADDWF TEMP7,F            ;TEMP7*10+TEMP8--》TEMP7
     
     MOVLW 1
     MOVWF TEMP0             ;TEMP0 为哪个LIGHT
     MOVLW 1
     MOVWF TEMP8            ;为哪个灯   
JSL00P1
    MOVLW 8
     SUBWF TEMP7,W
     SKPNC
     GOTO JSLOOP2
     MOVLW 8
     SUBWF TEMP7,F
     INCF TEMP0
     GOTO  JSLOOP1
     
     
  JSLOOP2
       
       DECF TEMP7,F
       SKPNZ
      GOTO JSLOOP3
      RLF TEMP8
      GOTO JSLOOP2
      
      
  JSLOOP3
      MOVLW 5
      SUBWF TEMP0
      SKPZ
      GOTO JSLOOP4
      MOVF TEMP8,W
      IORWF LIGHT5
       GOTO JSLOOP8
JSLOOP4     
     MOVLW 4
      SUBWF TEMP0
      SKPZ
      GOTO JSLOOP5
      MOVF TEMP8,W
      IORWF LIGHT4
       GOTO   JSLOOP8
      
      
 JSLOOP5 
      MOVLW 3
      SUBWF TEMP0
      SKPZ
      GOTO JSLOOP6
      MOVF TEMP8,W
      IORWF LIGHT3
      GOTO  JSLOOP8
      
JSLOOP6 
     MOVLW 2
     SUBWF TEMP0
     SKPZ 
     GOTO JSLOOP7
     MOVF TEMP8,W
     IORWF LIGHT2
     GOTO  JSLOOP8
JSLOOP7
     MOVLW 1
     SUBWF TEMP0
     SKPZ
     GOTO  JSLOOP8
     MOVF TEMP8,W
     IORWF LIGHT1
 JSLOOP8
   MOVF COUNT,F
   SKPZ                           ;COUNT==0? YES 退出 
   GOTO JSLIGHT
   
JSEND
  GOTO SHOWALL
     
 
  
  --------------------------------------------------------------------------------------
  SHOWALL                  ;显示结果0.75s,在这个过程中,监视手动级数的变化
                    
  CLRF RTCC
  MOVLW 45
  MOVWF TIMECOUNT
 
   LOOPSHOW
     MOVF SHOW1,W
     MOVWF RB
     BCF RC,4
     BSF RC,5
     BSF RC,6
     BCF RC,7
     CALL DELAY1MS
     
     MOVF SHOW2,W
     MOVWF RB
     BCF RC,4
     BSF RC,5
     BSF RC,6
     BSF RC,7
     CALL DELAY1MS
     
     MOVF SHOW3,W
     MOVWF RB
     BSF RC,4
     BCF RC,5
     BCF RC,6
     BCF RC,7
     CALL DELAY1MS
     
     MOVF SHOW4 ,W
     MOVWF RB
     BSF RC,4
     BCF RC,5
     BCF RC,6
     BSF RC,7
     CALL DELAY1MS
     
     MOVF LIGHT1,W
    MOVWF RB
     BCF RC,4
     BCF RC,5
     BCF RC,6
     BCF RC,7
     CALL DELAY1MS
     
      MOVF LIGHT2,W
    MOVWF RB
     BCF RC,4
     BCF RC,5
     BCF RC,6
     BSF RC,7
     CALL DELAY1MS
     
       MOVF LIGHT3,W
    MOVWF RB
     BCF RC,4
     BCF RC,5
     BSF RC,6
     BCF RC,7
     CALL DELAY1MS
     
       MOVF LIGHT4,W
    MOVWF RB
     BCF RC,4
     BCF RC,5
     BSF RC,6
     BSF RC,7
     CALL DELAY1MS
     
       MOVF LIGHT5,W
    MOVWF RB
     BCF RC,4
     BSF RC,5
     BCF RC,6
     BCF RC,7
     CALL DELAY1MS
     
     
         MOVF LIGHT6,W
    MOVWF RB
     BCF RC,4
     BSF RC,5
     BCF RC,6
     BSF RC,7
     CALL DELAY1MS
     
                              ;是否增加/减少手动级数
     TEFSS RC,3
     GOTO TEST
     CALL DELAY1MS
     TEFSS RC,3
     GOTO TESTRC2
     MOVF TIMECOUNT,W
     SUBWF COUNT,W
     MOVWF TEMP0,F    ;差直放在TEMP0中
     MOVLW 20
     SUBWF TEMP0           ;TEMP0 - 20 
     SKPNC             
     GOTO TESTRC2 
     INCF SDJS 
     MOVLW 45         ;重新记时
     MOVWF TIMECOUNT
     MOVWF COUNT
     MOVLW 4              ;<=4
     SUBWF SDJS,W
     SKPNC
     GOTO TESTRC2
     MOVLW 4
     MOVWF SDJS
    
     
 TESTRC2 
   TEFSS RC,2
     GOTO ENDTEST
     CALL DELAY1MS
     TEFSS RC,2
     GOTO ENDTEST
     MOVF TIMECOUNT,W
     SUBWF COUNT,W
     MOVWF TEMP0,F    ;差直放在TEMP0中
     MOVLW 20
     SUBWF TEMP0           ;TEMP0 - 20 
     SKPNC             
     GOTO ENDTEST 
     DECF SDJS ,F
     MOVLW 45         ;重新记时
     MOVWF TIMECOUNT
     MOVWF COUNT
     MOVF SDJS,F
     SKPZ
     GOTO  ENDTEST
     MOVLW 1
     MOVWF SDJS
     
   ENDTEST
    MOVLW 255
    SUBWF RTCC,W
    SKPZ
    GOTO RT
    DECF TIMECOUNT
  RT 
    MOVLW TIMECOUNT
     SKPZ  
     GOTO LOOPSHOW
     GOTO SENDWAVE
   
   
   
                           
                          
   
   
   
   
   
   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -