yk1.asm

来自「AT89C2051制作红外线多路遥控器」· 汇编 代码 · 共 138 行

ASM
138
字号
k0 	BIT P1.0
k1  	BIT P1.1
k2 	BIT P1.2
k3  	BIT P1.3
k4 	BIT P1.4
k5  	BIT P1.5
k6 	BIT P1.6
k7  	BIT P1.7
bz	bit 00h
k0h	equ #0f1h
k0l 	equ #0c8h       ;k0键输出频率300Hz833
k1h	equ #0f8h
k1l 	equ #0ech       ;k1键输出频率600Hz417
k2h	equ #0feh
k2l 	equ #0eah       ;k2键输出频率900Hz278
k3h	equ #0ffh
k3l 	equ #030h       ;k3键输出频率1200Hz208
k4h	equ #0ffh
k4l 	equ #059h       ;k4键输出频率1500Hz167
k5h	equ #0ffh
k5l 	equ #075h       ;k5键输出频率1800Hz139
k6h	equ #0ffh
k6l 	equ #089h       ;k6键输出频率2100Hz119
k7h	equ #0ffh
k7l 	equ #098h      	;k7键输出频率2400Hz104
        ORG	0000H
        aJMP	START
     	ORG	000BH   ;定时器T0入口
	aJMP 	intt0
        ORG	001bH  	;定时器T1入口 
        aJMP	intt1	        
        org 0030h
intt0:	cpl p3.4
	mov a,r1
        mov th0,a
	mov a,r2
        mov tl0,r2
	reti
intt1:	clr tr0
	clr et0
	clr tr1
	clr et1
	setb bz
	setb p3.4
	reti
start: 	MOV P1,#0FFH
	mov p3,#0ffh
        MOV TMOD,#11H   ;计数器T0、T1工作在方式1
        setb ea         ;开所有中断
xh:	jb k0,d01
	acall ys
	Jb k0,d01	;k0
	jnb k0,$
	acall sett1
	mov r1,k0h	
	mov r2,k0l
	acall sett0
	jnb bz,$
d01:	jb k0,d02
	acall ys
	Jb k0,d02	;k1
	jnb k0,$
	acall sett1
	mov r1,k1h	
	mov r2,k1l
	acall sett0
	jnb bz,$
D02:	jb k0,d03
	acall ys
	Jb k0,d03	;k2
	jnb k0,$
	acall sett1
	mov r1,k2h	
	mov r2,k2l
	acall sett0
	jnb bz,$
D03:	jb k0,d04
	acall ys
	Jb k0,d04	;k3
	jnb k0,$
	acall sett1
	mov r1,k3h	
	mov r2,k3l
	acall sett0
	jnb bz,$
D04:	jb k0,d05
	acall ys
	Jb k0,d05	;k4
	jnb k0,$
	acall sett1
	mov r1,k4h	
	mov r2,k4l
	acall sett0
	jnb bz,$
D05:	jb k0,d06
	acall ys
	Jb k0,d06	;k5
	jnb k0,$
	acall sett1
	mov r1,k5h	
	mov r2,k5l
	acall sett0
	jnb bz,$
D06:	jb k0,d07
	acall ys
	Jb k0,d07	;k6
	jnb k0,$
	acall sett1
	mov r1,k6h	
	mov r2,k6l
	acall sett0
	jnb bz,$
D07:	jb k0,d08
	acall ys
	Jb k0,d08	;k7
	jnb k0,$
	acall sett1
	mov r1,k7h	
	mov r2,k7l
	acall sett0    
	jnb bz,$
d08:	ajmp xh
ys:	mov r5,#80h
ys1:    djnz r5,ys1
        ret
sett1:  MOV TH1,#3ch   	;定时时间约为100ms
        MOV TL1,#0b0h
        setb tr1        ;启动T1计时
        setb et1        ;允许T1中断
	clr bz
	ret
sett0:	MOV TH0,r1 
        MOV TL0,r2
        setb tr0
	setb et0
	ret
	end

⌨️ 快捷键说明

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