[an error occurred while processing this directive]
проблема с часами ds1307
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено zacora 10 ноября 2006 г. 00:25

На PICe, кварц 4 мгц, не пойму, почему из него не читает. Запись идет, проверял изменением режима генерации на 7 ноге. вот текст. И почему нет нормальных рабочих примеров в инете, блин?

;Вот тексты
;
;b0
;b1
;b2
;b3
;b4
;b5
;b6
;b7
;
;I_RX_DAT
;I_Cnt
;I_TX_DAT
;
;
;SCL EQU 0 ; Синхронизация
;SDA EQU 1 ; Данные

;инициализация часов DS1307
Init_Clock
call I_START ;
movlw b'11010000' ;адрес часов
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw 00h ;адрес записи в DS1307
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw 00h ;секунды
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw 00h ;минуты
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw 06h ;часы
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw 01h ;день недели
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw 15h ;дата 13
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw 11h ;месяц
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw 01h ;год
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw b'10010001' ;режим
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw b'11111111' ;восьмой байт
call TX_IIS ;выдать на шину
call RX_ACK ;

movlw 0x01 ;контроль 1
call TX_IIS ;выдать на шину
call RX_ACK ;
movlw 0x02 ;контроль 2
call TX_IIS ;выдать на шину
call RX_ACK ;
call I_STOP ;завершить обмен с DS1307
return

;****************************************************************

;i2s.asm
;***********************************************************
;подпрограммы для шины IS2
;
;CBLOCK
; I_RX_DAT
; I_TX_DAT
; I_Cnt
;ENDC

I_START
bsf portc,SDA ;
movlw b'00100000' ;
movwf STATUS ;Выбираем Bank 1
bcf TRISc,SCL
bcf TRISc,SDA
clrf STATUS ;Возвращаемся в Bank 0 RAM
bsf PORTC,SDA ;установить SDA high
bsf PORTC,SCL ;SCL is high
nop
nop
nop
nop
bcf PORTC,SDA ;стаpт бит
nop ;
nop ;
nop ;
nop ;
bcf PORTC,SCL ;
nop ;
return
;
I_STOP
bcf portc,SCL
movlw b'00100000' ;
movwf STATUS ;Выбираем Bank 1
bcf TRISc,SCL
bcf TRISc,SDA
clrf STATUS ;Возвращаемся в Bank 0 RAM
bcf PORTC,SCL
bcf PORTC,SDA
nop ;
nop ;
nop ;
nop
bsf PORTC,SCL
nop ;
nop ;
nop ;
nop
bsf PORTC,SDA
movlw b'00100000' ;
movwf STATUS ;Выбираем Bank 1
bsf TRISc,SCL
bsf TRISc,SDA
clrf STATUS ;Возвращаемся в Bank 0 RAM
return
;
RX_IIS
movlw b'00100000' ;
movwf STATUS ;Выбираем Bank 1
bcf TRISc,SCL
bsf TRISc,SDA
clrf STATUS ;Возвращаемся в Bank 0 RAM
movlw 0x8 ;
movwf I_Cnt ;
clrc ;
L_R_II
nop ;
bsf PORTC,SCL ;
nop ;
nop
nop
nop
btfss PORTC,SDA ;
clrc ;
btfsc PORTC,SDA ;
setc ;
rlf I_RX_DAT,f ;
bcf PORTC,SCL ;
nop ;
nop ;
decfsz I_Cnt,f ;
goto L_R_II ;
return
;
TX_IIS
movwf I_TX_DAT ;передаваемый байт
movlw b'00100000' ;
movwf STATUS ;Выбираем Bank 1
bcf TRISc,SCL
bcf TRISc,SDA
clrf STATUS ;Возвращаемся в Bank 0 RAM
movlw 0x8 ;
movwf I_Cnt ;
clrc ;
L_T_II
bcf PORTC,SCL
btfss I_TX_DAT,7 ;
bcf PORTC,SDA ;
btfsc I_TX_DAT,7 ;
bsf PORTC,SDA ;
nop
nop
nop
nop
bsf PORTC,SCL ;
nop ;
nop ;
nop ;
nop ;
bcf PORTC,SCL ;
rlf I_TX_DAT,f ;
decfsz I_Cnt,f ;
goto L_T_II ;
return

;чтение ACK возвращает ACK в бите переноса
RX_ACK
bcf portc,SCL
movlw b'00100000' ;
movwf STATUS ;Выбираем Bank 1
bcf TRISc,SCL
bsf TRISc,SDA
clrf STATUS ;Возвращаемся в Bank 0 RAM
clrc
bsf PORTC,SCL
nop
nop
nop
nop
btfss PORTC,SDA ;
clrc
btfsc PORTC,SDA ;
setc
bcf PORTC,SCL
return

;Выдает ACK из бита переноса
TX_ACK
movlw b'00100000' ;
movwf STATUS ;Выбираем Bank 1
bcf TRISc,SCL
bcf TRISc,SDA
clrf STATUS ;Возвращаемся в Bank 0 RAM
skpc
bcf PORTC,SDA
skpnc
bsf PORTC,SDA
nop
nop
nop
nop
bsf PORTC,SCL
nop
nop
nop
nop
bcf PORTC,SCL
bcf PORTC,SDA
return
;------------------------------------------


;Вот процедура чтения:
;berror - флажок ошибки

read_clock
; bcf tbit1,berror ;Пока без помылок...
;======================================
;Проверяем, свободна ли шина?
; call check_bus
;======================================
call I_START ;start_bit
;======================================
;Записываем адрес устройства с битом WRITE
movlw b'11010000'
call TX_IIS ;write_byte
;Спросить- поймал, ци не...
call RX_ACK ;read_ack
;======================================
;Начальный адрес данных - 0
; для часов адресация однобайтная
movlw b'00000000'
call TX_IIS ;write_byte
call RX_ACK ;read_ack
;======================================
call I_START ;start_bit
;======================================
;Записываем адрес устройства с битом READ
movlw b'11010001'
call TX_IIS ;write_byte
call RX_ACK ;read_ack
;======================================
;читаем 0-й байт
call RX_IIS ;read_byte
movwf b0
call TX_ACK ;write_ack
;======================================
;читаем 1-й байт
call RX_IIS ;read_byte
movwf b1
call TX_ACK ;write_ack
;======================================
;читаем 2-й байт
call RX_IIS ;read_byte
movwf b2
call TX_ACK ;write_ack
;======================================
;читаем 3-й байт
call RX_IIS ;read_byte
movwf b3
call TX_ACK ;write_ack
;======================================
;читаем 4-й байт
call RX_IIS ;read_byte
movwf b4
call TX_ACK ;write_ack
;======================================
;читаем 5-й байт
call RX_IIS ;read_byte
movwf b5
call TX_ACK ;write_ack
;======================================
;читаем 6-й байт
call RX_IIS ;read_byte
movwf b6
call TX_ACK ;write_ack
;======================================
;читаем 7-й байт
call RX_IIS ;read_byte
movwf b7
call TX_ACK ;ИМЕННО write_NO_ack
;======================================
call I_STOP ;stop_bit
;======================================
return

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа
Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

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


Rambler's Top100 Рейтинг@Mail.ru
Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание