[an error occurred while processing this directive]
На ассемблере это выглядит так
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено _Bill 23 января 2006 г. 17:11
В ответ на: Ответ: Ух ты.. Это на Си что ли написано.... А на ассемблере нету??? отправлено monofin 23 января 2006 г. 17:02


// 38 //
// 39 // ** InitTimers -- the function initiates MCU "on-board" timers
// 40 //

RSEG CODE:CODE:NOROOT(1)
// 41 void InitTimers(void)
InitTimers:
// 42 {
// 43 TCNT0 = TIMER0_VALUE; // Preload Timer0
LDI R16,100
OUT 0x32,R16
// 44 TCNT1 = 0; // and Timer1
LDI R16,0
LDI R17,0
OUT 0x2D,R16
OUT 0x2C,R16
// 45 TCCR0 = 0x04; // Run Timer0
LDI R16,4
OUT 0x33,R16
// 46 OCR1A = OCR1_VAL; // Load Timer1 compare match regicter
LDI R16,125
OUT 0x2B,R17
OUT 0x2A,R16
// 47 TCCR1A = 0; // and run the timer
OUT 0x2F,R17
// 48 TCCR1B = 0x0B; //
LDI R16,11
OUT 0x2E,R16
// 49 intervals._20mS = 0; // Reset counter
STS intervals,R17
// 50 TIMSK = (1< LDI R16,17
OUT 0x39,R16
// 51 _SEI(); // and go
SEI
// 52 }
RET
// 86 //
// 87 // ***** Timer interrupt handlers *****
// 88 //
// 89 // ** Timer0 overflow interrupt handler
// 90 //
// 91 #pragma vector = TIMER0_OVF_vect

RSEG CODE:CODE:NOROOT(1)
// 92 __interrupt void Timer0_Int(void)
Timer0_Int:
// 93 {
ST -Y,R31
ST -Y,R30
ST -Y,R17
ST -Y,R16
IN R17,0x3F
REQUIRE ?Register_R8_is_global_regvar
REQUIRE ?Register_R9_is_global_regvar
REQUIRE ?Register_R15_is_global_regvar
// 94 TCNT0 = TIMER0_VALUE; // Reload Timer0
LDI R16,100
OUT 0x32,R16
// 95 IntFlags |= TIMER0_BIT; // Set the flags
SET
BLD R15,0
// 96 if (!(++intervals._20mS & 0x07)) // 20 mS interval
LDI R30,LOW(intervals)
LDI R31,(intervals) >> 8
LD R16,Z
INC R16
ST Z,R16
ANDI R16,0x07
BRNE ??Timer0_Int_0
// 97 { //
// 98 if (Mode & DELAY_BIT) // Reatart delay is doing
SBRS R8,7
RJMP ??Timer0_Int_1
// 99 { //
// 100 if (++intervals._100mS >= 5) // 100 mS interval is over
LDD R16,Z+1
INC R16
STD Z+1,R16
CPI R16,5
BRCS ??Timer0_Int_1
// 101 { //
// 102 intervals._100mS = 0; // Clear counter
LDI R16,0
STD Z+1,R16
// 103 IntFlags |= _0_1_S_BIT; // Set the flag
BLD R15,3
// 104 } //
// 105 } //
// 106 IntFlags |= BUTTON_BIT; // Set the flag to buttons polling time
??Timer0_Int_1:
BLD R15,2
// 107 IntFlags |= DISPLAY_BIT; // Set the flag to display coounter
BLD R15,6
// 108 if (!(intervals._20mS & 0x7F))
LD R16,Z
ANDI R16,0x7F
BRNE ??Timer0_Int_0
// 109 {
// 110 if (Mode & PASWRD_BIT) // Password time-out
BST R9,3
BRTC ??Timer0_Int_2
// 111 { //
// 112 if (++TimoutCnt >= PSWD_TIM) // Time-out
LDI R30,LOW(TimoutCnt)
LDI R31,(TimoutCnt) >> 8
LD R16,Z
INC R16
ST Z,R16
CPI R16,31
BRCS ??Timer0_Int_2
// 113 IntFlags |= TIMOUT_BIT; //
SET
BLD R15,4
// 114 }
// 115 IntFlags |= _320MS_BIT; // Set the flag
??Timer0_Int_2:
SET
BLD R15,5
// 116 }
// 117 }
// 118 }
??Timer0_Int_0:
OUT 0x3F,R17
LD R16,Y+
LD R17,Y+
LD R30,Y+
LD R31,Y+
RETI


Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание

E-mail: info@telesys.ru