.def T_alert_register = r21 ; Arbeitsregister 6 ;---------------Unterprogramm zur Ueberpruefung der Temperatur--------------- check_temperature_alert: ldi T_alert_register, 'A' ; alarm-register oder carry setzen und abfragen // push temp1 ldi temp1, 'A' cp temp1,T_alert_register ; compare breq temperature_alert ; Temperaturalarm // pop temp1 ret ;-----------Unterprogramm zur Ausfuehrung bei einem Temperaturalarm---------- temperature_alert: call wait_1s rcall call_phone_number1 ret ;----------------Unterprogramm zum Anrufen der 1. Telefonnummer-------------- call_phone_number1: ldi zl,low(phone_number1*2); ; Z Pointer laden ldi zh,high(phone_number1*2); rcall serout_string ret ;-------------Unterprogramm zum Ausgabe eines Strings aus dem Flash---------- serout_string: lpm ; nächstes Byte aus dem Flash laden check if its the last character (the zero) and r0,r0 ; = Null? breq serout_string_ende ; wenn ja, -> Ende serout_string_wait: sbis UCSRA,UDRE ; Warten bis UDR für das nächste ; Byte bereit ist rjmp serout_string_wait out UDR, r0 adiw zl:zh,1 ; Zeiger erhöhen rjmp serout_string ; nächstes Zeichen bearbeiten serout_string_ende: ret ; zurück zum Hauptprogramm ;------------------------Im Flash gespeicherte Strings----------------------- phone_number1: .db "ATD>SM1",13,10,0 //13 (Carriage Return) und 10 (New Line) ; ATD>SM --> dial the phone number stored in the SIM card which is located by the index , data call wait_1s: push R25 push R26 push R27 ; warte 11058993 Zyklen: ldi R25, $BB WGLOOP0a: ldi R26, $4D WGLOOP1a: ldi R27, $FF WGLOOP2a: dec R27 brne WGLOOP2a dec R26 brne WGLOOP1a dec R25 brne WGLOOP0a ; ----------------------------- ; warte 6 Zyklen: ldi R25, $02 WGLOOP3a: dec R25 brne WGLOOP3a ; ----------------------------- ; warte 1 Zyklus: nop pop R27 pop R26 pop R25 ret