Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Даю исходник (он в теле мессаджа) для ATmega128 с тактовой 4 МГц..Просимулируйте его в AVR Studio записывая логи порта B.. Если кто-то сможет мне объяснить какого Х... , к примеру, изменилось состояние на 1370-м, 1373-м цикле??? Ведь в это время не выполнялось никаких команд вывода в порт и ШИМ выключен.

Отправлено Дктор Т_у_амОс__ес 11 июля 2007 г. 12:22


;
; Программа для микроконтроллера ATmega128-16AI
; F(CPU) = 4МГц

.include "m128def.inc"
.listmac
; {
.def CRP = R22
.equ XZ1 = $F7
.def XZ2 = R23
.def temp = R16

; {
.def R_XZ1 = R19
.def R_XZ2 = R14
.equ F_XZ3 = 7
.def R_XZ4 = R17
;
.def R_XZ6 = R18
.def R_XZ5 = R18


;
.def R20_SCR_LH11 = R20
.equ F_XZ6 = 7
;
.equ F_XZ7 = 4
;
.equ F_XZ8 = 0
;
; }
; }

; {
.equ Top_of_PC_Stack = RAMEND ;
.equ Bottom_PC_Stack = Top_of_PC_Stack - 64

.equ Top_of_DataStack = Bottom_PC_Stack - 1
.equ C2_Size_DataStack_Max = 256
.equ Bottom_of_DataStack = Top_of_PC_Stack - C2_Size_DataStack_Max +1

.equ XZ47 = Bottom_of_DataStack - 13

; {
.equ XZ5 = Bottom_of_DataStack - 14
.equ XZ52 = Bottom_of_DataStack - 15
.equ XZ53 = Bottom_of_DataStack - 16
.equ XZ54 = Bottom_of_DataStack - 17
.equ XZ101 = Bottom_of_DataStack - 20
; }

; {
.equ XZ6 = Bottom_of_DataStack - 21
.equ XZ7 = Bottom_of_DataStack - 22
.equ XZ49 = Bottom_of_DataStack - 24
.equ XZ50 = Bottom_of_DataStack - 26 ;
.equ XZ48 = Bottom_of_DataStack - 170
.equ XZ51 = Bottom_of_DataStack - 320
; }

; }

; {
; {
.equ out_Sig_LH11 = 5
.equ in_Sig_LH11 = 4
; }
; }

; {

; {
.equ XZ55 = 20
.equ XZ56 = 40
.equ XZ57 = 80
.equ XZ58 = 5
.equ XZ59 = 8
.equ XZ60 = 2
.equ XZ61 = 1
.equ XZ62 = 2
.equ XZ63 = 3
.equ XZ64 = 4


.equ XZ19 = 40
.equ XZ18 = 10
.equ XZ11 = 5
.equ XZ12 = 1
.equ XZ13 = 3
.equ XZ14 = 2
.equ XZ15 = 20
.equ XZ16 = 5
.equ XZ17 = 9

.macro L_309
; {
cbi PortB , out_Sig_LH11
.endmacro
; }

.macro L_304
; {
sbi PortB , out_Sig_LH11
.endmacro
; }

.macro scip_Com_if_in_sigLH11_eq_0
; {
sbis PinB , in_Sig_LH11
.endmacro
; }

.macro scip_Com_if_in_sigLH11_eq_1
; {
sbic PinB , in_Sig_LH11
.endmacro
; }

.macro scip_Com_if_out_sigLH11_eq_0
; {
sbic PortC , B_PC0_out_Sig_LH11
.endmacro
; }

.macro scip_Com_if_out_sigLH11_eq_1
; {
sbis PortC , B_PC0_out_Sig_LH11
.endmacro
; }

.macro Mac_Delay_of_oneClock_LH11
; {
nop
nop
nop
.endmacro
; }

; }

.macro push_Register
; {
st -Y , @0
.endmacro
; }

.macro pop_Register
; {
ld @0 , Y+
.endmacro
; }

.macro Mac_XZ65
; {
;
pop temp
sts ( @0 + 0 ) , temp
pop temp
sts ( @0 + 1 ) , temp
.endmacro
; }

.macro Mac_XZ66
; {
lds temp , ( @0 + 1 )
push temp
lds temp, ( @0 + 0 )
push temp
ret
.endmacro
; }

.macro Mac_XZ67
; {
lds temp , ( XZ101 + 0 )
inc temp
sts ( XZ101 + 0 ) , temp
brne L_XZ71
;
lds temp , ( XZ101 + 1 )
inc temp
sts ( XZ101 + 1 ) , temp
brne L_XZ71
;
lds temp , ( XZ101 + 2 )
inc temp
sts ( XZ101 + 2 ) , temp
;
L_XZ71 :
nop
.endmacro
; }

.macro Mac_XZ73
; {
;
push temp
in temp , SREG
;
cli
;
push temp ;
;
wdr

; {
ldi temp , high ( 0 )
out TCNT1H , temp
ldi temp , low ( 1 )
out TCNT1L , temp
; }
;
pop temp
out SREG , temp
pop temp

.endmacro ;
; }

.macro Mac_XZ78
; {
;
push temp
in temp , SREG
cli
push temp
;

; {
in temp , TIMSK
cbr temp , ( 1 << TOIE0 )
cbr temp , ( 1 << OCIE2 )
out TIMSK , temp
; }

; {
ldi temp , high ( 65535 - @0 )
out TCNT1H , temp
ldi temp , low ( 65535 - @0 )
out TCNT1L , temp
; }
;
pop temp
out SREG , temp
pop temp

.endmacro ;
; }

.macro Mac_XZ79
; {
;
push temp
in temp , SREG
cli
push temp
;
; {
ldi temp , high ( 65535 - @0 )
out TCNT1H , temp
ldi temp , low ( 65535 - @0 )
out TCNT1L , temp
; }
;
pop temp
out SREG , temp
pop temp

.endmacro ;
; }

; }


