Код:
$regfile = "m32def.dat"
$prog &HFF , &H32 , &H0A , &H00 ' generated. Take care that the chip supports all fuse bytes.
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Timer1 = Pwm , Compare A Pwm = Clear Up , Prescale = 1
'Config Porta = Output
Config Portc = Output
Config Portd = Output
Vistrel Alias Pinc.7
Config Vistrel = Input
Sdk Alias Portc.3
Sdz Alias Portc.2
Config Sdk = Output
Config Sdz = Output
Motor1 Alias Portc.1
Motor2 Alias Portd.7
Rele1 Alias Portc.4
Rele2 Alias Portd.5
Config Motor1 = Output
Config Motor2 = Output
Config Rele1 = Output
Config Rele2 = Output
Avto Alias Pina.7
Config Avto = Input
Bah Alias Porta.6
Config Bah = Output
Dim T1 As Byte
Dim T2 As Byte
Dim T3 As Byte
Dim T4 As Byte
Dim D As Byte
Dim Bom As Byte
Dim P1 As Byte
Dim P2 As Byte
Dim P3 As Byte 'пауза между выстрелами
Dim Dl As Byte 'длина озвучки выстрела
Dim Vs As Byte 'подсчёт выстрелов
Dim Prz As Byte 'кол-во выстрелов перед до перезарядки.
Dim Sh As Byte
Dim Dc As Integer
Dim Ugol As Byte
Dim Ugol1 As Byte
Dim T5 As Byte ' используется в тайминге времени работы мотора
Dim T6 As Byte ' подсчитывает кол-во очередей, для последующего изменение угла пушки
Dim Rn As Integer
Config Adc = Single , Prescaler = 128 , Reference = Avcc
Goto Prog:
Motorstop:
Motor1 = 0
Motor2 = 0
Return
Prog:
Ugol1 = 1
P2 = 52
Bom = 2
T1 = 0
T2 = 0
T3 = 0
T4 = 0
Vs = 0
Prz = 50
$prog &HFF , &HDE , &HC9 , &H00 ' generated. Take care that the chip supports all fuse bytes.
Start Adc
Prog1:
If Bom = 0 Then 'если не в режиме стрелять
Pwm1a = 0
If Avto = 1 Then
'T3 = T3 + 1
'If T3 = 255 Then
'T3 = 0
'T4 = T4 + 1
'Waitms 500
Bom = Rnd(10) 'генерация кол-ва выстрелов в очереди
Rn = Rnd(250) 'генерация паузы между очередями
Rn = Rn * 8
Waitms Rn 'пауза между очередями
If T6 > 0 Then T6 = T6 - 1
If T6 = 0 Then 'генерация подъёма-спуска
T6 = Rnd(5) 'кол-во до подъёма-спуска
Ugol = Rnd(4) 'генерация угла подъёма спуска
' Ugol = Ugol + 1
End If
End If
If Avto = 0 Then 'ручной режим
If Vistrel = 1 Then 'ручной выстрел тремя очередями
'Waitms 200
Bom = 1
End If
Dc = Getadc(1)
If Dc < 200 Then Ugol = 0
If Ugol <> 5 Then
If Dc > 200 And Dc < 400 Then Ugol = 1
If Dc > 400 And Dc < 600 Then Ugol = 2
If Dc > 600 And Dc < 800 Then Ugol = 3
If Dc > 800 And Dc < 1024 Then Ugol = 4
End If
End If
T5 = 0
If Ugol1 <> Ugol Then
If Ugol = 0 Then 'угол0===========
Do
If Dc > 10 Then
Motor1 = 1
Motor2 = 0
End If
Dc = Getadc(0)
If Dc < 3 Then
Gosub Motorstop:
Exit Do
End If
T5 = T5 + 1
Waitms 100
If T5 = 35 Then
Ugol = 5
Gosub Motorstop:
Exit Do
End If
Loop
End If
If Ugol = 1 Then 'угол 1===========
Do
Dc = Getadc(0)
If Dc > 25 Then
Motor1 = 1
Motor2 = 0
End If
If Dc < 30 Then
Motor1 = 0
Motor2 = 1
End If
If Dc >= 25 And Dc <= 30 Then
Gosub Motorstop:
Exit Do
End If
T5 = T5 + 1
Waitms 100
If T5 = 35 Then
Ugol = 5
Exit Do
End If
Loop
End If
If Ugol = 2 Then 'угол 2===========
Do
Dc = Getadc(0)
If Dc > 55 Then
Motor1 = 1
Motor2 = 0
End If
If Dc < 60 Then
Motor1 = 0
Motor2 = 1
End If
If Dc >= 55 And Dc <= 60 Then
Gosub Motorstop:
Exit Do
End If
T5 = T5 + 1
Waitms 100
If T5 = 35 Then
Ugol = 5
Exit Do
End If
Loop
End If
If Ugol = 3 Then 'угол 3===========
Do
Dc = Getadc(0)
If Dc > 75 Then
Motor1 = 1
Motor2 = 0
End If
If Dc < 80 Then
Motor1 = 0
Motor2 = 1
End If
If Dc >= 75 And Dc <= 80 Then
Gosub Motorstop
Exit Do
End If
T5 = T5 + 1
Waitms 100
If T5 = 35 Then
Ugol = 5
Exit Do
End If
Loop
End If
If Ugol = 4 Then 'угол 4===========
Do
Dc = Getadc(0)
If Dc > 100 Then
Motor1 = 1
Motor2 = 0
End If
If Dc < 95 Then
Motor1 = 0
Motor2 = 1
End If
If Dc >= 95 And Dc <= 100 Then
Gosub Motorstop:
Exit Do
End If
T5 = T5 + 1
Waitms 100
If T5 = 35 Then
Ugol = 5
Gosub Motorstop:
Exit Do
End If
Loop
End If
Ugol1 = Ugol
Gosub Motorstop
End If
End If '======================================
If Bom > 0 Then 'заказ на N кол-во выстрелов
Read D
Pwm1a = D
T1 = T1 + 1
If T1 = 255 Then
T1 = 0
T2 = T2 + 1
End If
'====================втягивающая стартера ===========================
If T2 > 2 And T2 < 15 Then
Rele1 = 1
Rele2 = 1
Else
Rele1 = 0
Rele2 = 0
End If
'Sh = T1 / 3
If T1 < 50 Then
Bah = 1
Else
Bah = 0
End If
'====================световая индикация ===========================
Sh = T1 / 11
If T2 < Sh Then
Sdk = 1
Bah = 1
If T2 > 100 And T2 < 10 Then
Sdz = 1 '============== грохот
End If
Else
Bah = 0
Sdk = 0
Sdz = 0
End If
If T2 = 0 Then
If Bom = 1 Then
Dl = 22
Else
Dl = Rnd(5)
Dl = Dl + 15
End If
If Vs => Prz Then 'щелчек перезарядки
Dl = 53
End If
End If
If T2 = Dl Then 'продолжительность выстрела
Sdz = 0
Sdk = 0
Bom = Bom - 1
Vs = Vs + 1
If Vs > Prz Then 'щелчек перезарядки
Vs = 0
Wait 1
End If
Gosub Motorstop:
Restore 100:
T2 = 0
End If
End If
Waitus P2
Goto Prog1:
End
100:
' C:\Users\RADIOKSTOVO\YandexDisk-rprmsr\Разработка\СУ-36\Звук-1.ddd
Data &H52 , &H49 , &H46 , &H46 , &H4E , &H16 , &H0 , &H0 , &H57 , &H41 , &H56 , &H45 , &H66 , &H6D , &H74 , &H20
Data &H10 , &H0 , &H0 , &H0 , &H1 , &H0 , &H1 , &H0 , &H11 , &H2B , &H0 , &H0 , &H11 , &H2B , &H0 , &H0
Data &H1 , &H0 , &H8 , &H0 , &H64 , &H61 , &H74 , &H61 , &H2A , &H16 , &H0 , &H0 , &H80 , &H7F , &H80 , &H7F
Data &H80 , &H7F , &H7F , &H81 , &H80 , &H80 , &H80 , &H81 , &H80 , &H80 , &H7F , &H7F , &H80 , &H7F , &H80 , &H7F
Data &H80 , &H82 , &H7E , &H81 , &H80 , &H7F , &H80 , &H80 , &H80 , &H7F , &H81 , &H7F , &H80 , &H7F , &H81 , &H82
Data &H7E , &H82 , &H7A , &H82 , &H82 , &H82 , &H7C , &H83 , &H80 , &H80 , &H82 , &H80 , &H7D , &H83 , &H84 , &H83
Data &H80 , &H80 , &H7B , &H7E , &H86 , &H7C , &H7F , &H7F , &H86 , &H7D , &H80 , &H83 , &H7A , &H81 , &H79 , &H82
Data &H7E , &H7E , &H7F , &H77 , &H81 , &H7E , &H7D , &H79 , &H81 , &H7E , &H7B , &H80 , &H7E , &H82 , &H7D , &H81
Data &H7C , &H87 , &H79 , &H88 , &H7C , &H80 , &H7D , &H7E , &H7E , &H7E , &H80 , &H7D , &H83 , &H79 , &H7E , &H7B
.................... ТУТ ЗВУК ЗАПИСАН WAV 11кГц 10кб. ................ (урезал, форум не пропускал)
Data &H7D , &H7F , &H7E , &H7E , &H7F , &H7E , &H7D , &H7F , &H7E , &H7F , &H7E , &H7E , &H7D , &H7F , &H7E , &H7F
Data &H7E , &H7E , &H7E , &H7E , &H7E , &H80 , &H7D , &H7E , &H7D , &H7C , &H80 , &H7D , &H7D , &H7F , &H7E , &H7E
Data &H7E , &H80 , &H7E , &H7D , &H7F , &H7C , &H7E , &H7E , &H7F , &H7F , &H7E , &H0
' Размер - 8044