?? sms6.asm
字號:
T2CON EQU 0C8H
RCAP2L EQU 0CAH
RCAP2H EQU 0CBH
TL2 EQU 0CCH
TH2 EQU 0CDH
;cpu 8xc52
ORG 0000H
LJMP MAIN
ORG 0023H
ljmp INT_232
WDTRST EQU 0A6H ;看門狗定時器寄存器
;************宏定義
CONST_1MSH EQU 0FCH
CONST_1MSL EQU 065H ;按1ms定時,定時器初值
CONST_10MSH EQU 0DCH
CONST_10MSL EQU 000H
CONST_100MSH EQU 00H
CONST_100MSL EQU 00H
_R1 EQU 50H
_R2 EQU 51H
_R3 EQU 52H
;口線定義
igb BIT P1.1
BIT_ESCL BIT P1.6
BIT_ESDA BIT P1.7
in1 BIT P0.0
in2 BIT P0.1
in3 BIT p0.2
SMSLED BIT P3.5
READYLED BIT P3.7
;--用戶位定義
BIT_EEF BIT 22H.0
COM_DATE_OK BIT 22H.1
SMS_DATE_0K BIT 22H.2
COM_DATE_READY BIT 22H.3
BIT_LASTBYTE BIT 22H.4
SEND_OK BIT 22H.5
READ_OK BIT 22H.6
COMD_OK BIT 22H.7 ;校驗成功標致
;--寄存器定義
SUM EQU 57H
CONST_1MSL EQU 065H
SDATE_LEN EQU 58H ;發送數據長度
RDATE_LEN EQU 59h ;接收數據長度
STACK_TOP EQU 30H ;定義堆棧首址48
BUF_SEND EQU 80H ;發送緩沖區首址
BUF_DATA EQU 60H ;接收緩沖區首址
;---------------------------------------------------------------------------------------
ORG 0100H
MAIN:
MOV SP,#STACK_TOP ;棧
MOV PSW,#00H ;0號工作區
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
SETB BIT_ESDA
SETB BIT_ESCL
;--------------------RAM空間清0及測試----------------------------
MOV R0,#0
M_1:
MOV @R0,#0
DJNZ R0,M_1
;--定時器T0,T1參數設置
MOV TMOD,#00010001B ;定時器T0,T1工作于方式1(16位定時)
MOV TH0,#CONST_1MSH
MOV TL0,#CONST_1MSL
;--串口參數設置
MOV SCON,#01010000B ;sm0 sm1 sm2 ren tb8 rb8 ti ri
MOV TH2,#0FFH
MOV TL2,#070H
MOV RCAP2H,#0FFH ;波特率 115200 57600 38400 28800 19200 9600 7200 4800 3600 2400
MOV RCAP2L,#0DCH ;TH2:TL2= FF:FD FF:FA FF:F7 FF:F4 FF:EE FF:DC FF:D0 FF:B8 FF:A0 FF:70
MOV T2CON,#00110100B ;TF2 EXF2 RCLK TCKL EXEN2 TR2 C/T2 CP/RL2
MOV IP,#00010000B ;中斷優先 * * PT2 PS PT1 PX1 PT0 PX0
MOV IE,#00010000B ;中斷使能寄存器 EA X ET2 ES ET1 EX1 ET0 EX0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LCALL DELAY10MS
SETB IGB
LCALL Delay10MS
CLR IGB
LCALL DELAY100MS
LCALL DELAY100MS
SETB IGB
LCALL INITMODEM
wait: LCALL DELAY100MS
JNB COM_DATE_READY,WAIT_1
LCALL explain
WAIT_1:
JNB IN1,SENDA
JNB IN2,SENDB
JNB IN3,SENDC
AJMP WAIT
lcall sms_send
ajmp WAIT
RET
;INCLUDE MODEM.ASM
;--------------------------------------------------------------------
; 本程序處理gsmMODEM的初始化,
;
; InitModem --初始化MODEM,9600 BPS,
;
;--------------------------------------------------------------------
;===========================
;復位并關閉回顯
;===========================
InitModem:
SETB EA
SETB READYLED
MOV R0,#BUF_SEND
MOV DPTR,#TABLE_RESET
MOV R2,#6
IM_1:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,IM_1
IM_2:
MOV R0,#BUF_SEND
MOV SDATE_LEN,#6
MOV R1,#BUF_DATA
MOV RDATE_LEN,#0
SETB TI
IM_21:
lCALL DELAY10MS
MOV A,RDATE_LEN
CJNE A,#6,IM_21
lCALL CHECK_UP
jnb COMD_OK,im_2
;RET
;=====================================
;設置自動搜索GSM網
;=====================================
MOV R0,#BUF_SEND
MOV DPTR,#TABLE_GOGSM
MOV R2,#11
IM_3:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,IM_3
IM_4:
MOV R0,#BUF_SEND
MOV SDATE_LEN,#11
MOV R1,#BUF_DATA
MOV RDATE_LEN,#0
SETB TI
IM_41:
lCALL DELAY100MS
MOV A,RDATE_LEN
CJNE A,#6,IM_41
lCALL CHECK_UP
jnb COMD_OK,im_4
;==================================
;SET PDU OR TEXT
;==================================
MOV R0,#BUF_SEND
MOV DPTR,#TABLE_SETSMS0
MOV R2,#11
IM_7:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,IM_7
IM_8:
MOV R0,#BUF_SEND
MOV SDATE_LEN,#11
MOV R1,#BUF_DATA
MOV RDATE_LEN,#0
SETB TI
IM_81:
lCALL DELAY100MS
MOV A,RDATE_LEN
CJNE A,#6,IM_81
lCALL CHECK_UP
jNb COMD_OK,im_8
;=====================================
;波特率9600BPS
;=====================================
MOV R0,#BUF_SEND
MOV DPTR,#TABLE_SCOMRATE
MOV R2,#13
IM_9:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,IM_9
IM_10:
MOV R0,#BUF_SEND
MOV SDATE_LEN,#13
MOV R1,#BUF_DATA
MOV RDATE_LEN,#0
SETB TI
IM_101:
lCALL DELAY100MS
MOV A,RDATE_LEN
CJNE A,#6,IM_101
lCALL CHECK_UP
jNb COMD_OK,im_10
;=====================================
;設置TXT MODEL UCS2
;=====================================
MOV R0,#BUF_SEND
MOV DPTR,#TABLE_STECHAR
MOV R2,#21
IM_11:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,IM_11
IM_12:
MOV R0,#BUF_SEND
MOV SDATE_LEN,#21
MOV R1,#BUF_DATA
MOV RDATE_LEN,#0
SETB TI
IM_121:
lCALL DELAY100MS
MOV A,RDATE_LEN
CJNE A,#6,IM_121
lCALL CHECK_UP
jNb COMD_OK,im_12
;RET
;==============================
;設置短信中心號碼
;==============================
SET_CENTER_NUMBER:
MOV R0,#BUF_SEND
MOV DPTR,#TABLE_SETSMS1
MOV R2,#24
IM_5:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,IM_5
IM_6:
MOV R0,#BUF_SEND
MOV SDATE_LEN,#24
MOV R1,#BUF_DATA
MOV RDATE_LEN,#0
SETB TI
IM_61:
lCALL DELAY100MS
MOV A,RDATE_LEN
CJNE A,#6,IM_61
lCALL CHECK_UP
jnb COMD_OK,im_6
CLR EA
CLR READYLED
ret
;**************************************
;======================================
;SEND SMS
;======================================
sms_send:
SETB EA
CLR SMSLED
MOV R0,#BUF_SEND
MOV DPTR,#TABLE_msglen
MOV R2,#11
SS_1:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,SS_1
SS_2:
MOV R0,#BUF_SEND
MOV SDATE_LEN,#11
MOV R1,#BUF_DATA
MOV RDATE_LEN,#0
SETB TI
SS_DELAY:
LCALL DELAY100MS
MOV A,RDATE_LEN
CJNE A,#4,SS_DELAY
LCALL CHECK_UP
JNB READ_OK,SS_2
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
MOV R0,#BUF_SEND
MOV DPTR,#TABLE_MSGDATE
MOV R2,#69
SS_3:
CLR A
MOVC A,@A+DPTR
MOV @R0,A
INC DPTR
INC R0
DJNZ R2,SS_3
SS_4:
MOV R0,#BUF_SEND
MOV SDATE_LEN,#69
MOV R1,#BUF_DATA
MOV RDATE_LEN,#0
SETB TI
SS_41:
LCALL DELAY100MS
MOV A,RDATE_LEN
CJNE A,#13H,SS_41
LCALL CHECK_UP
JNB SEND_OK,SS_4
CLR EA
SETB SMSLED
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;串口中斷
;IN R0,R1
;OUT RDATE_LEN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT_232:
;關閉串口中斷
PUSH ACC ;保護現場
PUSH PSW
PUSH DPL
PUSH DPH
JBC RI,I_232_RCV
I_232_SEND:
CLR TI
MOV A,SDATE_LEN
JZ I_232_EOF
MOV A,@R0
MOV SBUF,A
INC R0
dec SDATE_LEN
LJMP I_232_EOF
I_232_RCV:
CLR RI
MOV A,SBUF
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -