Вс май 20, 2018 17:21:12
$regfile = "attiny85.dat"
$crystal = 10000000
$hwstack = 64
$swstack = 48
$framesize = 48
' generated. Take care that the chip supports all fuse bytes.
' generated. Take care that the chip supports all fuse bytes.
$prog &HFF , &HE2 , &HD5 , &HFF ' generated. Take care that the chip supports all fuse bytes.
Const Debugmode = 0
Const Dvcrx = 0
Dim Sd(6) As Word
Dim S(30) As Byte
Dim Tkr(2) As Long 'íàïðÿæåíèÿ
Dim Save(11) As Byte
Dim Sk(7) As Integer
Dim Txbit As Bit
Dim Txbit1 As Bit
Dim Skk3 As Bit
Dim Txrf1 As Bit
Dim Frrvc10 As Single
Dim Mig1 As Bit
Declare Sub 1sec
Declare Sub 1msec
Declare Sub 2st 'áûñòðîå âûêëþ÷åíèå ïðè ñìåíå ñòàòóñà ïîêà ïðîòåñòèòü êàê òàêòèðîâàòü
'âûêëþ÷åíèå ïðåîáðàçîâàòåëÿ
Declare Sub Uart
Declare Sub 1st
Declare Sub Uart1ms
Declare Sub Setchda(byval Dd As Byte , Byval Dd1 As Byte) 'ëîãè÷åñêîå âêëþ÷åíèå
Declare Sub Loadk 'ëîãè÷åñêàÿ çàãðóçêà
Declare Sub Leeprom(byval Dd As Byte)
Declare Sub Uarttxrmt 'òàêòèðîâàíèå òàéìåðíîé ÷àñòè uart ñ 1ìñ
Declare Sub Uarttx
Declare Function Loaduartadr(byval Nlen As Byte) As Byte
Declare Sub Uartdata()
Declare Sub Tx(byval Dub As Byte)
'Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portb.0 , Db6 = Portb.1 , Db7 = Portb.2 , E = Portd.6 , Rs = Portd.4
#if Debugmode = 1
Declare Sub Eepromstring(byval Dfrse As String * 24)
#endif
'Config Adc = Single , Reference = Aref
Config Adc = Single , Prescaler = 32 , Reference = Internal_1.1
Start Timer0
Config Watchdog = 4096
Config Timer1 = Timer , Prescale = 64
Config Timer0 = Pwm , Prescale = 1 , Clear Timer = 1 , Compare B = Clear , Compare B Pwm = Clear Up
Start Timer1
Start Timer0
Start Adc
Config Pinb.2 = Input
Config Pinb.3 = Input
Config Portb.4 = Input
Config Portb.0 = Output
Greenled Alias Portb.0
Call Leeprom(0)
Start Watchdog
Compare0b = 0
Do
'If Timer1 >= 156 Then '1 ìñ
' Timer1 = 0
' Sd(6) = Sd(6) + 1
Sd(2) = Getadc(2)
'Sd(3) = Sd(2) + Sd(3)
' S(1) = S(1) + 1
' If S(1) > 5 Then
' Sd(2) = Sd(3) / S(1)
If Sd(2) > Save(2) Then
Frrvc10 = Sd(2) / Save(2)
Frrvc10 = Frrvc10 * Frrvc10 'для двигателя это операция не нужна, мотор не линейная нагрузка.
'
Frrvc10 = 255 / Frrvc10
Sd(4) = Frrvc10
Sd(4) = 255 - sd(4)
Sd(4) = Sd(4) / Save(3)
Frrvc10 = Frrvc10 - Sd(4)
Compare0b = Frrvc10
Greenled = 0
Else
Greenled = 1
Compare0b = 255
End If
' S(1) = 0
' Sd(3) = 0
' End If
Reset Watchdog
' End If
Loop
End
'ÿ÷åéêè EEPROM 0 êîðåðêöèÿ ÷àñòîòû 10ÌÃö, 1 çíà÷åíèå ñòàáèëèçàöèè äëÿ òåñòà, 2 êîýôôèöåíò êîððåêöèè äëÿ ëèíåéíûõ íàãðóçîê 40-60 êàê ïðàâèëî. Ïðè ïîíèæåíèè ñòàáèëèçàöèÿ ñòàíîâèòñÿ îòðèöàòåëüíîé, â îñíîâíîì êîððåêöèÿ íåëèíåéíîñòè ADC.
Sub Leeprom(byval Dd As Byte) '0 âîññòàíîâèòü, 1 çàïèñàòü
Dim Skk(4) As Byte
Skk(2) = 11
'Dim Lpr1 As Integer
Skk(1) = 1
Readeeprom S(11) , 0
Osccal = S(11)
Select Case Dd
Case 0
Readeeprom Skk(3) , 0
For Skk(3) = 1 To Skk(2) Step 1
Readeeprom Save(skk(3)) , Skk(3) 'ñîñòîÿíèå
' If Save(skk(1)) >= 255 Then Save(skk(1)) = 0 'çàùèòà îò ïóñòûé ÿ÷åéêè
' If Save(skk(1)) = 255 And Skk(4) = 255 Then Save(skk(1)) = 0
' Skk(1) = Skk(1) + 1
Next
'Uartid = "RF"
For Sk(2) = 496 To 501 Step 1
Readeeprom Skk(1) , Sk(2)
If Skk(1) > 9 Then
Skk(1) = 0
Writeeeprom Skk(1) , Sk(2)
End If
'Uartid = Uartid + Str(skk(1))
Next
' Uartid = Uartid + "|"
If Save(1) > 5 Then Save(1) = 1
Case 1
For Skk(3) = 1 To Skk(2) Step 1
Readeeprom Skk(4) , Skk(3)
If Save(skk(3)) <> Skk(4) Then
Writeeeprom Save(skk(3)) , Skk(3) 'ñîñòîÿíèå
End If
' Skk(1) = Skk(1) + 1
Next
End Select
End Sub