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

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

Вариант кода, в который не работает

Отправлено Murzec 28 августа 2007 г. 15:53
В ответ на: Я сам решу, что интересно, а что нет - давай ВЕСЬ код отправлено =AVR= 28 августа 2007 г. 08:37


; Тест компаратора

.INCLUDE "tn2313def.inc"
; ATtiny2313V FUSES:
; BODLEVEL = 5 [101] (Vbot = 2.7В)
; CKDIV = 1 (делитель тактововой частоты выключен)
; WDTEN = 1 (сторожевой таймер выключен)
; CKSEL = D [110 1] (внешний кварцевый резонатор частотой 3-8МГц (реком. 12-22пФ);
; кварцевый резонатор, активирован Brown-out detector)
; SUT = 1 [01] (активирован Brown-out detector)


.EQU SI =PD1
.EQU CLK =PD0

; Регистры МК

.DEF temp =r16
.DEF temp3 =r27

; Сегменты индикаторов
.EQU A =1 << 6
.EQU B =1 << 0
.EQU C =1 << 3
.EQU D =1 << 4
.EQU E =1 << 5
.EQU F =1 << 7
.EQU G =1 << 2
.EQU H =1 << 1


.cseg
.ORG 0 ; векторы прерываний
rjmp reset
reti
reti
reti
reti
reti
reti
reti
reti
reti
rjmp comp_isr ; по прерыванию от аналогового компаратора
reti
reti
reti
reti
reti
reti
reti
reti

reset: ; *** Действия после включения или сброса
; * ИНИЦИАЛИЗАЦИЯ СТЕКА
ldi temp,RAMEND
out SPL,temp
; * инициализация оборудования

; * компаратор
ldi temp,(1 << ACBG)|(1 << ACI)|(1 << ACIE) | (1 << ACIS1)|(1 << ACIS0)
out ACSR,temp ; AIN0 подключен к ИОН 1.2Вmax, очищаем флаг прерывания
; разрешаем прерывания от компаратора, прерывание - по переднему фронту
ldi temp,0b00000010 ; выключаем цифровой буфер на входе PB1(AIN1)
out DIDR,temp

; инициализация портов
ldi temp,0b11111101
out DDRB,temp
ldi temp,0b00000011
out DDRD,temp

ldi temp,0b00111001
out PORTB,temp
ldi temp,0b01111100
out PORTD,temp


ldi temp3,100
main_loop1:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
dec temp3
brne main_loop1


; после включения опорного напряжения нужно подождать как минимум 70 мкс, то есть 70/4 = 17 тактов
sbis ACSR,ACO ; если на выходе компаратора 1
rjmp infinite_loop_pre
ldi temp,0x0C
rcall outchar ; показываем букву L
ldi temp,0b00101001 ; во втором справа индикаторе
out PORTB,temp
main_loop2:
; проверяем состояние компаратора
sbic ACSR,ACO ; если на выходе компаратора 0
rjmp main_loop2
rjmp reset ; идем на инициализацию при включении

infinite_loop_pre:
sei
; бесконечный цикл
infinite_loop:
rjmp infinite_loop


; *** Загружает представление символ во внешний сдвигающий регистр (SI, CLK)
; Ввод temp - код символа
; Изменяет temp,r0
outchar:
ldi ZL,Low(char_table*2)
ldi ZH,High(char_table*2)
andi temp,0x0F
add ZL,temp ; увеличиваем адрес на код символа
clr r0
adc ZH,r0 ; прибавляем перенос из младшего байта регистра Z к старшему
lpm ; загружаем в r0 байт представление символа
brtc oc_pre_cycl ; если установлен флаг T, показываем десятичную точку
clt
ldi temp,~H
and r0,temp ; (сегменты - катоды)
oc_pre_cycl:
ldi temp,8 ; 8 бит в байте
; записываем представление в сдвигающий регистр
oc_cycl:cbi PORTD,SI ; устанавливаем линию SI - 0
sbrc r0,7 ; проверяем старший бит
sbi PORTD,SI ; если он равен 1, то устанавливаем линию SI: 1
nop
sbi PORTD,CLK ; устанавливаем линию CLK
lsl r0 ; сдвигаем аргумент логически влево (здесь был nop)
cbi PORTD,CLK ; сбрасываем линию CLK
dec temp ; уменьшаем количество невыдвинутых бит
brne oc_cycl
ret


; прерывание от компаратора
comp_isr:
ldi temp,0b00111001
out PORTB,temp
ldi temp,0b01111100
out PORTD,temp

ldi temp,0x0E
rcall outchar ; показываем букву R
ldi temp,0b00011001 ; в крайнем справа индикаторе
out PORTB,temp
comp_isr_loop:
; проверяем состояние компаратора
sbic ACSR,ACO ; если на выходе компаратора 0
rjmp comp_isr_loop
rjmp reset ; идем на инициализацию при включении

char_table: ; таблица символов (сегменты - катоды)
.db ~(A+B+C+D+E+F), ~(B+C)
; 0 1
.db ~(A+B+G+E+D), ~(A+B+C+D+G)
; 2 3
.db ~(B+C+F+G), ~(A+C+D+F+G)
; 4 5
.db ~(A+C+D+E+F+G), ~(A+B+C)
; 6 7
.db ~(A+B+C+D+E+F+G), ~(A+B+C+D+F+G)
; 8 9
.db ~(A+F+E+D), ~(A+B+E+F+G)
; C P
.db ~(D+E+F), ~(G)
; L -
.db ~(A+B+C+E+G+F), 0xFF
; R
; d пусто



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

Ответы


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

Сообщение:

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

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

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

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