📄 被叫测试程序.asm
字号:
;以下是pc机所接modem呼叫mcu所接modem的程序
CHARNUM0 EQU 6H ;要发送字符串0的数量;
CHARNUM1 EQU 8H ;要发送字符串1的数量;
CHARNUM2 EQU 3H ;要发送字符串2的数量;
CHARNUM3 EQU 5H ;要发送字符串3的数量;
COMMBUF EQU 30H ;接收AT命令执行后返回的结果码的区域首址;
TIME1 EQU 0FAH ;延时程序中用到的两个变量
TIME2 EQU 0F9H
;******************主程序
ORG 0000H
LJMP MAIN
ORG 0023H
LJMP ZD ;转至中断服务程序
ORG 0030H
MAIN: MOV SCON,#50H ;将串行口设置为方式1,REN=1
MOV SP,#10H
MOV TMOD,#20H ;定时器1设为模式2
MOV TL1,#0F4H ;定时器初值,晶振为11.0592Mhz,波特率为2400bps
MOV TH1,#0F4H ;8位重装值
SETB TR1 ;启动定时器1
SETB ES ;允许串行中断
CLR EA ;关中断
CLR P0.0
SETB P0.1
SETB P0.2
;***************发送AT0 命令
FSAT0: MOV R2,#CHARNUM0 ;要发送字符的数量
MOV R0,#0H
MOV DPTR,#CODE0 ;CODE0为发送字符的地址
MOV R1,#COMMBUF
MOV R4,#0H
CLR RI
ACALL LOOP
BRR1: JBC RI,SUN0 ;查询接收标志位
SJMP BRR1
SUN0: ACALL LIN
CJNE R4,#7,BRR1
CLR RI
MOV R1,#COMMBUF ;结果码的校验
JIAOYAN0: MOV A,@R1
CJNE A,#4FH,JXJIAOYAN0
DEC R4
INC R1
PDK2: MOV A,@R1
CJNE A,#4BH,PDK
AJMP DELY
JXJIAOYAN0: DJNZ R4,JUMPER0
AJMP ZHONGJI0
JUMPER0: INC R1
AJMP JIAOYAN0
ZHONGJI0: LJMP FSAT0
PDK: DJNZ R4,PDK1
AJMP ZHONGJI0
PDK1: INC R1
AJMP PDK2
DELY: ACALL DELY0
MOV R1,#COMMBUF
ACALL NEXT
;***************发送AT1 命令
FSAT1: MOV R2,#CHARNUM1 ;要发送字符的数量
MOV R0,#0H
MOV DPTR,#CODE1 ;CODE0为发送字符的地址
MOV R1,#COMMBUF
MOV R4,#0H
ACALL LOOP
BRR3: JBC RI,SUN1
SJMP BRR3
SUN1: ACALL LIN
CJNE R4,#7,BRR3
CLR RI
MOV R1,#COMMBUF ;结果码的校验
JIAOYAN1: MOV A,@R1
CJNE A,#4FH,JXJIAOYAN1
DEC R4
INC R1
PDK5: MOV A,@R1
CJNE A,#4BH,PDK3
AJMP COMMA
JXJIAOYAN1: DJNZ R4,JUMPER1
AJMP ZHONGJI1
JUMPER1: INC R1
AJMP JIAOYAN1
ZHONGJI1: LJMP FSAT1
PDK3: DJNZ R4,PDK4
AJMP ZHONGJI1
PDK4: INC R1
AJMP PDK5
COMMA: ACALL NEXT
COMMA1: CLR RI
MOV R4, #0
MOV R1,#20H
SETB EA
SETB ES
ACALL DELAY
ACALL DELAY
ACALL DELAY
CLR EA
CLR ES
MOV R1,#20H ;结果码的校验
JIAOYAN01: MOV A,@R1
CJNE A,#43H,JXJIAOYAN01
DEC R4
INC R1
MOV A,@R1
CJNE A,#4FH,JXJIAOYAN01
CLR EA
CLR ES
AJMP GOHOME
JXJIAOYAN01: DJNZ R4,JUMPER01 ;*要标志第一行命令发送不成功
AJMP COMMA1
JUMPER01: INC R1
AJMP JIAOYAN01
GOHOME: ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
ACALL DELAY
CLR P0.1
CLR RI
MOV R1,#40H
BBC : JBC RI,SUN011 ;查询接收标志位
SJMP BBC
SUN011:ACALL LIN
CLR P0.2
SJMP BBC
;****************中断服务程序
ZD : CLR EA
JB RI,JUST ;RI=1,为接收中断
SJMP OVER
JUST: MOV A,SBUF
MOV @R1,A
INC R1
INC R4 ;记录接收到字符的数量
CLR RI
OVER: SETB EA
RETI ;中断返回
NEXT: MOV R1,#COMMBUF
NEXT1: MOV @R1,#0
INC R1
CJNE R1,#40H,NEXT1
RET
;***********************************
LOOP: CLR TI
MOV A,R0
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
INC R0
DJNZ R2,LOOP
CLR TI
RET
;************************
LIN: CLR RI
MOV A,SBUF
MOV @R1,A
INC R1
INC R4
RET
;*****************延时子程序
DELY0: MOV R0,#100
DELY1: MOV R2,#100
DELY2: DJNZ R2,DELY2
DJNZ R0,DELY1
RET
DELAY: MOV R3,#TIME1
LOOP2: MOV R5,#TIME2
NOP
NOP
LOOP1: DJNZ R5,LOOP1
DJNZ R3,LOOP2 ;延时时间等于(4+10*TIME2+20*TIME1)*机器周期
RET
CODE0: DB 'A','T','&','F',0AH,0DH ;恢复出厂设置
CODE1: DB 'A','T','S','0','=','1',0AH,0DH ;
CODE2: DB '+','+','+' ;由on-line状态返回到command状态
CODE3: DB 'A','T','H',0AH,0DH ;挂机,结束通话
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -