tanx писал(а):На счет "всякого хлама" не согласен(без него никак).
Да я не в том смысле. Просто к тому что проект большой. А так конечно никак.
tanx писал(а):На счет "всякого хлама" не согласен(без него никак).
Код: Выделить всё
$regfile = "attiny26.dat"
$crystal = 8000000
$lib "mcsbyte.lbx"
$hwstack = 32
$swstack = 16
$framesize = 24
'*************************
Config Lcdpin = Pin , Rs = Porta.0 , E = Porta.1,
Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7
Config Lcd = 16 * 2
Config Watchdog = 1024
Config I2cdelay = 10
Config Sda = Portb.0
Config Scl = Portb.2
Declare Sub Settime(byval S1 As Byte , Byval M1 As Byte , Byval H1 As Byte , Byval D1 As Byte , Byval Month1 As Byte )
Declare Sub Gettime()
'Declare variables
Dim Tm(5) As Byte At &H60
Dim I As Byte , Temp As Byte
'These are pointers to tm() for simple handling.
Dim S As Byte At &H60 Overlay
Dim M As Byte At &H61 Overlay
Dim H As Byte At &H62 Overlay
Dim D As Byte At &H63 Overlay
Dim Month As Byte At &H64 Overlay
' not needed since the pins are in the right state
I2cinit
Call Settime(56 , 1 , 1 , 29 , 11 ) 'set time
Do
Call Gettime
'since the values are stored in BCD format we can use Hex() to display them
Cls
Cursor Off
Lcd Hex(h) ; ":" ; Hex(m) ; ":" ; Hex(s)
Reset Watchdog
Wait 1
Loop
End
Sub Gettime()
'there are 2 ways to get the time. With low level i2c calls or with a high level call
'first the high level call
'Tm(1) = 2 ' point to second register
'I2creceive &HA0 , Tm(1) , 1 , 5 ' write the second address and get 5 bytes back
'i2creceive will first write 1 byte from tm(1) which is 2, and then will read 5 bytes and store it onto tm(1)-tm(5)
'and optional with low level calls
For I = 1 To 5
Temp = I + 1
I2cstart
I2cwbyte &HA0 'write addres of PCF8583
I2cwbyte Temp 'select register
I2cstart 'repeated start
I2cwbyte &HA1 'write address for reading info
I2crbyte Tm(i) , Nack 'read data
Next
I2cstop
End Sub
Sub Settime(s1 As Byte , M1 As Byte , H1 As Byte , D1 As Byte , Month1 As Byte)
'values are stored as BCD values so convert the values first
Tm(1) = Makebcd(s1) 'seconds
Tm(2) = Makebcd(m1) 'minutes
Tm(3) = Makebcd(h1) 'hours
Tm(4) = Makebcd(d1) 'days
Tm(5) = Makebcd(month1) 'months
I2cstart 'generate start
I2cwbyte &HA0 'write address
I2cwbyte 0 'select control register
I2cwbyte 8 'set year and day bit for masking
I2cstart 'repeated start
I2cwbyte &HA1 'write mode
I2cwbyte 2 'select seconds Register
For I = 1 To 5
I2cwbyte Tm(i)
Next 'write seconds
I2cstop
End SubМурик писал(а):Напишите тоже самое на FastAVR и сравните с размером кода баскома.
Все познается в сравнении.
Igor_67 писал(а):Мурик писал(а):Напишите тоже самое на FastAVR и сравните с размером кода баскома.
Все познается в сравнении.
Сравнил. Действительно гораздо меньше. Процентов на 20. Хороший компилятор, буду осваивать.
http://bascomavr.3bb.ru/viewtopic.php?id=494amv2000 писал(а):Подскажите пожалуйста за что отвечают эти установки, как определить сколько нужно выделить для своих нужд?
$hwstack = 32
$swstack = 16
$framesize = 24
Код: Выделить всё
CONFIG SINGLE = SCIENTIFIC , DIGITS = 2
kkozyrev писал(а):как с помощью АЦП померять сопротивление?
Igor_67 писал(а):
Код: Выделить всё
$regfile = "attiny25.dat"
$crystal = 4000000
Config Portb.2 = Input
Config Portb.1 = Output
Config Portb.0 = Output
Dim N As Word
Config Timer1 = Pwm , Pwm = On , [prescale = 1 , [compare A Pwm = Clear Down , [compare B Pwm = No Output]]]
N = 0
Ocr1a = 100 ' регистр совпадения
Do
loop
End 'end program