Пн апр 24, 2017 19:12:23
Вт июн 20, 2017 10:24:04
.include "m164pdef.inc"
.def temp = r16 ; Буфер
.def Counter = r17 ; Переменная цикла
.equ deley_vkl_0 = 35
.cseg ; Выбор сегмента программного кода
;---------- Начало программного кода
.org 0 ; Установка текущего адреса на ноль
jmp RESET ; Переход на начало программы
reti ; jmp EXT_INT0 ; Внешнее прерывание 0
reti ; jmp INT1 ; Внешнее прерывание 1
reti ; jmp INT2
reti ; jmp PCINT0 ; PCINT0 Handler
reti ; jmp PCINT1 ; PCINT1 Handler
reti ; jmp PCINT2 ; PCINT2 Handler
reti ; jmp PCINT3
reti ; jmp WDT ; Watchdog Timer Handler
reti ; jmp TIMER2_COMPA ; Timer2 Compare A Handler
reti ; jmp TIMER2_COMPB ; Timer2 Compare B Handler
reti ; jmp TIMER2_OVF ; Timer2 Overflow Handler
reti ; jmp TIMER1_CAPT ; Timer1 Capture Handler
jmp TIMER1_COMPA ; Timer1 Compare A Handler
reti ; jmp TIMER1_COMPB ; Timer1 Compare B Handler
reti ; jmp TIMER1_OVF ; Timer1 Overflow Handler
reti ; jmp TIMER0_COMPA ; Timer0 Compare A Handler
reti ; jmp TIMER0_COMPB ; Timer0 Compare B Handler
reti ; jmp TIMER0_OVF ; Timer0 Overflow Handler
reti ; jmp SPI, STC ; SPI Transfer Complete Handler
reti ; jmp USART0, RX ; USART, RX Complete Handler
reti ; jmp USART0, UDRE ; USART, UDR Empty Handler
reti ; jmp USART0, TX ; USART, TX Complete Handler
reti ; jmp ANA_COMP
reti ; jmp ADC ; ADC Conversion Complete Handler
reti ; jmp EE_RDY ; EEPROM Ready Handler
reti ; jmp TWI ; 2-wire Serial Interface Handler
reti ; jmp SPM_RDY ; Store Program Memory Ready Handler
reti ; jmp USART1, RX
reti ; jmp USART1, UDRE
reti ; jmp USART1, TX
; ---------- Модуль инициализации ----------
RESET:
;---------- Инициализация портов ВВ ----------
clr temp ; Записываем 0 в регистр temp
out PORTD, temp ; порт PD0-PD5: выход =0, PD6: вход =Z
ldi temp, 0x7B
out DDRD, temp ; 01111011 - "1"-выход, "0"-вход, 2-й бит на вход - внешнее прерывание INT0
clr temp
out PORTB, temp
ldi temp, 0xFF ; 11111111 все на выход
out DDRB, temp
ldi temp, 0x80 ; Аналог. компаратор откл.
out ACSR, temp
;---------- Инициализация таймера T1 ----------
ldi temp, 0x0A ; 00001010 - режим СТС - сброс по совпадению и запуск таймера
sts 0x81, temp ; TCCR1B
ldi temp, deley_vkl_0
sts 0x88, temp ; в OCR1A записали число 35
ldi temp, 0x02
sts 0x6F, temp ; разрешаем прерывание по событию "Совпадение А" TIMSK1
;---------- Инициализация стека ----------
ldi temp,low(RAMEND) ; Выбор адреса вершины стека (адрес конца RAM)
out SPL,temp ; Запись его в регистр стека
ldi temp,high(RAMEND) ;
out SPH, temp
sei
;---------- Начало основной программы
lp00:
loop5: sbic PIND, 7 ; ждём приход 1 втечение 0.51(мс) если 6-й бит регистра PIND = 0, то след. команда пропускается
jmp loop6
in temp, TIFR1
sbrs temp, 1
jmp loop5
jmp lp00
loop6:
;====================
; Подпрограмма обработки прерываний
;====================
TIMER1_COMPA:
clr temp
reti
Сб июн 24, 2017 06:15:13
.org 0 ; Установка текущего адреса на ноль
jmp RESET ; Переход на начало программы
reti ; jmp EXT_INT0 ; Внешнее прерывание 0
reti ; jmp INT1 ; Внешнее прерывание 1
reti ; jmp INT2
reti ; jmp PCINT0 ; PCINT0 Handler
reti ; jmp PCINT1 ; PCINT1 Handler
reti ; jmp PCINT2 ; PCINT2 Handler
reti ; jmp PCINT3
reti ; jmp WDT ; Watchdog Timer Handler
reti ; jmp TIMER2_COMPA ; Timer2 Compare A Handler
reti ; jmp TIMER2_COMPB ; Timer2 Compare B Handler
reti ; jmp TIMER2_OVF ; Timer2 Overflow Handler
reti ; jmp TIMER1_CAPT ; Timer1 Capture Handler
.org 0x001A ; Установка вектора сравнения таймера 1А
jmp TIMER1_COMPA ; Timer1 Compare A Handler
;
;
;
;
;
;
;---------- Инициализация таймера T1 ----------
LDI XH,HIGH(deley_vkl_0)
LDI XL,LOW(deley_vkl_0)
STS OCR1AH,XH
STS OCR1AL,XL
LDI R16,1<<OCIE1A
STS TIMSK1,R16 ; разрешаем прерывание по событию "Совпадение А" TIMSK1
LDI R16,1<<WGM12|1<<CS11
STS TCCR1B,R16 ;режим СТС - сброс по совпадению и запуск таймера Fclk/8
; ldi temp, 0x0A ; 00001010 - режим СТС - сброс по совпадению и запуск таймера
; sts 0x81, temp ; TCCR1B
; ldi temp, deley_vkl_0
; sts 0x88, temp ; в OCR1A записали число 35
; ldi temp, 0x02
; sts 0x6F, temp ; разрешаем прерывание по событию "Совпадение А" TIMSK1
Сб июн 24, 2017 11:17:28
Попадает оно на тот вектор, это Вы таблицу векторов неправильно заполнили. Поглядите таблицу векторов в ДШ, у данного камня один вектор занимает два слова памяти программ. Команда-затычка RETI однословная команда. На Вашем скрине как раз видно, что программный счетчик указывает на 0x1A, т.е. это адрес нужного Вам вектора.artemik32 писал(а):только оно попадает на другой вектор почему то.
jmp RESET
nop
nop
Сб июн 24, 2017 11:44:22
тем более что для каждого адреса вектора уже определены соответствующие символьные константы. И это не только проще, но и правильнее - я об этом неоднократно говорил, и буду говорить.akl писал(а):Проще явно указать адрес вектора
Вс июл 02, 2017 19:41:29
Ср июл 26, 2017 05:27:12
.org 0 ; Установка текущего адреса на ноль
jmp RESET ; Переход на начало программы
reti ; jmp EXT_INT0 ; Внешнее прерывание 0
reti ; jmp INT1 ; Внешнее прерывание 1
reti ; jmp INT2
reti ; jmp PCINT0 ; PCINT0 Handler
reti ; jmp PCINT1 ; PCINT1 Handler
reti ; jmp PCINT2 ; PCINT2 Handler
reti ; jmp PCINT3
reti ; jmp WDT ; Watchdog Timer Handler
reti ; jmp TIMER2_COMPA ; Timer2 Compare A Handler
reti ; jmp TIMER2_COMPB ; Timer2 Compare B Handler
reti ; jmp TIMER2_OVF ; Timer2 Overflow Handler
reti ; jmp TIMER1_CAPT ; Timer1 Capture Handler
.org 0x001A ; Установка вектора сравнения таймера 1А
jmp TIMER1_COMPA ; Timer1 Compare A Handler
.org 0x0000
jmp RESET ; Reset Handler
.org OC2addr
jmp TIM2_COMP ; Timer2 Compare Handler
.org URXC0addr
jmp RS232_VESS; USART0 RX Complete Handler
.org ADCCaddr
jmp ADC_Complet
.org URXC1addr
jmp USART1_RXC; USART1 RX Complete Handler
.org UDRE1addr
jmp USART1_UDRE; USART1 TX Complete Handler
.org UDRE1addr
reti ; jmp USART1_UDRE; USART1 TX Complete Handler
Вс авг 13, 2017 19:10:13
TCCR1B |= (1<<WGM12);
TCCR1B |= (1<<CS12); // делитель 256
TIMSK |=(1<<OCIE1A); // прерывание по совпадению
OCR1AH = 0b11110100; // число для сравнения 62500
OCR1AL = 0b00100100;
....
ISR (TIMER1_COMPA_vect)
{
// какое-то действие
}
int i=10;
ISR (TIM1_COMPA)
{
// какое-то действие
i=i+1;
}
void setup(void) {
// flip screen, if required
// u8g.setRot180();
TCCR1B |= (1<<WGM12);
TCCR1B |= (1<<CS12); // делитель 256
TIMSK1 |=(1<<OCIE1A); // прерывание по совпадению
OCR1AH = 0b11110100; // число для сравнения 62500
OCR1AL = 0b00100100;
Serial.begin(9600);
}
void loop(void) {
Serial.println(i);
// rebuild the picture after some delay
delay(100);
}
Вс авг 13, 2017 20:30:19
Вс авг 13, 2017 20:46:15
Вс авг 13, 2017 21:31:38
int i=10;
ISR (TIMER1_OVF_vect)
{
TCNT1 = 0xC2F7;
// какое-то действие
i++;
}
void setup(void) {
//Инициализация таймера 1
TCCR1B = 0b101; // делитель на 1024
TIMSK1 |= (1<<TOIE1); //активировать прерывание по переполнению таймера
TCNT1 = 0xC2F7; // частота прерываний 1 Гц для F_CPU = 16 000 000
Serial.begin(9600);
sei();
}
void loop(void) {
Serial.println(i);
// rebuild the picture after some delay
delay(100);
}
Пн авг 14, 2017 05:13:40
volatile int i=10;forfrends писал(а):Пробую, но ничего не работает
Пн авг 14, 2017 07:04:31
TCCR1B |= (1<<WGM12);
TCCR1B |= (1<<CS12); // делитель 256
TIMSK |=(1<<OCIE1A); // прерывание по совпадению
OCR1AH = 0b11110100; // число для сравнения 62500
OCR1AL = 0b00100100;
...
ISR (TIMER1_COMPA_vect)
{
// какое-то действие
}
Чт окт 12, 2017 18:42:08
//инициализация таймера1
void timer1_ini (void){
TCCR1 |= (1 << CTC1) //режим CTC
|(0<<COM1A1)|(0<<COM1A0) //отключаем OC1A
|(1 << CS13)|(0 << CS12)|(1 << CS11)|(0 << CS10); //Делитель 512
TCNT1 = 0x00; //сброс счетчика
OCR1A = 0xFF; //регистр сравнения
TIMSK |=(1<<TOIE1); //включаем прерывания по переполнению
}
//обработка прерывания таймера1
ISR(TIMER1_OVF_vect){
PORTB |= (1<<PB1);
}
Пт окт 13, 2017 03:49:59
Пт окт 13, 2017 04:54:47
Пт окт 13, 2017 07:57:47
Пт окт 13, 2017 08:06:12
МК бракованный... еще может быть компилятор лажает - это две любимые причины всех проблем начинающих.fulky писал(а):интересно почему в протеусе все как надо работает, а в реальном МК нет? мб МК бракованный
Пт окт 13, 2017 08:09:45
Пт окт 13, 2017 09:06:06
МК бракованный... еще может быть компилятор лажает - это две любимые причины всех проблем начинающих.