.include "tn13Adef.inc"
; Macros #####################################################
;RAM segment
.dseg
;Program segments FLASH
.cseg
;Interupts #####################################################
.org 0x00
rjmp RESET ; Reset Handler 0x0000
;rjmp EXT_INT0 ; IRQ0 Handler 0x0001
;.org 0x02
;rjmp PCINTGO ; PCINT0 Handler 0x0002
;rjmp TIM0_OVF ; Timer0 Overflow Handler 0x0003
;rjmp EE_RDY ; EEPROM Ready Handler 0x0004
;rjmp ANA_COMP ; Analog Comparator Handler 0x0005
;rjmp TIM0_COMPA ; Timer0 CompareA Handler 0x0006
;rjmp TIM0_COMPB ; Timer0 CompareB Handler 0x0007
;rjmp WATCHDOG ; Watchdog Interrupt Handler 0x0008
;rjmp ADC ; ADC Conversion Handler 0x0009
;Initial #####################################################
RESET:
;initial STACK
LDI R16, RAMEND
OUT SPL, R16
;set counter bit in 0
LDI R16, 0x00
OUT TCNT0, R16
;select timer clok
LDI R16, 0x05
OUT TCCR0B, R16
LDI R20, 0x25
LDI R21, 0x07
;port setting
LDI R16, 0x07
OUT DDRB, R16
LDI R16, 0x00
OUT PORTB, R16
start:
LDI R17, 0xff
IN R1, TCNT0
CP R17, R1
BREQ incr
rjmp start
incr:
inc R18
CP R18, R20
BREQ LedOn
rjmp start
LedOn:
IN R16, PORTB
EOR R16, R21
OUT PORTB, R16
LDI R18, 0x00
rjmp start
Здрастье, я новичок в деле авр, наверху код который был переведен с си на асм результат работы не должно было отличаться от си, но что то оно работает не так как хотелось бы. Частота мигание диодов слишком частое. В чем может быть ошибка?
Фюзы выставлены так чтобы частота МК была 9.6 МГец
Формула расчета ПерТ0 = 1024/ЧастМК
Примерное переполнение Счетчика 37 раз что приблизительно 1 сек.
Но как уже писал оно не 1с а намного меньше .
Внизу код из си
#include <avr/io.h>
//PB0-2 led
int i = 0;
int main(void){
DDRB = 0x07;
PORTB = 0x00;
TCNT0 = 0x00;
TCCR0B = 0x05;
while(1){
if (TCNT0 == 255){
i++;
TCNT0 = 0x00;
}
if (i == 37){
PORTB ^= 0x07;
i = 0;
}
}
}