📄 红外接收eeprom.asm
字号:
MOV 33H,28H
MOV 34H,#14H
AJMP JIESHUZHOUT555
NAGEAIQU111: CJNE A,#02H,NAGEAIQU222
MOV 31H,#14H
MOV 32H,27H
MOV 33H,#14H
MOV 34H,#14H
AJMP JIESHUZHOUT555
NAGEAIQU222: CJNE A,#03H,NAGEAIQU333
MOV 31H,26H
MOV 32H,#0AH
MOV 33H,#14H
MOV 34H,#14H
AJMP JIESHUZHOUT555
NAGEAIQU333: CJNE A,#04H,JIESHUZHOUT444
MOV 31H,#14H
MOV 32H,#0AH
MOV 33H,#14H
MOV 34H,29H
AJMP JIESHUZHOUT555
JIESHUZHOUT444: CJNE A,#05H,JIESHUZHOUT555
MOV 31H,26H
MOV 32H,27H
MOV 33H,28H
MOV 34H,29H
JIESHUZHOUT555:RET
;
KEYFUN00: JB P1.1,DSFSFAS
KEYFUN0011: JNB P1.1,KEYFUN0011
LCALL YASHIJI
JNB P1.1,KEYFUN0011
INC WEISHU ;个位数加1
MOV A,WEISHU ;
CLR C ;
CJNE A,#06H,JHLLURYEE ;判断是否小于10
JHLLURYEE: JC DSFSFAS1 ;小于10转FUN02OUT
MOV WEISHU,#01H ;大于或等于10清为0
DSFSFAS1: LCALL EEPROM_XIE
DSFSFAS: RET ;
;
YASHIJI: LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
RET
;
DINGSHI: JB P1.2,RGERRTHRTH
DINGSHI1: LCALL YASHIJI
JNB P1.2,DINGSHI1
LCALL YASHIJI
JNB P1.2,DINGSHI1
MOV A,WEISHU
CJNE A,#01H,NAGEAIQU1
KEYFUN01: CLR A
INC 28H ;百位数加1
MOV A,28H ;入A
CLR C ;清进位标志
CJNE A,#04H,FUN001 ; ;百位小于2转FUNOO0UT
MOV 28H,#08H
AJMP FUN0013 ;大于等于2清为0(百位只能是0或1)
FUN001: CJNE A,#09H,FUN0012
MOV 28H,#09H
AJMP FUN0013
FUN0012: CJNE A,#0AH,FUN0013
MOV 28H,#00H
FUN0013: LCALL DISPUPDAT ;写入控制芯片(修改发射频率)
AJMP NAGEAIQU
NAGEAIQU1: CJNE A,#02H,NAGEAIQU2
CLR A
INC 27H ;个位数加1
MOV A,27H ;
CLR C ;
CJNE A,#0AH,FUN02 ;判断是否小于10
FUN02: JC FUN02OUT ;小于10转FUN02OUT
MOV 27H,#00H ;大于或等于10清为0
FUN02OUT: LCALL DISPUPDAT ;写入控制芯片(修改发射频率)
AJMP NAGEAIQU
NAGEAIQU2: CJNE A,#03H,NAGEAIQU3
CLR A
INC 26H ;个位数加1
MOV A,26H ;
CLR C ;
CJNE A,#0AH,FUN03 ;判断是不小于10
FUN03: JC FUN03OUT ;小于10转FUN03OUT
MOV 26H,#00H ;大于或等于10清为0
FUN03OUT: LCALL DISPUPDAT ;写入控制芯片(修改发射频率)
AJMP NAGEAIQU
NAGEAIQU3: CJNE A,#04H,NAGEAIQU
CLR A
INC 29H ;个位数加1
MOV A,29H ;
CLR C ;
CJNE A,#02H,FUN04 ;判断是不小于10
FUN04: JC FUN04OUT ;小于10转FUN03OUT
MOV 29H,#00H ;大于或等于10清为0
FUN04OUT: LCALL DISPUPDAT ;写入控制芯片(修改发射频率)
NAGEAIQU: LCALL DISPLAY
LCALL EEPROM_XIE
RGERRTHRTH: RET
; 将BCD码转为十六进制数,与5位控制码合成操作码,写入控制芯片
DISPUPDAT: LCALL BCDB ; 调BCD码转为十六进制数程序
LCALL CONCOMMAND ; 调与5位控制码合成操作码程序
LCALL PUTBIT ; 发控制字至BH1415
RET ;返回
;
; 将BCD码转为十六进制数程序
BCDB: MOV A,#00H
MOV CONBITL,#00H ; 控制字清0
MOV CONBITH,#00H ; 控制字清0
MOV CONBITL,26H ;小数位数放入控制字低8位
MOV A,27H ;个位数乘10操作
MOV B,#10 ;
LCALL MULLOOP ;调乘法子程序
MOV A,28H ;十位数乘100操作
MOV B,#100 ;
LCALL MULLOOP ; 调乘法子程序
MOV A,29H ;
JNZ ADD3E8 ;百位数为1转ADD3E8(加1000操作)
RET ; 百位数为0退出
ADD3E8: CLR C ;清进位档标志
MOV A,#0E8H ;低8位加法
ADD A,CONBITL ;累加
MOV CONBITL,A ;放回CONBITL
MOV A,#03H ; 高8位加法
ADDC A,CONBITH ;控制字高8位处理
MOV CONBITH,A ;放回CONBITH
RET ;返回
;
;乘法及累加处理程序(将四位显示的十进制BCD码转为1个二进制数)
MULLOOP: MUL AB ;乘法
CLR C ;清进位标志
ADD A,CONBITL ;积低8位与CONBITL相加
MOV CONBITL,A ;放回CONBITL
MOV A,CONBITH ;
ADDC A,B ;积高8位与CONBITH带进位累加
MOV CONBITH,A ;放回CONBITH
RET ;返回
;
;频率控制数据与5位控制码合成BH1415控制字
CONCOMMAND: ANL CONBITH,#07H ;高四位为0
MOV A,#40H ;控制字放入A
ORL A,CONBITH ;合成控制字
MOV CONBITH,A ;放回CONBITH
RET ;返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 发送控制字节子程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
PUTBIT: MOV A,CONBITL ;低8位控制字入A
SETB CSCEF ;片选 ;BH1415使能(允许写)
LCALL PUT
MOV A,CONBITH ; 高8位控制字入A
LCALL PUT ; 发送8位
CLR CSCEF ;片选 ; BH1415写禁止
CLR DATAF ;复位
CLR CLOCKF ;复位
RET ;返回
;
;字节发送子程序
PUT: MOV R3,#8 ;发送8位控制
CLR C ;清C
PUT1: RRC A ;带进位位右移(先发低位)
MOV DATAF,C ;低位送至P3.0口
NOP ;延时4微秒
NOP ;
NOP ;
NOP ;
SETB CLOCKF ;锁存数据(上升沿时锁存数据)
NOP ;延时4微秒
NOP ;
NOP ;
NOP ;
CLR CLOCKF ;
DJNZ R3,PUT1 ;8位未发完转PUT1再发
RET ; 8位发完结束
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; 显示程序 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 显示数据在70H-75H单元内,用六位LED共阳数码管显示,P1口输出段码数据,P3口作
; 扫描控制,每个LED数码管亮1MS时间再逐位循环。
DISPLAY: LCALL JIESHUZHIIN
MOV A,#0AH
ADD A,32H
MOV 32H,A
MOV R1,#31H ;指向显示数据首址
MOV R5,#0FEH ;扫描控制字初值
PLAY: MOV A,R5 ;扫描字放入A
MOV P2,A ;从P3口输出
MOV A,@R1 ;取显示数据到A
MOV DPTR,#TAB ;取段码表地址
MOVC A,@A+DPTR ;查显示数据对应段码
MOV P0,A ;段码放入P1口
LCALL DL1MS ;显示1MS
INC R1 ;指向下一地址
MOV A,R5 ;扫描控制字放入A
ENDOUTA: JNB ACC.5,ENDOUT ;ACC.5=0时一次显示结束
RL A ;A中数据循环左移
MOV R5,A ;放回R5内
AJMP PLAY ;跳回PLAY循环
ENDOUT: SETB P2.5 ;一次显示结束,P3口复位
MOV P2,#0FFH ;P3.7口为0时转时间调整程序
RET ;子程序返回
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H,0BFH
;共阳段码表 "0""1""2" "3""4""5""6""7" "8""9""不亮"
;
;513微秒延时子程序
DL513: MOV R3,#0FFH
DL513LOOP: DJNZ R3,DL513LOOP
RET
;
;1毫秒延时子程序(LED点亮用)
DL1MS: MOV R4,#02H
DL1MSLOOP: LCALL DL513
DJNZ R4,DL1MSLOOP
RET
;
;10毫秒延时子程序(消抖动用)
DL10MS: MOV R6,#0AH
DL10MSLOOP: LCALL DL1MS
DJNZ R6,DL10MSLOOP
RET
;
DL05S: LCALL DL10MS
LCALL DL10MS
RET
;读
EEPROM_read:
MOV DPTR,#DATA_FLASH_START_ADDRES
LCALL Byte_read
MOV 26H,A
MOV DPTR,#DATA_FLASH_START_ADDRE
LCALL Byte_read
MOV 27H,A
MOV DPTR,#DATA_FLASH_START_ADDR
LCALL Byte_read
MOV 28H,A
MOV DPTR,#DATA_FLASH_START_ADD
LCALL Byte_read
MOV 29H,A
RET
;写LCALL EEPROM_XIE
EEPROM_XIE:
MOV DPTR,#DATA_FLASH_START_ADDRES
ACALL sector_erase
MOV DPTR,#DATA_FLASH_START_ADDRES
MOV A,26H
ACALL bute_program
MOV DPTR,#DATA_FLASH_START_ADDRE
ACALL sector_erase
MOV DPTR,#DATA_FLASH_START_ADDRE
MOV A,27H
ACALL bute_program
MOV DPTR,#DATA_FLASH_START_ADDR
ACALL sector_erase
MOV DPTR,#DATA_FLASH_START_ADDR
MOV A,28H
ACALL bute_program
MOV DPTR,#DATA_FLASH_START_ADD
ACALL sector_erase
MOV DPTR,#DATA_FLASH_START_ADD
MOV A,29H
ACALL bute_program
RET
;EEPROM读
Byte_read:
MOV ISP_CONTR,#ENABLE_ISP
MOV ISP_CMD,#01 ;读指令
MOV ISP_ADDRH,DPH
MOV ISP_ADDRL,DPL
CLR EA
MOV ISP_TRIG,#46H
MOV ISP_TRIG,#0B9H
NOP
MOV A,ISP_DATA
SETB EA
ACALL IAP_Disable
RET
;字节编程---写
bute_program:
MOV ISP_CONTR,#ENABLE_ISP
MOV ISP_CMD,#02H ;写指令
MOV ISP_ADDRH,DPH
MOV ISP_ADDRL,DPL
MOV ISP_DATA,A
LCALL trigger_ISP
RET
;擦除扇区
sector_erase:
MOV ISP_CONTR,#ENABLE_ISP
MOV ISP_CMD,#03H ;擦除扇区指令
MOV ISP_ADDRH,DPH
MOV ISP_ADDRL,DPL
LCALL trigger_ISP
RET
;
trigger_ISP:
CLR EA
MOV ISP_TRIG,#46H
MOV ISP_TRIG,#0B9H
NOP
SETB EA
IAP_Disable:
MOV ISP_CONTR,#0
MOV ISP_CMD,#0
MOV ISP_TRIG,#0
RET
;
END ;程序结束
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -