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

📄 b4cgp.asm

📁 模拟感应式机顶盒源代码,用于电视信号收费系统解扰
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;em78p257a: 1     2   3   4    5   6   7   8   9  
;          p52   P53 P54 P71      P60 P61 P62 P63
;         RMTIN  NC  NC RESET VSS WP  SCL SDA STUDY
;         18  17  16   15  14  13 12  11  10
;         P51 P50 P55  P70     P76 P66 P65 P64
;         DESL NC OSC1 OSC0 VDD NC NC CTL DATA
;20H区号,21H用户号低位,22H用户号高位,23H键值
;10h区号,11H组号低位,12H高位,13H数据偏移,14H字节对应位
;寄存器
R0		EQU	0
R1		EQU	1
R2		EQU	2
R3		EQU	3
R4		EQU	4
  SAV_PAGE	EQU	6
R5		EQU	5
R6		EQU	6
R8		EQU	8

TIMERSIGER	EQU	9      ;定时器中断标志寄存器,需软件清零.
 TIMER_SA	EQU	0
 TIMER_SB	EQU	1
 TIMER_SC	EQU	2

TCCA_CTR	EQU	0XA
TCCBC_CTR	EQU	0XB 
TCC_PREC	EQU	0XC
IR_CTR		EQU	0XD 
MOUSE_CTR	EQU	0XE

;IO	0页IO操作寄存器
PORT5_IO	EQU	05;IOC50
PORT6_IO	EQU	06;IOC60
PORT7_IO	EQU	07;IOC70
TCC_CTR		EQU	08;IOC80
COMP_CTR	EQU	09;IOC90
COMP_NEGN	EQU	0XA;IOCA0
PULLDOWN_CTR	EQU	0XB;IOCB0
OPENDRAIN_CTR	EQU	0XC;IOCC0
PULLHIGH	EQU	0XD;IOCD0
WATCHDOG	EQU	0XE;IOCE0
INTTR_MASK	EQU	0XF;IOCF0
;特殊功能寄存器定义
STATUS    	EQU     3
  C		EQU	0
  DC		EQU	1 
  Z		EQU	2
  PS0		EQU	5
  IOCS		EQU	6
  RST_TYPE	EQU	7
;IO	1页IO操作寄存器
TCCA_COUNT	EQU	0X5;IOC50
TCCBL_COUNT	EQU	0X6;IOC61
TCCBH_COUNT	EQU	0X7;IOC71
TCCX_COUNT	EQU	0X8;IOC80

PORT7		EQU	0X07

;常量定义@
 SLAVE   	EQU     0x0A0;串行器件的器件地址
 EE2ROM_ND	EQU	0XF8;E2ROM的SDA,SCL,WP置输出 
 EE2ROM_OR	EQU	0X04;E2ROM的SDA输入,SCL置输出
 USER_Q   	EQU	0X20;用户分区
 USER_ADRESSL	EQU	0X21;用户本身地址码L字节(E2ROM地址)
 USER_ADRESSH   EQU	0X22;用户本身地址码H字节
 RMTS_DATA	EQU	0X10;遥控器本身键值6字节

PORT5		EQU	0X05;端口5的I/O定义
  IC_CARDS	EQU	0
  DESL    	EQU	1;解扰指示灯端口
  RMTIN	        EQU	2;红外输入口
  D_LED		EQU	3;帧标志接收端口
  GY_IN         EQU     4
PORT6 		EQU	0X06 ;端口6的I/O定义
  WP            EQU     0
  SCL_E2PROM    EQU     1;AT24C04时钟端口 
  SDA_E2PROM    EQU     2;AT24C04数据端口
  STUDY         EQU     3;遥控器   
  DATA_IN     	EQU 	4;接收数据端口
  CTL     	EQU	5;解扰脉冲端口
  OUT_CTR	EQU	7;
 
IOCA		EQU	0X0A
IOCB		EQU	0X0B
IOCC		EQU	0X0C
IOCD		EQU	0X0D
IOCE		EQU	0X0E
IOCF		EQU	0X0F	
RF		EQU	0X0F

EEPROM  	EQU     0x2A;E2ROM数据缓存
  DO      	EQU     6;EEPROM输出缓存标志
  DI      	EQU     7;EEPROM接收缓存标志

