⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 avrsms.asm

📁 Eversmith_-_AVRSMS for pdu mode
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	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 + -