Есть такая прога :
Код
.include "m162def.inc"
.dseg
DataIn: .BYTE 1
.cseg
.org $000
rjmp RESET
.org $022
rjmp TC0Proc
.org $026 ;прерывание по сигналу принятых данных USART0
rjmp Uart0_Rx
; переименование регистров
.def temp1 =r16
.def temp2 =r17
.def blink =r18
.def ButPress =r19
.def CountInOut =r20
.def Count =r21
.def Tx_Now =r22
.def preByte =r23
.def CurData =r24
.def s1 =r25
RESET :
cli
ldi temp1,LOW(RAMEND) ; установка стекa
out spl,temp1
===> ldi temp1,High(RAMEND) ; установка стекa
out sph,temp1
rcall UART0_Init
ldi temp1, $FF
out DDRB, temp1 ; порт B - весь на выход
out PortB, temp1
out DDRC, temp1 ; порт C - весь на выход
ldi temp1, $F0
out PortC, temp1
ldi temp1, $00
out DDRA, temp1 ; порт A - весь на вход
ldi temp1, 0b00000010
out TIMSK, temp1 ; разрешение прерывания по переполнению Т/С0
ldi Blink, 0
ldi ButPress, 0
ldi CountInOut, 1
ldi Count, 0
ldi CurData, 0
ldi s1, 0
ldi Tx_Now, 0
ldi yl, Low(DataIn)
ldi yh, High(DataIn)
sei
nop
nop
nop
nop
main: ; ОСНОВНОЙ ЦИКЛ
rjmp main
; Инициализация UART
UART0_Init:
; Set baud rate
ldi temp1, 0
out UBRR0H, temp1
ldi temp1, 71 ; 9600 при 11,0592
out UBRR0L, temp1
ldi temp1, 0b11111000
out UCSR0B, temp1
ldi temp1, 0b10000111
out UCSR0C, temp1
ret
.dseg
DataIn: .BYTE 1
.cseg
.org $000
rjmp RESET
.org $022
rjmp TC0Proc
.org $026 ;прерывание по сигналу принятых данных USART0
rjmp Uart0_Rx
; переименование регистров
.def temp1 =r16
.def temp2 =r17
.def blink =r18
.def ButPress =r19
.def CountInOut =r20
.def Count =r21
.def Tx_Now =r22
.def preByte =r23
.def CurData =r24
.def s1 =r25
RESET :
cli
ldi temp1,LOW(RAMEND) ; установка стекa
out spl,temp1
===> ldi temp1,High(RAMEND) ; установка стекa
out sph,temp1
rcall UART0_Init
ldi temp1, $FF
out DDRB, temp1 ; порт B - весь на выход
out PortB, temp1
out DDRC, temp1 ; порт C - весь на выход
ldi temp1, $F0
out PortC, temp1
ldi temp1, $00
out DDRA, temp1 ; порт A - весь на вход
ldi temp1, 0b00000010
out TIMSK, temp1 ; разрешение прерывания по переполнению Т/С0
ldi Blink, 0
ldi ButPress, 0
ldi CountInOut, 1
ldi Count, 0
ldi CurData, 0
ldi s1, 0
ldi Tx_Now, 0
ldi yl, Low(DataIn)
ldi yh, High(DataIn)
sei
nop
nop
nop
nop
main: ; ОСНОВНОЙ ЦИКЛ
rjmp main
; Инициализация UART
UART0_Init:
; Set baud rate
ldi temp1, 0
out UBRR0H, temp1
ldi temp1, 71 ; 9600 при 11,0592
out UBRR0L, temp1
ldi temp1, 0b11111000
out UCSR0B, temp1
ldi temp1, 0b10000111
out UCSR0C, temp1
ret
Если в Studio проводить отладку, то сразу после sei программа перескакивает по АДРЕСУ строки
ldi temp1,High(RAMEND) (т.е. это не связанно со стеком). Если убрать инициализацию USART, то всё работает нормально. Соответственно в девайсе, по моему, происходит тоже самое.
Помогите кто чем может.
Спасибо