Myślę że i na C przyjdzie czas tym bardziej że C jest mi lepiej znane. Natomiast na początek by poznać budowę procesora i złapać o co tam chodzi, to bascom jest wystarczający. Minusem jest niewątpliwie mało oszczędny kod wynikowy.
Czy z tego urodzi się projekt? zobaczymy...
Wracając do tematu monitora aprs, urządzenie to podstawowa aplikacja procesora AT90S2313 lub ATTiny2313, składająca się z jednego portu szeregowego plus obsługę wyświetlacza.
Dzisiaj przepisałem cały kod od nowa. Zamiast ośmiu zmiennych do przechowywania znaków stacji i typów trakerów. zastosowałem dwie zmienne tablicowe i pętle do wyświetlania ich zawartości.
Poniżej kod:
Kod:
' SQ9MDD <rlabus@luxmat.com> 2010
'
' This program is free software; you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation; either version 2 of the License, or
' (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program; if not, write to the Free Software
' Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
' MA 02110-1301, USA.
Config Serialin = Buffered , Size = 15
Config Lcdbus = 4
Config Lcd = 20 * 4
$crystal = 4000000
$baud = 9600
$hwstack = 16
$swstack = 0
$framesize = 15
Dim Na As String * 15
Dim Znak(4) As String * 9
Dim Traker(4) As String * 4
Dim Whereis As Byte
Dim A As Byte
Enable Interrupts
Cursor Off
'-----------------------------------------------------------------
Cls
Locate 1 , 1
Lcd "APRS MONITOR.v.0.04a"
Locate 2 , 1
Lcd "-------SQ9MDD-------"
Wait 5
Locate 4 , 1
Lcd "waiting for data..."
'-----------------------------------------------------------------
Do
Echo Off
If Ischarwaiting() = 1 Then 'jesli bufor nie jest pusty
Input Na Noecho 'wczytuje dane z bufora znak stacji
' jesli bufor dluzszy niz 14 znakow to!
If Len(na) > 13 Then
Whereis = Instr(na , ">" )
Whereis = Whereis + 1
Traker(1) = Mid(na , Whereis , 4)
Whereis = Whereis - 3
Znak(1) = Mid(na , 2 , Whereis)
Cls 'czysc wyswietlacz
For A = 1 To 4 Step 1 'petelka do wyswietlania zakow z tablicy
Locate A , 1 'ustawiam kursor
Lcd Znak(a) 'i drukuje znak jaki wpadł do bufora
Locate A , 11
If Traker(a) = "APU1" Then 'uiview 16
Lcd Lookupstr(0 , Trakerki)
Elseif Traker(a) = "APU2" Then 'uiview 32
Lcd Lookupstr(1 , Trakerki)
Elseif Traker(a) = "URQU" Then 'vx8
Lcd Lookupstr(2 , Trakerki)
Elseif Traker(a) = "APK1" Then 'tmd700
Lcd Lookupstr(3 , Trakerki)
Elseif Traker(a) = "APNU" Then 'uidigi
Lcd Lookupstr(4 , Trakerki)
Elseif Traker(a) = "APN3" Or Traker(a) = "APNX" Then 'tnc-x
Lcd Lookupstr(5 , Trakerki)
Elseif Traker(a) = "APND" Then 'digined
Lcd Lookupstr(6 , Trakerki)
Else
Lcd Traker(a)
End If
Next A
Znak(4) = Znak(3) 'a tutaj przesuwanie zmienych z komorki do komorki co petelke
Znak(3) = Znak(2)
Znak(2) = Znak(1)
Traker(4) = Traker(3) 'a tutaj przesuwanie zmienych z komorki do komorki co petelke
Traker(3) = Traker(2)
Traker(2) = Traker(1)
End If
End If
Waitms 5 '1,5msec potrzebuje wyswietlacz na realizacje $home
Loop
'-----------------------------------------------------------------
End
Trakerki:
Data "UiView 16" '0 APU1
Data "UiView 32" '1 APU2
Data "VX-8R" '2 URQU
Data "TM-D700" '3 APK1
Data "UiDigi" '4 APNU
Data "TNC-X" '5 APN3 APNX '
Data "Digi_NED" '6 APND