;
;
;
;
;
;
;


.cseg
.org $0000
L_hardware_Reset_in_RWW : ;
jmp L_ISR_hardware_Reset_in_RWW

; {
jmp L_ext_Int0
jmp L_ext_Int1
jmp L_ext_Int2
jmp L_ext_Int3
jmp L_ext_Int4
jmp L_ext_Int5
jmp L_ext_Int6
jmp L_ext_Int7
jmp L_Timer2_Comp
jmp L_Timer2_OVF ;
jmp L_Timer1_CAPT ;
jmp L_Timer1_CompA ;
jmp L_Timer1_CompB ;
jmp L_Timer1_ovf ;
jmp L_Timer0_Comp ;
jmp L_Timer0_ovf ;
jmp L_SPI_STC ;
jmp L_USART0_RX ;
jmp L_USART0_UDRE ;
jmp L_USART0_TX ;
jmp L_ADC ;
jmp L_EEPROM_ready ;
jmp L_ANALOG_Comp ;
jmp L_Timer1_CompC ;
jmp L_Timer3_Capt ;
jmp L_Timer3_CompA ;
jmp L_Timer3_CompB ;
jmp L_Timer3_CompC ;
jmp L_Timer3_ovf ;
jmp L_USART1_RX ;
jmp L_USART1_UDRE ;
jmp L_USART1_TX ;
jmp L_TWI ;
jmp L_SPM_ready ;

; }

; {
L_ISR_hardware_Reset_in_RWW :

L_81 :
; {
cli
ldi temp , low ( Top_of_PC_Stack )
out SPL , temp
ldi temp , high ( Top_of_PC_Stack )
out SPH , temp
; }

; {
ldi YH , high ( Top_of_DataStack )
ldi YL , low ( Top_of_DataStack )
; }

; {
; {
ldi R16 , 0b11101111 ;
out ddRB , R16
ldi R16 , 0b11111111 ;
out PortB , R16
; }
; }
; }


L_80 :

; {
ldi temp , $00
sts ( XZ47 + 0 ) , temp
sts ( XZ47 + 1 ) , temp
sts ( XZ47 + 2 ) , temp
; }

; {
ldi temp , $00
sts ( XZ101 + 0 ) , temp
sts ( XZ101 + 1 ) , temp
sts ( XZ101 + 2 ) , temp

ldi temp , $FF
mov R7 , temp
; }

ldi temp , 255
sts XZ5 , temp
sts XZ53 , temp

ldi temp , 0
sts XZ52 , temp
sts XZ54 , temp


call XZ4


