Всем доброго времени суток! Задача у меня стоит в следуюшем , нужно принять НЕХ по СОМ порту, которые передаются с программы.
Есть программа , которая передает НЕХ данные (но в нем только цифры) по СОМ , ну и соответственно контроллер который их должен принять.
Не получается следующие:
данные вроде бы и принимаются , но - если в таймере стоит ( Prescale = 256) то при этом ужасно мерцают индикаторы , если поставить (Prescale = 64) данные тоже передаются но уже не правильные , с провалами - выпадают некоторые цифры , когда ставишь (Prescale = 8) индикаторы показывают идеально , но зато очень трудно передать данные по СОМ.
Перечитал почти весь интернет но все примеры сводятся к работе в терминале и передачи через INPUT. Может данные нужно не в НЕХ передовать в байтах
(программу для компа сам писал могу исправить на передачу по байтам), но как настроить прием для этого.
Если нужно вот архив с программами и протеус
вот код программы
$regfile = "m8def.dat"
$crystal = 4000000
$baud = 9600
Ddrb = &B11111111
Dim A(16) As Byte
Dim A1 As String * 1
Dim A2 As String * 1
Dim A3 As String * 1
Dim A4 As String * 1
Dim A5 As String * 1
Dim A6 As String * 1
Dim A7 As String * 1
Dim A8 As String * 1
Dim A9 As String * 1
Dim A10 As String * 1
Dim A11 As String * 1
Dim A12 As String * 1
Dim A13 As String * 1
Dim A14 As String * 1
Dim A15 As String * 1
Dim A16 As String * 1
Dim Rs As String * 16 'переменная для приема через RS-232
Dim L As Byte
Dim Ledout As Byte
Config Timer0 = Timer , Prescale = 8
On Timer0 Indication
Enable Timer0
Enable Interrupts
Do
Rs = "1234567890123456"
'Input Rs
Stop Timer0
A1 = Mid(rs , 1 , 1) 'извлекаем данные из массива и переводим из НЕХ
A(1) = Val(a1)
A2 = Mid(rs , 2 , 1)
A(2) = Val(a2)
A3 = Mid(rs , 3 , 1)
A(3) = Val(a3)
A4 = Mid(rs , 4 , 1)
A(4) = Val(a4)
A5 = Mid(rs , 5 , 1)
A(5) = Val(a5)
A6 = Mid(rs , 6 , 1)
A(6) = Val(a6)
A7 = Mid(rs , 7 , 1)
A(7) = Val(a7)
A8 = Mid(rs , 8 , 1)
A(8) = Val(a8)
A9 = Mid(rs , 9 , 1)
A(9) = Val(a9)
A10 = Mid(rs , 10 , 1)
A(10) = Val(a10)
A11 = Mid(rs , 11 , 1)
A(11) = Val(a11)
A12 = Mid(rs , 12 , 1)
A(12) = Val(a12)
A13 = Mid(rs , 13 , 1)
A(13) = Val(a13)
A14 = Mid(rs , 14 , 1)
A(14) = Val(a14)
A15 = Mid(rs , 15 , 1)
A(15) = Val(a15)
A16 = Mid(rs , 16 , 1)
A(16) = Val(a16)
Start Timer0
Loop
Indication:
If L > 15 Then L = 0
Ledout = Lookup(l , Effect3)
Shiftout Portb.2 , Portb.3 , Ledout , 1
Ledout = Lookup(l , Effect2)
Shiftout Portb.2 , Portb.3 , Ledout , 1
Incr L
Ledout = Lookup(a(l) , Effect1)
Shiftout Portb.2 , Portb.3 , Ledout , 1
Pulseout Portb , 1 , 5
Return
Effect1:
Data &B00000011 , &B10011111 , &B00100101 , &B00001101 , &B10011001 '0 1 2 3 4
Data &B01001001 , &B01000001 , &B00011111 , &B00000001 , &B00001001 '5 6 7 8 9
'данные включения портов
Effect2:
Data &B00000000 , &B00000000 , &B00000000 , &B00000000
Data &B00000000 , &B00000000 , &B00000000 , &B00000000
Data &B10000000 , &B01000000 , &B00100000 , &B00010000
Data &B00001000 , &B00000100 , &B00000010 , &B00000001
Effect3: 'данные включения портов
Data &B10000000 , &B01000000 , &B00100000 , &B00010000
Data &B00001000 , &B00000100 , &B00000010 , &B00000001
Data &B00000000 , &B00000000 , &B00000000 , &B00000000
Data &B00000000 , &B00000000 , &B00000000 , &B00000000ну уже вообще не чего не могу придумать перепробовал все что мог , надежда только на вас
Если не трудно помогите пожалуйста.