Попробовал использовать аппаратный spi - както не пошло (просто подключил на аппаратные ноги ds1307) С дефайнами и софтовым busin - busout все работает. Если заменить на hbusin - hbusout - не работает. Видимо надо конфигурировать модуль MSSP на борту. Кто знает примеры? Найденное на халяву, исчезает мгновенно, лишь сто раз заработанное всегда будет твоим.
Сообщение отредактировал
DAY - Пт, 04.01.2013, 16:10
DECLARE PORTB_PULLUPS = OFF ' Выключить подтягивающие резисторы на PORTB DECLARE ALL_DIGITAL = ON ' Каждый порт выполняет свою функцию по умолчанию
DIM Sec AS BYTE DIM Mins AS BYTE DIM Hr AS BYTE DIM Day AS BYTE DIM Date AS BYTE DIM Mon AS BYTE DIM Yr AS BYTE DIM Tmp AS BYTE DIM Tmp1 AS BYTE
ADCON0 = %00000000 ADCON1 = %00000000 ANSEL = %00000000 ANSELH = %00000000 TRISA = %00000000 ' Порт A - на выход TRISB = %00000000 ' Порт B - на выход TRISC = %00000000 ' Порт C - на выход TRISD = %00000000 ' Порт D - на выход TRISE = %00000000 ' Порт E - на выход CM1CON0 = %00000000 CM2CON0 = %00000000 CM2CON1 = %00000000 SSPCON = %00000000 RCSTA = %00000000 PSTRCON = %00000000
'-------------------------- Display ---------------------------------------------- DECLARE LCD_TYPE ALPHA ' Тип ЖКИ - буквенно -цифровой DECLARE LCD_DTPIN PORTD.0 ' Порт данных ЖКИ DECLARE LCD_ENPIN PORTC.7 ' Управление линией E DECLARE LCD_RSPIN PORTC.6 ' Управление линией RS DECLARE LCD_INTERFACE 4 ' Разрядность шины данных DECLARE LCD_LINES 2 ' Количество строк ЖКИ DECLARE LCD_COMMANDUS 2000 ' Задержка перед посылкой команды DECLARE LCD_DATAUS 50 ' Задержка перед посылкой данных
'-------------------------- Начало -------------------------------------------
CLEAR
Main: GOSUB Read_time CLS PRINT AT 1, 1, DEC Yr," ",DEC Mon," ",DEC Date, " ", DEC Day PRINT AT 2, 1, DEC Hr,":",DEC Mins,":",DEC Sec DELAYMS 200 GOTO Main
Read_time: ' D BUSIN $D0, 0, [Sec,Mins,Hr,Day,Date,Mon,Yr] ' S Tmp = Sec ' 1 GOSUB Fix_bcd_in ' 3 Sec = Tmp ' 0 Tmp = Mins ' 7 GOSUB Fix_bcd_in ' Mins = Tmp ' - Tmp = Hr ' GOSUB Fix_bcd_in ' М Hr = Tmp ' О Tmp = Date ' Д GOSUB Fix_bcd_in ' У Date = Tmp ' Л Tmp = Mon ' ь GOSUB Fix_bcd_in ' Mon = Tmp ' Р Tmp = Yr ' А GOSUB Fix_bcd_in ' Б Yr = Tmp ' О Day = Day - 1 ' Ч RETURN ' И ' Й Write_time: ' . Tmp = Mins ' GOSUB Fix_bcd_out ' С Mins = Tmp ' т Tmp = Hr ' ы GOSUB Fix_bcd_out ' р Hr = Tmp ' е Tmp = Date ' н GOSUB Fix_bcd_out ' о Date = Tmp ' Tmp = Mon ' н GOSUB Fix_bcd_out ' а Mon = Tmp ' Tmp = Yr ' p GOSUB Fix_bcd_out ' i Yr = Tmp ' c Sec = 0 ' b BUSOUT $D1, 0, [Sec,Mins,Hr,Day,Date,Mon,Yr] ' a RETURN ' s ' i Fix_bcd_in: ' c Tmp1 = Tmp & 15 ' . Tmp = Tmp >> 4 ' r Tmp = Tmp1 + 10 * Tmp ' u RETURN ' ' Fix_bcd_out: ' Tmp1 = Tmp / $A ' Tmp = Tmp - (Tmp1 * $A) ' Tmp = Tmp + (Tmp1 << 4) ' RETURN
END
С регистрами не могу разобраться SSPSTAT SSPCON SSPCON2 Найденное на халяву, исчезает мгновенно, лишь сто раз заработанное всегда будет твоим.
Спасибо огромное, попробую в железе позже - отпишусь. А то мне кажется иногда что я дурак. Обычно со своими косяками разбираюсь раньше, чем пишу на форумы. Найденное на халяву, исчезает мгновенно, лишь сто раз заработанное всегда будет твоим.