Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » как перекомпилировать исходник с Tiny26 на mega8


как перекомпилировать исходник с Tiny26 на mega8

Сообщений 1 страница 2 из 2

1

ПЛИЗ......ХЕЛП.......

Error : 202 Line : 383 .EQU not found, probably using functions that are not supported by the selected chip [TCNT1] , in File :

Код:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 40
$swstack = 16
$framesize = 32
'
Const #100 = &B11111111
Const #87 = &B01111111
Const #75 = &B01110111
Const #62 = &B01101101
Const #50 = &B10101010
Const #38 = &B00110010
Const #25 = &B00100010
Const #15 = &B00000011
Const #8 = &B00000001


Const Rz1 = &B00000001:
Const Rz2 = &B00000010:
Const Rz3 = &B00000100:

 Ddrd = &B01111111                                          'направление линий порта A: 1 - на вывод
Portd = &B01110000

 Ddrb = &B01111111
Portb = &B00000000


A Alias Portb.2                                             'Тут вписываем порты к которым подключены сегменты индикатора
B Alias Portb.0
C Alias Portb.4
D Alias Portb.6
E Alias Portb.5
F Alias Portb.1
G Alias Portb.3
Dp Alias Portd.6
Dig1 Alias Portd.0
Dig2 Alias Portd.1
Dig3 Alias Portd.2

Upr Alias Portd.5
Tfreq Alias Portd.4                                         '4
Buzz Alias Portd.3

Dim I As Byte , X As Byte , Digs(3) As Byte , Segmlink As Byte , Dg As Byte
Dim U As Word , Ut As Word
Dim Bright As Byte
Dim Wordtmp As Word , Dprz As Byte , Razr As Byte , Full As Byte

Dim Second As Byte , Minut As Byte , Hour As Byte , Delit As Byte , Tickcnt As Byte       ' переменные для часов

Dim Minutch As Byte , Hourch As Byte                        ' Время заряда до полного


Declare Sub Getu
Declare Sub Displu
Declare Sub Displtime(byval Hr As Byte , Byval Mn As Byte)

Config Timer0 = Timer , Prescale = 64 : On Timer0 Timer0_int Nosave
Config Timer1 = Timer , Prescale = 1024 : On Ovf1 Timer1_int Nosave

Timsk = &B0000110                                           'Enable Timer0 + Timer1

Enable Interrupts

Start Timer0
Start Timer1

Config Adc = Single , Prescaler = Auto , Reference = Avcc   'Internal       'Refrenz: 2,25 V


Bright = #100

 Digs(3) = 30 : Digs(2) = 1 : Digs(1) = 4                   '
 Dprz = 2



' 1 минуту показываем напряжение. Для подстройки например.
Bright = #25

Do

 Getu
 Waitms 500
 Call Displu

Loop Until Hour = 0 And Minut = 1


Starttesting:
 Getu
 Dprz = 0                                                   ' < 8 вольт. Либо очень разряжен, либо его нет совсем, либо 6 вольтовый
 If U < 80 Then
Begtst:
 Digs(3) = 24 : Digs(2) = 14 : Digs(1) = 23                 ' Дисплей "t E S"
 Ut = U
 Upr = 0                                                    ' Включаю заряд
 Wait 1
 Getu
 If U > 160 Then                                            ' Аккумулятор не подключен
 Upr = 1                                                    ' Выключаю заряд
 Digs(3) = 11 : Digs(2) = 10 : Digs(1) = 24                 'Дисплей "b A t"
 'ZX
 Buzz = 1
 Waitms 500
 Buzz = 0
 Waitms 500                                                 '2 BUZZ      0.5C
 Buzz = 1
 Waitms 500
 Buzz = 0
 'ZX


 Wait 10
 Goto Begtst
 End If


 For I = 1 To 30
' DpRz = 1
 Wait 1
 Dprz.1 = Not Dprz.1
' Waitms 500
 Next I

 Upr = 1                                                    ' Отключить заряд
 For I = 3 To 1 Step -1
 Dprz = I
 Wait 2
 Next I
 Dprz = 0
 Getu
 If U < Ut Then                                             ' Не заряжается
 Digs(3) = 11 : Digs(2) = 10 : Digs(1) = 13                 ' Дисплей "b A d"
 Buzz = 1                                                   'zx
 Wait 1                                                     'zx
 Buzz = 0                                                   'zx
 'ZX
 Wait 1
 Buzz = 1
 Wait 1                                                     '3 BUZZ  1C
 Buzz = 0
 Wait 1
 Buzz = 1
 Wait 1
 Buzz = 0
 'ZX





 Wait 10
 Goto Begtst
 End If
 If U > 45 And U < 80 Then
 Ut = 72
 Goto Charge
 End If
 End If
 Ut = 146
Charge:                                                     ' Цикл зарядки
 Getu
 If U > Ut Then
 If U > 160 Then Goto Begtst
 If Ut = 146 Then Ut = 130
 If Ut = 72 Then Ut = 62
 Digs(3) = 15 : Digs(2) = 25 : Digs(1) = 20                 ' Дисплей "F U L"
 Dprz = 0
 If Full = 0 Then
 Hourch = Hour : Minutch = Minut
 End If
 Full = 1
 If Hourch = Hour And Minutch = Minut Then
 Buzz = 1
 Wait 5
 Buzz = 0
 End If
 Wait 1
 Call Displtime(hourch , Minutch)
 Goto Charge
 End If

 If Ut < 130 Then
 Digs(3) = 25 : Digs(2) = 33 : Digs(1) = 6                  ' Дисплей "u = 6"
 Wait 5
 End If



 If Full = 1 Then                                           ' Был заряжен на полную
 Digs(3) = 24 : Digs(2) = 30 : Digs(1) = 36                 ' Дисплей "t r c"
 Buzz = 1
 Wait 7
 Buzz = 0
 Wait 30
 Upr = 0
 Wait 10
 Upr = 1                                                    'Выключаю заряд
 Goto Charge
 End If
 Upr = 0                                                    'Включаю заряд на примерно минуту
 Call Displtime(hour , Minut)                               ' Показываем 2 секунды часы ххh и две секунды минуты xx|
 Call Displu                                                'Напряжение на батарее
 For I = 1 To 50                                            ' Мигает точкой 50 секунд
 Dprz = 2
 Waitms 500
 Dprz = 0
 Waitms 500
 Next I
 Upr = 1                                                    'Выключаю заряд
 Wait 1                                                     ' Пауза, что бы мерить напряжение на батарее, а не выход зарядного
Goto Charge                                                 'конец основного цикла


Sub Displtime(hr , Mn )                                     '
 Dprz = 0
 Digs(2) = Hr Mod 10
 Hr = Hr \ 10
 Digs(3) = Hr Mod 10
 Digs(1) = 34
 Wait 2
 Digs(2) = Mn Mod 10
 Mn = Mn \ 10
 Digs(3) = Mn Mod 10
 Digs(1) = 35
 Wait 2
End Sub



Sub Displu
 Wordtmp = U
 Dprz = 2
 For I = 1 To 3
 Digs(i) = Wordtmp Mod 10
 Wordtmp = Wordtmp \ 10
 Next I

End Sub


Sub Getu
 Start Adc
 U = 0
 For I = 1 To 3
 Waitms 30
 U = U + Getadc(0)                                          'adc 6

 Next I
 Stop Adc
 U = U / 15
End Sub



Timer0_int:                                                 ' Обработка прерываний таймера0
$asm
 Push R31                                                   'сохраним регистры
 PUSH R26
 Push R25
 Push R24
 Push R20
 Push R16
 Push R10
 Push R0
 In R31 , Sreg
 Push R31
$end Asm
Reset Dig1 : Reset Dig2 : Reset Dig3
 Lds R31 , {Bright}                                         'Сдвимем биты в переменной по кольцу
 LSR R31
 BRCC R_NUL
 ORI R31, 128
R_nul:
 Sts {Bright} , R31
 BRCS ON_LCD
 RJMP End_IntTimer0
On_lcd:

Stop Timer0
$asm
 Lds R31 , {X}
 INC R31
 CPI R31, 4
 BRLO Save
 LDI R31,1
Save:
 Sts {X}, R31
$end Asm

Dg = Digs(x)
'(
if Dg > 128 then
 Dg = Dg - 128
 SegmLink = Lookup(Dg , Dta)
 SegmLink = SegmLink + 128
else
 SegmLink = Lookup(Dg , Dta)
end if
')
Segmlink = Lookup(dg , Dta)

A = 0
$asm
 Lds R31 , {SegmLink}
 SBRC R31, 0
$end Asm
A = 1
B = 0
$asm
 SBRC R31, 1
$end Asm
B = 1
C = 0
$asm
 SBRC R31, 2
$end Asm
C = 1
D = 0
$asm
 SBRC R31, 3
$end Asm
D = 1
E = 0
$asm
 SBRC R31, 4
$end Asm
E = 1
F = 0
$asm
 SBRC R31, 5
$end Asm
F = 1
G = 0
$asm
 SBRC R31, 6
$end Asm
G = 1
Dp = 0
$asm
 SBRC R31, 7
$end Asm
Dp = 1

If Dprz = X Then Dp = 0


Select Case X
 Case 1 : Set Dig3
 Case 2 : Set Dig2
 Case 3 : Set Dig1
End Select


Start Timer0
End_inttimer0:
$asm
 Pop R31
 Out Sreg , R31
 POP R0
 POP R10
 POP R16
 POP R20
 POP R24
 POP R25
 POP R26
 Pop R31

 ' reti
$end Asm

Return




Timer1_int:
$asm
 Push R31                                                   'сохраним регистры
 Ldi R31 , &HB2                                             'переустановим счетчик
 Out Tcnt1 , R31
 In R31 , Sreg
 Push R31

 Lds R31 , {Delit}
 inc R31                                                    'Incr Delit
 Sts {Delit} , R31
 CPI R31, 100                                               'If Delit < 100 Then Goto INTT0_E
 brlo EndTimer1_Int
 CLR R31                                                    'Delit = 0
 Sts {Delit} , R31
'----- Ниже все вызывается 1 раз в секунду
 ' WDR
 Lds R31 , {Second}
 inc R31
 Sts {Second} , R31
 CPI R31, 60
 brlo EndTimer1_Int
 clr R31
 Sts {Second} , R31
'---- Ниже все вызывается 1 раз в минуту
 Lds R31 , {Minut}
 inc R31
 Sts {Minut} , R31
 CPI R31, 60
 brlo EndTimer1_Int
 clr R31
 Sts {Minut} , R31

'---- Ниже все вызывается 1 раз в час
 Lds R31 , {Hour}
 inc R31
 Sts {Hour} , R31
 CPI R31, 99
 brlo EndTimer1_Int
 clr R31
 Sts {Hour} , R31
 STS {Full} , R31                                           ' После 99 часов считаем, что нужен полный цикл заряда


Endtimer1_int:

 Pop R31
 Out Sreg , R31                                             'восстановим регистры
 Pop R31
 ' reti
$end Asm
Return


Dta:
       ' 0             1            2            3             4            5           6           7              8           9
Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001 , &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000
      ' A(10)        b(11)        C(12)       d(13)          E(14)       F(15)         G(16)        H(17)       i(18)       J(19)
Data &B10001000 , &B10000011 , &B11000110 , &B10100001 , &B10000110 , &B10001110 , &B10000010 , &B10001001 , &B11001111 , &B11100001
      ' L(20)        o(21)         P(22)        S(23)       t(24)         U(25)      Grad(26)       -(27)      .(28)          Empty(29)
Data &B11000111 , &B10100011 , &B10001100 , &B10010010 , &B10000111 , &B11000001 , &B10011100 , &B10111111 , &B01111111 , &B11111111
     ' r(30)         _(31)          u(32)       =(33)       h (34)       Минуты|(35)   c (36)
Data &B10101111 , &B11110111 , &B11100011 , &B10110111 , &B10001011 , &B11011111 , &B10100111

Было тинька 26 хочу переделать на мегу 8 . опыт 0, сложа руки не сидел шапку переписал (возможно с ошибками) , порты переназначил , на большее мозгов не хватило. Помогите кто чем.



-------------------------------------------------------------------------------------------------------------------------------------------------------------------

оригинал.....

Код:
$regfile = "attiny26.dat"
$hwstack = 32
$swstack = 32
$framesize = 16
$crystal = 8000000



 DdrA = &B01111111                                          'направление линий порта A: 1 - на вывод
PortA = &B01110000

 DdrB = &B01111111
PortB = &B00000000


A Alias PortB.2                                             'Тут вписываем порты к которым подключены сегменты индикатора
B Alias PortB.0
C Alias PortB.4
D Alias PortB.6
E Alias PortB.5
F Alias PortB.1
G Alias PortB.3
Dp Alias PortA.6
Dig1 Alias PortA.0
Dig2 Alias PortA.1
Dig3 Alias PortA.2

UPR Alias PORTA.5
tFREQ Alias PORTA.4
BUZZ Alias PORTA.3

Dim I As Byte , X As Byte , Digs(3) As Byte , SegmLink As Byte , Dg as Byte
Dim U as Word , Ut as Word , Vis as Byte
Dim WordTmp As Word , Razr As Byte , Full As Byte

Dim Second As Byte , Minut As Byte , Hour As Byte , Delit as Byte , TickCnt As Byte       ' переменные для часов

Dim MinutCh As Byte , HourCh As Byte                        ' Время заряда до полного


Declare Sub GetU
Declare Sub DisplU
Declare Sub DisplTime(Byval Hr as Byte , Byval Mn as Byte)

Config Timer0 = Timer , Prescale = 64 : On Timer0 Timer0_int Nosave
Config Timer1 = Timer , Prescale = 1024 : On OVF1 Timer1_int Nosave

TIMSK = &B0000110                                           'Enable Timer0 + Timer1

Enable Interrupts

Start TIMER0
Start TIMER1

Config Adc = Single , Prescaler = Auto , Reference = Internal       'Refrenz: 2,25 V


 Digs(3) = 10 : Digs(2) = 1 : Digs(1) = 6                   ' Версия A1.6
 Razr = 2
 wait 5

' 1 минуту показываем напряжение. Для подстройки например.


Do
 GetU
 Waitms 500
 Call DisplU

Loop Until Hour = 0 and Minut = 1




StartTesting:
 GetU
 Razr = 0                                                   ' < 8 вольт. Либо очень разряжен, либо  его нет совсем, либо 6 вольтовый
 If U < 80 then
BegTst:
  Digs(3) = 24 : Digs(2) = 14 : Digs(1) = 23                ' Дисплей "t E S"
  Ut = U
  UPR = 0                                                   ' Включаю заряд
  Wait 1
  GetU
  if U > 160 then                                           ' Аккумулятор не подключен
   UPR = 1                                                  ' Выключаю заряд
   Digs(3) = 11 : Digs(2) = 10 : Digs(1) = 24               'Дисплей  "b A t"
   Wait 10
   Goto BegTst
  end if
  For i = 1 to 30
   Razr = 1
   Waitms 500
   Razr = 0
   Waitms 500
  next i
  UPR = 1                                                   ' Отключить заряд
  For i = 1 to 3
   Razr = 4 - i
   Wait 2
  Next i
  Razr = 0
  GetU
  If U < Ut then                                            ' Не заряжается
   Digs(3) = 11 : Digs(2) = 10 : Digs(1) = 13               ' Дисплей "b A d"
'   BUZZ = 1
'   Wait 1
'   BUZZ = 0
   Wait 10
   Goto BegTst
  end if
  If U > 45 and U < 80 then
   Ut = 72
   Goto Charge
  end if
 end if
 Ut = 146
Charge:                                                     ' Цикл зарядки
 GetU
 If U > Ut then
  if U > 160 then Goto BegTst
  if Ut = 146 then Ut = 130
  if Ut = 72 then Ut = 62
  Digs(3) = 15 : Digs(2) = 25 : Digs(1) = 20                ' Дисплей "F U L"
  Razr = 0
  If Full = 0 then
   HourCh = Hour : MinutCh = Minut
  end if
  Full = 1
  if HourCh = Hour AND MinutCh = Minut then
   Buzz = 1
   Waitms 300
   Buzz = 0
  end if
  Wait 1
  Call DisplTime(HourCh , MinutCh)
  Goto Charge
 end if

 If Ut < 130 then
  Digs(3) = 25 : Digs(2) = 33 : Digs(1) = 6                 ' Дисплей "u = 6"
  wait 5
 end if



 If Full = 1 Then                                           ' Был заряжен на полную
  Digs(3) = 24 : Digs(2) = 30 : Digs(1) = 36                ' Дисплей "t r c"
  Wait 30
  UPR = 0
  Wait 10
  UPR = 1                                                   'Выключаю заряд
  Goto Charge
 end if
 UPR = 0                                                    'Включаю заряд на примерно минуту
 Call DisplTime(Hour , Minut)                               ' Показываем 2 секунды часы ххh и две секунды минуты xx|
 Call DisplU                                                'Напряжение на батарее
 For i = 1 to 50                                            ' Мигает точкой 50 секунд
  Razr = 2
  Waitms 500
  Razr = 0
  Waitms 500
 Next i
 UPR = 1                                                    'Выключаю заряд
 Waitms 100                                                 ' Пауза, что бы мерить напряжение на батарее, а не выход зарядного
Goto Charge                                                 'конец основного цикла


Sub DisplTime(Hr , Mn )                                     '
  Razr = 0
  Digs(2) = Hr Mod 10
  Hr = Hr \ 10
  Digs(3) = Hr Mod 10
  Digs(1) = 34
  wait 2
  Digs(2) = Mn Mod 10
  Mn = Mn \ 10
  Digs(3) = Mn Mod 10
  Digs(1) = 35
  wait 2
end sub



Sub DisplU
 WordTmp = U
 Razr = 2
 for i = 1 to 3
  Digs(i) = WordTmp Mod 10
  WordTmp = WordTmp \ 10
 next i

end sub


Sub GetU
   Start Adc
   U = 0
   For i = 1 to 3
   Waitms 30
   U = U + Getadc(6)
   Next i
   Stop Adc
   U = U / 15
End Sub



Timer0_int:                                                 ' Обработка прерываний таймера0
$asm
    Push R31                                                'сохраним регистры
    PUSH R26
    Push R25
    Push R24
    Push R20
    Push R16
    Push R10
    Push R0
    In R31 , Sreg
    Push R31
$End asm
set Dig1 : Set Dig2 : Set Dig3
Stop Timer0
$asm
 Lds      R31 , {X}
 INC      R31
 CPI      R31, 4
 BRLO     Save
 LDI      R31,1
Save:
 Sts {X}, R31
$End asm

Dg = Digs(X)

if Dg > 128 then
 Dg = Dg - 128
 SegmLink = Lookup(Dg , Dta)
 SegmLink = SegmLink + 128
else
 SegmLink = Lookup(Dg , Dta)
end if

A = 0
$asm
 Lds      R31 , {SegmLink}
 SBRC     R31, 0
$End asm
A = 1
B = 0
$asm
 SBRC     R31, 1
$End asm
B = 1
C = 0
$asm
 SBRC     R31, 2
$End asm
C = 1
D = 0
$asm
 SBRC     R31, 3
$End asm
D = 1
E = 0
$asm
 SBRC     R31, 4
$End asm
E = 1
F = 0
$asm
 SBRC     R31, 5
$End asm
F = 1
G = 0
$asm
 SBRC     R31, 6
$End asm
G = 1
Dp = 0
$asm
 SBRC     R31, 7
$End asm
Dp = 1

if X = Razr then Dp = 1


Select Case X
 Case 1 : Reset Dig3
 Case 2 : Reset Dig2
 Case 3 : Reset Dig1
End Select
Start Timer0
End_IntTimer0:
$asm
    Pop R31
    OUT Sreg , R31
    POP R0
    POP R10
    POP R16
    POP R20
    POP R24
    POP R25
    POP R26
    Pop R31

 '   reti
$end asm

Return




Timer1_int:
$asm
    Push R31                                                'сохраним регистры
    Ldi R31 , &HB2                                          'переустановим счетчик
    Out Tcnt1 , R31
    In R31 , Sreg
    Push R31
    Push R24
    Push R25

    Lds R31 , {Delit}
    inc R31                                                 'Incr Delit
    Sts {Delit} , R31
    CPI R31, 100                                            'If Delit < 100 Then Goto INTT1_E
    brlo  Intt1_e
    CLR R31                                                 'Delit = 0
    Sts {Delit} , R31
'----- Ниже все вызывается 1 раз в секунду
 '   WDR
    Lds R31 , {Second}
    inc R31
    Sts {Second} , R31
    CPI R31, 60
    brlo  INTT1_E
    clr R31
    Sts {Second} , R31
'---- Ниже все вызывается 1 раз в минуту
    Lds R31 , {Minut}
    inc R31
    Sts {Minut} , R31
    CPI R31, 60
    brlo  INTT1_E
    clr R31
    Sts {Minut} , R31

'---- Ниже все вызывается 1 раз в  час
    Lds R31 , {Hour}
    inc R31
    Sts {Hour} , R31
    CPI R31, 99
    brlo  INTT1_E
    clr R31
    Sts {Hour} , R31
    STS {Full} , R31                                        ' После 99 часов считаем, что нужен полный цикл заряда


Intt1_e:
    POP R25
    POP R24
    Pop R31
    Out Sreg , R31                                          'восстановим регистры
    Pop R31
 '   reti
$end asm
Return


Dta:
'          0           1               2           3            4            5           6           7            8          9
Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110 , &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111
'       A(10)        b(11)         C(12)       d(13)        E(14)       F(15)         G(16)        H(17)        i(18)        J(19)
Data &B01110111 , &B01111100 , &B00111001 , &B01011110 , &B01111001 , &B01110001 , &B01111101 , &B01110110 , &B00110000 , &B00011110
'       L(20)        o(21)         P(22)       S(23)        t(24)        U(25)       Grad(26)      -(27)        .(28)       Empty(29)
Data &B00111000 , &B01011100 , &B01110011 , &B01101101 , &B01111000 , &B00111110 , &B01100011 , &B01000000 , &B10000000 , &B00000000
'       r(30)        _(31)         u(32)       =(33)        h (34)     Минуты|(35)     c (36)
Data &B01010000 , &B00001000 , &B00011100 , &B01001000 , &B01110100 , &B00100000 , &B01011000

0

2

как это сделать,  покажите в исходнике.

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » как перекомпилировать исходник с Tiny26 на mega8