; {
ldi temp , ( 1 << WGM21 ) + ( 0 << WGM20 ) + 0b00000001
out TCCR2 , temp ;

ldi temp , 159 ;
out OCR2 , temp

in temp , TIMSK
sbr temp , ( 1 << OCIE2 )
out TIMSK , temp ;

; }

; {
ldi temp , $00
sts TCCR1C , temp

ldi temp , 0b00000010 ;
out TCCR1B , temp

ldi temp , $00
out TCCR1A , temp ;

ldi temp , $00 ;
out TCNT1H , temp ;
ldi temp , $02 ;
out TCNT1L , temp ;

in temp , TIMSK
sbr temp , ( 1 << TOIE1 )
out TIMSK , temp ;

; }

ldi temp, 0b01010101
sts (XZ51 + 0) , temp

;
;
call S_82

sei

;
;
;
;
;

L_Begin_of_global_Loop :
; {
Mac_XZ79 ( 8000 ) ;

;
nop

nop
nop
;



; {
; {
lds temp , ( XZ47 + 0 )
inc temp
sts ( XZ47 + 0 ) , temp
brne L_Count_glob_Loops_handled
;
lds temp , ( XZ47 + 1 )
inc temp
sts ( XZ47 + 1 ) , temp
brne L_Count_glob_Loops_handled
;
lds temp , ( XZ47 + 2 )
inc temp
sts ( XZ47 + 2 ) , temp
;
L_Count_glob_Loops_handled :
; }
; }

rjmp L_Begin_of_global_Loop
;
L_200 :
wdr
cli
jmp L_200
; }

; {
; {
L_ext_Int0 : ;
Pizdetct_0801 :
ldi R16, $01
rjmp Pizdetct2
;
L_ext_Int1 : ;
Pizdetct_0802 :
ldi R16, $02
rjmp Pizdetct2
;
L_ext_Int2 : ;
Pizdetct_0803 :
ldi R16, $03
rjmp Pizdetct2
;
L_ext_Int3 : ;
Pizdetct_0804 :
ldi R16, $04
rjmp Pizdetct2
;
L_ext_Int4 : ;
Pizdetct_0805 :
ldi R16, $05
rjmp Pizdetct2
;
L_ext_Int5 : ;
Pizdetct_0806 :
ldi R16, $06
rjmp Pizdetct2
;
L_ext_Int6 : ;
Pizdetct_0807 :
ldi R16, $07
rjmp Pizdetct2
;
L_ext_Int7 : ;
Pizdetct_0808 :
ldi R16, $08
rjmp Pizdetct2
;
Pizdetct2 :
ldi R17,$08
call found_Pizdetct ;
; }
;


L_Timer2_Comp :
; {
; {
push_Register temp
in temp, SREG
push_Register temp
push_Register XH
push_Register XL

Mac_XZ66 ( XZ50 )
;
; }

XZ9 : ;
; {

;
sts ( XZ49 + 0 ) , XL
sts ( XZ49 + 1 ) , XH
;
pop_Register XL
pop_Register XH

S_172 : ;
Mac_XZ65 ( XZ50 )

pop_Register temp
out SREG , temp
pop_Register temp
;
reti
;
; }

L_171 :
; {
push_Register temp
in temp , SREG
push_Register temp
cli
;
cbr R20_SCR_LH11 , F_XZ7 ;
cbr R20_SCR_LH11 , F_XZ6 ;
;
call S_172
;
; }

L_173 : ;
; {

L_174 :
; {
sbrs R20_SCR_LH11 , F_XZ7
rjmp L_175
;
;
call XZ9
;
rjmp L_174
; }

L_175 :
; {
scip_Com_if_in_sigLH11_eq_0
rjmp L_176
;
;
call XZ9
;
rjmp L_175

; }

L_176 : ;
; {
scip_Com_if_in_sigLH11_eq_1
rjmp L_177
;
;
call XZ9
;
rjmp L_176
; }

L_177 : ;
;
ldi R_XZ5 , 1
call XZ9
;

L_178 :
; {
; {
scip_Com_if_in_sigLH11_eq_0
rjmp L_179
; }

; {
inc R_XZ5

; {
cpi R_XZ5, ( XZ59 + 1 )
brsh Pizdetct_1315
; }

; {
call XZ9
;
rjmp L_178
; }

; {
Pizdetct_1315 :
ldi R17 , $13 ;
ldi R16 , $15
call found_Pizdetct ;
; }
; }
; }

L_179 :
; {
; {
cpi R_XZ5, XZ58
brsh L_180
; }

; {
call XZ9
;
rjmp L_175 ;
; }
; }

L_180 :
; {
;
lds XH , high ( XZ48 )
lds XL , low ( XZ48 )

;
ldi R_XZ1 , 0

;
ldi R_XZ5 , 1

;
ldi temp , 0
mov R_XZ2 , temp

;
ldi R_XZ4 , 8
; }

call XZ9
;

L_181 :
; {
; {
scip_Com_if_in_sigLH11_eq_1
rjmp L_182
; }

inc R_XZ5

; {
cpi R_XZ5 , XZ60 + 1
brlo L_183
;
call XZ9
;
rjmp L_175
; }

L_183 :
call XZ9
;
rjmp L_181
; }

L_182 :
ldi R_XZ5, 1 ;

L_184 :
; {
; {
scip_Com_if_in_sigLH11_eq_0
rjmp L_185
; }

inc R_XZ5

; {
cpi R_XZ5 , XZ64 + 1
brlo L_186
;
call XZ9
;
rjmp L_178
; }

L_186 :
call XZ9
;
rjmp L_184
; }

L_185 :
; {
cpi R_XZ5 , XZ63
brsh L_187
;
L_LH11_Puls_not_eq_1 :
cpi R_XZ5 , XZ61
brsh L_201
;
; }

L_LH11_received_Noise :
; {
;
call XZ9
;
rjmp L_176
; }
;

L_201 :
; {
clc
rjmp L_202
; }
;

L_187 :
; {
sec
; }

L_202 :
;
rol R_XZ2
dec R_XZ4

;
cpi R_XZ4 , 0
breq L_203
;

L_204 : ;
L_205 :
ldi R_XZ6, 1 ;
call XZ9
;
rjmp L_181
;



L_203 :
;
st X+ , R_XZ2

;
ldi R_XZ4 , 8

inc R_XZ1

cpi R_XZ1 , XZ55
breq L_206
;

L_LH11_recByte_not_last :
rjmp L_205
;

L_206 :
sbr R20_SCR_LH11 , ( 1 << F_XZ7 )
call XZ9
;
rjmp L_174 ;
; }

S_82 : ;
; {
push_Register temp
in temp , SREG
push_Register temp
cli
;
cbr R20_SCR_LH11 , F_XZ8 ;
sbr R20_SCR_LH11 , F_XZ6 ;
;
call S_172 ;
;
; }

L_207 : ;
; {
ldi XH , high ( XZ51 )
ldi XL , low ( XZ51 )

ldi R_XZ1 , 0

ld R_XZ2 , X+

ldi R_XZ4 , 8

L_208 :
; {
scip_Com_if_in_sigLH11_eq_0
rjmp L_209
;
call XZ9
;
rjmp L_208
; }

L_209 :
ldi R_XZ5 , 1 ;
call XZ9
;

L_210 :
; {
scip_Com_if_in_sigLH11_eq_1
rjmp L_208 ;
;
inc R_XZ5
cpi R_XZ5 , ( XZ60 + 2 )
breq L_211
;
call XZ9
;
rjmp L_210 ;
; }

L_211 :
L_212 :
; {
L_309
ldi R_XZ6 , 0
call XZ9
;
L_213 :
;
rjmp L_214

; {
Pizdetct_A978 :
ldi R17 , $A9 ;
ldi R16 , $78 ;
call found_Pizdetct
; }

L_214:
inc R_XZ6
cpi R_XZ6 , XZ11
breq L_215
;
call XZ9
;
rjmp L_213
;
; }

L_216 :
L_215 :
L_217 : ;
L_304
ldi R_XZ6 , 0
call XZ9
;

L_219 : ;
; {
scip_Com_if_in_sigLH11_eq_0
rjmp L_220

; {
rjmp XZ8 ;
; }

L_220:
inc R_XZ6
cpi R_XZ6 , XZ14
breq L_221
;
call XZ9
;
rjmp L_219
;
; }

L_221 : ;
L_309
ldi R_XZ6 , 0
call XZ9
;

;
sbrc R_XZ2 , F_XZ3
rjmp L_222
;
L_308 : ;
; {
;
rjmp L_307
;
Pizdetct_A979 :
ldi R17 , $A9 ;
ldi R16 , $79 ;
call found_Pizdetct
;
L_307 :
inc R_XZ6
cpi R_XZ6 , XZ12
breq L_305
;
call XZ9
;
rjmp L_308
; }

L_222 : ;
; {
;
rjmp L_306
;
Pizdetct_A980 :
ldi R17 , $A9 ;
ldi R16 , $80 ;
call found_Pizdetct
;
L_306 :
inc R_XZ6
cpi R_XZ6 , XZ13
breq L_305
;
call XZ9
;
rjmp L_222
; }

L_305 :
L_304
ldi R_XZ6 , 0

dec R_XZ4

L_303 : ;
cpi R_XZ4 , 0
breq L_302
;
rol R_XZ2
rjmp L_216 ;
;
L_302 : ;
inc R_XZ1
cpi R_XZ1 , XZ55
breq L_301 ;
;
ld R_XZ2 , X+
ldi R_XZ4 , 8
rjmp L_216
;

XZ8 :
ldi temp , $01 ;
sts XZ7 , temp
;
sbr R20_SCR_LH11 , F_XZ8 ;
rjmp L_300
;
L_301 :
ldi temp , $00 ;
sts XZ7 , temp
;
sbr R20_SCR_LH11 , F_XZ8 ;
rjmp L_300
;
L_300 :
nop
call XZ9
;
rjmp L_300

; }


; }


;
; {
L_Timer2_OVF : ;
Pizdetct_0809 :
ldi R16, $09
rjmp Pizdetct2
;
L_Timer1_CAPT : ;
Pizdetct_080A :
ldi R16, $0A
rjmp Pizdetct2
;
L_Timer1_CompA : ;
Pizdetct_080B :
ldi R16, $0B
rjmp Pizdetct2
;
L_Timer1_CompB : ;
Pizdetct_080C :
ldi R16, $0C
rjmp Pizdetct2
;
; }
;

L_Timer1_ovf : ;
; {
push temp
in temp, SREG
push temp
;
Pizdetct_0908 :
ldi R17 , $09 ;
ldi R16 , $08
call found_Pizdetct ;
;
pop temp
out SREG , temp
pop temp
;
reti ;
;
; }


;
; {
L_Timer0_Comp : ;
;
ldi R16, $09
rjmp Pizdetct2
;
; }
;

L_Timer0_ovf : ;
; {
push temp
in temp, SREG
push temp
;
inc R4
;
pop temp
out SREG , temp
pop temp
;
reti ;
; }


;
; {
L_SPI_STC : ;
L_USART0_RX : ;
L_USART0_UDRE : ;
L_USART0_TX : ;
L_ADC : ;
L_EEPROM_ready : ;
L_ANALOG_Comp : ;
L_Timer1_CompC : ;
L_Timer3_Capt : ;
L_Timer3_CompA : ;
L_Timer3_CompB : ;
L_Timer3_CompC : ;
L_Timer3_ovf : ;
L_USART1_RX : ;
L_USART1_UDRE : ;
L_USART1_TX : ;
L_TWI : ;
L_SPM_ready : ;
;
ldi R16, $09
rjmp Pizdetct2
;
; }
;


; }

; {
found_Pizdetct :
S_Stop_Prog_by_Debugger :
; {
XZ3:
wdr
cli
rjmp XZ3
; }
; }

; {
XZ4 :
; {
ldi XZ2, $00
ret ;
; }

S_DBG_inc_Trap_Counter :
; {
inc XZ2
ret ;
; }

S_DBG_uncond_Stop_Programm :
; {
ldi CRP, XZ1
ldi R17, $00
ldi R16, $00
call S_Stop_Prog_by_Debugger
; }


; }

; {


S_Stop_Program_on_r16_mS :
; {
;
push R16
push R17
push R18
in R17 , SREG
push R17
;
L_prog_Delay_on_1mS_Loop :
ldi R18, 36
;
L_r18_Loop :
ldi R17, 36
;
L_r17_Loop :
dec R17
brne L_r17_Loop
;
dec R18
brne L_r18_Loop
;
dec r16
brne L_prog_Delay_on_1mS_Loop
;
pop R17
out SREG , R17
pop R18
pop R17
pop R16
ret ;
; }

; }




Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
поделите шесть пополам:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru