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

📄 b8_tb4.asm

📁 视频加扰器源代码,用于电视信号收费系统加扰
💻 ASM
📖 第 1 页 / 共 3 页
字号:
.INCLUDE "m48def1.inc"
.EQU    BIT_CRSIG=$0070;串口接收标志寄存器
.EQU    BIT_TRSIG=$0071;串口发送标志寄存器
.EQU    BIT_DISTURB=$0072;加扰标记寄存器

.DEF    CRC_TEMP=R5;CRC校验缓冲
;PORTD 端口配置
.EQU	DAT_IO=$6
.EQU    SCRAMBER=$3
.DEF    EE_DAT  =R17;E2ROM操作数据缓存
.DEF    ADR_L=R18
.DEF    ADR_H=R19
.DEF    RLC_BUF=R25
.DEF    TIMER0_CL=R24
.DEF    RLC_TEMP=R23
.def    data_temp=r22
.DEF    COUNTP_H=R21
.DEF    COUNTP_L=R20
.DEF    TIMER0_CH=R15
.DEF    DISCR_BSD=R14
;68,96,AA,08,00,00,06,07,03,C0,3F,
;68,96,0B,08,00,00,06,07,03,21,DE,

;;E2ROM操作地址缓存低字节
.EQU    RD_MAP=$100;参数映射表表头
.EQU    SEND_BUF=$160
.EQU    reci_BUF=$150
.EQU    ALL_ERT_BUF=$180
.EQU	FLAG_SCRAM=$200;加扰标志存放处
.EQU	DOWN_BUFF=$0220;解扰发送数据缓冲区头地址(往下发的22个字节的地址)
.EQU	JUDG_SIGN=$201
.EQU	DISTURB_SIGN=$202
.EQU	DIST_MESSAGE=$203
.EQU	PWM_SIGNER=$204
.EQU	PWM_START=$205
;张巍定义对PWM进行重新装载计数和标志单元。
.EQU    PWM_RELOADCOUNT=$206
.EQU    PWM_RELOADFLAG=$207
.EQU    ACK_ERROR = $0208
.equ    comsign=$0209
.equ    sav_adressh=$020a
.equ    sav_adressl=$020b
.equ    comT_sign=$020C
.equ    SEND_adressh=$020D
.equ    SEND_adressl=$020E
.equ	iic_js=$020f
.equ	iic_j=$0210
.equ    iic_jd=$0211
.EQU	S_DIGN=$0212
.EQU	 DAYS_COUNT=$0213
.EQU	HOURS=$0214
.EQU	MINITS=$0215
.EQU    SECOND=$0216
;---------end---------------------------
;16M晶振62.5ns
;.EQU	H_120_H=9
;.EQU	H_120_L=240

;.EQU	L_120_H=6;6
;.EQU	L_120_L=0

;.EQU	H_40_H=3
;.EQU	H_40_L=120

;.EQU	L_40_H=1
;.EQU	L_40_L=120
;20M晶振50ns
.EQU	H_120_H=12;11
.EQU	H_120_L=45

.EQU	L_120_H=6;7
.EQU	L_120_L=128

.EQU	H_40_H=5;4
.EQU	H_40_L=86

.EQU	L_40_H=1
.EQU	L_40_L=100;214


.ORG    $00
        RJMP  BEGIN  
.ORG    $01
        RJMP  INT_0 
.ORG    $03
        RETI    
.ORG    $04
        RETI  
.ORG    $09
        RJMP   TIMER2         
.ORG    $0B
        RJMP   COMPA1
.ORG    $0C
        RJMP   COMPB1
.ORG    $0D
        RJMP   TDIMER1;(ok)
.ORG    $10
        RJMP   TIMER0;(ok)
        
        
.ORG    $12
        rjmp    scom_reci  
.ORG    $14
        rjmp    scom_txd


.ORG    0X20
       BEGIN:
                LDI  XL,$00
                LDI  XH,$1
                LDI  R16,$0
        GONE_ON:
                ST    X+, R16
                CPI   XH,$02
                BRNE  GONE_ON
                CPI   XL,$FF
                BRNE  GONE_ON ;内部SRAM清0
                LDI   R16,$2
                OUT   SPH,R16
                LDI   R16,$ff
                OUT   SPL,R16;堆栈指针指向SRAM最后
             	RCALL INI_CPU;对CPU进行初始化,设定了T/C0、T/C1的用法及时钟分频
                RCALL JUDG_ORIG;对EEROM进行初始化
                ldi   XL,LOW(RD_MAP+4);主从处理
		ldi   XH,HIGH(RD_MAP+4)
		LD    R16,X
		SBRS  R16,$7
		RCALL SLAVERY_TIMER;主从处理
		ldi   xl,$88
		ldi   xh,$01
    	 	SEI;  开中断
	MAIN:
		rcall  comm_smo
		rcall  deal_i2cdata
		RCALL  RECI_DATA
		RJMP   MAIN
RECI_DATA:
		
		LDS    R16,S_DIGN
		SBRC   R16,$0
		RJMP   MAIN_NEXT
		SBRC   R16,$1
		RCALL  JUDG_TIMERS
		RCALL  RECI_DATA_D
	MAIN_NEXT:
		RET

JUDG_TIMERS:
		PUSH	R16
		PUSH	R17
		RCALL  CLR_MSECOND
		LDS    R16,S_DIGN
		SBRS   R16,$3
		RJMP   EXIT_JUDGE
		CLI
		LDS    	R16,SECOND
		INC 	R16
		STS    	SECOND,R16
		CPI    	R16,60
		BRNE   	EXIT_JUDGE
		LDI  	R16,$0
		STS    SECOND,R16
		LDS    R16,MINITS
		INC    R16
		STS    MINITS,R16
		CPI    R16,60
		BRNE   EXIT_JUDGE
		LDI    R16,$0
		STS    MINITS,R16
		LDS    R16,HOURS
		INC    R16
		STS    HOURS,R16
		CPI    R16,24
		BRNE   EXIT_JUDGE
		LDI    R16,$0
		STS    HOURS,R16
		ldi    XL,LOW(RD_MAP+$A);主从处理
		ldi    XH,HIGH(RD_MAP+$A)
		LD     R16,X
		DEC    R16
		ST     X,R16
	        LDI    ADR_L,$A
	        mov    EE_DAT,r16
       		RCALL  EEROM_W
		CPI    R16,$0
		BRNE   EXIT_JUDGE
		ldi    r16,$0
		STS    DISTURB_SIGN,R16
		RCALL  CLOSE_RECI_DATA
	EXIT_JUDGE:	
		SEI
		POP	R17
		POP	R16
		RET
SLAVERY_TIMER:
		PUSH	R16
		PUSH	R17
		LDI    R16,$0
		STS    DAYS_COUNT,R16
		STS    HOURS,R16
		STS    MINITS,R16
		STS    SECOND,R16
		SBR    R16,$08
		STS    S_DIGN,R16
		ldi    XL,LOW(RD_MAP+$A);主从处理
		ldi    XH,HIGH(RD_MAP+$A)
		LD     R16,X
		CPI    R16,$00
		BRNE   EXIT_SEE
		RCALL  CLOSE_RECI_DATA
		RJMP   EXIT_FGKL
	EXIT_SEE:
	        DEC    R16
	        ST     X,R16
	        LDI    ADR_L,$A
	        mov    EE_DAT,r16
       		RCALL  EEROM_W
       		 
     	EXIT_FGKL:	
     		POP	R17
     		POP	R16
		ret
comm_smo:	
		lds    r17,comsign
		sbrs   r17,$2
		rjmp   exit_dfg
		ldi    r17,$0
		sts    comsign,r17
		ldi  xl,LOW(reci_BUF)
		ldi  xh,HIGH(reci_BUF)
		ldi  r17,$0
		ldi  r18,$09
	nexi_reci:
		ld   r16,x+
		add  r17,r16
		clc 
		subi r18,$1
		brne  nexi_reci
		ld   r16,x+
		CP   R17,R16
		BRNE  exit_dfg
		ldi  Yl,LOW(reci_BUF+2)
		ldi  Yh,HIGH(reci_BUF+2)
		LDI  ADR_L,$4
		LDI  XL,LOW(RD_MAP+$4)
                LDI  XH,HIGH(RD_MAP+$4)
           EXIT_EDN:     
                LD     R16,Y+
                ST     X+,R16
		mov    EE_DAT,r16
                RCALL  EEROM_W
                INC    ADR_L
                CLC
                CPI   XL,LOW(RD_MAP+$B)
                BRNE  EXIT_EDN
                ldi    r16,$0
		STS    DISTURB_SIGN,R16
        ldi   XL,LOW(RD_MAP+4);主从处理
		ldi   XH,HIGH(RD_MAP+4)
		LD     R16,X
		SBRS   R16,$7
		RJMP   DFFFGHJ
                LDI    R16,$0
		STS    DAYS_COUNT,R16
		STS    HOURS,R16
		STS    JUDG_SIGN,R16
		STS    MINITS,R16
		STS    SECOND,R16
		SBR    R16,$08
		STS    S_DIGN,R16
	DFFFGHJ:	
	       	rcall  RESPONSE
	 exit_dfg:
		ret


CLR_TIMER:
		CLI
		LDI     R16,$0
		MOV     TIMER0_CH,R16
		LDI     R16,40
       		OUT     TCNT0,R16
       		SEI
		RET


RECI_DATA_D:
			PUSH	R16
			PUSH	R17
			PUSH	R18
			LSL     RLC_BUF
			SBIS    PIND,DAT_IO
			RJMP    JUDGH_JMP
			SBR     RLC_BUF,$01
			RJMP    GH_LJK
		JUDGH_JMP:
			CBR     RLC_BUF,$01 
		GH_LJK:
			ANDI    RLC_BUF,$03
			CPI     RLC_BUF,$03
			BRNE    GH_1LJK
			RJMP    GH_ELJK
		GH_1LJK:
			CPI     RLC_BUF,$00
			BRNE    GH_2LJK
			RJMP    GH_ELJK
		GH_2LJK:;JUMP HAPPEN
			RCALL   CLOSE_TIMER0
			MOV     RLC_TEMP,TIMER0_CH 
			LDI     R16,$0
			MOV     TIMER0_CH,R16
			LDI     R16,40
       			OUT     TCNT0,R16
       			RCALL   OPEN_TIMER0
       			LDS     R16,JUDG_SIGN
			SBRc    R16,$6
			RJMP    BEGIN_3RECI
			SBRc    R16,$5
			RJMP    BEGIN_4RECI
			SBRC    R16,$4
			RJMP    BEGIN_5RECI
			CPI     RLC_BUF,$01
			BRNE    ERROR_DEAL
			LDS     R16,JUDG_SIGN
			SBR     R16,$10
			STS     JUDG_SIGN,R16
			RJMP    GH_ELJK
	BEGIN_3RECI:	
			CLC
			CPI     RLC_BUF,$02
			BRNE    ERROR_DEAL
			RCALL   COMPARE_40L
			CLC
			CPI     R18,$AA
			BRNE    ERROR_DEAL
			LDI     R16,$0
			STS     JUDG_SIGN,R16
			RCALL   CLOSE_TIMER0
			rcall   delay_25us

		delay_h:
            sbis    pind,DAT_IO
			rjmp    delay_h
		delay_l:
			sbic    pind,DAT_IO
			rjmp    delay_l	
			rcall   reci_data_fr
			;rcall  TEST_LED1
			RJMP    GH_ELJK	
	BEGIN_4RECI:
			CLC
			CPI     RLC_BUF,$01
			BRNE    ERROR_DEAL
			RCALL   COMPARE_40L
			CLC
			CPI     R18,$AA
			BRNE    ERROR_DEAL
			LDS     R16,JUDG_SIGN
       		CBR     R16,$20
			SBR     R16,$40
			STS     JUDG_SIGN,R16
			RJMP    GH_ELJK
	BEGIN_5RECI:
			CLC
			CPI     RLC_BUF,$02
			BRNE    ERROR_DEAL
			RCALL   COMPARE_120L
			CLC
			CPI     R18,$AA
			BRNE    ERROR_DEAL
			;RCALL   flash_fees
			LDS     R16,JUDG_SIGN
       			CBR     R16,$10
			SBR     R16,$20
			STS     JUDG_SIGN,R16
			RJMP    GH_ELJK
			
	ERROR_DEAL:
			LDI     R16,$00
			STS     JUDG_SIGN,R16
			RJMP    GH_ELJK

		GH_ELJK:
			
			POP	R18
			POP	R17
			POP	R16
			RET
CLOSE_TIMER0:
			LDI     R16,$0
       			STS     TIMSK0,R16;TIMER0 CLOSE
			RET			
OPEN_TIMER0:
			LDI     R16,$1
       			STS     TIMSK0,R16;TIMER0 OPEN
			RET			
reci_data_fr:
			push	r19
			push	r18
			PUSH	R17
			PUSH	XL
			PUSH	XH
			PUSH	YL
			PUSH	YH
			ldi     xl,LOW(DOWN_BUFF)
			ldi     xh,HIGH(DOWN_BUFF)
			ldi     r19,$f
			CLI
		delay_m:
			sbis    pind,DAT_IO
			rjmp    delay_m
			ldi     r16,$10
			rcall   delay_1h
			ldi     r18,$8
			ldi     data_temp,$0
		exit_byte:
		
			NOP
			ldi     r16,$D
			rcall   delay_1h
			clc
			NOP
			sbiC   pind,DAT_IO
			rjmp    jcd_dat
			sec
	  jcd_dat:
			roL   data_temp
			ldi     r16,$C
			rcall   delay_1h
			NOP
			clc  
			subi    r18,$1
			brne    exit_byte
			SEI
			st      x+,data_temp
			clc
			CLI
			subi    r19,$1
			brne    delay_m
			
			SEI;数据接收完毕 
			      
			ldi   r19,$d
			ldi   r16,$0

			ldi     xl,LOW(DOWN_BUFF)
			ldi     xh,HIGH(DOWN_BUFF)
        sdsfg:
		    	ld   r17,x+
			add  r16,r17
			clc
			subi  r19,$1
			brne  sdsfg
			ld   r17,x+
			cp   r16,r17
			brne  rtr_1 ;SUM CHECK OVER
			RJMP  rtr_2
		rtr_1:
			
			RJMP  rtr	
		rtr_2:
			
		 	;数据处理
			ldi   xl,LOW(DOWN_BUFF+2)
			ldi   xh,HIGH(DOWN_BUFF+2)
			ldi   Yl,LOW(RD_MAP+5);区号
			ldi   Yh,HIGH(RD_MAP+5)
			LD    R16,X+;TERMS LOWER
			LD    R17,Y+;TERMS HIGHER
			CP    R16,R17
			BRNE  COMP_DEAL_A
			LD    R16,X+;TERMS LOWER
			LD    R17,Y+;TERMS HIGHER
			CP    R16,R17
			BRNE  COMP_DEAL_A;组号低
			LD    R16,X+;TERMS LOWER
			LD    R17,Y+;TERMS HIGHER
			CP    R16,R17
			BRNE  COMP_DEAL_A;组号高
			
			LD    R17,Y+
			ldi   xl,LOW(DOWN_BUFF+5)
			ldi   xh,HIGH(DOWN_BUFF+5)
			ADD   XL,R17;通过偏移取数
			LD    R17,X
			STS   DIST_MESSAGE,R17
			ldi   Yl,LOW(RD_MAP+4)
			ldi   Yh,HIGH(RD_MAP+4)
			ld    r16,y
			andi  r16,$7
			andi  r17,$7
			cp    r16,r17
			brne  rtr_erro
			lds   r17,DIST_MESSAGE
			andi  r17,$f8
			cpi   r17,$0
			brne  goon_deal		
		rtr_erro:
			ldi   r17,$0
			sts   DIST_MESSAGE,r17
		goon_deal:
			rcall sen_disturb;发送解扰信息给解扰芯片
			RCALL TEST_LED1;正常工作
			lds   r17,DIST_MESSAGE
			andi  r17,$f8
			cpi   r17,$0
			brne  pen_tv
			ldi   r16,$0
			STS   DISTURB_SIGN,R16
			RJMP  COMP_DEAL_A
		pen_tv:	
			ldi    r16,$ff
			STS    DISTURB_SIGN,R16
		COMP_DEAL_A:
			cli
			LDS   R16,DISTURB_SIGN
			cpi   R16,$ff
			brne  DISTURB_1	
		SDSDF_POH:
			SBIS  PIND,DAT_IO
			RJMP  SDSDF_POH
		SDSDF_POL:
			SBIC  PIND,DAT_IO
			RJMP  SDSDF_POL
			LDI   R16,15
			RCALL delay_1h
			CBI   PORTD,$7
			LDI   R16,21
			RCALL delay_1h
			CLC
			ldi   xl,LOW(DOWN_BUFF)
			ldi   xh,HIGH(DOWN_BUFF)
			LD    R17,X
			CPI   R17,$80
			BRCC  EXIT_DGHJ
			NOP
			SBI   PORTD,$4
			SBI   PORTD,$7
			RJMP  EXIT_1DGHJ
		EXIT_DGHJ:	
			CBI   PORTD,$4
			SBI   PORTD,$7
		cgp:      
		        CLC                           ;;等待感应。
                        SBIS    PIND,2     ;SBIC    PIND,5
                        RJMP    cgp
		EXIT_1DGHJ:
			ldi   xl,LOW(DOWN_BUFF+1)
			ldi   xh,HIGH(DOWN_BUFF+1)
			LD    R17,X
			CPI   R17,$a
			BRNE  DISTURB_1
			LDI   R16,$20
			RCALL delay_1h
		EXITY_U:
			SBIS  PIND,DAT_IO
			RJMP  EXITY_U
			cbi   portd,$3
			LDI   R16,$20
			RCALL delay_1h
			sbi   portd,$3
			
			
		
	  DISTURB_1:	
			nop
			nop



