📄 红外接收eeprom.asm
字号:
;***************************;
; 数控调频手动控制器 ;
;***************************;
;发射控制芯片BH1415F
;P2和P0扫描显示LED
ISP_DATA EQU 0E2H
ISP_ADDRH EQU 0E3H
ISP_ADDRL EQU 0E4H
ISP_CMD EQU 0E5H
ISP_TRIG EQU 0E6H
ISP_CONTR EQU 0E7H
;ENABLE_ISP EQU 83H ;<5MHZ晶体
;ENABLE_ISP EQU 82H ;<10MHZ
ENABLE_ISP EQU 81H ;<20MHZ (我用12MHZ)
;ENABLE_ISP EQU 80H ;>20MHZ
DATA_FLASH_START_ADDRES EQU 2000H ;STC89C/LE52RC扇区首地址--1扇区
DATA_FLASH_START_ADDRE EQU 2200H ;STC89C/LE52RC扇区首地址--2扇区
DATA_FLASH_START_ADDR EQU 2400H ;STC89C/LE52RC扇区首地址--3扇区
DATA_FLASH_START_ADD EQU 2600H ;STC89C/LE52RC扇区首地址--4扇区
DEBUG_DATA EQU 5AH ;零时储存
LINGSHI2 EQU 3AH
LINGSHI3 EQU 3BH
LINGSHI4 EQU 3CH
LINGSHI5 EQU 3DH
GUANZHONGDUA EQU 40H
LINGSHI EQU 2FH ;零时
WEISHU EQU 30H ;位数指示
XIANSHI EQU 31H ;位指示
CONBITL EQU 21H ;频率控制字节低8位
CONBITH EQU 22H ;频率控制字节高8位
KEYWORD EQU 23H ;存放键扫描时P1口值
Muting EQU P2.0 ;发射静音
DATAF EQU P2.1 ;发射数据
CLOCKF EQU P2.2 ;发射时钟
CSCEF EQU P2.3 ;发射片选
;
;
ORG 0000H ;程序开始地址
LJMP START ;转START执行
ORG 0003H ;
LJMP INTEX0 ;不用中断程序
ORG 000BH ;
RETI ; 不用中断程序
ORG 0013H ;
RETI ; 不用中断程序
ORG 001BH ;
RETI ; 不用中断程序
ORG 0023H ;
RETI ; 不用中断程序
ORG 002BH ;
RETI ; 不用中断程序
;
;初始化程序
CLEARMEN: MOV R0,#20H ;20H-34H循环清0
MOV R1,#50H ;
CLEARLOOP: MOV @R0,#00H ;
INC R0 ;
DJNZ R1,CLEARLOOP ;
MOV P1,#0FFH ;
MOV P0,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
CLR Muting ;发射开音BH1415禁止操作
CLR DATAF ;发射数据
CLR CLOCKF ;发射时钟
CLR CSCEF ;发射片选
CLEAR1: MOV PCON,#00H ;控制寄存器清0
LCALL EEPROM_read ;
LCALL DISPUPDAT ;写入BH1415芯片(修改发送频率)
MOV WEISHU,#05H
MOV LINGSHI2,#00H
MOV LINGSHI,#01H
CLEARMEM: MOV IE,#00H ;关所有中断
SETB EX0 ;开外中断
SETB EA ;总中断允许
MOV GUANZHONGDUA,#00H
RET ;子程序返回
;主程序
START: LCALL CLEARMEN ;上电初始化
MAIN: LCALL KEYFUN00 ;调查键子程序
LCALL DINGSHI
LCALL DISPLAY ;LED显示一次
LCALL DuPinLv
AJMP MAIN ;转MAIN循环
NOP ;PC出错处理
NOP ;
AJMP START
;读起频率
DuPinLv: JB P1.5,JIESHUDU
DuPinLvQ: JNB P1.5,DuPinLvQ
MOV LINGSHI,#01H
SETB EX0
JIESHUDU: RET
;******************************
; 遥控接收程序
;******************************
;采用中断接收
INTEX0: PUSH ACC
PUSH PSW
CLR EX0 ;关外中断
JNB P3.2,READ1 ;P3.1口为低电平转READ1
READOUTT0: MOV A,LINGSHI2
CJNE A,#01H,TIAO11
MOV A,LINGSHI
CJNE A,#01H,TIAO11 ;26h
MOV 29H,2DH
INC LINGSHI
LJMP ZhongDuan
TIAO11: MOV A,LINGSHI3
CJNE A,#02H,TIAO12
MOV A,LINGSHI
CJNE A,#02H,TIAO12 ;27h
MOV 26H,2AH
INC LINGSHI
LJMP ZhongDuan
TIAO12: MOV A,LINGSHI4
CJNE A,#03H,TIAO13
MOV A,LINGSHI
CJNE A,#03H,TIAO13 ;28h
MOV 27H,2BH
INC LINGSHI
LJMP ZhongDuan
TIAO13: MOV A,LINGSHI5
CJNE A,#04H,ZhongDuan
MOV A,LINGSHI
CJNE A,#04H,ZhongDuan ;29h
MOV 28H,2CH
MOV LINGSHI,#00H
POP PSW
POP ACC
CLR EX0
LCALL DISPUPDAT
LCALL EEPROM_XIE
LJMP ZhongDuan2
ZhongDuan: POP PSW
POP ACC
SETB EX0
ZhongDuan2: RETI ;退出中断
;
READ1: CLR A ;清A
MOV DPH,A ;清DPTR
MOV DPL,A ;
HARD1: JB P3.3,HARD11 ;P3.1变高电平转HARD11
INC DPTR ;用DPTR对低电平计数
NOP ;1微秒延时
NOP
AJMP HARD1 ;转HARD1循环(循环周期为8微秒)
HARD11: MOV A,DPH ;DPTR高8位放入A
JZ READOUTT0 ;为0(脉宽小于8*255=2毫秒)退出
CLR A ;不为0,说明是第一个宽脉冲(3毫秒)
READ11: INC A ;脉冲个数计1
READ12: JNB P3.3,READ12 ;低电平时等待
MOV R1,#06H ;高电平宽度判断定时值
READ13: JNB P3.3,READ11 ;变低电平时转READ11脉冲计数
LCALL DELAY ;延时(512微秒)
DJNZ R1,READ13
DEC A
DEC A ;6次延时不到转READ13再延时
JZ FUN0
DEC A ;超过3毫秒判为结束,减1
JZ FUN1
DEC A ;减1
JZ FUN2 ;为0执行FUN0(2个脉冲)
DEC A ;减1
JZ FUN3 ;为0执行FUN1(3个脉冲)
DEC A ;
JZ FUN4 ;为0执行FUN2(4个脉冲)
DEC A ;
JZ FUN5 ;为0执行FUN3(5个脉冲)
DEC A ;
JZ FUN6 ;为0执行FUN4(6个脉冲)
DEC A ;
JZ FUN7 ;为0执行FUN5(7个脉冲)
DEC A ;
JZ FUN8 ;为0执行FUN6(8个脉冲)
DEC A ;
JZ FUN9 ;为0执行FUN7(9个脉冲)
DEC A ;
JZ FUN10 ;为0执行FUN8(10个脉冲)
DEC A ;
JZ FUN11 ;为0执行FUN5(7个脉冲)
DEC A ;
JZ FUN12 ;为0执行FUN6(8个脉冲)
DEC A ;
JZ FUN13 ;为0执行FUN7(9个脉冲)
DEC A ;
JZ FUN14
NOP ;
NOP ;
LJMP READOUTT0 ;出错退出
;
FUN0: LCALL YII ;P0口各端口开关输出控制
LJMP READOUTT0 ;转中断退出
FUN1: LCALL EERR ;
LJMP READOUTT0 ;
FUN2: LCALL SAN
LJMP READOUTT0
FUN3: LCALL SII
LJMP READOUTT0
FUN4: LCALL WUU
LJMP READOUTT0
FUN5: LCALL LIU
LJMP READOUTT0
FUN6: LCALL QII
LJMP READOUTT0
FUN7: LCALL BAA
LJMP READOUTT0
FUN8: LCALL JIU ;P2口各端口开关输出控制
LJMP READOUTT0 ;转中断退出
FUN9: LCALL SHI
LJMP READOUTT0
FUN10: LCALL XIAOXIAO
LJMP READOUTT0
FUN11: LCALL GEWEIIII
LJMP READOUTT0
FUN12: LCALL ZHONG
LJMP READOUTT0
FUN13: LCALL GAO
LJMP READOUTT0
FUN14: NOP ;P2.0口开关控制
LJMP READOUTT0 ;转中断退出
FUN15: NOP ;亮度调整
LJMP READOUTT0 ;中断退出
;
GAO: MOV LINGSHI2,#04H
MOV LINGSHI3,#04H
MOV LINGSHI4,#04H
MOV LINGSHI5,#04H
RET
;
ZHONG: MOV LINGSHI2,#03H
MOV LINGSHI3,#03H
MOV LINGSHI4,#03H
MOV LINGSHI5,#03H
RET
;
GEWEIIII: MOV LINGSHI2,#02H
MOV LINGSHI3,#02H
MOV LINGSHI4,#02H
MOV LINGSHI5,#02H
RET
;
XIAOXIAO: MOV LINGSHI2,#01H
MOV LINGSHI3,#01H
MOV LINGSHI4,#01H
MOV LINGSHI5,#01H
RET
;
YII: MOV 2DH,#0
MOV 2AH,#0
MOV 2BH,#0
MOV 2CH,#0
RET
;
EERR: MOV 2DH,#1
MOV 2AH,#1
MOV 2BH,#1
MOV 2CH,#1
RET
;
SAN: MOV 2DH,#2
MOV 2AH,#2
MOV 2BH,#2
MOV 2CH,#2
RET
;
SII: MOV 2DH,#3
MOV 2AH,#3
MOV 2BH,#3
MOV 2CH,#3
RET
;
WUU: MOV 2DH,#4
MOV 2AH,#4
MOV 2BH,#4
MOV 2CH,#4
RET
;
LIU: MOV 2DH,#5
MOV 2AH,#5
MOV 2BH,#5
MOV 2CH,#5
RET
;
QII: MOV 2DH,#6
MOV 2AH,#6
MOV 2BH,#6
MOV 2CH,#6
RET
;
BAA: MOV 2DH,#7
MOV 2AH,#7
MOV 2BH,#7
MOV 2CH,#7
RET
;
JIU: MOV 2DH,#8
MOV 2AH,#8
MOV 2BH,#8
MOV 2CH,#8
RET
;
SHI: MOV 2DH,#9
MOV 2AH,#9
MOV 2BH,#9
MOV 2CH,#9
RET
;*************************************
;* 延时 255 X 2 = 512 us *
;*************************************
;
DELAY: MOV R0,#0FFH
DELAY1: DJNZ R0,DELAY1
RET
;
;位数指示
JIESHUZHIIN: MOV A,WEISHU
CJNE A,#01H,NAGEAIQU111
MOV 31H,#14H
MOV 32H,#0AH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -