мега32, функция для приема (для передачи аналогично коду на меге88)
- Код: Выделить всё
Const Timerload_after_start = 144 'baudrate = 9600, prescaler = 8
Const Timerload_after_bit = 83
Const Bytes_amount = 3
....
Sub Input_m88(byref S As String)
Local Bit_count As Byte , Byte_count As Byte
Local Buf As Byte
Config Pinc.0 = Output
Config Pinc.1 = Input
Config Timer0 = Timer , Prescale = 8
Stop Timer0
Byte_count = 0
While Byte_count < Bytes_amount
Incr Byte_count
Bitwait Pinc.1 , Reset
Start Timer0
Timer0 = 0
While Timer0 < Timerload_after_start
Wend
Timer0 = 0
Portc.0 = 1
Portc.0 = 0
Bit_count = 0
Buf = 0
While Bit_count < 8
Portc.0 = 1
Buf = Buf + Pinc.1
Rotate Buf , Right , 1
Incr Bit_count
Timer0 = 0
Portc.0 = 0
While Timer0 < Timerload_after_bit
Wend
Wend
Mid(s , Byte_count , 1) = Buf
Stop Timer0
Wend
Incr Byte_count
Mid(s , Byte_count , 1) = Chr(0)
End Sub
мега88, функции для приема, передачи
- Код: Выделить всё
Const Timerload_after_start = 144 'baudrate = 9600, prescaler = 8
Const Timerload_after_bit = 83
Const Bytes_amount = 3
...
Sub Input_m32(byref S As String)
Local Bit_count As Byte , Byte_count As Byte
Local Buf As Byte
Config Pinc.0 = Output
Config Pinc.4 = Input
Config Timer2 = Timer , Prescale = 8
Stop Timer2
Byte_count = 0
While Byte_count < Bytes_amount
Incr Byte_count
Bitwait Pinc.4 , Reset
Start Timer2
Timer2 = 0
While Timer2 < Timerload_after_start
Wend
Timer0 = 0
Portc.0 = 1
Portc.0 = 0
Bit_count = 0
Buf = 0
While Bit_count < 8
Portc.0 = 1
Buf = Buf + Pinc.4
Rotate Buf , Right , 1
Incr Bit_count
Timer2 = 0
Portc.0 = 0
While Timer2 < Timerload_after_bit
Wend
Wend
Mid(s , Byte_count , 1) = Buf
Stop Timer2
Wend
Incr Byte_count
Mid(s , Byte_count , 1) = Chr(0)
End Sub
Sub Print_m32(byref S As String)
Open "comc.4:9600,8,n,1" For Output As #10
Disable Timer0
Print #10 , S ;
Enable Timer0
Close #10
End Sub
функции настроены для обмена 3хбайтными пакетами, при этом ни один байт не должен быть равен 0x00 (ф-я отправки, встроенная в баском, работает с нуль-терминированными строками). любой обмен должен быть двунаправленным (т.е. вначале приняли пакет, потом отослали) для проверки безошибочной передачи.
также стоит внимательно отнестись к процессу прошивания: вначале стереть оба чипа, потом залить прошивку в мк, который вначале ожидает входные данные(мега88) и только в последнюю очередь - мегу32. такие предосторожности нужны для избежания конфликта уровней на ножках мк.