В МК Atmega324Pb_328Pb есть серийный номер, т.е., каждый чип уникальный
$map 'Получаем карту распределения памяти компилятором Bascom
$regfile = "m328pbdef.dat" 'Используемый контроллер
$crystal = 8000000 '8 МГц , кварц для стабильной работы USART во всём диапазоне скоростей передачи и приёма
$framesize = 256 'Размер области используемой и необходимой для преобразований
$hwstack = 256 'Размер аппаратного стека
$swstack = 256 'Размер программного стека'USART TX RX
' 0 D.1 D.0
' 1 B.3 B.4
Config Com1 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0Config Com2 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com2:" For Binary As #1Dim Serial_number(10) As Byte
Do
Gosub Read_serial_number
Print "Atmega328Pb S/n : " ; _
Hex(serial_number(1)) ; Hex(serial_number(2)) ; _
Hex(serial_number(3)) ; Hex(serial_number(4)) ; _
Hex(serial_number(5)) ; Hex(serial_number(6)) ; _
Hex(serial_number(7)) ; Hex(serial_number(8)) ; _
Hex(serial_number(9)) ; Hex(serial_number(10))Idle
Loop
End'===============================================================================
Read_serial_number:
'-------------------------------------------------------------------------------
Loadadr Serial_number(1) , X
!ldi R30 , 14 '(&H_0E) Начальный адрес серийного номера МК
!clr R31'Для разрешения чтения серийного номера нужно установить биты, после чтения автоматом сбрасываются в "0"
'SPMCSR 7:0 SPMIE RWWSB SIGRD RWWSRE BLBSET PGWRT PGERS SPMEN
'Spmcsr.spmen = 1
'Spmcsr.sigrd = 1
!ldi R16 , &B_0010_0001
!ldi R17 , 10 'Количество читаемых байтRepeat_serial_number_reading:
!out Spmcsr , R16
!lpm R18 , Z+
!st X+ , R18
!dec R17
!brne Repeat_serial_number_reading
'-------------------------------------------------------------------------------
Return
'===============================================================================