rtr:			
			RCALL   CLOSE_TIMER0
			LDI     R16,$0
			MOV     TIMER0_CH,R16
			LDI     R16,40
       		OUT     TCNT0,R16
       			RCALL   OPEN_TIMER0	
       			sei
			POP	YH
			POP	YL
			POP	XH
			POP	XL
			POP	R17
			pop	r18
			pop	r19
			ret


INT_0:
			PUSH	R16
			IN      R16,SREG
			PUSH	R16
			
			
			POP     R16
			OUT     SREG,R16
			POP	R16
			RETI
			
COMPA1:
			PUSH	R16
		
			POP	R16
			RETI
COMPB1:
			RETI			
sen_disturb:;解扰数据发送
			push  r16
			lds r16,DIST_MESSAGE
			andi r16,$08
			nop
			nop
			out  portc,r16
			rcall delay_2us;请求中断
			lds r16,DIST_MESSAGE
			andi r16,$f0
			swap r16
			nop
			nop
			out  portc,r16
			rcall delay_2us
			lds  r16,DIST_MESSAGE
			andi r16,$01
			cpi  r16,$00
			brne exit_1judh
			rcall flash_fees
			rjmp exit_2judh
		exit_1judh:
			cbi portb,$0
		exit_2judh:	

⌨️ 快捷键说明

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