📄 avrsms.asm
字号:
ldi ZH,HIGH(2*MAINDEFAULTSEND)
ldi YL,LOW(Work1)
ldi YH,HIGH(Work1)
call EEFlashSeqToRam
; change message in ram at Work1 as needed
ldi r16,0b00010000 ; clear Message
call KeysClearOnMsg ; (TODO: better on send succes only)
; Input to SMSSendRAM:
ldi XL,LOW(Work1)
ldi XH,HIGH(Work1) ; X points to RAM-String to send
ldi YL,LOW(EENUMBER) ; Y points to Number in EEprom
ldi YH,HIGH(EENUMBER)
call SMSSendRam ; send the SMS
SKM_CheckResult:
cpi r20,$01
breq SKM_OK
ldi r16,0b01000000 ;;; Error Indicator - dbg
call SwitchOn ;;;
rjmp SKM_End
SKM_OK:
ldi r16,0b01000000 ;;; Success Indicator - dbg
call SwitchOff ;;;
SKM_End:
pop ZH
pop ZL
pop YH
pop YL
pop XH
pop XL
pop r21
pop r20
pop r17
pop r16
ret
MAINDEFAULTSEND:
.db "Eversmith by Martin Thomas: You swiched on Input 5",$00,$00
;=========================================
; Main Menu
MAINMENU:
push r17
push r20
push XL
push XH
push YL
push YH
push ZL
push ZH
MAINMENU_L1:
; Show Main Menu
ldi ZL,LOW(2*MAINMENUTXT)
ldi ZH,HIGH(2*MAINMENUTXT)
call MenuUart ; wait for selection to r17
MM_1:
cpi r17,'1'
brne MM_2
rcall GetMessage
rjmp MAINMENU_L1
MM_2:
cpi r17,'2'
brne MM_3
rcall GetNumber
rjmp MAINMENU_L1
MM_3:
cpi r17,'3'
brne MM_4
rcall GetPasscode
rjmp MAINMENU_L1
MM_4:
cpi r17,'4'
brne MM_5
rcall MAINSelectME
rjmp MAINMENU_L1
MM_5: ;; Debugging
cpi r17,'5'
brne MM_6
rcall ShowConfig
rjmp MAINMENU_L1
MM_6: ;; Modem Debugging
cpi r17,'6'
brne MM_7
call ModemUartWaitOK
cpi r20,$01
breq MM_0
;;;;call ModemSayTimeout
rjmp MAINMENU_L1
MM_7: ;; SMS Debugging
cpi r17,'7'
brne MM_8
; set Y-Pointer to SMS-Number in EEPROM
ldi YL,low(EENUMBER)
ldi YH,high(EENUMBER)
; set X-Pointer to SMS-Message in EEPROM
ldi XL,LOW(EEMESSAGE)
ldi XH,HIGH(EEMESSAGE)
push r17 ; rescue menu selection
ldi r17,'M' ; charter to add
call SMSSendEEprom
pop r17 ; restore selection
cpi r20,$01 ; Test Result (1=got OK=good)
breq MM_0
;;;;call ModemSayTimeout
rjmp MAINMENU_L1
MM_8:
cpi r17,'8'
brne MM_9
;;;call SMSProcessUnread
;;;call SMSDebugProcessMsg ; dbg
rjmp MAINMENU_L1
MM_9:
cpi r17,'9'
brne MM_0
ldi r16,0b10101010
call SwitchOn
;call UARTEnableHandshake
rjmp MAINMENU_L1
MM_0:
cpi r17,'0'
brne MAINMENU_L1
MainMenu_End:
ldi r16,0b10000000
call KeysClearOnMsg ; clear message bit 7
call SMSPollInit ; in PDU.asm
call SMSReqInit ; in PDU.asm
pop ZH
pop ZL
pop YH
pop YL
pop XH
pop XL
pop r20
pop r17
ret
;=========================================
; Show SMS Message String
ShowMessage:
push r24
push r25
push ZL
push ZH
ldi ZL,LOW(2*ECHOMSG)
ldi ZH,HIGH(2*ECHOMSG)
call MenuUartSendFlashSeq
ldi r24,LOW(EEMESSAGE)
ldi r25,HIGH(EEMESSAGE)
call MenuUartSendEepromSeq
call MenuUartSendCRLF
pop ZH
pop ZL
pop r25
pop r24
ret
;=========================================
; Get SMS Message String
GetMessage:
push r19
push r24
push r25
push YL
push YH
push ZL
push ZH
; read from UART
ldi ZL,LOW(2*PROMPTMSG) ; Prompt in flash
ldi ZH,HIGH(2*PROMPTMSG)
ldi YL,low(Work1) ; Heap area
ldi YH,high(Work1)
ldi r19,MAXMSGSIZE ; max length of input
call MenuUartInputToRamPrompt
call MenuUartSendCRLF
; store in EEPROM
ldi r24,LOW(EEMESSAGE)
ldi r25,HIGH(EEMESSAGE)
;ldi YL,low(Work1) ; dbg
;ldi YH,high(Work1) ; dbg
;call MenuUartSendRamSeq ; dbg
ldi YL,low(Work1)
ldi YH,high(Work1)
cli
call EEWriteSeqFromRam
sei
pop ZH
pop ZL
pop YH
pop YL
pop r25
pop r24
pop r19
ret
;=========================================
; Show SMS number
ShowNumber:
push r24
push r25
push ZL
push ZH
ldi ZL,LOW(2*ECHONUM)
ldi ZH,HIGH(2*ECHONUM)
call MenuUartSendFlashSeq
ldi r24,LOW(EENUMBER)
ldi r25,HIGH(EENUMBER)
call MenuUartSendEepromSeq
call MenuUartSendCRLF
pop ZH
pop ZL
pop r25
pop r24
ret
;=========================================
; Get SMS number
GetNumber:
push r19
push r24
push r25
push YL
push YH
push ZL
push ZH
ldi ZL,LOW(2*PROMPTNUM)
ldi ZH,HIGH(2*PROMPTNUM)
ldi YL,low(Work1)
ldi YH,high(Work1)
ldi r19,MAXNUMSIZE
call MenuUartInputToRamPrompt
call MenuUartSendCRLF
ldi r24,LOW(EENUMBER)
ldi r25,HIGH(EENUMBER)
ldi YL,low(Work1)
ldi YH,high(Work1)
cli
call EEWriteSeqFromRam
sei
pop ZH
pop ZL
pop YH
pop YL
pop r25
pop r24
pop r19
ret
;=========================================
; Show Passcode
ShowPasscode:
push r24
push r25
push ZL
push ZH
ldi ZL,LOW(2*ECHOPASSCODE) ; in PDU.asm
ldi ZH,HIGH(2*ECHOPASSCODE)
call MenuUartSendFlashSeq
ldi r24,LOW(EEPASSCODE)
ldi r25,HIGH(EEPASSCODE)
call MenuUartSendEepromSeq
call MenuUartSendCRLF
pop ZH
pop ZL
pop r25
pop r24
ret
;=========================================
; Get Passcode
GetPasscode:
push r19
push r24
push r25
push YL
push YH
push ZL
push ZH
ldi ZL,LOW(2*PROMPTPASSCODE)
ldi ZH,HIGH(2*PROMPTPASSCODE)
ldi YL,low(Work1)
ldi YH,high(Work1)
ldi r19,4
call MenuUartInputToRamPrompt
call MenuUartSendCRLF
ldi r24,LOW(EEPASSCODE)
ldi r25,HIGH(EEPASSCODE)
ldi YL,low(Work1)
ldi YH,high(Work1)
cli
call EEWriteSeqFromRam
sei
pop ZH
pop ZL
pop YH
pop YL
pop r25
pop r24
pop r19
ret
;=========================================
; Show-Config
ShowConfig:
rcall ShowMessage
rcall ShowNumber
rcall ShowPasscode
rcall ShowMEName
ret
;=========================================
; Type ME-Type as String
ShowMEName:
push r24
push r25
push ZL
push ZH
ldi ZL,LOW(2*ECHOMENAME)
ldi ZH,HIGH(2*ECHOMENAME)
call MenuUartSendFlashSeq
rcall MAINMEasText
call MenuUartSendCRLF
pop ZH
pop ZL
pop r25
pop r24
ret
;=========================================
; Type ME-Type as String
MAINMEasText:
push r16
push r24
push r25
push ZL
push ZH
ldi r24,LOW(EEMEType)
ldi r25,HIGH(EEMEType)
call EEReadByte
cpi r16,MESiemensAT
brne MMaT_L2
ldi ZL,LOW(2*MENAMESiemensAT)
ldi ZH,HIGH(2*MENAMESiemensAT)
rjmp MMaT_Show
MMaT_L2:
cpi r16,MEEricssonAT
brne MMaT_L3
ldi ZL,LOW(2*MENAMEEricssonAT)
ldi ZH,HIGH(2*MENAMEEricssonAT)
rjmp MMaT_Show
MMaT_L3:
cpi r16,MENokiaAT
brne MMaT_L4
ldi ZL,LOW(2*MENAMENokiaAT)
ldi ZH,HIGH(2*MENAMENokiaAT)
rjmp MMaT_Show
MMaT_L4:
MMaT_L0:
rjmp MMaT_End
MMaT_Show:
adiw r25:r24,04 ; skip menu selection "(x) "
call MenuUartSendFlashSeq
MMaT_End:
pop ZH
pop ZL
pop r25
pop r24
pop r16
ret
;=========================================
; Select ME
MAINSelectME:
push r16
push r18
push r24
push r25
push ZL
push ZH
; Show Main Menu
ldi ZL,LOW(2*MESELECTMENUTXT)
ldi ZH,HIGH(2*MESELECTMENUTXT)
call MenuUart ; wait for selection to r17
MEM_1:
cpi r17,'1'
brne MEM_2
ldi r16, MESiemensAT
rjmp MEM_STORE
MEM_2:
cpi r17,'2'
brne MEM_3
ldi r16, MEEricssonAT
rjmp MEM_STORE
MEM_3:
cpi r17,'3'
brne MEM_4
ldi r16, MENokiaAT
rjmp MEM_STORE
MEM_4:
cpi r17,'5'
brne MEM_5
nop;;;;
rjmp MEM_STORE
MEM_5:
MEM_0:
cpi r17,'0'
breq MEM_End
MEM_STORE:
cli
ldi r24,LOW(EEMEType)
ldi r25,HIGH(EEMEType)
call EEWriteByte
sei
rcall MAINMEasText
MEM_End:
pop ZH
pop ZL
pop r25
pop r24
pop r18
pop r17
ret
;======================================================
; Interrupt Handler in Main
;======================================================
; Timer0 Overflow Interrupt-Handler
; Routine is called every 10ms (see globals.inc)
; Avoid using r4 in other interrupt-handlers!
TIM0OVF:
push r4
in r4,SREG ; rescue status-register
push r16
call KeysIRQHandler ; in keys.asm
call SMSPollCount ; in PDU.asm
call UARTTIMEOUTCNT ; in UART.asm
ldi r16,T0PRESET
out TCNT0,r16 ; re-preset timer
pop r16
out SREG,r4 ; restore status-register
pop r4
reti ; return from interrupt
;================================================
; FLASH constants
;
; Mind the alignment, autoinserted $00 will
; indicate an end-of-string which will
; result in corrupted output. This code uses
; C-Style strings.
; The compiler will warn about misalignment
MAINMENUTXT:
.db $0D,$0A,$0D,$0A,"*** AVR-SMS Main-Menue ***",$0D,$0A
.db "(1) Enter Message 1 ",$0D,$0A
.db "(2) Enter Number 1 ",$0D,$0A
.db "(3) Enter Passcode ",$0D,$0A
.db "(4) Select ME ",$0D,$0A
.db "(5) Show Config ",$0D,$0A
;.db "(5) DBG ",$0D,$0A
;.db "(6) DBG-Modem ",$0D,$0A
;.db "(7) DBG-SMS-Send ",$0D,$0A
;.db "(8) DBG-SMS-Receive ",$0D,$0A
.db $0D,$0A,"(0) Exit ",$0D,$0A,$00
PROMPTMSG:
.db $0D,$0A,"Message-Input :",$00
ECHOMSG:
.db $0D,$0A,"Message is : ",$00
PROMPTNUM:
.db $0D,$0A,"Number-Input:",$00
ECHONUM:
.db $0D,$0A,"Number is : ",$00
PROMPTPASSCODE:
.db $0D,$0A,"SMS-Receive-Passcode-Input:",$00
ECHOPASSCODE:
.db $0D,$0A,"SMS-Receive-Passcode is : ",$00
MESELECTMENUTXT:
.db $0D,$0A,$0D,$0A,"-- Select ME Type --",$0D,$0A
.db "(1) Siemens (AT-Commands) ",$0D,$0A
.db "(2) Ericsson (AT-Commands)",$0D,$0A
.db "(3) Nokia (AT-Commands) ",$0D,$0A
;.db "(4) Nokia (F-BUS)",$0D,$0A
.db $0D,$0A,"(0) Leave unchanged",$0D,$0A,$00
MENAMESiemensAT:
.db "Siemens (AT-Commands)",$00
MENAMENokiaAT:
.db "Nokia (AT-Commands)",$00
MENAMEEricssonAT:
.db "Ericsson (AT-Commands) ",$00
ECHOMENAME:
.db $0D,$0A,"ME : ",$00
.CSEG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -