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

📄 b4cgp.asm

📁 模拟感应式机顶盒源代码,用于电视信号收费系统解扰
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		JBS   TEMP_IRT,0
		JMP   EXIT_IEROR	
		MOV  A,@CDA9_HDATH
		MOV  COMP_DATH,A
		MOV  A,@CDA9_HDATL
		MOV  COMP_DATL,A
		CALL  IR_COMPARE
	
		SUB A,@0XBB
		JBS STATUS,Z
		JMP  EXIT_IEROR
		MOV  A,@CDA9_LDATH
		MOV  COMP_DATH,A
		MOV  A,@CDA9_LDATL
		MOV  COMP_DATL,A
		CALL  IR_COMPARE
		SUB   A,@0XAA
		JBS   STATUS,Z
		JMP  EXIT_IEROR
		NOP
		CLR   IR_FLAG
		BS    IR_CTRF,NINE_MS
		BS    IR_FLAG,IR_HEADC;9MS低电品到
		JMP   EXIT_RCIR
	RECI_2IR:
		JBS   TEMP_IRT,1
		JMP   EXIT_IEROR
		MOV  A,@CDA4_HDATH
		MOV  COMP_DATH,A
		MOV  A,@CDA4_HDATL
		MOV  COMP_DATL,A
		CALL  IR_COMPARE
	
		SUB A,@0XBB
		JBS STATUS,Z
		JMP  IRRECI_ERROR
		MOV  A,@CDA4_LDATH
		MOV  COMP_DATH,A
		MOV  A,@CDA4_LDATL
		MOV  COMP_DATL,A
		CALL  IR_COMPARE
		SUB  A,@0XAA
		JBS  STATUS,Z
		JMP  IRRECI_ERROR
		NOP
		BS    R4,SAV_PAGE
		CLR   IR_FLAG;4.5MS高电平到
		BS    IR_FLAG,IR_HEADD
		;BS    IR_CTRF,NINE_MS
		MOV   A,@8
		MOV   DBITY_CT,A
		MOV   A,@DAT_SPHEAD
		MOV   DAT_SSPH,A
		CLR   IRDAT_TEMP
		JMP   EXIT_RCIR
	RECI_3IR:
		JBS   TEMP_IRT,1
		JMP   LOW_JUDG2
		MOV  A,@CDA1_HDATH
		MOV  COMP_DATH,A
		MOV  A,@CDA1_HDATL
		MOV  COMP_DATL,A
		CALL IR_COMPARE
		SUB  A,@0XBB
		JBS  STATUS,Z
		JMP  JUDG_IREND
		MOV  A,@CDA1_LDATH
		MOV  COMP_DATH,A
		MOV  A,@CDA1_LDATL
		MOV  COMP_DATL,A
		CALL  IR_COMPARE
		SUB   A,@0XAA
		JBS   STATUS,Z
		JMP   RECI_3IR0
		BS    STATUS,C
		NOP
		JMP   RECI_3IR1
	LOW_JUDG2:
		MOV   A,@CDAH_HDATH
		MOV   COMP_DATH,A
		MOV   A,@CDAH_HDATL
		MOV   COMP_DATL,A
		CALL  IR_COMPARE
		SUB   A,@0XBB
		JBS   STATUS,Z
		JMP   JUDG_IREND
		MOV   A,@CDAH_LDATH
		MOV   COMP_DATH,A
		MOV   A,@CDAH_LDATL
		MOV   COMP_DATL,A
		CALL  IR_COMPARE
		SUB   A,@0XAA
		JBS   STATUS,Z
	EXIT_RCIRx:
		NOP
		JMP   EXIT_RCIR
	RECI_3IR0:
		MOV  A,@CDAH_HDATH
		MOV  COMP_DATH,A
		MOV  A,@CDAH_HDATL
		MOV  COMP_DATL,A
		CALL IR_COMPARE
		SUB  A,@0XBB
		JBS  STATUS,Z
		JMP  IRRECI_ERROR
		MOV  A,@CDAH_LDATH
		MOV  COMP_DATH,A
		MOV  A,@CDAH_LDATL
		MOV  COMP_DATL,A
		CALL  IR_COMPARE
		SUB   A,@0XAA
		JBS   STATUS,Z
		JMP   IRRECI_ERROR
		JBS   TEMP_IRT,1
		JMP   EXIT_RCIRx
		BC    STATUS,C
		NOP
	RECI_3IR1:
		BS    R4,SAV_PAGE
		RLC   IRDAT_TEMP
		DJZ   DBITY_CT
		JMP   JUDG_IREND
		MOV   A,DAT_SSPH
		MOV   R4,A
		BS    R4,SAV_PAGE
		MOV   A,IRDAT_TEMP
		MOV   0,A
		INC   DAT_SSPH
		CLR   IRDAT_TEMP
		MOV   A,@8
		MOV   DBITY_CT,A
		JMP   JUDG_IREND
	JUDG_IREND:;判断结束未或反复结果
		JBC   TEMP_IRT,1
		JMP   EXIT_RCIR	
		MOV   A,@CDA9_HDATH
		MOV   COMP_DATH,A
		MOV   A,@CDA9_HDATL
		MOV   COMP_DATL,A
		CALL  IR_COMPARE
		SUB   A,@0XBB
		JBS   STATUS,Z
		JMP   EXIT_RCIR
		MOV   A,@CDA9_LDATH
		MOV   COMP_DATH,A
		MOV   A,@CDA9_LDATL
		MOV   COMP_DATL,A
		CALL  IR_COMPARE
		SUB   A,@0XAA
		JBS   STATUS,Z
		JMP   EXIT_RCIR
		BS    R4,SAV_PAGE
		CLR   IR_FLAG
		BC    IR_CTRF,NINE_MS
		CALL  IRG_DEAL
		JMP   EXIT_RCIR
	IRRECI_ERROR:
		NOP
		BS    R4,SAV_PAGE
		CLR   IR_FLAG
		BC    IR_CTRF,NINE_MS
		JMP   EXIT_RCIR
	EXIT_IEROR:
		NOP
		BS    R4,SAV_PAGE
		CLR   IR_FLAG
		BC    IR_CTRF,NINE_MS
		JMP   EXIT_RCIR
	EXIT_RCIR:
		BC   R4,SAV_PAGE
		JMP   MAIN
