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

📄 oklianjiankongzhi.asm

📁 用两个键控制ht1551的驱动程序
💻 ASM
字号:
;***************************;
;     数控调频手动控制器    ;
;***************************;
;p1.7---CK  P3.1
;p1.6---DA  P3.0
;p1.5---CE  P3.2
;p1.4---muting(静音)低电位是开声音“0”,高电位是关声音“1”
;p3.0---play
;p3.1---play
;p.2----k1
;p3.3---k2
;p3.4---k3
;p3.5---k4
;二倍频为数不能偏差超过0.015MHZB倍频后0.03MHZ
;26H-29H放显示小数位、个位、十位、百位BCD码数,24H-25H放频率控制数据(十六进制)
;
WEISHU   EQU  30H  ;位数指示
XIANSHI  EQU  31H  ;位指示
CONBITL  EQU  21H  ;频率控制字节低8位
CONBITH  EQU  22H  ;频率控制字节高8位
KEYWORD  EQU  23H  ;存放键扫描时P1口值
;
;
              ORG	0000H   ;程序开始地址
              LJMP      START    ;转START执行
              ORG 	0003H       ;
              RETI       		;不用中断程序
              ORG 	000BH       ;
	      RETI       		; 不用中断程序
              ORG 	0013H       ;
	      RETI       		; 不用中断程序
	      ORG 	001BH       ;
	      RETI       		; 不用中断程序
	      ORG 	0023H       ;
	      RETI       		; 不用中断程序
	      ORG	002BH      ;
 	      RETI       		; 不用中断程序
;
;初始化程序
CLEARMEN:    MOV   R0,#20H       ;20H-29H循环清0
             MOV   R1,#0BH       ;
CLEARLOOP:   MOV   @R0,#00H      ;
             INC   R0       		 ;
             DJNZ  R1,CLEARLOOP  ;
             MOV   P1,#0FFH      ;
             MOV   P3,#0FFH      ;
             CLR   P1.6       	;BH1415禁止操作
             CLR   P1.7       	;
             CLR   P1.5       	;
             CLR   P1.4         ;低电位是开声音“0”,高电位是关声音“1”
CLEAR1:      MOV   PCON,#00H    	;控制寄存器清0
             MOV   29H,#01H       	; 置初始值为110.0MHZ倍频后220MHZ
             MOV   28H,#01H   		;
             MOV   27H,#00H       	;
             MOV   26H,#00H       	;
             LCALL DISPUPDAT    		;写入BH1415芯片(修改发送频率)
             MOV   WEISHU,#01H
             RET       				;子程序返回
;
;主程序
START:       LCALL  CLEARMEN       	;上电初始化
MAIN:        LCALL  KEYFUN00        	;调查键子程序
             LCALL  DINGSHI
             LCALL  DISPLAY        	;LED显示一次
             AJMP   MAIN       		;转MAIN循环
             NOP       				;PC出错处理
             NOP       				;
             AJMP   START       		;重新初始化
;
KEYFUN00:    JB     P3.2,DSFSFAS
KEYFUN0011:  LCALL  DL05S
             JNB    P3.2,KEYFUN0011
             LCALL  DL05S
             INC    WEISHU				;个位数加1
             MOV    A,WEISHU			;
             CLR    C				;
             CJNE   A,#04H,JHLLURYEE		;判断是否小于10
JHLLURYEE:   JC     DSFSFAS			;小于10转FUN02OUT
             MOV    WEISHU,#01H			;大于或等于10清为0
DSFSFAS:     RET						;
;
DINGSHI:     JB   P3.3,RGERRTHRTH
             MOV    A,WEISHU
             CJNE   A,#01H,NAGEAIQU1
KEYFUN01:    CLR    P1.3
             SETB   P1.2
             SETB   P1.1
             CLR    A
             INC    28H          	        ;百位数加1
             MOV    A,28H        	        ;入A
             CLR    C         		        ;清进位标志
             CJNE   A,#02H,FUN001                ;
FUN001:      JC     FUN00OUT1                    ;百位小于2转FUNOO0UT
             MOV    28H,#00H                    ;大于等于2清为0(百位只能是0或1)
FUN00OUT1:   LCALL  DISPUPDAT             ;写入控制芯片(修改发射频率)
             AJMP   NAGEAIQU
NAGEAIQU1:   CJNE   A,#02H,NAGEAIQU2
             CLR    A
             CLR    P1.2
             SETB   P1.3
             SETB   P1.1
             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,NAGEAIQU
             CLR    A
             CLR    P1.1
             SETB   P1.2
             SETB   P1.3
             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                   ;写入控制芯片(修改发射频率)
NAGEAIQU:    LCALL  DL05S
             LCALL  DL05S
RGERRTHRTH:  RET
;
; 将BCD码转为十六进制数,与5位控制码合成操作码,写入控制芯片
DISPUPDAT:   CLR   P1.6       	;BH1415禁止操作
             CLR   P1.7       	;
             CLR   P1.5
             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   						;返回
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           显示程序                  ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;用串行输出显示数据
DISPLAY:RET
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;           发送控制字节子程序        ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
PUTBIT:      MOV   A,CONBITL   			;低8位控制字入A
             SETB  P1.5   				;BH1415使能(允许写)
             LCALL PUT   				;发送8位
             MOV   A,CONBITH   			; 高8位控制字入A
             LCALL PUT   				; 发送8位
             CLR   P1.5   				; BH1415写禁止
             CLR   P1.6   				;复位
             CLR   P1.7   				;复位
             RET   						;返回
;
;字节发送子程序
PUT:         MOV   R3,#8   				;发送8位控制
             CLR   C   					;清C
PUT1:        RRC   A   					;带进位位右移(先发低位)
             MOV   P1.6,C   				;低位送至P3.0口
             NOP   						;延时4微秒
             NOP   						;
             NOP   						;
             NOP   						;
             SETB  P1.7   				;锁存数据(上升沿时锁存数据)
             NOP   						;延时4微秒
             NOP   						;
             NOP   						;
             NOP   						;
             CLR   P1.7   				;
             DJNZ  R3,PUT1   			;8位未发完转PUT1再发
             RET   						; 8位发完结束
;
;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
             LCALL DL10MS
             LCALL DL10MS
             LCALL DL10MS
             RET
;
             END   							;程序结束

⌨️ 快捷键说明

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