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

📄 b8_tb4.asm

📁 视频加扰器源代码,用于电视信号收费系统加扰
💻 ASM
📖 第 1 页 / 共 3 页
字号:
		CBR      R17,$80
   	sdd_iic:	
		rcall    WRITE_24C02
		ld       r17,x+
		inc      r18
		cpi      r18,$09
		brne     sdd_iic
		cbi      ddrd,0
		sbi      ddrd,1	
		ldi      r16,$d8
		sts      ucsr0b,r16
		Rcall    led_flash
		POP	R18
		POP	R19
		RET
SLAY_DONE:
		PUSH	YH
		PUSH	YL
		PUSH	R18
		PUSH	R19
		ldi      XL,LOW(ALL_ERT_BUF);主从处理
		ldi      XH,HIGH(ALL_ERT_BUF)
		ldi      r18,$00
	exit_RDopo:
		rcall    READ_24C02
		st       x+,r17
		inc      r18
		cpi      r18,$08
		brne     exit_RDopo
		LDI      YL,LOW(RD_MAP+$5)
                LDI      YH,HIGH(RD_MAP+$5)
		ldi      XL,LOW(ALL_ERT_BUF+1);主从处理
		ldi      XH,HIGH(ALL_ERT_BUF+1)
		LDI R18,$0
	GOONER_OP:
		LD    R16,X+
		LD    R17,Y+
		INC   R18
		CP   R16,R17
		BRNE  ERRORI_DEAL
		CPI   R18,$4
		BRNE   GOONER_OP
		ldi    XL,LOW(ALL_ERT_BUF+6);主从处理
		ldi    XH,HIGH(ALL_ERT_BUF+6)
		LD     R16,X
		CPI    R16,$0
		BREQ   ERRORI_DEAL
		STS    JUDG_SIGN,R16
		LDI    YL,LOW(RD_MAP+$4)
                LDI    YH,HIGH(RD_MAP+$4)
		ldi    XL,LOW(ALL_ERT_BUF);主从处理
		ldi    XH,HIGH(ALL_ERT_BUF)
		LDI    R18,$0

    GOONER_1OP:
		LD    R16,X+
		ST    Y+,R16
	    INC   R18
		CPI   R18,$8
		BRNE  GOONER_1OP
		ldi   ZL,$08
		LDI   ADR_L,$4
		LDI   XL,LOW(ALL_ERT_BUF)
       	LDI   XH,HIGH(ALL_ERT_BUF)
     EXITX_EDN:     
        	LD     R16,X+
        	mov    EE_DAT,r16
        	RCALL  EEROM_W
        	INC    ADR_L
        	CLC
        	SUBI   ZL,$01
        	BRNE   EXITX_EDN
		rcall  clr_eerom
		cbi    ddrd,0
		sbi    ddrd,1	
		ldi    r16,$d8
		sts    ucsr0b,r16
		Rcall  led_flash
		ldi    r16,$0
		STS    DISTURB_SIGN,R16
		LDI    R16,$0
		STS    DAYS_COUNT,R16
		STS    HOURS,R16
		STS    MINITS,R16
		STS    SECOND,R16
		RCALL  OPEN_RECI_DATA
       ERRORI_DEAL:		
       		POP	R19
       		POP	R18 
       		POP	YL
       		POP	YH 
		RET
CLR_IICT:;--------------------------------
		LDS    R16,S_DIGN;IIC TIMES CLEAR
		CBR    R16,$4
		STS    S_DIGN,R16
		RET
SET_IICT:
		LDS    R16,S_DIGN;IIC TIMES SET
       		SBR    R16,$4
       		STS    S_DIGN,R16
		RET	
SET_MSECOND:
		LDS    R16,S_DIGN;SET TIME  ARRIVED
       		SBR    R16,$2
       		STS    S_DIGN,R16
		RET	
CLR_MSECOND:
		LDS    R16,S_DIGN;CLR TIME  ARRIVED
		CBR    R16,$02
		STS    S_DIGN,R16
		RET
CLOSE_RECI_DATA:
		LDS    R17,S_DIGN;CLOSE RECIEVE DATA
		SBR    R17,$01
		STS    S_DIGN,R17
		RET
OPEN_RECI_DATA:
		LDS    R16,S_DIGN;SET RECIEVE DATA
		CBR    R16,$1
		STS    S_DIGN,R16
		RET
;----------------------------------------------------
led_flash:
		PUSH	R16
		LDI     R16,$00
   EFE_LKED:
		SBI    PORTB,$0
		RCALL  DL300MS
		CBI    PORTB,$0
		RCALL  DL300MS
		INC R16
		CPI   R16,$20
		BRNE   EFE_LKED
		POP	R16
		RET
DL300MS:
		PUSH	R16
		PUSH	R17
		LDI     R16,10	
		LDI     R17,10	
	DERER:
		RCALL   DELAY3US
		RCALL   DELAY3US
		RCALL   DELAY3US
		RCALL   DELAY3US	
		CLC    
		SUBI    R16,$1
		BRNE    DERER
		LDI     R16,200
		CLC    
		SUBI    R17,$1
		BRNE    DERER
		
		POP	R17
		POP	R16
	        RET	
		
		
clr_eerom:
		PUSH	R18
		PUSH	R17
		PUSH	XL
		PUSH	XH
		ldi  r18,$00
	exit_op:	
		ldi   r17,$0
		rcall  WRITE_24C02
		inc    r18
		cpi    r18,$80
		brne   exit_op
		nop
		POP	XH
		POP	XL
		POP	R17
		POP	R18
		ret

;函数名:START_I2C
;功能:启动I2C
;输入参数:无
;输出参数:无
START_I2C:
	SBI     DDRD,0
	SBI     DDRD,1
	SBI     PORTD,0
	SBI     PORTD,1
	RCALL   DELAY3US
	CBI     PORTD,0
	RCALL   DELAY3US
	CBI     PORTD,1
	RCALL   DELAY3US
	RET
;函数名:STOP_I2C
;功能:停止I2C
;输入参数:无
;输出参数:无
STOP_I2C:
	SBI    DDRD,$0
	SBI    DDRD,$1
	CBI    PORTD,1
	CBI    PORTD,0
	SBI    PORTD,1
	RCALL  DELAY3US
	SBI    PORTD,0
	RET
;函数名:SEND_DATA
;功能:发送八位数据
;输入参数:要发送的数据放在r17中
;输出参数:如果出错则置ACK_ERROR

SEND_DATA:                 ;发送子程序,要发送的数据放在r17中
	PUSH   R16
	PUSH   R20
	LDI    R20,$08
	MOV    R16,R17
	CBI    PORTD,1
BITCOUNT:

	SBRS   R16,$07
	RJMP   SET_0
	SBI    PORTD,0
	RJMP   DELAY
SET_0:
	CBI    PORTD,0
DELAY:
	RCALL  DELAY3US
	SBI    PORTD,1
	RCALL  DELAY5US
	CBI    PORTD,1
	RCALL  DELAY3US
	LSL    R16
	DEC    R20
	BRNE   BITCOUNT

	POP    R20
	POP    R16
	RET

;函数名:TESTACK
;功能:测试应答信号
;输入参数:无
;输出参数:无
TESTACK:               ;应答测试子程序
	PUSH   R16
	SBI    PORTD,0
    CBI    DDRD,0
	RCALL  DELAY3US
	SBI    PORTD,1
	RCALL  DELAY3US
	LDI    R16,$28
ACK:	
	SBIS   PIND,0
	RJMP   OK
	DEC    R16
	BRNE   ACK
	LDI    R16,$01
	STS    ACK_ERROR,R16

OK:
	SBI    DDRD,0
	CBI    PORTD,1
	POP    R16
	RET
	
;函数名:SETNOACK
;功能:无应答
;输入参数:无
;输出参数:无
SETNOACK:             ;notack子程序
	SBI     PORTD,0
	SBI     PORTD,1
	RCALL   DELAY5US
	CBI     PORTD,1
	RET

;函数名:RECEIVE_DATA
;功能:从I2C总线接收一字节
;输入参数:无
;输出参数:接收的字节放在r17中
RECEIVE_DATA:          ;接收数据子程序,接收的数据放在r17
	PUSH   R16
	PUSH   R20
	LDI    R20,$08
	CBI    DDRD,0
REBIT:
	SBI    PORTD,1
	LSL    R17
	SBIC   PIND,0
	RJMP   READ_1
	RJMP   EXIT_ORNOT
READ_1:
	ORI    R17,$01
EXIT_ORNOT:	
	RCALL  DELAY5US
	CBI    PORTD,1
	RCALL  DELAY5US
	DEC    R20  
	BRNE   REBIT

	SBI    DDRD,0
	POP    R20
	POP    R16
	RET

;函数名:WRITE_24C02
;功能:写24C02
;输入参数:待写的数据放在R17中,要写的地址放在R18中
;输出参数:无

WRITE_24C02:          ;写24c02子程序,数据放在r17中,地址在r19,r18中
	PUSH     R16
	PUSH     R17
	RCALL    START_I2C
	LDI      R17,$A0
	RCALL    SEND_DATA
	RCALL    TESTACK
	MOV      R17,R18
	RCALL    SEND_DATA
	RCALL    TESTACK
	POP      R17
	RCALL    SEND_DATA
	RCALL    TESTACK
	RCALL    STOP_I2C
	RCALL    DELAY10MS
	POP      R16
	RET

;函数名:READ_24C02
;功能:从I2C总线读一字节
;输入参数:读出的数据放在R17中,要读的地址放在R18中
;输出参数:无
READ_24C02:           ;读24c02子程序,读回的数据放在r17中,地址在r18中
	PUSH     R16
	RCALL    START_I2C
	LDI      R17,$A0
	RCALL    SEND_DATA
	RCALL    TESTACK
	MOV      R17,R18
	RCALL    SEND_DATA
	RCALL    TESTACK
	RCALL    START_I2C
	LDI      R17,$A1
	RCALL    SEND_DATA
	RCALL    TESTACK
	RCALL    RECEIVE_DATA
	RCALL    SETNOACK
	RCALL    STOP_I2C
	POP      R16
	RET

;函数名:DELAY5US
;功能:延时5us
;输入参数:无
;输出参数:无	
DELAY5US:
	PUSH    R16
	LDI     R16,$21
DY5US:
	DEC     R16
	BRNE    DY5US
	POP     R16
	RET

;函数名:DELAY3US
;功能:延时3us
;输入参数:无
;输出参数:无	
DELAY3US:
	PUSH    R16
	LDI     R16,$10
DY3US:
	DEC     R16
	BRNE    DY3US
	POP     R16
	RET

;函数名:DELAY10MS
;功能:延时10MS
;输入参数:无
;输出参数:无	
DELAY10MS:
	PUSH    R16
	PUSH    R17
	LDI     R16,$FF
	LDI     R17,$FF
LP1:
	DEC     R16
	BRNE    LP1
	DEC     R17
	BRNE    LP1

	POP     R17
	POP     R16
	RET
scom_reci:
	push	r16
	push	r17
	push	xh
	push    xl
	lds r16,udr0
	lds r17,comsign
	sbrc r17,$1
   	rjmp  jimp_1reci
    sbrc r17,$0
   	rjmp  jimp_reci
	cpi  r16,$68
	brne exit_reci_scoms
	ldi  r17,$01
	sts  comsign,r17
	rjmp exit_reci_scoms
jimp_reci:
    ldi  r17,$00
	sts  comsign,r17
	cpi  r16,$96
	brne exit_reci_scoms
	ldi  r17,$02
	sts  comsign,r17
	ldi  xl,LOW(reci_BUF)
	ldi  xh,HIGH(reci_BUF)
	ldi  r16,$68
	st  x+,r16
	ldi  r16,$96
	st x+,r16
	sts  sav_adressh,xh
	sts  sav_adressl,xl
	rjmp exit_reci_scoms
jimp_1reci:
    lds  xh,sav_adressh
	lds  xl,sav_adressl
	st  x+,r16
	sts   sav_adressh,xh
	sts   sav_adressl,xl
	cpi   xl,LOW(reci_BUF+$b)
	brne  exit_reci_scoms
	ldi  r17,$04
	sts  comsign,r17
	nop
	nop
   	rjmp exit_reci_scoms	
exit_reci_scoms:
	pop	xl
	pop	xh
	pop	r17
    pop	r16
	reti
	                
scom_txd:
	push	r16
	PUSH	R17
	push	xl
	push	xh
	LDs    R16,comT_sign
	SBRs   R16,$0
	RJMP   sendr_end 
	LDS XH,SEND_adressh
        LDS XL,SEND_adressl
        CPI xl,LOW(SEND_BUF+9)
        brne  sendr_1end
        LDI    R16,0
        sts   comT_sign,r16 
        rjmp  sendr_end
    sendr_1end:
        ld  r16,x+
        sts  udr0,r16
        STS SEND_adressh,XH
        STS SEND_adressl,XL
     sendr_end:
	pop	xh
	pop	xl
	POP	R17
	pop	r16
	reti 
	
	  
TIGR_SEN:
	PUSH	R16
	PUSH	R17
	
	
	LDI  XH,HIGH(SEND_BUF)
	LDI  XL,LOW(SEND_BUF)
	LD  R16,X+
	STS SEND_adressh,XH
        STS SEND_adressl,XL
        CLI
        STS  UDR0,R16
        LDI  R16,$01
	STS comT_sign,R16
	SEI
GERIO:
	LDS  R16,comT_sign
	SBRC R16,$0
	RJMP GERIO
	
	
	POP	R17
	POP	R16
	RET	
RESPONSE:
	PUSH	XH
	PUSH	XL
	push	yh
	push	yl
	PUSH	R17
	PUSH	R16
	push	r18
	LDI  XH,HIGH(SEND_BUF)
	LDI  XL,LOW(SEND_BUF)
	ldi  r16,$68
	st   x+,r16
	ldi  r16,$96
	st   x+,r16
	
	LDI  yh,HIGH(reci_BUF+2)
	LDI  yl,LOW(reci_BUF+2)
	ld  r16,y+
	st   x+,r16
	
	ld  r16,y+
	st   x+,r16
	
	
	ldi  r16,$3
	st   x+,r16
	
	ldi  r16,'o'
	st   x+,r16
	
	ldi  r16,'k'
	st   x+,r16

	ldi  r16,'!'
	st   x+,r16
	
	LDI  XH,HIGH(SEND_BUF)
	LDI  XL,LOW(SEND_BUF)
	
	ldi  r17,$0
	ldi  r16,$8
	
   summ:
	ld   r18,x+
	add  r17,r18
	clc 
	subi  r16,$1
	brne  summ  
	st   x+,r17
	rcall TIGR_SEN
	
	
	
	pop	r18
	POP	R16
	POP	R17
	pop	yl
	pop	yh
	POP	XL
	POP	xh
	RET	
;函数名:WRITE_E2P
;功能:写E2P
;输入参数:R17----低地址,R18-----高地址在mega48中为0,R19-----要写入的数据
;输出参数:无
EEROM_W:
	PUSH    R16
	IN      R16,SREG
	PUSH    R16
	CLI
        LDI      ADR_H,$0
    WAIT_WRITE:
	IN      R16,EECR
	SBRC    R16,1
	RJMP    WAIT_WRITE
	OUT     EEARH,ADR_H
	OUT     EEARL,ADR_L
	OUT     EEDR,EE_DAT
	LDI     R16,$04
	OUT     EECR,R16
	IN      R16,EECR
	ORI     R16,$02
	OUT     EECR,R16
	LDI     R16,$04
	OUT     EECR,R16
	NOP
	NOP
	NOP
	NOP
	LDI     R16,$06
	OUT     EECR,R16
	POP     R16
	OUT     SREG,R16
	POP     R16
	RET

;函数名:READ_E2P
;功能:读E2P
;输入参数:R17----低地址,R18-----高地址在mega48中为0
;输出参数:R19-----从地址(r18:r17)中读出的数据
EEROM_R:
	PUSH     R16
	IN       R16,SREG
	PUSH     R16
	CLI
	LDI      ADR_H,$0
WAIT_READ:
	IN       R16,EECR
	SBRC     R16,1
	RJMP     WAIT_READ
	OUT      EEARH,ADR_H
	OUT      EEARL,ADR_L
	LDI      R16,$01
	OUT      EECR,R16
	IN       EE_DAT,EEDR
	POP      R16
	OUT      SREG,R16
	POP      R16	             
        RET  
        




        
        
        
                                                                               
.EXIT
                                

⌨️ 快捷键说明

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