;通用寄存器定义
TXBUF   	EQU     0x25;串行器件(24C04)写缓存             
RXBUF   	EQU     0x26;串行器件(24C04)读缓存 
COUNTER   	EQU     0x27;DATA长度计数器
ADDR    	EQU     0x29;器件数据输入输出地址
DELY_CT		equ	0x2C
ADRESS_TP	EQU	0X2D
DATLO_MJ	EQU	0X2E;比较高位缓存
DATAO   	EQU     0x2F;IC卡数据输出缓存
RMTR_DATA	EQU	0X30;接收遥控器键值存储

SIGN_FLAG2	EQU	0X17 ;SIGN_FLAG2位定义
 ACK_ERROR	EQU	0

Rx              EQU    0x3A;12         ;add by twd
DEC_ENABLE      EQU     0           ;P6.6//twd
pulse_Rx        EQU     6           ;P5.0//twd       
pulseCnt        EQU    0x3E;13
;常量
    max_rx      EQU    10;20
    min_rx      EQU    1;2   
;1页RAM
QUHAO_DT        equ    0x10;(B1_2X)用户本身地址码存储起始地址5字节
WAIT_ACK	EQU    0X3D	

;---------------------------------------------
GY_COUNTER EQU  0x16
DREM16UL  EQU   0X17;余数低字节L(<128)
DREM16UH  EQU   0X18;余数高字节H(0)
DD16UL    EQU   0X19;被除数低字节L(机号L)
DD16UH    EQU   0X1A;被除数高字节H(机号H)
DV16UL    EQU   0X1B;除数低字节L(128)
DV16UH	  EQU   0X1C;除数高字节H(0)
T_20H	  EQU	0X1D;计数器
DT_ACOUN  EQU	0X1D
TEMP_DVL  EQU	0X1E;缓存
TIMERIRH  EQU	0X1F

;除数放R17,被除数R18
;结果R18,余数,R19
DREM8U	EQU  0X1A;余数		
DD8U	EQU  0X19;被除数	
DV8U	EQU  0X18;除数
T_R16	EQU  0X17;计数器

;**************************************************

DAT_L60SL	EQU	0XD0
DAT_L60SH	EQU	0X0
DAT_H60SL	EQU	0X98
DAT_H60SH	EQU	0X01

DAT_L80SL	EQU	0X00
DAT_L80SH	EQU	0X03
DAT_H80SL	EQU	0X60
DAT_H80SH	EQU	0X04
DAT_ADRES	EQU	0X28
;0区RAM资源配置
OPEN_STA	EQU	0X15
OPEN_S		EQU	0X0
SIGNER_FLAG	EQU	0X20;位标志寄存器2
FLAG_H60US	EQU	0
FLAG_L60US	EQU	1
FLAG_80US	EQU	2          
FIRST_LBIT	EQU	3

RECI_IO		EQU	0X22;接收脉冲状态存储器,'1'为上升沿,'2'为下降沿 
RS_SAVC		EQU	0X23
TEMPMPL  	EQU     0x23;起始位缓存PL
RECI_CNT	EQU	0X24
TEMPMPH   	EQU     0x24;起始位缓存PH
CTEMP_L		EQU	0X25
ADDR_C		EQU	0X25
ADDRESS		EQU	0X26
RECI_DBUF	EQU	0X27

;1区RAM资源配置

CDA9_HDATH	EQU	0X2A;9MS上限
CDA9_HDATL	EQU	0XBB

CDA9_LDATH	EQU	0X04
CDA9_LDATL	EQU	0X00

CDA4_HDATH	EQU	0X11;4.5MS上限
CDA4_HDATL	EQU	0XDD

CDA4_LDATH	EQU	0X0A;4.5MS下限
CDA4_LDATL	EQU	0X90

CDA1_HDATH	EQU	0X08;1.6MS上限
CDA1_HDATL	EQU	0X60


CDA1_LDATH	EQU	0X05;1.6MS下限
CDA1_LDATL	EQU	0X0

CDAH_HDATH	EQU	0X2;0.5MS上限
CDAH_HDATL	EQU	0X60

CDAH_LDATH	EQU	0X01;0.5MS下限
CDAH_LDATL	EQU	0X60

DAT_SPHEAD	EQU	0X2F

IR_FLAG		EQU	0X20
  IR_HEADB	EQU	0
  IR_HEADC	EQU	1
  IR_HEADD	EQU	2
  IR_HEADE	EQU	3
  IR_HEADF	EQU	4
IR_CTRF		EQU	0X17
NINE_MS		EQU	0X0
NORMORL_MS	EQU	0X1
COMP_DATH	EQU	0X22
COMP_DATL	EQU	0X23
IR_TIMETPL	EQU	0X24
IR_TIMETPH	EQU	0X25
TEMP_IRT	EQU	0X26
DBITY_CT	EQU	0X27
IRDAT_TEMP	EQU	0X28

DATG_COUNT	EQU	0X2B
DAT_SSPH	EQU	0X2C
SUM_TT		EQU	0X2D
DAT_IRSV	EQU	0X37

  		ORG  0x0000
  		JMP  BEGIN
  		ORG  0X3FA
  		BC   STATUS,PS0
  		JMP  TIMER0_INT
  		ORG  0X3F8
  		BC   STATUS,PS0
  		JMP  TIMER0_A
  		ORG  0X3F6
  		BC   STATUS,PS0
		JMP  TIMER0_B
  		ORG  0X0B		
BEGIN:
      
		CALL  DELAY_100MS
		MOV A,@0X11
		MOV R4,A
		MOV A,@0X2E
		MOV  0X10,A
   	GO_ONCLR:	
		CLR  0
		INC  R4
		DEC  0X10
		JBS  STATUS,Z
		JMP  GO_ONCLR    ;清0页RAM
		MOV A,@0X21      ;清1页RAM
		MOV R4,A
		BS  R4,SAV_PAGE ;1页RAM
		MOV A,@0X1E
		MOV  0X20,A
	GO_ONCHR:	
		CLR  0
		INC  R4
		DEC  0X20
		JBS   STATUS,Z
		JMP   GO_ONCHR
		CLR  0    
		BC     R4,SAV_PAGE       ;0页RAM  
		CALL  CPU_INT1         ;CPU初始化操作
		CALL  RD_24C04         ;
		JBC   SIGN_FLAG2,ACK_ERROR
		JMP   BEGIN
		CLR   OPEN_STA
		CLR   SIGN_FLAG2
		CLR   DT_ACOUN
		
		;{restore Rx at last power off
		   BS  R4,SAV_PAGE;TWD ADD
		         Bs PORT5 ,DEC_ENABLE
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		         JMP $+1
		                           
		                MOV A,@50 
		                MOV pulseCnt,A
		                loop_decRxx:
		                   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		                  
		                    
		                    dec pulseCnt
		                    JBS  STATUS ,Z
		                    jmp  loop_decRxx
		             ;}  
		             
		             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,Rx
		             MOV pulseCnt,A
		             loop_addRx00:
		                 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_addRx00	                                   
		                    
		                    
                 BC  R4,SAV_PAGE;TWD ADD
		 ;}			 
		   
		ENI
		
MAIN:
		JBC  IR_CTRF,NINE_MS
		JMP  MAIN_NEXT1		
		BS   STATUS,PS0
		JMP  NOR_EVENTS
	MAIN_NEXT1:	
		JMP  RECI_IRDAT		
	MAIN_NEXT2:
		ENI		
		JMP  MAIN_NEXT1

CPU_INT1:       
		;I/O初始化
		CLRA
		IOW  WATCHDOG;IOCE0
		MOV  A,@0X2
		CONTW
		MOV  A,@0XF4
		IOW  PORT5;PORT5的端口方向初始化:0,1,输出,2,3输入
		MOV  A,@0X18
		IOW  PORT6;PORT6的端口方向初始化:,1,2,3,4,6,7输出,0,5,输入
		MOV  A,@0XFF
		MOV  R5,A
		MOV  A,@0XFF
		MOV  R6,A
		CLRA
		IOW  COMP_CTR;取消比较器操作,做标准IO用IOC90
		IOW  COMP_NEGN;IOCA0
		IOW  OPENDRAIN_CTR;禁止漏极开路输出,IOCC0
		MOV  A,@0X0FF
		IOW  PULLDOWN_CTR;禁止下拉输出IOCB0
		MOV  A,@0XF0
		IOW  PULLHIGH;始能上拉电组IOCD0
		MOV  A,@0X10
		IOW TCC_CTR;PORT5为标准IO口16
		MOV  A,@0XF0
		MOV  R1,A
		CLR  TIMERSIGER
		MOV  A,@04
		MOV  TCCA_CTR,A;定时器A
		MOV  A,@0X40
		MOV  TCCBC_CTR,A
		MOV  A,@1
		IOW  INTTR_MASK;IOCF0;独立定时器
		;红外控制寄存器
		MOV  A,@00;取消红外
		MOV  IR_CTR,A
		;鼠标控制寄存器
		MOV  MOUSE_CTR,A;取消鼠标控制功能
		MOV  A,@7
		MOV  TCC_PREC,A
		CLR  RF
		BS   STATUS,IOCS
		MOV  A,@0XE8
		IOW  TCCA_COUNT
		IOW  TCCX_COUNT
		MOV  A,@00
		IOW  TCCBL_COUNT
		IOW  TCCBH_COUNT
		BC   STATUS,IOCS
		BS   R4,SAV_PAGE
		COM  TEMP_IRT
		BC   R4,SAV_PAGE
		RET
			
CPU_INT2:         ;CPU初始化操作
                MOV  A,@7
		MOV  TCC_PREC,A
		CLR  RF
		BS STATUS,IOCS
		MOV  A,@0XE8
		IOW  TCCA_COUNT
		IOW  TCCX_COUNT    ;禁止B定时器溢出中断
		MOV  A,@00
		IOW  TCCBL_COUNT
		IOW  TCCBH_COUNT
		BC  STATUS,IOCS
		BC  R4,SAV_PAGE
		COM TEMP_IRT            ;
		RET
;_____________________________________________________
RD_24C04:                               ;从E2ROM(AT24C04)读入机号
             MOV A,@0x4f ;TWD ADD
         	MOV  ADDR,A               ;TWD ADD
         	CALL RDBYTE_E2PROM ;TWD ADD
         	MOV  A,RXBUF  ;TWD ADD   
         	 BS  R4,SAV_PAGE;TWD ADD        
          	MOV  Rx,A ;TWD ADD
         	 
         	 
         	SUB   A,@max_rx;TWD ADD
     		JBC STATUS,C;TWD ADD
     		JMP  oldZJF;TWD ADD
     		   MOV A,@max_rx;TWD ADD
     		    BS  R4,SAV_PAGE;TWD ADD
     		    MOV Rx,A;TWD ADD     		
     		         		    
    oldZJF: ;TWD ADD	
            BC  R4,SAV_PAGE;TWD ADD 

                MOV A,@QUHAO_DT         ;从EEROM读出
   		MOV A,@USER_Q          ;用户分区
		MOV ADDR,A             ;器件数据输入输出地址
         	CALL RDBYTE_E2PROM     ;读出E2ROM用户分区(1字节)
         	MOV  A,RXBUF            ;串行器件(24C04)读缓存
               	MOV  QUHAO_DT,A
         	INC  ADDR
         	CALL RDBYTE_E2PROM
         	MOV  A,RXBUF            ;串行器件(24C04)读缓存
               	MOV  QUHAO_DT+1,A
         	INC  ADDR
         	CALL RDBYTE_E2PROM
          	MOV  A,RXBUF            ;串行器件(24C04)读缓存
               	MOV  QUHAO_DT+2,A
         	INC  ADDR
         	CALL RDBYTE_E2PROM
         	MOV  A,RXBUF            ;串行器件(24C04)读缓存
         	MOV  QUHAO_DT+6,A
         	NOP
         	NOP
     		MOV A,QUHAO_DT+1

    
    	
		MOV DD16UL,A          ;被除数L
		MOV A,QUHAO_DT+2
		MOV DD16UH,A          ;被除数H
		MOV A,@0X00
		MOV DV16UH,A          ;除数H
		MOV A,@0X40
		MOV DV16UL,A          ;除数L
		CALL DIVIDE_16
		MOV A,DD16UL         ;结果放组号L
		MOV  QUHAO_DT+1,A
		MOV  A,DD16UH
		MOV  QUHAO_DT+2,A       ;结果放组号H
		MOV A,DREM16UL       ;余数L/8
		MOV DD8U,A           ;余数放被除数
		BC  R4,SAV_PAGE       ;0页RAM
		MOV A,@0X08
		MOV DV8U,A            ;
		CALL DIVDIE_8
		MOV A,DD8U
		MOV QUHAO_DT+3,A         ;结果放PIANYI
		MOV A,DREM8U
		MOV QUHAO_DT+4,A        ;余数放USERHAO
		CLR  QUHAO_DT+5
		INC  QUHAO_DT+4
		BS   STATUS,C
	WERT_9:	
		RLC   QUHAO_DT+5
  		BC    STATUS,C
		DJZ   QUHAO_DT+4
		JMP   WERT_9
		MOV   A,QUHAO_DT+5
		MOV   QUHAO_DT+4,A
		CLR   QUHAO_DT+5
		CLR   SIGN_FLAG2
		MOV  A,@USER_Q+8
		MOV  ADDR,A
		CALL RDBYTE_E2PROM
		MOV  A,RXBUF
		NOP
		NOP
		SUB  A,@0XAA
		JBS   STATUS,Z;2004-4-15 8:30
		JMP  WAIT_Y
		BC    IR_CTRF,NORMORL_MS;打开解扰
		NOP
		NOP
		JMP   LIO_EXY
	WAIT_Y:
		BS   IR_CTRF,NORMORL_MS;打开解扰
		NOP
		NOP
	LIO_EXY:
		RET  
;区号,组号低位,组号高位,偏移量,用户号
RD_RMTS:                              ;从E2ROM(AT24C04)读入红外键值
		BC  R4,SAV_PAGE       ;0页RAM
		MOV A,@RMTR_DATA
		MOV R4,A
		BS  R4,SAV_PAGE ;1页RAM
		MOV   A,@RMTS_DATA           ;读出红外键值
		BC  R4,SAV_PAGE       ;0页RAM
		MOV   ADDR,A
		MOV   A,@0X06           ;(6字节)
		CALL E2ROMOP
		RET
E2ROMOP: 
                MOV   COUNTER,A        ;DATA长度计数器
   E2ROMD:
   		CALL RDBYTE_E2PROM
   E2ROMD2:	
   		MOV   A,RXBUF
		MOV   R0,A
		INC   R4
		DJZ   COUNTER
		JMP   E2ROMD
		RET  

;************************************************************
RECI_IRDAT:
		JBC  PORT5,RMTIN
		JMP  TYUXV1
		BC   STATUS,C	
		JMP  TYUXV0
	TYUXV1:
		BS    STATUS,C
	TYUXV0:
		BS    R4,SAV_PAGE
		RLC   TEMP_IRT
		MOV   A,TEMP_IRT
		AND   A,@0X03
		JBS   STATUS,Z
		JMP   EXIT_1CIR
		JMP   EXIT_RCIR
	EXIT_1CIR:
		BC    STATUS,C
		SUB   A,@03
		JBS   STATUS,Z
		JMP   EXIT_2CIR
		JMP   EXIT_RCIR
	EXIT_2CIR:
		DISI
		CLR  DT_ACOUN
		MOV   A,R1
		MOV   IR_TIMETPL,A
		MOV   A,TIMERIRH
		MOV   IR_TIMETPH,A;比较缓存高位
		CLR   R1
		CLR   TIMERIRH
		NOP
		ENI
		JBC   IR_FLAG,IR_HEADD
		JMP   RECI_3IR;接收数据
		JBC   IR_FLAG,IR_HEADC
		JMP   RECI_2IR;检测4.5MS脉冲
		JBC   IR_FLAG,IR_HEADB
		JMP   RECI_1IR;检测9.5MS脉冲
		JBC   TEMP_IRT,0
		JMP   EXIT_RCIR
		CLR   IR_FLAG
		BC    IR_CTRF,NINE_MS
		BS    IR_FLAG,IR_HEADB
		JMP   EXIT_RCIR 
	RECI_1IR:

⌨️ 快捷键说明

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