📄 b4cgp.asm
字号:
;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 + -