IRG_DEAL:
		
		JBC  PORT6,STUDY;学习
		JMP  NORMALS_DEAL
		MOV  A,DAT_IRSV+1
		MOV  DAT_IRSV,A
		MOV  A,DAT_IRSV+2
		MOV  DAT_IRSV+1,A
		MOV  A,DAT_SPHEAD+3
		MOV  DAT_IRSV+2,A
		SUB  A,DAT_IRSV+1
		JBS  STATUS,Z
		JMP  EXIT_IRG_DEAL
		MOV  A,DAT_IRSV+2
		SUB  A,DAT_IRSV
		JBS  STATUS,Z
		JMP  EXIT_IRG_DEAL
		NOP
		NOP
		BC    R4,SAV_PAGE
		MOV   A,@USER_Q+3
		MOV   ADDR,A
		BS    R4,SAV_PAGE
		MOV   A,DAT_IRSV+2
		BC    R4,SAV_PAGE
     		MOV   DATAO,A
     		MOV   QUHAO_DT+6,A
     		DISI
       		CALL  WRBYTE_E2PROM;C
       		ENI
   		mov   A,@200
		MOV   DAT_SPHEAD+5,A
		mov   A,@200
		MOV   DAT_SPHEAD+6,A
		mov   A,@60
		MOV   DAT_SPHEAD+1,A
	DECZ_CT:
		BS   PORT5,DESL
	DECX_CT:
		NOP
		NOP
		DJZ   DAT_SPHEAD+5
		JMP  DECX_CT
		mov   A,@200
		MOV   DAT_SPHEAD+5,A
		DJZ   DAT_SPHEAD+6
		JMP  DECX_CT
		mov   A,@200
		MOV   DAT_SPHEAD+6,A
		BC  PORT5,DESL
	DECY_CT:
		NOP
		NOP
		DJZ   DAT_SPHEAD+5
		JMP  DECY_CT
		mov   A,@200
		MOV   DAT_SPHEAD+5,A
		DJZ   DAT_SPHEAD+6
		JMP  DECY_CT
		mov   A,@200
		MOV   DAT_SPHEAD+6,A	
		DJZ   DAT_SPHEAD+1
		JMP   DECZ_CT
		JBC   SIGN_FLAG2,ACK_ERROR
		JMP   DATAZ_ERROR
		BS    R4,SAV_PAGE
		CLR   DAT_IRSV+2
		CLR   DAT_IRSV+1
		CLR   DAT_IRSV
		BC    R4,SAV_PAGE
		JMP   EXIT_IRG_DEAL
	DATAZ_ERROR:	
		CLR   SIGN_FLAG2
		BS    R4,SAV_PAGE
		JMP   EXIT_IRG_DEAL
	NORMALS_DEAL:                                   ;at page0 //twd
		 ;}	          ;add
		  
		   Bs  R4,SAV_PAGE
		   nop
		   nop
		       INC Rx
		       nop
		       nop
		       MOV A,Rx
		       SUB A,@max_rx
		        nop
		       JBC  STATUS,C
		       ;if max_rx<Rx
		       ;{
		           jmp   max_is_10
		  max_is_Rx:    
		          ;1)set rx=0
		             ;{
		         Bs PORT5 ,DEC_ENABLE
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		             CLR Rx          
		               
		                MOV A,@50 
		                MOV pulseCnt,A
		                loop_decRx:
		                   BC PORT6 ,pulse_Rx
	          	         JMP $+1
		                   JMP $+1
		                   JMP $+1
		                   JMP $+1		                  
		                   BS PORT6 ,pulse_Rx
	          	         JMP $+1
		                   JMP $+1
	          	         JMP $+1
		                   JMP $+1
		                   JMP $+1
		                   JMP $+1		                  
		                   JMP $+1
		                   JMP $+1		                  
	          	         JMP $+1
		                   JMP $+1
		                   JMP $+1
		                   JMP $+1		                  
;		                    CALL DELAY_3US
		                    
		                    dec pulseCnt
		                    JBS  STATUS ,Z
		                    jmp  loop_decRx
		             ;}  
		             
		             Bc PORT5 ,DEC_ENABLE
	          	         JMP $+1
		                   JMP $+1
	          	         JMP $+1
		                   JMP $+1
	          	         JMP $+1
		                   JMP $+1
	          	         JMP $+1
		                   JMP $+1
		                   JMP $+1
		                   JMP $+1		                  
		                   JMP $+1
		                   JMP $+1		                  
		              
		             MOV A,@min_rx
		             MOV Rx,A
		             MOV pulseCnt,A
		             loop_addRx0:
		                 BC PORT6 ,pulse_Rx
		                   JMP $+1
		                   JMP $+1		                  
		                   JMP $+1
		                   JMP $+1		                  
		                   BS PORT6 ,pulse_Rx
	          	         JMP $+1
		                   JMP $+1
	          	         JMP $+1
		                   JMP $+1
		                   JMP $+1
		                   JMP $+1		                  
		                   JMP $+1
		                   JMP $+1		                  
		                   
		                    dec pulseCnt
		                    JBS  STATUS ,Z
		                    jmp  loop_addRx0	                                   
		                    JMP  save_Rx
		                    
		       ;}
		       ;else 20>=Rx
		       ;{
		    max_is_10:
		       
		       ;}
		       nop
		       nop
		       Bc PORT5 ,DEC_ENABLE
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
	           BC PORT6 ,pulse_Rx
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
	           BS PORT6 ,pulse_Rx	           
	   
	  save_Rx:
	  
      		MOV   A,Rx
      		BC   R4,SAV_PAGE
      		MOV   DATAO,A      		
	  		MOV   A,@0x4f
	      	MOV   ADDR,A
      		CALL  WRBYTE_E2PROM         
	       ;}
	        
     old_process:
        clr	    pulseCnt   
		BC   R4,SAV_PAGE
		MOV  A,@USER_Q+3
		MOV  ADDR,A
		CALL RDBYTE_E2PROM
		nop
		nop
		MOV  A,RXBUF
		MOV  QUHAO_DT+6,A
		nop
		nop
		BS   R4,SAV_PAGE
		SUB  A,DAT_SPHEAD+3
		nop
		BC   IR_CTRF,NINE_MS
		JBS  STATUS,Z
		JMP  EXIT_IRG_DEAL
		JBC  IR_CTRF,NORMORL_MS
		JMP  IRTYU
		BC    R4,SAV_PAGE
		MOV   A,@0XBB
     		MOV   DATAO,A
   		MOV   A,@USER_Q+8
		MOV   ADDR,A
		DISI
       		CALL  WRBYTE_E2PROM;C
       		ENI
		NOP
		NOP
		BS    IR_CTRF,NORMORL_MS;关闭解扰	
		JMP   EXIT_IRG_DEAL
	IRTYU:	
		BC    R4,SAV_PAGE
		MOV   A,@0XAA
     		MOV   DATAO,A
     		MOV   A,@USER_Q+8
		MOV   ADDR,A
		DISI
       		CALL  WRBYTE_E2PROM;C
       		ENI
		NOP
		NOP
		BC    IR_CTRF,NORMORL_MS;打开解扰
	EXIT_IRG_DEAL:	
		BC   R4,SAV_PAGE
		RET
			
		
