📄 digphone.asm
字号:
;数字电话程序,录音(不加密),录音(加密),放(解密)
.mmregs
.def _c_int00
STACK: .usect "STACK",100
to_flag .usect "vars",1
to_cout .usect "vars",1
TMP .set 69h
TVAL .set 16384 ;定时常数(100ms)
K_SPCR10 .set 0000000010100001b ;串口0的初始化数据
K_SPCR20 .set 0000001011100001b
K_RCR10 .set 0001111100000000b
K_RCR20 .set 0001111100000000b
K_XCR10 .set 0001111100000000b
K_XCR20 .set 0001111100000000b
K_SRGR10 .set 0000000000000111b
K_SRGR20 .set 0011000011111111b
; ;
K_PCR0 .set 0000101000000000b
K_MCR10 .set 0000000000000000b ;PCM编解码芯片TP3067的初始化数据
K_MCR20 .set 0000000000000010b
K_RCERA0 .set 0000000000000001b
K_RCERB0 .set 0000000000000000b
K_XCERA0 .set 0000000000000001b
K_XCERB0 .set 0000000000000000b
SPSA0 .set 38h
McBSP0 .set 39h
DXR10 .set 23h
DXR20 .set 22h
DRR10 .set 21h
DRR20 .set 20h
SWCR .set 2BH
SPCR10 .set 00h
SPCR20 .set 01h
RCR10 .set 02h
RCR20 .set 03h
XCR10 .set 04h
XCR20 .set 05h
SRGR10 .set 06h
SRGR20 .set 07h
MCR10 .set 08h
MCR20 .set 09h
RCERA0 .set 0ah
RCERB0 .set 0bh
XCERA0 .set 0ch
XCERB0 .set 0dh
PCR0 .set 0Eh
.text
_c_int00
b start
nop
nop
NMI rete
nop
nop
nop
SINT17 .space 4*16
SINT18 .space 4*16
SINT19 .space 4*16
SINT20 .space 4*16
SINT21 .space 4*16
SINT22 .space 4*16
SINT23 .space 4*16
SINT24 .space 4*16
SINT25 .space 4*16
SINT26 .space 4*16
SINT27 .space 4*16
SINT28 .space 4*16
SINT29 .space 4*16
SINT30 .space 4*16
INT0 rsbx intm
rete
nop
nop
INT1 rsbx intm
rete
nop
nop
INT2 rsbx intm
rete
nop
nop
TINT: BD TIMER
nop
nop
nop
RINT0: BD RECIV
nop
nop
nop
XINT0: BD XT
nop
nop
nop
SINT6 .space 4*16
SINT7 .space 4*16
INT3: rete
nop
nop
nop
HPINT: rete
nop
nop
nop
RINT1: RETE
nop
nop
nop
XINT1: RETE
nop
nop
nop
;*************************
start: LD #0,DP
STM #200H,SP
STM #07FFFh,SWWSR
STM #1020h,PMST
STM #3FFFH,IFR
SSBX INTM
LD #0AH,A
STL A,TMP ;设置串口0的帧频和同步时钟由DSP产生
PORTW TMP,7H
ST #0,*(to_flag)
ST #10,*(to_cout)
STM #3001H,AR1 ;通过键盘选择菜单,确定选项类型数据写入3001H中
CALL INBSP
STM #4000H,AR0 ;存放录音的存储器起始地起址
STM #8000H,AR2 ;存放录音的存储器单元个数
LD #TIMES,A ;设置定时器
READA TIM
READA PRD
STM #269h,TCR
STM #18H,IMR ;开定时器和串口0的接收中断
NOP
NOP
NOP
NOP
NOP
NOP
STM #3FFFH,IFR
NOP
NOP
NOP
NOP
NOP
NOP
RSBX INTM
;*************************
WAIT: IDLE 1
CMPM *(to_flag),#0 ; 接收等待
BC WAIT,TC
STM #4000H,AR0
STM #8000H,AR2
SSBX INTM
STM #0028H,IMR ;开定时器和串口0的发送中断
NOP
NOP
NOP
NOP
NOP
NOP
STM #3FFFH,IFR
NOP
NOP
NOP
NOP
NOP
NOP
RSBX INTM
WAIT1 IDLE 1
CMPM *(to_flag),#1 ;发送等待
BC WAIT1,TC
STM #4000H,AR0
STM #8000H,AR2
SSBX INTM
STM #0018H,IMR ;开定时器和串口0的接收中断
NOP
NOP
NOP
NOP
NOP
NOP
STM #3FFFH,IFR
NOP
NOP
NOP
NOP
NOP
NOP
RSBX INTM
B WAIT
;*************************
RECIV: ;SSBX INTM
;PSHM ST1 ;串口0的接收中断服务程序
;PSHM ST0
LDM DRR10,A
CMPM *AR1,#0DH
BC RECIV1,NTC
LD A,B ;加密
RSBX C
ROL A
ROL A
ROL A
ROL A
ROR B
ROR B
ROR B
ROR B
OR B,A
AND #0FFH,A
STM #1,AR7 ;加密标志
B RECIV2
RECIV1: CMPM *AR1,#0CH
BC RECIV3,NTC
STM #0,AR7 ;不加密标志
RECIV2 STLM A,DXR10
STL A,*AR0+
BANZ RECIV3,*AR2-
STM #4000H,AR0
STM #8000H,AR2
RECIV3 ;POPM ST0
;POPM ST1
;RSBX INTM
RETE
;***************
XT: ;SSBX INTM
;PSHM ST1 ;串口0的发送中断服务程序
;PSHM ST0
LD *AR0+,A
CMPM *AR1,#0EH
BC XT2,NTC
CMPM AR7,#1
BC XT1,NTC ;不解密
LD A,B ;解密
RSBX C
ROR A
ROR A
ROR A
ROR A
ROL B
ROL B
ROL B
ROL B
OR B,A
XT1: STLM A,DXR10
BANZ XT2,*AR2-
STM #4000H,AR0
STM #8000H,AR2
XT2: ;POPM ST0
;POPM ST1
;RSBX INTM
RETE
;**********************
TIMER ;SSBX INTM
;PSHM ST1 ;定时器的中断服务程序,每秒采样菜单的选择情况
;PSHM ST0
ADDM #-1,*(to_cout)
CMPM *(to_cout),#0
BC TIM3,NTC ;不到一秒
ST #10,*(to_cout)
CMPM *AR1,#0CH ;(3001H)=0CH时为录(不加密)
BC TIM1,TC
CMPM *AR1,#0DH ;(3001H)=0DH时为录(加密)
BC TIM2,NTC
TIM1 ST #0,*(to_flag) ;置接收标志
B TIM3
TIM2 CMPM *AR1,#0EH ;(3001H)=0EH时为放(解密)
BC TIM3,NTC
ST #1,*(to_flag) ;置发送标志
TIM3 ;POPM ST0
;POPM ST1
;RSBX INTM
RETE
;******************************
INBSP STM #SPCR10,SPSA0 ;串口0和PCM编解码器的初始化程序
STM #0000h,McBSP0 ;RESET R
NOP
NOP
STM #SPCR20,SPSA0
STM #0000h,McBSP0 ;RESET X
NOP
NOP
STM #RCR10,SPSA0
STM #K_RCR10,McBSP0
NOP
NOP
STM #XCR10,SPSA0
STM #K_XCR10,McBSP0
NOP
NOP
STM #PCR0,SPSA0
STM #K_PCR0,McBSP0
NOP
NOP
STM SRGR10,SPSA0
STM #K_SRGR10,McBSP0
NOP
NOP
STM SRGR20,SPSA0
STM #K_SRGR20,McBSP0
NOP
NOP
STM #RCR20,SPSA0
STM #K_RCR20,McBSP0
NOP
NOP
STM #XCR20,SPSA0
STM #K_XCR20,McBSP0
NOP
NOP
STM #MCR10,SPSA0
STM #K_MCR10,McBSP0
NOP
NOP
STM #MCR20,SPSA0
STM #K_MCR20,McBSP0
NOP
NOP
STM #RCERA0,SPSA0
STM #K_RCERA0,McBSP0
NOP
NOP
STM #RCERB0,SPSA0
STM #K_RCERB0,McBSP0
NOP
NOP
STM #XCERA0,SPSA0
STM #K_XCERA0,McBSP0
NOP
NOP
STM #XCERB0,SPSA0
STM #K_XCERB0,McBSP0
NOP
NOP
STM #SPCR10,SPSA0
STM #K_SPCR10,McBSP0 ;ENBLE R
NOP
NOP
STM #SPCR20,SPSA0
STM #K_SPCR20,McBSP0 ;ENBLE X
NOP
NOP
RET
;*************************
.text
TIMES .int TVAL
;*************************
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -