Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ: В таком виде они мне и надо....(Прога)

Отправлено Fantomas 27 июня 2008 г. 19:25
В ответ на: Убери все лишнее и выложи еще раз. Еще поработаем. отправлено <font color=gray>VasilyS</font> 27 июня 2008 г. 19:08

Мне надо замерять напругу, вычислить заполнение ШИМ и вывести его на дисплей... Ноэто всё начало... Потом надо считать импульсы и вычислять скорость..... Всё это в РЕАЛЬНОМ времени.. Я боюсь, что мне не хватит таймеров... ))))



.include "m8def.inc"

.def tempL = r16 ; присваиваем регистру R16 имя tempH
.def tempH = r17 ; присваиваем регистру R17 имя tempL

.def Temp0 = r18 ; Temp
.def Temp1 = r19 ; Темр
.def LedEnd = r20 ; Темр
.def Cnt =r21 ;временный регистр Cnt
.def Del =r22 ;временный регистр Del


.equ DIRD = 0b00000011 ;направление для порта D
.equ PUPD = 0b01111100 ;pull-ups для порта D
.equ SD = PD0 ;линия данных DI
.equ SC = PD1 ;тактовая линия SK



.equ sector=$80
.equ bait0=$81
.equ vmem=$180 ;48 байт видеобуфер

.DSEG

.cseg

rjmp RESET
rjmp INT_0
rjmp INT_1
rjmp TIMER2_COMP
rjmp TIMER2_OVF
rjmp TIMER1_CAPT
rjmp TIMER1_COMPA
rjmp TIMER1_COMPB
rjmp TIMER1_OVF
rjmp TIMER0_OVF
rjmp SPI_STC
rjmp USART_RXC
rjmp USART_UDRE
rjmp USART_TXC
rjmp ADC_
rjmp EE_RDY
rjmp ANA_COMP
rjmp TWI
rjmp SPM_RDY


;RESET:
INT_0:
INT_1:
TIMER2_COMP:
TIMER2_OVF:
TIMER1_CAPT:
TIMER1_COMPA:
TIMER1_COMPB:
TIMER1_OVF:
;TIMER0_OVF:
SPI_STC:
USART_RXC:
USART_UDRE:
USART_TXC:
;ADC_:
EE_RDY:
ANA_COMP:
TWI:
SPM_RDY:
reti

RESET:
;=========================================INIT=========================================;
init:

ldi r16,LOW(RAMEND) ; Инициализируем стек
out SPl,r16
ldi r16,HIGH(RAMEND)
out SPH,r16


; Define pull-ups and set outputs high
; Define directions for port pins
ldi Temp0,(1<<PB3)|(1<<PB2)|(1<<PB1)|(1<<PB0) ;Установка линий вывода
ldi Temp1,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)
out PORTB,Temp0
out DDRB,Temp1
ldi Temp0,(0<<PC1)|(0<<PC0) ;Линии ввода
ldi Temp1,(0<<DDC1)|(0<<DDC0)
out PORTC,Temp0
out DDRC,Temp1
ldi Temp0,(1<<PD3)|(1<<PD2)|(1<<PD1)|(1<<PD0) ;Линии ввода IR and RS232
ldi Temp1,(0<<DDD3)|(0<<DDD2)|(0<<DDD1)|(0<<DDD0)
out PORTC,Temp0
out DDRC,Temp1

ldi Temp0,(1<<WGM21)|(1<<WGM20)|(1<<COM21)|(1<<COM20)|(1<<CS21) ;Попытка инициализации ШИМ
out TCCR2,Temp0

;Тут будем пытаться инициализировать ШИМ
ldi tempH,$00 ; Заносим значение $00E0 в регистр OCR1A
out OCR1AH,tempH
ldi tempL,$E0 ;
out OCR1AL,tempL
ldi tempH,$00 ; Заносим значение $0010 в регистр OCR1B
out OCR1BH,tempH
ldi tempL,$10 ;
out OCR1BL,tempL
ldi Temp0,0b11100001 ; инициализация таймер/счетчика Т1
out TCCR1A,Temp0
ldi Temp0,0b00001010
out TCCR1B,Temp0
;sbi DDRB,1 ; подключаем вывод PB1 к таймер/счетчику Т1
;sbi DDRB,2 ; подключаем вывод PB2 к таймер/счетчику Т1

ldi Temp0,0b00000101 ;Заносим значение $ в регистр OCR2
out OCR2,Temp0
ldi Temp0,0b01101101 ; инициализация таймер/счетчика Т2
out TCCR2,Temp0
;sbi DDRB,3 ; подключаем вывод PB3 к таймер/счетчику Т2

;Тут будем пытаться инициализировать АЦП
ldi Temp0,(1<<REFS1)|(1<<REFS0) ;Попытка установить внутреннее опорное напряжение
out ADMUX,Temp0
ldi Temp0,(1<<ADEN)|(1<<ADIE) ;Попытка инициализации АЦП
out ADCSRA,Temp0

;Тут инициализируем 8ми битный Таймер0
;ldi Temp0,0b00000011 ;Попытка установить тактовый сигнал = CK/64
ldi Temp0,0b00000000 ;Попытка установить тактовый сигнал 0
out TCCR0,Temp0

ldi Temp0,0b11111111 ;Попытка инициализации таймера на 255
out TCNT0,Temp0

ldi Temp0,(1<<TOV0) ;Попытка инициализации разрешить
out TIFR,Temp0

ldi Temp0,0b00000101 ;Попытка установить тактовый сигнал = CK/1024
out TCCR0,Temp0

ldi Temp0,(1<<TOIE0) ;Попытка инициализации разрешить прерывания нулевого компаратора
out TIMSK,Temp0



sei ; Разрешили прерывания




;=========================================MAIN=========================================;

main:

rjmp main

TIMER0_OVF:

ldi Temp1,0b11111111
out portd,Temp1 ; тестовый момент для временного теста индикации прерывания....((
ldi Temp1,0b00000010
rcall LCD
;ldi Temp1,0 ;обнуление таймера
;out TCNT0,Temp1
;ldi Temp0,(0<<TOV0) ;Попытка инициализации разрешить
;out TIFR,Temp0



; andi LedEnd,0b00000001
; cpi LedEnd,1
; brne on
; ldi LedEnd,0
; ldi tempH,$00 ; Заносим значение $0000 в регистр OCR1A
; out OCR1AH,tempH
; ldi tempL,$00 ;
; out OCR1AL,tempL
; reti

on:
; ldi LedEnd,1
; ldi tempH,$00 ; Заносим значение $00E0 в регистр OCR1A
; out OCR1AH,tempH
; ldi tempL,$E0 ;
; out OCR1AL,tempL
reti

ADC_:
in TempL,ADCL
in TempH,ADCH


;Подпрограмма вывода символа на индикатор:
;код символа должен находиться в регистре Temp1
LCD: ldi Cnt,4 ;загрузка счетчика
swap Temp1 ;подготовка мл. тетрады к сдвигу
LDL: rol Temp1 ;сдвиг
brcs LD1
LD0: cbi PORTD,SD ;сброс линии данных, если бит=0
rjmp STR
LD1: sbi PORTD,SD ;установка линии данных, если бит=1
STR: sbi PORTD,SC ;установка линии тактирования
ldi Del,5
HNG1: dec Del ;задержка на установку данных
brne HNG1
cbi PORTD,SC ;сброс линии тактирования
ldi Del,10
HNG2: dec Del ;задержка на удержание данных
brne HNG2
dec Cnt
brne LDL ;цикл, если не последний бит
ldi Del,25
HNG3: dec Del ;межсимвольная задержка
brne HNG3
ret




Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
поделите шесть пополам:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru