📄 程序.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;
; 数字调频发射器完整程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;
;26H-29H存放小数位、个位、十位、百位BCD码,24H-25H存放频率控制数据(十六进制)。
;70H-74H存放时间秒和分。
;21H存放频率控制字节低8位,22H存放高8位。
;23H存放键扫描时P1口的值。
CONBITL EQU 21H
CONBITH EQU 22H
KEYWORD EQU 23H
ORG 0000H
LJMP START
ORG 000BH
LJMP INTT0
ORG 0020H
;;;;;;;;;;;;;;;;;;;;;
; 主程序 ;
;;;;;;;;;;;;;;;;;;;;;
START: MOV SP,#60H
LCALL CLEARMEN
MAIN: JNB P3.6,MAIN1
JNB P3.7,MAIN2
AJMP MAIN
NOP
NOP
AJMP START
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 初始化程序,清存储器单元和置4端口出入状态 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLEARMEN: MOV R0,#20H
MOV R1,#0AH
CLEALOOP: MOV @R0,#00H
INC R0
DJNZ R1,CLEALOOP
MOV R0,#70H
MOV R7,#04H
ML1: MOV @R0,#00H
INC R0
DJNZ R7,ML1
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; p3.6按下,显示调频数字,初始显示“0880” ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAIN1: CLR P3.0
CLR P3.1
CLR P3.2
LCALL KEYFUN15
MOV PCON,#00H
MOV 29H,#00H
MOV 28H,#08H
MOV 27H,#08H
MOV 26H,#00H
LCALL DISPUPDAT
LCALL KEYWORD
LCALL DISPLAYD
AJMP MAIN1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 当P3.7按下时,显示时钟分和秒;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MAINT:
MOV TMOD ,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB EA
SETB ET0
SETB TR0
MOV R4,#14H
ML3: LCALL DIAPLAYT
SJMP ML3
RET
MAIN2: LCALL DEL10MS
JB P3.7,OUT
LCALL MAINT
OUT: RET
;中断服务子程序
INTT0: PUSH ACC
PUSH PSW
SETB PSW.3
MOV TL0,#0BH
MOV TH0,#3CH
MOV A,R4
DEC A
JNZ RET0
MOV R4,#14H
MOV R0,#71H
ACALL DAAD
MOV A,R2
XRL A,#60H
JNZ RET0
ACALL CLR0
MOV R0,#73H
ACALL DAAD
MOV A,R2
XRL A,#60H
JNZ RET0
ACALL CLR0
RET0: POP PSW
POP ACC
RETI
;加一子程序
DAAD: MOV A,@R0
DEC R0
SWAP A
ORL A,@R0
ADD A,#01H
DA A
MOV R2,A
ANL A,#0FH
MOV @R0,A
MOV A,R2
INC R0
ANL A,#0F0H
SWAP A
MOV @R0,A
RET
CLR0: CLR A
MOV @R0,A
DEC R0
MOV @R0,A
RET
DIAPLAYT: MOV R1,#70H
MOV R5,#0FEH
MOV A,R5
ANL A,#0FH
PLAY: MOV A,R5
MOV P2,A
MOV A,@R0
MOV DPTR,#TAB1
MOVC A,@A+DPTR
MOV P0,A
LCALL DEL1MS
INC R1
MOV A,R5
JNB ACC.3,ENDOUT
RL A
MOV R5,A
AJMP PLAY
ENDOUT: SETB P2.3
MOV P0,#0FFH
RET
TAB1: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H,0FFH
;;;;;;;;;;;;;;;;;
;数字调频显示 ;
;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 1、4*4行列扫描查键程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEYWORK: MOV P1,#0FFH
CLR P1.0
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,KEYCON
SETB P1.0
CLR P1.1
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,KEYCON
SETB P1.1
CLR P1.2
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,KEYCON
SETB P1.2
CLR P1.3
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,KEYCON
SETB P1.3
RET
KEYCON: LCALL DEL10MS
MOV A,P1
ANL A,#0FFH
CJNE A,#0F0H,KEYCHE
KEYOUT: RET
KEYCHE: MOV A,P1
MOV KEYWORD,A
CJLOOP: LCALL DISPLAYD
MOV A,P1
ANL A,#0F0H
CJNE A,#0F0H,CJLOOP
MOV R7,#00H
MOV DPTR,#KEYTAB
KEYLOOP: MOV A,R7
MOVC A,@A+DPTR
XRL A, KEYWORD
JZ KEYOK
INC R7
CJNE R7,#10H,KEYLOOP
RET
KEYOK: MOV A,R7
MOV B,A
RL A
ADD A,B
MOV DPTR,#KEYFUNTAB
JMP @A+DPTR
KEYFUNTAB: LJMP KEYFUN00
LJMP KEYFUN01
LJMP KEYFUN02
LJMP KEYFUN03
LJMP KEYFUN04
LJMP KEYFUN05
LJMP KEYFUN06
LJMP KEYFUN07
LJMP KEYFUN08
LJMP KEYFUN09
LJMP KEYFUN10
LJMP KEYFUN11
LJMP KEYFUN12
LJMP KEYFUN13
LJMP KEYFUN14
LJMP KEYFUN15
RET
KEYTAB:
DB 0EEH,0DEH,0BEH,7EH,0EDH,0DDH,0BDH,7DH
DB 0EBH,0DBH,0BBH,7BH,0E7H,0D7H,0B7H,77H,0FFH,0FFH
;;;;;;;;;;;;;;;;;;;;;;;;;
; 2、各个按键功能子程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;
;00号键功能程序
KEYFUN00: INC 29H
MOV A,29H
CLR C
CJNE A,#02H,FUN00
FUN00: JC FUN00OUT
MOV 29H,#00H
FUN00OUT: MOV A,#29H
XRL A,#01H
JNZ F00OUT1
MOV 28H,#00H
AJMP F00OUT
F00OUT1: MOV 28H,#08H
F00OUT: LCALL DISPUPDAT
RET
;01号键功能程序
KEYFUN01: INC 28H
MOV A,28H
CLR C
CJNE A,#0AH,FUN01
FUN01: JC FUN01OUT
MOV 28H,#00H
FUN01OUT: MOV A,29H
XRL A,#01H
JNZ F01OUT
MOV 28H,#00H
AJMP F001OUT
F01OUT: MOV A,28H
XRL A,#08H
JZ F001OUT
MOV A,28H
XRL A,#09H
JZ F001OUT
MOV 28H,#08H
F001OUT: LCALL DISPUPDAT
RET
;02号键功能程序
KEYFUN02: INC 27H
MOV A,27H
CLR C
CJNE A,#0AH,FUN02
FUN02: JC FUN02OUT
MOV 27H,#00H
FUN02OUT: LCALL DISPUPDAT
RET
;03号键功能程序
KEYFUN03: INC 26H
MOV A,26H
CLR C
CJNE A,#0AH,FUN03
FUN03: JC FUN03OUT
MOV 26H,#00H
FUN03OUT: LCALL DISPUPDAT
RET
;04号键功能程序(109.0MHZ频率预置)
KEYFUN04: MOV 29H,#01H
MOV 28H,#00H
MOV 27H,#09H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;05号键功能程序(108.0MHZ频率预置)
KEYFUN05: MOV 29H,#01H
MOV 28H,#00H
MOV 27H,#08H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;06号键功能程序(105.0MHZ频率预置)
KEYFUN06: MOV 29H,#01H
MOV 28H,#00H
MOV 27H,#05H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;07号键功能程序(100.0MHZ频率预置)
KEYFUN07: MOV 29H,#01H
MOV 28H,#00H
MOV 27H,#00H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;08号键功能程序(98.0MHZ频率预置)
KEYFUN08: MOV 29H,#00H
MOV 28H,#09H
MOV 27H,#08H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;09号键功能程序(96.0MHZ频率预置)
KEYFUN09: MOV 29H,#00H
MOV 28H,#09H
MOV 27H,#06H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;10号键功能程序(94.0MHZ频率预置)
KEYFUN10: MOV 29H,#00H
MOV 28H,#09H
MOV 27H,#04H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;11号键功能程序(92.0MHZ频率预置)
KEYFUN11: MOV 29H,#00H
MOV 28H,#09H
MOV 27H,#02H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;12号键功能程序(90.0MHZ频率预置)
KEYFUN12: MOV 29H,#00H
MOV 28H,#09H
MOV 27H,#00H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;13号键功能程序(88.0MHZ频率预置)
KEYFUN13: MOV 29H,#00H
MOV 28H,#08H
MOV 27H,#08H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;14号键功能程序(87.0MHZ频率预置)
KEYFUN14: MOV 29H,#00H
MOV 28H,#08H
MOV 27H,#07H
MOV 26H,#00H
LCALL DISPUPDAT
RET
;15号键功能程序(立体声/单声道设置键)
KEYFUN15: CPL 03H
JNB 03H,MONO
CLR P3.3
LCALL PUTBIT
RET
MONO: SETB P3.3
LCALL PUTBIT
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 3、将BCD码转换成十六进制,与5位控制码合成操作码,写入芯片 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DISPUPDAT: LCALL BCDB
LCALL CONCOMMADN
LCALL PUTBIT
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 4、将BCD码转换成十六进制程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BCDB: MOV CONBITL,#00H
MOV CONBITH,#00H
MOV CONBITL,26H
MOV A, 27H
MOV B,#10H
LCALL MULLOOP
MOV A,28H
MOV B,#100
MOV A,29H
JNZ ADD3E8
RET
ADD3E8: CLR C
MOV A,#0E8H
ADD A,CONBITL
MOV CONBITL,A
MOV A,#03H
ADDC A,CONBITH
MOV CONBITH,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 5、乘法与累加器处理子程序(将4位显示的十进制BCD码转换为1个二进制数);
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MULLOOP: MUL AB
CLR C
ADD A,CONBITL
MOV CONBITL,A
MOV A,CONBITH
ADDC A,B
MOV CONBITH,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 6、频率控制数据与5位控制码合成BH1417F控制字 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CONCOMMADN: ANL CONBITH,#07H
MOV A,20H
ORL A,CONBITH
MOV CONBITH,A
RET
;;;;;;;;;;;;;;;;;;;;;;;;
; 7、LED显示子程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;
DISPLAYD: MOV R1,#26H
MOV R5,#0FEH
PLAY1: MOV A,R5
MOV P2,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV A,P0
MOV A,R5
JB ACC.1,PLAY2
CLR P0.7
PLAY2: LCALL DEL1MS
INC R1
JNB ACC.3,ENDOUT1
RL A
MOV R5,A
SETB P0.7
AJMP PLAY1
ENDOUT1: MOV P2,#0FFH
MOV P0,#0FFH
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH,0FFH
;;;;;;;;;;;;;;;;;;;;;;;
; 8、控制子发送子程序 ;
;;;;;;;;;;;;;;;;;;;;;;;
PUTBIT: MOV A,CONBITL
SETB P3.2
LCALL PUT
MOV A,CONBITH
LCALL PUT
CLR P3.2
CLR P3.1
CLR P3.0
RET
;;;;;;;;;;;;;;;;;;;;;;;;
; 9、字节发送子程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;
PUT: MOV R3,#8
CLR C
PUT1: RRC A
MOV P3.0,C
NOP
NOP
NOP
NOP
SETB P3.1
NOP
NOP
NOP
NOP
CLR P3.1
DJNZ R3,PUT1
RET
;;;;;;;;;;;;;;;;;;;;;;;;;
; 1MS和10MS延时子程序 ;
;;;;;;;;;;;;;;;;;;;;;;;;;
DEL1MS:
MOV R6,#14H
D2: MOV R7,#19H
D3: DJNZ R7,D3
DJNZ R6,D2
RET
DEL10MS:
MOV R6,#20
D4: MOV R7,#248
DJNZ R7,$
DJNZ R6,D4
RET
;
;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -