Сб ноя 10, 2018 06:02:17
Сб ноя 10, 2018 06:10:52
Сб ноя 10, 2018 07:18:18
Сб ноя 10, 2018 08:40:16
.include "tn2313adef.inc"
.equ Fo=4000000
;***** Определения портов В/В *****
;Port D:
.equ DIRD =0b00100000
.equ PUPD =0b00000000
.def zero=R15
.CSEG
.org $000
; rjmp RESET ;Сброс вектор
;***** Программное выполнение начинается здесь *****
RESET:
; ldi r16,high(RAMEND) ;назначить стек
; out SPH,r16;
; ldi r16,low(RAMEND)
; out SPL,r16
;*********************
;Установка портов В/В:
SBI DDRB,3
START:
LDI R16,HIGH(5*Fo/10/64-1) ; (5*Fo/10/64-1)= 0.5 секунды
OUT OCR1AH,R16
LDI R16,LOW(5*Fo/10/64-1)
OUT OCR1AL,R16
CLR ZERO
Cycle:
ldi r16,(1<<COM1A1)|(1<<COM1A0)
out TCCR1A,r16
ldi r16,(1<<WGM12)|(1<<CS11)|(1<<CS10)
;Установить бит WGM12=1 (режим CTC). Предделитель CK/64 (CS12=0, CS11=1, CS10=1)
out TCCR1B,r16
;***********************************
IN ZL,TIFR
SBRS ZL,OCF1A
RJMP PC-2
OUT TIFR,ZL
ldi r16,1<<COM1A0
out TCCR1A,r16
IN ZL,TIFR
SBRS ZL,OCF1A
RJMP PC-2
OUT TIFR,ZL
RJMP START
.EXIT
Сб ноя 10, 2018 18:22:27
.CSEG
.equ Fo=4000000
;***** Определения портов В/В *****
;Port D:
.equ DIRD =0b00100000
.equ PUPD =0b00000100
;***** Векторы Прерываний *****
.CSEG
.org $000
rjmp RESET ;Сброс вектор
.org $002
reti
.org $004
reti
.org $006
reti
.org $008
reti
.org $00A
reti
.org $00C
reti
.org $00E
reti
.org $010
reti
.org $012
reti
.org $014
reti
.org $016
reti
.org $018
reti
.org $01A
reti
.org $01C
reti
.org $01E
reti
.org $020
reti
.org $022
reti
.org $024
reti
.org $026
reti
.org $028
reti
;***** Программное выполнение начинается здесь *****
RESET: ldi r16,high(RAMEND) ;назначить стек
out SPH,r16
ldi r16,low(RAMEND)
out SPL,r16
;*********************
;Установка портов В/В:
ldi r16,DIRD
out DDRD,r16 ;установка направления PORTD
ldi r16,PUPD
out PORTD,r16 ;инициализация PORTD
;*********************
START:
;Установка таймера
Cycle: ldi r16,HIGH(3*Fo/10/64-1) ;(3*Fo/10/64-1) = 0.3 секунды
out OCR1AH,r16
ldi r16,LOW(3*Fo/10/64-1)
out OCR1AL,r16
ldi r16,(1<<WGM12)|(0<<CS12)|(1<<CS11)|(1<<CS10) ;Установить бит WGM12=1 (режим CTC). Предделитель CK/64 (CS12=0, CS11=1, CS10=1)
out TCCR1B,r16
ldi r16,(1<<COM1A1)|(1<<COM1A0) ;При совпадении (CTC) вывод OC1A устанавливается в "1"
out TCCR1A,r16 ;Записать регистр управления таймером/счетчиком TCCR1A
ldi r16,1<<PSR10 ;Сбросить предделитель для всех таймеров/счетчиков
out SFIOR,r16
ldi r16,(1<<OCF1A)|(1<<OCF1B) ;Сбросить флаги
out TIFR,r16
clr r16 ;Обнулить счетчик
out TCNT1H,r16
out TCNT1L,r16
;***********************************
;Задержка
Tim_dl: ldi r20,$08
ldi r21,$60
ldi r22,$18
D_r_1x: sbic PIND,5
nop
dec r22
brne D_r_1x
ldi r22,$FF
dec r21
brne D_r_1x
ldi r21,$FF
dec r20
brne D_r_1x
;***********************************
;Обнулить вывод OC1A Timer/Counter1:
ldi r16,(1<<COM1A1)|(0<<COM1A0) ;Перенастройка T/C1 - обнулить OC1A при совпадении
out TCCR1A,r16
ldi r16,(1<<WGM12)|(0<<CS12)|(0<<CS11)|(1<<CS10) ;Предделитель CK/1 (для быстрого счета)
out TCCR1B,r16
ldi r16,$00
out OCR1AH,r16
ldi r16,$01
out OCR1AL,r16
clr r16 ;Обнулить счетчик
out TCNT1H,r16
out TCNT1L,r16
ldi r16,(1<<OCF1A)|(1<<OCF1B) ;Сбросить флаги
out TIFR,r16
;***********************************
rjmp Cycle
LDI R20,BYTE3(Fo/5)
LDI R21,BYTE2(Fo/5)
LDI R22,BYTE1(Fo/5)
LOOP:
SUBI R22,BYTE1(1)
SBCI R21,BYTE2(1)
SBCI R20,BYTE3(1)
BRNE LOOP
Вс ноя 11, 2018 04:28:32
LDI R20,BYTE3(6*Fo/10/5)
LDI R21,BYTE2(6*Fo/10/5)
LDI R22,BYTE1(6*Fo/10/5) ;0,6 секунды
LOOP:
SUBI R22,BYTE1(1) ;1 такт
SBCI R21,BYTE2(1) ;1 такт
SBCI R20,BYTE3(1) ;1 такт
BRNE LOOP ;2 такта
;цикл занимает 5 тактов
Пн дек 24, 2018 16:55:37
Вт дек 25, 2018 13:53:18
Вт дек 25, 2018 13:57:23
Вт дек 25, 2018 14:00:37
Вт дек 25, 2018 14:11:43
Вт дек 25, 2018 14:15:40
Вт дек 25, 2018 14:23:01
Вт дек 25, 2018 14:39:06
Вт дек 25, 2018 14:51:15
Вт дек 25, 2018 15:00:52
Вт дек 25, 2018 15:26:19
Вт дек 25, 2018 15:45:44
Вт дек 25, 2018 15:57:32
Вт дек 25, 2018 16:28:46