📄 ledyy.asm
字号:
WR1 BIT P3.6
RD1 BIT P3.7
CS1 BIT P1.5
CS3 BIT P1.6
CS2 BIT P1.7
A16 BIT P3.0
BIT_CNT DATA 30H
DELAY1 DATA 31H
REC_BUF DATA 20H
SEND_BUF DATA 21H
CS BIT P1.1
CLK BIT P1.2
DIO BIT P1.3
KEY BIT P3.2
ORG 0000H
LJMP MAIN
ORG 0003H
LJMP MAIN_LP
ORG 0013H
LJMP STA_RAM
ORG 0100H
MAIN: SETB EA
SETB EX0
SETB EX1
SETB INT1
MOV IP,#04H
CLR IT0
CLR IT1
MOV DPTR,#00H
SETB CS
SETB KEY
SETB DIO
MOV DELAY1,#25 ;延时25MS
RST_DELAY1:
DJNZ DELAY1,RST_DELAY1
MOV SEND_BUF,#10100100B ;初始化命令
LCALL SEND
SETB CS
SJMP $
MAIN_LP: MOV SEND_BUF,#10111111B
LCALL SEND
SETB CS
MOV SEND_BUF,#00010101B ;有键按下,发送读键盘命令
LCALL SEND
LCALL RECEIVE ;读键盘
SETB CS
MOV A,REC_BUF
MOV SEND_BUF,#10000000B
LCALL SEND
MOV SEND_BUF,REC_BUF
LCALL SEND
SETB CS
MAIN_LP2:
JNB KEY,MAIN_LP2 ;等待键松开.
CJNE A,#01H,START ;1键录音
CJNE A,#02H,STA_DAC ;2键播放
RETI
START: MOV P0,#00H
CLR CS1
CLR WR1
NOP
SETB CS1
SETB WR1
MOV P0,#0FFH
SJMP $
STA_RAM: CLR CS1
CLR RD
MOV A,P0
NOP
SETB CS1
SETB RD
CLR CS3
MOVX @DPTR,A
INC DPTR
SETB CS3
JNB A16,KRAM
MOV A,DPL
CJNE A,#0FFH,NEXT
MOV A,DPH
CJNE A,#0FFH,NEXT
CLR A16
MOV DPTR,#00H
KRAM: MOV A,DPL
CJNE A,#0FFH,NEXT
MOV A,DPH
CJNE A,#0FFH,NEXT
MOV DPTR,#00H
SETB A16
RETI
NEXT: MOV P0,#00H
CLR CS1
CLR WR1
NOP
SETB CS1
SETB WR1
MOV P0,#0FFH
RETI
STA_DAC: CLR CS3
SETB WR1
MOVX A,@DPTR
SETB CS3
CLR WR1
CLR CS2
MOV P0,A
NOP
NOP
SETB CS2
SETB WR1
INC DPTR
JNB A16,KRAM1
MOV A,DPL
CJNE A,#0FFH,STA_DAC
MOV A,DPH
CJNE A,#0FFH,STA_DAC
CLR A16
MOV DPTR,#00H
KRAM1: MOV A,DPL
CJNE A,#0FFH,STA_DAC
MOV A,DPH
CJNE A,#0FFH,STA_DAC
MOV DPTR,#00H
RET
SEND:
MOV BIT_CNT,#8 ;设发送位数为8 位.
CLR CS
LCALL LONG_DELAY ;延时50 微秒.
SEND_LP:
MOV A,SEND_BUF
RLC A
MOV SEND_BUF,A
MOV DIO,C
NOP
NOP
SETB CLK
LCALL SHORT_DELAY ;延时10 微秒.
CLR CLK
LCALL SHORT_DELAY ;延时10 微秒.
DJNZ BIT_CNT,SEND_LP
CLR DIO
RET
;-------------------------------------
;由zlg7289A 接收一字节数据,高位在前
;-------------------------------------
RECEIVE:
MOV BIT_CNT,#8 ;定义接收8 位.
SETB DIO
LCALL LONG_DELAY ;延时50 微秒.
RECEIVE_LP:
SETB CLK
LCALL SHORT_DELAY ;延时10 微秒.
MOV C,DIO ;接收数据送REC_BUF 低位.
MOV A,REC_BUF
RLC A
MOV REC_BUF,A
CLR CLK
LCALL SHORT_DELAY ;延时10 微秒.
DJNZ BIT_CNT,RECEIVE_LP
CLR DIO
RET
LONG_DELAY:
MOV DELAY1,#25
DJNZ DELAY1,$
RET
SHORT_DELAY:
MOV DELAY1,#4
DJNZ DELAY1,$
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -