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

📄 红外发送eeprom.asm

📁 红外线发送程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;***************************;
;     数控调频手动控制器    ;
;***************************;
;显示驱动模块HT1621
;发射控制芯片BH1415F
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
DATA_FLASH_START_ADDRE  EQU  2200H  ;STC89C/LE52RC
DATA_FLASH_START_ADDR  EQU  2400H  ;STC89C/LE52RC
DATA_FLASH_START_ADD  EQU  2600H  ;STC89C/LE52RC
HONG     EQU  P2.7 ;红外线发送端口
WEISHU   EQU  30H  ;位数指示
XIANSHI  EQU  31H  ;位指示
CONBITL  EQU  21H  ;频率控制字节低8位
CONBITH  EQU  22H  ;频率控制字节高8位
LCDL     EQU  24H  ;LCD控制字节低8位
LCDH     EQU  25H  ;LCD控制字节高8位
KEYWORD  EQU  23H  ;存放键扫描时P1口值
DATA     EQU  P3.7    ;LCD数据
CLOCK    EQU  P3.6    ;LCD时钟
CSCE     EQU  P3.5    ;LCD片选
Muting   EQU  P2.0    ;发射静音(厂里P2.0)(家里)
DATAF    EQU  P2.1    ;发射数据(厂里P2.1)(家里)
CLOCKF   EQU  P2.2    ;发射时钟(厂里P2.2)(家里)
CSCEF    EQU  P2.3    ;发射片选(厂里P2.3)(家里)
DATAFF   EQU  P2.7    ;发射数据(厂里)(家里P2.7)
CLOCKFF  EQU  P2.6    ;发射时钟(厂里)(家里P2.6)
CSCEFF   EQU  P2.5    ;发射片选(厂里)(家里P2.5)
;
;
              ORG	0000H   ;程序开始地址
              LJMP      START    ;转START执行
              ORG 	0003H       ;
              RETI       		;不用中断程序
              ORG 	000BH       ;
	      RETI       		; 不用中断程序
              ORG 	0013H       ;
	      RETI       		; 不用中断程序
	      ORG 	001BH       ;
	      LJMP    INTT1       		; 不用中断程序
	      ORG 	0023H       ;
	      RETI       		; 不用中断程序
	      ORG	002BH      ;
 	      RETI       		; 不用中断程序
;
;初始化程序
CLEARMEN:    MOV   R0,#20H       ;20H-34H循环清0
             MOV   R1,#12H       ;
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
             LCALL  XIANSHIA
             RET
;*************************************
;*                                   *
;*       初 始 化 程 序              *
;*                                   *
;*************************************
CLEARMEMIO:     CLR     HONG			;关遥控输出
CLEARMEM2:      MOV     IE,#00H          	;关所有中断
                MOV     IP,#01H			;设优先级
                MOV     TMOD,#22H		;8位自动重装初值模式
                MOV     TH1,#0F3H		;定时为13微秒初值
                MOV     TL1,#0F3H
                SETB    EA			;开总中断允许
		RET				;返回
;
CLS2:	MOV	A,#10000000B	;SYS	EN
	MOV	R3,#8
	CLR	P3.5	;LCD片选
	LCALL	PUTT
	MOV	A,#00111111B
	MOV	R3,#5
	LCALL	PUTT
	SETB	P3.5	;LCD片选
	SETB	P3.6	;LCD时钟
	SETB	P3.7	;LCD数据
	MOV	A,#10000000B	;LCD	ON
	MOV	R3,#8
	CLR	P3.5	;LCD片选
	LCALL	PUTT
	MOV	A,#01111111B
	MOV	R3,#5
	LCALL	PUTT
	SETB	P3.5	;LCD片选
	SETB	P3.6	;LCD时钟
	SETB	P3.7	;LCD数据
	MOV	A,#10000101B	;BIAS	1/3
	MOV	R3,#8
	CLR	P3.5	;LCD片选
	LCALL	PUTT
	MOV	A,#01111111B
	MOV	R3,#5
	LCALL	PUTT
	SETB	P3.5	;LCD片选
	SETB	P3.6	;LCD时钟
	SETB	P3.7	;LCD数据
        RET
;主程序
START:       LCALL  CLEARMEN       	;上电初始化
             LCALL  CLEARMEMIO
             LCALL  CLS2
MAIN:        LCALL  KEYFUN00        	;调查键子程序
             LCALL  DINGSHI
             LCALL  ASDFFF
             AJMP   MAIN       		;转MAIN循环
             NOP       				;PC出错处理
             NOP       				;
             AJMP   START       		;重新初始化
;读
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
;写
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
;
ASDFFF:JB     P1.5,HGFDSA
AWDEFR:JNB    P1.5,AWDEFR		;
JJJJ:  LCALL  OUT_HongWaiXian
       JNB    P1.4,HGFDSA
       AJMP   JJJJ
HGFDSA:RET       
;
INTT1:   CPL     HONG       			;40kHZ红外线遥控信号产生
		RETI
;
    HECHENG: MOV    R0,#7
    LOOP:    MOV    A,LCDH
             RLC    A
             MOV    LCDH,A
             MOV    A,LCDL
             RLC    A
             RL     A
             MOV    B,A
             INC    LCDL
             LCALL  LCDPLAY
             DJNZ  R0,LOOP
             RET
;
KEYFUN00:    JB     P1.1,DSFSFAS
KEYFUN0011:  JNB    P1.1,KEYFUN0011
             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
             LCALL  XIANSHIA
DSFSFAS:     RET						;
;
;
DINGSHI:     JB     P1.2,RGERRTHRTH
DINGSHI1:    JNB    P1.2,DINGSHI1
             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  EEPROM_XIE
RGERRTHRTH:  LCALL  XIANSHIA
             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使能(允许写)

⌨️ 快捷键说明

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