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

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

Ответ: вот для начала самое простое записать в ОЗУ и отдать, Адрес принимает правильно я просто на свободных ножкакх PB1 PB3 использую как сигнализатор выполнения каких либо операций

Отправлено Luba 08 октября 2007 г. 13:51
В ответ на: Как отлаживаете? Поподробнее... Ну и текст желательно показать. отправлено argus98 08 октября 2007 г. 13:40

инициализация

ldi r16,0b00011010 ;sda scl на вход
out ddrb,r16 ; DDRB
ldi r16,0B00000000 ;перевести выходы в 0
out portb,r16 ; PORTB
;(USICR) РЕГИСТР УПРАВЛЕНИЯ USI
LDI temp,0b10101000
; 0-----USITC переключение вывода строба
; 1-----USICLK SCK 000-строб отсутствует 001-програмный строб
; 2-----USICS0 выбор строб 01x- блок сравнения счетчика
; 3-----USICS1выбор строб -1
; 4-----USIWM0 режим раб 00-USI-откл 01-3-проводн режим
; 5-----USIWM1 режим раб 10-2-проводный 11-2-проводный при переполнении SCL-низкий--1
; 6-----USIOIE разреш прерыван при переполнении счетчика -1
; 7-----USISIE разреш прерыван при обнаружении СТАРТ -1
OUT USICR, temp
;(USISR) РЕГИСТР СОСТОЯНИЯ USI

LDI temp,0b11110000;сбросили все флаги
; 0-----USICNT0 счетчик-4бит
; 1-----USICNT1 инкриментируется при каждом стробе
; 2-----USICNT2
; 3-----USICNT3
; 4-----USIDC флаг колизии при выведении данных в 2х проводном режиме
; 5-----USIPF флаг обнаружения СТОП
; 6-----USIOIF флаг прерыван при переполнении счетчика
; 7-----USISIF флаг прерыван при обнаружении СТАРТ
OUT USISR, temp
USI_START:
in reg_,SREG ; cохранение регистра статуса и всех регистров
PUSH temp
PUSH temp1
SBI PORTB,PB1

ldi temp, (1< OUT USICR, temp
CLR FLL ;ОБНУЛИЛИ ВСЕ ФЛАГИ
ACK_OK_8: ldi temp,0xf0;/8бит данных
OUT USISR, temp
CBR FLL,ACKK;СБРОСИЛИ ФЛАГ

WDR

exit: POP temp1
POP temp
out SREG,reg_
RETI
;ПРЕРЫВАНИЕ ПО ПЕРЕПОЛНЕНИЮ СЧЕТЧИКА
USI_OVF: in reg_,SREG ; cохранение регистра статуса и всех регистров
PUSH temp
PUSH temp1

SBIC USISR,USIPF;ЕСЛИ ПРИШОЛ СТОП ТО ПРИВОДИМ ВСЕ В ИСХОДНОЕ СОСТОЯНИЕ
RJMP STOP

SBRC FLL,4; ACK
RJMP ACK_OK_8;ЗАРЯЖАЕМ НА ПРИЕМ 8 БАЙТОВ

SBRC FLL,2 ; АДРЕС H
RJMP ADRESS_HH
SBRC FLL,3 ; АДРЕС L
RJMP ADRESS_LL


SBRC FLL,0; FL_READ

RJMP READ1
SBRC FLL,1 ; FL_WRITE
RJMP WRITE1

STARTT: IN TEMP,USIBR
SBR FLL, FL_WRITE
SBRS TEMP,7
RJMP STT
SBR FLL, FL_READ

CBR FLL, FL_WRITE

STT: ANDI TEMP,0XF0
CPI TEMP,0XA0
BRNE EXIT

SBRS FLL,0;ЧТЕНИЕ НЕНАДО ЧИТАТЬ АДРЕС
SBR FLL,FL_ADRESS_H;БУДЕМ ПРИНИМАТЬ АДРЕСС


ACK: CLR TEMP
OUT USIDR,TEMP

ldi temp,0xfE;/1бит данных C ack
OUT USISR, temp
SBR FLL,ACKK


RJMP EXIT

NACK: LDI TEMP,0X80
OUT USIDR,TEMP
ldi temp,0xfE;/1бит данных
OUT USISR, temp
SBR FLL,ACKK


RJMP EXIT

ADRESS_HH: IN ZH,USIBR
CBR FLL,FL_ADRESS_H
SBR FLL,FL_ADRESS_L

ldi temp,0xf0;/9бит данных
OUT USISR, temp

RJMP EXIT


ADRESS_LL: IN ZH,USIBR
CBR FLL,FL_ADRESS_L

RJMP ACK

WRITE1: IN TEMP,USIBR
ST Z+,TEMP
; RCALL EEPROM_write
; ADIW ZL,1
RJMP ACK

READ1 : SBI PORTB,PB3

LD TEMP,Z+
; RCALL EEPROM_READ
OUT USIDR,TEMP
; ADIW ZL,1
RJMP ACK


STOP:
CBI PORTB,PB1
ldi temp, (1< OUT USICR, temp
CLR FLL ;ОБНУЛИЛИ ВСЕ ФЛАГИ
ldi temp,0xf0;/8бит данных;
OUT USISR, temp
RJMP EXIT




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

Ответы


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

Сообщение:

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

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

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

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