edm2007 писал(а):Gordon Shumway писал(а):PS а как ATmega8-16au (tqfp) на 1 мгц относится к питанию 3 вольта ?
Судя по даташиту - не очень хорошо относится.
Operating Voltages
– 2.7 - 5.5V (ATmega8L)
– 4.5 - 5.5V (ATmega8)
И еще, я надеюсь что это так поскипано, но на самом деле извлечение из стека в конце осталось (POP)? Для прерывания int1 то же самое бы сделать, только регистры посмотреть надо, что именно сохранять... Либо просто код скиньте...
Поскипано для сокращения квотинга, фидошная привычка... Добавил, как у вас было написано. Для int1 ничего дополнительно не делал.
Про питание - atmega8-16PU (dip28) завелась

Код: Выделить всё
$regfile = "m8def.dat"
$crystal = 1000000
$hwstack = 32
$swstack = 8
$framesize = 100
Config Portb.0 = Output 'D/C (pin 4)
D3310dc Alias Portb.0
Config Portd.7 = Output 'SCE (pin 13)
D3310ce Alias Portd.7
Config Portd.6 = Output 'Reset (pin 8 )
D3310re Alias Portd.6
Config Int0 = Falling
On Int0 Maxmin Nosave
Config Int1 = Falling
On Int1 Sbros
Config 1wire = Portb.7
Dim A As Bit
Dim B As Bit
Dim Byte0 As Byte , Byte1 As Byte 'читать датчики
Dim Byte2 As Byte , Byte3 As Byte
Dim 1sign As String * 1
Dim 1signmax As String * 1
Dim 1signmin As String * 1
Dim 2sign As String * 1
Dim 2signmax As String * 1
Dim 2signmin As String * 1
Dim 1tmax As Integer , 1tmin As Integer
Dim 2tmax As Integer , 2tmin As Integer
Dim 1temper As String * 7
Dim 1tempermax As String * 10
Dim 1tempermin As String * 10
Dim 2temper As String * 7
Dim 2tempermax As String * 10
Dim 2tempermin As String * 10
Dim D1 As Integer , D2 As Integer
'конфигурируем SPI в программном режиме. SCLK (pin 2) - PORTD.0; SDA (pin 3) - PORTD.1;
Config Spi = Soft , Din = Portb.1 , Dout = Portd.1 , Ss = None , Clock = Portd.0
'Initialise Spi
Spiinit
$include "3310init.bas"
'Initialise the display
Call D3310reset
Call D3310init
Call D3310clear
Restore Bmp1 'D3310Bmp1 is the label name for the first bmp
Call D3310bmpout
A = 0
B = 0
Do
Disable Int0
Disable Int1
Disable Interrupts
1wreset
1wwrite &HCC ' Выдаем команду чтения ПЗУ
1wwrite &H44 ' Запуск измерения
'Bitwait Portb.7 , Set ' Ждем окончания преобразования
Waitms 750
1wreset
1wwrite &HCC
1wwrite &HBE ' Команда чтения ОЗУ датчика
D1 = 1wread(2) '
Waitms 750
1wreset Pinc , 5
1wwrite &HCC , 1 , Pinc , 5 ' Выдаем команду чтения ПЗУ
1wwrite &H44 , 1 , Pinc , 5 ' Запуск измерения
Bitwait Pinc.5 , Set ' Ждем окончания преобразования
1wreset Pinc , 5
1wwrite &HCC , 1 , Pinc , 5
1wwrite &HBE , 1 , Pinc , 5 ' Команда чтения ОЗУ датчика
D2 = 1wread(2 , Pinc , 5) '
D1 = D1 * 10
D1 = D1 \ 16
1temper = Str(d1)
1temper = Format(1temper , "0.0")
D2 = D2 * 10
D2 = D2 \ 16
2temper = Str(d2)
2temper = Format(2temper , "0.0")
Enable Interrupts
Enable Int0
Enable Int1
If A = 0 Then
1tmax = D1
1tmin = D1
A = 1
End If
If D1 > 0 Then
1sign = "+"
Else
1sign = ""
End If
If D1 > 1tmax Then 1tmax = D1
If D1 < 1tmin Then 1tmin = D1
If 1tmax > 0 Then 1signmax = "+"
If 1tmax <= 0 Then 1signmax = ""
If 1tmin > 0 Then 1signmin = "+"
If 1tmin <= 0 Then 1signmin = ""
1temper = 1sign + 1temper
If D1 < 100 And D1 > -100 Then
1temper = 1temper + "_C "
Else
1temper = 1temper + "_C"
End If
1tempermax = Str(1tmax)
1tempermax = Format(1tempermax , "0.0")
1tempermax = 1signmax + 1tempermax
1tempermax = 1tempermax + "_C"
1tempermin = Str(1tmin)
1tempermin = Format(1tempermin , "0.0")
1tempermin = 1signmin + 1tempermin
1tempermin = 1tempermin + "_C"
'расчет показаний второго датчика
If B = 0 Then
2tmax = D2
2tmin = D2
B = 1
End If
If D2 > 0 Then
2sign = "+"
Else
2sign = ""
End If
If D2 > 2tmax Then 2tmax = D2
If D2 < 2tmin Then 2tmin = D2
If 2tmax > 0 Then 2signmax = "+"
If 2tmax <= 0 Then 2signmax = ""
If 2tmin > 0 Then 2signmin = "+"
If 2tmin <= 0 Then 2signmin = ""
2temper = 2sign + 2temper
If D2 < 100 And D2 > -100 Then
2temper = 2temper + "_C "
Else
2temper = 2temper + "_C"
End If
2tempermax = Str(2tmax)
2tempermax = Format(2tempermax , "0.0")
2tempermax = 2signmax + 2tempermax
2tempermax = 2tempermax + "_C"
2tempermin = Str(2tmin)
2tempermin = Format(2tempermin , "0.0")
2tempermin = 2signmin + 2tempermin
2tempermin = 2tempermin + "_C"
Call D3310position(6 , 1)
Call D3310print(1temper)
Call D3310position(6 , 4)
Call D3310print(2temper)
Wait 1
Loop
End
Maxmin:
$asm
push R31
IN R31, SREG
PUSH R31
push R30
push R29
push R28
push R27
PUSH R26
push R24
push R5
push R4
$end Asm
Call D3310clear
Restore Bmp2
Call D3310bmpout
Call D3310position(6 , 1)
Call D3310print(1tempermax)
Call D3310position(6 , 2)
Call D3310print(1tempermin)
Call D3310position(6 , 4)
Call D3310print(2tempermax )
Call D3310position(6 , 5)
Call D3310print(2tempermin)
Wait 5
Call D3310clear
Restore Bmp1
Call D3310bmpout
Gifr = 64
$asm
pop R4
pop R5
pop R24
pop R26
pop R27
pop R28
pop R29
pop R30
pop R31
Out Sreg , R31
pop R31
$end Asm
Return
Sbros:
Call D3310clear
A = 0
B = 0
Restore Bmp1
Call D3310bmpout
Wait 1
Return
$include "3310end.bas"
$include "bmp1.bas"
$include "bmp2.bas"