Чт сен 06, 2018 15:44:02
Вс ноя 04, 2018 17:30:00
Вс ноя 04, 2018 17:40:27
Вс ноя 04, 2018 17:52:47
Вс ноя 04, 2018 17:57:15
Вс ноя 04, 2018 18:07:03
Вс ноя 04, 2018 18:09:11
Вс ноя 04, 2018 18:15:26
ну тогда ладноMixail_BM писал(а):1.Z_h_e - раньше работало и не сбивалось, было все четко.
Из серии раньше работало. Еще поглядите как нужно правильно считывать значение 16битного счетчика в разделе "Accessing 16-bit Registers"Mixail_BM писал(а):USART_Transmit(TCNT1H);
USART_Transmit(TCNT1L);
Пн ноя 05, 2018 10:41:36
Ср ноя 07, 2018 12:20:35
in temp,TCCR1A
sbr temp,0b11000000 ;При совпадении (CTC) вывод OC1A устанавливается в "1"
out TCCR1A,temp
ldi temp,$01
out OCR1AH,temp
ldi temp,$FF
out OCR1AL,temp
in temp,TCCR1B
sbr temp,0b00001001 ;Режим CTC. Тактовая частота CK/1
out TCCR1B,temp
in temp,TCCR1B
cbr temp,0b00001001 ;Обнулить биты
out TCCR1B,temp
clr temp
out TCNT1H,temp ;Очистить счетчик
out TCNT1L,temp
in temp,TIFR
sbr temp,0b00010000 ;Сбросить флаг OCF1A
out TIFR,temp
in temp,TCCR1A
cbr temp,0b11000000 ;Обнулить биты COM1A1 и COM1A0
out TCCR1A,temp
Ср ноя 07, 2018 12:49:47
Ср ноя 07, 2018 15:51:18
Ср ноя 07, 2018 17:04:05
Toggling the Pin
Writing a '1' to PINxn toggles the value of PORTxn, independent on the value of DDRxn. The SBI instruction can be used to toggle one single bit in a port.
Ср ноя 07, 2018 19:15:12
.INCLUDE "M16def.inc"
.equ Fo=8000000
.def TEMP=R16
;************************************************
.CSEG
.ORG $0000
RESET:
RJMP START ; On Reset
.ORG $000C
T1_COMP_A:
RETI
;*************************************************
;*************************************************
;*************************************************
START:
LDI ZH,0
LDI ZL,-1
OUT SPH,ZH
OUT SPL,ZL
SBI ACSR,ACD ; выключить аналоговый компаратор
SBI DDRD,5
LDI R16,1<<SE
OUT MCUCR,R16 ; режим SLEEP IDLE
ldi temp,$01
out OCR1AH,temp
ldi temp,$FF
out OCR1AL,temp
OUT TCCR1A,ZH ;длительность 1 на PD5 30 тактов
LDI R17,1<<COM1A1|1<<COM1A0
OUT TCCR1A,R17
LDI R16,1<<OCIE1A ; прерывания
OUT TIMSK,R16
OUT TIFR,R16
LDI R16,1<<WGM12|1<<CS10 ; Fo/1, CTC
OUT TCCR1B,R16
WAIT:
SEI
SLEEP
; OUT TCCR1A,ZH ;длительность 1 на PD5 14 тактов
NOP
RJMP START
.EXIT
ldi temp,$01
out OCR1AH,temp
ldi temp,$FF
out OCR1AL,temp
OUT TCCR1A,ZH ;длительность 1 на PD5 30 тактов
WAIT:
SEI
SLEEP
; OUT TCCR1A,ZH ;длительность 1 на PD5 14 тактов
NOP
RJMP START
.EXIT
ldi temp,high(RAMEND) ;назначить стек
out SPH,temp
ldi temp,low(RAMEND)
out SPL,temp
Чт ноя 08, 2018 10:07:49
ldi r16,$07 ;$07A1 = 0.5 секунды
out OCR1AH,r16
ldi temp,$A1
out OCR1AL,r16
;***********************************
;Разрешить Timer/Counter1
Cycle: ldi r16,(1<<COM1A1)|(1<<COM1A0)
out TCCR1A,r16
ldi r16,(1<<WGM12)|(1<<CS12)|(1<<CS10) ;Установить бит WGM12=1 (режим CTC). Предделитель CK/1024 (CS12=1, CS11=0, CS10=1)
out TCCR1B,r16
;***********************************
;Временная задержка (1.011491 сек) на 4 МГц
Tim_dl: ldi r20,$15
ldi r21,$A9
ldi r22,$18
D_r_1x: dec r22
brne D_r_1x
ldi r22,$FF
dec r21
brne D_r_1x
ldi r21,$FF
dec r20
brne D_r_1x
;***********************************
;Запретить и обнулить Timer/Counter1
ldi r16,(0<<WGM12)|(0<<CS12)|(0<<CS10)
out TCCR1B,r16
ldi r16,(0<<COM1A1)|(0<<COM1A0)
out TCCR1A,r16
clr r16
out TCNT1H,r16
out TCNT1L,r16
ldi r16,1<<OCF1A
out TIFR,r16
;***********************************
rjmp Cycle
Чт ноя 08, 2018 11:52:12
.INCLUDE "M16def.inc"
.equ Fo=4000000
;************************************************
.CSEG
.ORG $0000
RESET:
; RJMP START ; On Reset
;.ORG $000C
;T1_COMP_A:
; RETI
;*************************************************
;*************************************************
;*************************************************
START:
; LDI ZH,0
; LDI ZL,-1
; OUT SPH,ZH
; OUT SPL,ZL
SBI DDRD,5
; LDI R16,1<<SE
; OUT MCUCR,R16 ; режим SLEEP IDLE
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
LDI R16,0<<COM1A1|1<<COM1A0
OUT TCCR1A,R16 ; переключение лапы PD5/OC1A при совпадении
LDI R16,1<<WGM12|1<<CS11|1<<CS10 ; Fo/64, CTC
OUT TCCR1B,R16
; LDI R16,1<<OCIE1A
; OUT TIMSK,R16
; OUT TIFR,R16
WAIT:
; SEI
; SLEEP
; NOP
RJMP WAIT
.EXIT
Чт ноя 08, 2018 18:56:17
Cycle: ldi r16,1<<PSR10
out SFIOR,r16
ldi r16,(1<<COM1A1)|(1<<COM1A0)
out TCCR1A,r16
ldi r16,(1<<WGM12)|(1<<CS12)|(1<<CS10) ;Установить бит WGM12=1 (режим CTC). Предделитель CK/1024 (CS12=1, CS11=0, CS10=1)
out TCCR1B,r16
...
;Временная задержка (1.011491 сек) на 4 МГц
Tim_dl: ldi r20,$15
ldi r21,$A9
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
.include "m16def.inc"
.CSEG
;***** Определения портов В/В *****
;Port D:
.equ DIRD =0b00100000
.equ PUPD =0b00000000
;***** Векторы Прерываний *****
.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: ldi r16,$07 ;$07A1 = 0.5 секунды
out OCR1AH,r16
ldi r16,$A1
out OCR1AL,r16
Cycle: in r16,SFIOR
sbr r16,00000001
; ldi r16,1<<PSR10
out SFIOR,r16
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
ldi r16,(1<<COM1A1)|(1<<COM1A0)
out TCCR1A,r16
ldi r16,(1<<WGM12)|(1<<CS12)|(1<<CS10) ;Установить бит WGM12=1 (режим CTC). Предделитель CK/1024 (CS12=1, CS11=0, CS10=1)
out TCCR1B,r16
;***********************************
;Временная задержка (1.011491 сек) на 4 МГц
Tim_dl: ldi r20,$15
ldi r21,$A9
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
;***********************************
;Запретить и обнулить Timer/Counter1
ldi r16,(0<<WGM12)|(0<<CS12)|(0<<CS10)
out TCCR1B,r16
ldi r16,(0<<COM1A1)|(0<<COM1A0) ;Обнулить вывод 5 порта D
out TCCR1A,r16
clr r16
out TCNT1H,r16
out TCNT1L,r16
ldi r16,1<<OCF1A
out TIFR,r16
;***********************************
rjmp Cycle
Пт ноя 09, 2018 10:44:40
.include "m16def.inc"
.CSEG
;***** Определения портов В/В *****
;Port D:
.equ DIRD =0b00100000
.equ PUPD =0b00000000
.def zero=R15
;***** Векторы Прерываний *****
.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:
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
; ldi r16,$07 ;$07A1 = 0.5 секунды
; out OCR1AH,r16
; ldi r16,$A1
; out OCR1AL,r16
;Равно 500000/256=1953,125+1=1954*256=500224мкс
CLR ZERO
Cycle:
ldi r16,(1<<COM1A1)|(1<<COM1A0)
out TCCR1A,r16
ldi r16,(1<<WGM12)|(1<<CS12)|(1<<CS10) ;Установить бит WGM12=1 (режим CTC). Предделитель CK/1024 (CS12=1, CS11=0, CS10=1)
out TCCR1B,r16
;***********************************
.equ Fo=4000000
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
;Временная задержка (1.011491 сек) на 4 МГц
;Tim_dl: ldi r20,$15
; ldi r21,$A9
; 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
;***********************************
;Запретить и обнулить Timer/Counter1
; ldi r16,(0<<WGM12)|(0<<CS12)|(0<<CS10)
; out TCCR1B,r16
OUT TCCR1A,ZERO
; ldi r16,(0<<COM1A1)|(0<<COM1A0) ;Обнулить вывод 5 порта D
; out TCCR1A,r16
; clr r16
; out TCNT1H,r16
; out TCNT1L,r16
; ldi r16,1<<OCF1A
; out TIFR,r16
;***********************************
rjmp Cycle
.EXIT
Пт ноя 09, 2018 15:43:56
ldi r16,(1<<COM1A1)|(1<<COM1A0)
out TCCR1A,r16
ldi r16,(0<<COM1A1)|(0<<COM1A0) ;Обнулить вывод 5 порта D
out TCCR1A,r16
Сб ноя 10, 2018 01:20:57