IR_COMPARE:;数据沿时间比较
		MOV  A,IR_TIMETPH;
		SUB  A,COMP_DATH
		JBC  STATUS,Z
		JMP  NEXT1_COMP
		JBC  STATUS,C
		JMP  TIME_LESS
		JMP  TIME_LARGE
	NEXT1_COMP:
		BC   STATUS,C
		MOV  A,IR_TIMETPL;
		SUB  A,COMP_DATL
		JBC  STATUS,Z
		JMP  TIME_LARGE
		JBC  STATUS,C
		JMP  TIME_LESS
		JMP  TIME_LARGE
	TIME_LESS:
		MOV  A,@0XBB
		JMP  TIME_CEND
	TIME_LARGE:
		MOV  A,@0XAA
	TIME_CEND:
		RET			
;***************************************				

     DELAY_3US:
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		RET
DELAY_EEROM:
		BC     STATUS,C
		MOV  DELY_CT,A
      DELY_EUS:
		NOP
		NOP
		NOP
		DJZ  DELY_CT
		JMP DELY_EUS
		RET

DELAY_2MS:
		MOV     A,@80
		MOV     ADRESS_TP,A
	AY_2MS:
		MOV     A,@200
        	CALL    DELAY_EEROM   
        	DJZ     ADRESS_TP
        	JMP    AY_2MS
		RET
DELAY_100MS:
		BC  R4,SAV_PAGE
		MOV  A,@25
		MOV  DATLO_MJ,A
      Y_100MS1:
		CALL  DELAY_2MS
		DJZ  DATLO_MJ
		JMP  Y_100MS1
		RET		


;---------------------------------------------

;EEROM(24C04)操作
WRBYTE_E2PROM:;写一个字节到EEPROM器件
        	MOV     A,@SLAVE		
        	MOV     TXBUF,A         
		CALL    BSTART_E2PROM 
		CALL    TX_E2PROM 
        	MOV     A,ADDR          
        	MOV     TXBUF,A           
		CALL    TX_E2PROM 
       	 	MOV     A,DATAO        
        	MOV     TXBUF,A           
		CALL    TX_E2PROM           
		CALL    BSTOP_E2PROM  
		CALL    DELAY_2MS
		nop
		nop
		nop
	       	RET
RDBYTE_E2PROM:;读一字节从EPROM器件
		CALL    BSTART_E2PROM   
        	MOV     A,@SLAVE		
        	MOV     TXBUF,A         
		CALL    TX_E2PROM    
        	MOV     A,ADDR 
        	MOV     TXBUF,A
		CALL    TX_E2PROM            
        	CALL    BSTART_E2PROM     
        	MOV     A,@SLAVE	 	
        	MOV     TXBUF,A         
		BS      TXBUF,0  
		CALL    TX_E2PROM         
		CALL    RX_E2PROM         
		CALL    BSTOP_E2PROM
	       	RET
BSTART_E2PROM:;起始位
		MOV     A,@6
        	CALL    DELAY_EEROM 
		IOR     PORT6
        	AND     A,@EE2ROM_ND   ; 将P5.0,P5.1置为输出状态
        	IOW     PORT6
        	BS      PORT6,SDA_E2PROM  
        	BS      PORT6,SCL_E2PROM 
        	MOV     A,@4
        	CALL    DELAY_EEROM 
        	BC      PORT6,SDA_E2PROM 
    		MOV     A,@1
        	CALL    DELAY_EEROM  
        	BC      PORT6,SCL_E2PROM 
        	MOV     A,@2
        	CALL    DELAY_EEROM    
        	RET     
        	
BSTOP_E2PROM:;停止位
		IOR     PORT6
        	AND     A,@EE2ROM_ND;方向寄存器 
               	IOW     PORT6            
        	BC      PORT6,SDA_E2PROM 
        	MOV     A,@1
        	CALL    DELAY_EEROM 
	       	BS      PORT6,SCL_E2PROM 
        	MOV     A,@1
        	CALL    DELAY_EEROM 
		BS      PORT6,SDA_E2PROM 
		MOV     A,@6
        	CALL    DELAY_EEROM 
       		RET    
BITOUT_E2PROM:;从EM78发送数据, 一位子程序
		IOR	PORT6
        	AND     A,@EE2ROM_ND	;方向寄存器		
        	IOW     PORT6
        	MOV     A,@2
        	CALL    DELAY_EEROM
        	JBS     TXBUF,7
               	JMP     BIT0_E2PROM
        	BS      PORT6,SDA_E2PROM          
               	JMP     CLK1_E2PROM
	BIT0_E2PROM:
        	BC      PORT6,SDA_E2PROM          
	CLK1_E2PROM:  
		MOV     A,@2
        	CALL    DELAY_EEROM
        	BS      PORT6,SCL_E2PROM
        	MOV     A,@2
        	CALL    DELAY_EEROM
        	BC      PORT6,SCL_E2PROM

⌨️ 快捷键说明

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