ПРОГРАММИРУЕМ CMOS на К512ВИ1 (процедуры обработки часов) Pantera _________________________________________ Да,все кричат вокруг Cmos-часы это рулез,круто.Вот если бы хоть кто-то пока- зал как под них кодить.Я эти часики себе давно уж как собрал и теперь решил, раз ни кто не хочет поделится с народом о ме- тодах программирования, то значит это суждено:-) сделать мне. Доступ к часам осуществляется через регистр управления #EFF7 с маской #80 включения и #00 маской выключения. Часы имеют также два регистра передачи: Регистр адреса #DFF7 который заказывает нужную ячейку памяти в Cmos. Этот регистр работает только на запись. Регистр данных #BFF7 через который проис- ходит запись/чтение значений Cmos. LD ВС,#DFF7 LD Н,#11 ;открываем ячейку OUT (С),Н ;#11 LD ВС,#BFF7 LD L,#AA ;записываем в эту OUT (С),L ;ячейку #AA RET ;для чтения из ячейки LD ВС,#BFF7 IN A,(С) ;читаем из порта СР #AA ;байт наличия cmos RET Z RET Ну а вот u тело программы: ;ОБРАБОТКА АППАРАТНЫХ CMOS ЧАСОВ ;WRITEN ВУ (С)Pantera 2001 ;V2.1 ;УСТАНОВКА РЕГИСТРОВ МИКРОСХЕМЫ ;В Н,АДРЕС В L,ЗНАЧЕНИЕ ;Ячейки в которые заносятся значения: ;#00-СЕКУНДЫ ;#02-МИНУТЫ ;#04-ЧАСЫ ;#06-ДЕНь НЕДЕЛИ ;#07-ЧИСЛО ;#08-МЕСЯЦ ;#09-ГОД ;Теперь о контрольных байтах cmos,которые ;заносятся в ячейки #11,#0A,#0В перед ра- ;ботой cmos. ;#11-#AA БАЙТ НАЛИЧИЯ ЧАСОВ.ОБЯЗАТЕЛьНО!! ; ИСПОЛьЗУЕТСЯ ДЛЯ ОБНАРУЖЕНИЯ ЧА- ; СОВ В СИСТЕМЕ, ПРОГРАММАМИ. ;#0А-32 ОБЯЗАТЕЛьНО ЗАНЕСТИ ЭТО ЗНАЧЕНИЕ ;#0В-2 ОБЯЗАТЕЛьНО ЗАНЕСТИ ЭТО ЗНАЧЕНИЕ ORG #8000 JP СНЕСК ;---------------------------------------- R_SEL DEFW #EFF7 ;РЕГИСТР УПРАВЛЕНИЯ R_DATA DEFW #BFF7 ;РЕГИСТР ДАННЫХ R_ADRS DEFW #DFF7 ;РЕГИСТР АДРЕСА ON DEFB #80 ;МАСКА ВКЛЮЧЕНИЯ OFF DEFB #00 ;МАСКА ВЫКЛЮЧЕНИЯ ;---------------------------------------- ;-------ПРОВЕРКА НАЛИЧИЯ CMOS------------ СНЕСК CALL OPEN ;ОТКРЫВАЕМ CMOS LD Н,#11 ;ПИШЕМ В #11 ЯЧЕЙКУ LD ВС,(R_ADRS) OUT (С),Н LD L,#AA ;#AA В ЯЧЕЙКЕ #11 LD ВС,(R_DATA) ;ДЛЯ ПРОВЕРКИ OUT (С),L ;НАЛИЧИЯ МИКРУХИ ;---------ПРОЦЕДУРА ЧТЕНИЯ ИЗ ПОРТА------ LD Н,#11 ;ОТКРЫВАЕМ ЯЧЕЙКУ LD ВС,(R_ADRS) ЗАПИСЫВАЕМ ЗНАЧЕ- OUT (С),Н ;НИЕ В РЕГ. АДРЕСА LD ВС,(R_DATA) ;ЧИТАЕМ ИЗ РЕГИСТРА IN A,(С) ;ДАННЫХ ЧИСЛО #AA СР #AA ;СРАВНИВАЕМ PUSH AF CALL CLOSE РОР AF JR Z,CMOS RET ;НЕТ ЧАСОВ CMOS CALL OPEN LD HL,#0A20 ;В ЯЧЕЙКУ #0А НУЖНО CALL W_CMOS ;ЗАНЕСТИ #20!!! LD HL,#0В02 ;В ЯЧЕЙКУ #0В НУЖНО CALL W_CMOS ;ЗАНЕСТИ #02!!! CALL CLOSE LD A,7 ;ЕСЛИ ЕСТь ЧАСЫ ТО OUT (#FE),A ;БОРДЕР БУДЕТ БЕЛЫМ RET ;---ПРОЦЕДУРА ОТКРЫТИЯ ДОСТУПА К CMOS---- OPEN LD ВС,(R_SEL) ;ОТКРЫВАЕМ CMOS LD A,(ON) ;УСТАНОВКОЙ БИТА 7 OUT (С),A ; RET ;---ПРОЦЕДУРА ЗАКРЫТИЯ ДОСТУПА К CMOS--- CLOSE LD A,(OFF) ;ВСЕ ОТРУБАЕМСЯ LD ВС,(R_SEL) OUT (С),A RET ;---ПОДПРОГРАММА ДЛЯ ЗАПUCU ЗНАЧEНUЙ В CMOS-ЧАСЫ------------- ;ЗАПUCЬ ЧЕРЕЗ PEГUCTP HL, В Н-ЯЧЕЙКА, В L-ЗНЧEНUE W_CMOS LD ВС,(R_ADRS) OUT (С),Н LD ВС,(R_DATA) OUT (С),L RET Это процедура тикания часов: ;исходники взяты из прoграииы Мг.Gluk Reset Service 5.3k :ВЫВОД ВРЕМЕНИ И ДАТЫ НА ЭКРАН М1 CALL CMOS_R JP М1 CMOS_R EXX CALL CMOS_3 LD HL,10072 EXX RET CMOS_3 LD HL,#5815 CALL LLAFбЗ LD DE,#4015 LD Н,#0В CALL LLAF2В BIT 5,A JR Z,LLADB9 LD A,#0С CALL LLAE45 LD A,#0В CALL LLAE45 LD A,#0В CALL LLAE45 DEC Е DEC Е DEC Е LLADB9 INC Е INC Е INC Е LD Н,#04 CALL LLAE19 CALL LLAE1Е LD Н,#02 CALL LLAE19 CALL LLAE1Е LD Н,#00 CALL LLAE19 LD HL,#5835 CALL LLAFбЗ LD Н,#06 CALL LLAF2В LD DE,#4035 JR С,LLADF8 DEC A LD HL,LLAEE3 ADD A,A ADD A,L LD L,A JR NC,LLADEB INC Н LLADEB LD A,(HL) INC HL PUSH AF LD A,(HL) CALL LLAE45 РОР AF CALL LLAE45 DEC Е DEC Е LLADF8 INC Е INC Е LD A,#0В CALL LLAE45 LD Н,#07 CALL LLAE19 LD A,#0D CALL LLAE45 LD Н,#08 CALL LLAE19 LD A,#0D CALL LLAE45 LD Н,#09 CALL LLAE19 RET LLAE19 CALL LLAF2В JR LLAE32 LLAE1Е LD Н,#00 CALL LLAF2В RRCA LD A,#0A JR NC,LLAE2С LLAE28 CALL LLAE45 RET LLAE2С INC A JR LLAE28 LLAE2F INC DE INC DE RET LLAE32 JR С,LLAE2F PUSH AF RRCA RRCA RRCA RRCA AND #0F CALL LLAE45 РОР AF AND #0F CALL LLAE45 RET LLAE45 PUSH DE LD DE,LLAE63 ADD A,A LD L,A ADD A,A ADD A,L LD L,A LD Н,#00 ADD HL,DE РОР DE LD В,#06 LD С,D XOR A LD (DE),A INC D LLAE58 LD A,(HL) LD (DE),A INC HL INC D DJNZ LLAE58 XOR A LD (DE),A LD D,С INC Е RET LLAE63 LD A,A LD Н,Е LD Н,Е LD Н,Е LD Н,Е LD A,A JR LLAE83 JR LLAE85 JR LLAE87 LD A,A INC ВС LD A,A LD Н,В LD Н,В LD A,A LD A,A INC ВС RRCA INC ВС INC ВС LD A,A LD Н,Е LD Н,Е LD Н,Е LD A,A INC ВС INC ВС LD A,A LD Н,В LLAE83 LD A,A INC ВС LLAE85 INC ВС LD A,A LLAE87 LD A,A LD Н,В LD A,A LD Н,Е LD Н,Е LD A,A LD A,(HL) LD В,#06 LD В,#06 LD В,#7F LD Н,Е LD A,A LD Н,Е LD Н,Е LD A,A LD A,A LD Н,Е LD Н,Е LD A,A INC ВС LD A,A INC Е INC Е NOP NOP INC Е INC Е NOP NOP NOP NOP NOP NOP LD A,(HL) ADD A,С SBC A,A SUB С ADD A,С LD A,(HL) NOP NOP NOP INC Е INC Е INC Е NOP NOP LD A,(HL) LD В,D LD В,D LD В,D NOP NOP LLAEBF LD В,D LD A,(HL) LD В,D LD В,D NOP NOP LD (HL),В LD A,(HL) LD В,D LD A,(HL) NOP NOP LD A,#08 ЕХ AF,AF` ЕХ AF,AF` NOP NOP LD A,(HL) LD В,В LD В,В LD A,(HL) NOP NOP LD A,Н LD В,Н LD A,Н LD В,В NOP INC A LD В,В LD A,Н LD В,D LD A,Н LD (DE),A DJNZ LLAEF3 LLAEE3 EQU $-#01 LD С,#11 DJNZ LLAEFB LD (DE),A LD DE,#1104 LD С,#14 LD (DE),A LD (DE),A DJNZ LLAEBF INC В LLAEF3 XOR A LD A,Н LD ВС,(R_ADRS) OUT (С),A LD A,L LLAEFB LD ВС,(R_DATA) OUT (С),A CALL LLAFOD RET LLAFOЧ LD ВС,(R_SEL) LD A,(ON) DI OUT (С),A RET LLAFOD LD ВС,(R_SEL) LD A,(OFF) EI OUT (С),A RET LLAF16 CALL LLAFOЧ LD A,Н LD ВС,(R_ADRS) OUT (С),A LD ВС,(R_DATA) IN A,(С) LD Н,A CALL LLAFOD LD A,Н AND A RET LLAF2В CALL LLAFOЧ LD A,#0A LD ВС,(R_ADRS) OUT (С),A LD ВС,(R_DATA) IN A,(С) RLA JR С,LLAF5E CALL LLAF16 LD Н,A LD A,#00 AND A JR Z,LLAF5B LD A,Н LD С,#FF LLAFЧ9 INC С SUB #0A JR NC,LLAFЧ9 ADD A,#0A RLC С RLC С RLC С RLC С OR С AND A RET LLAF5B LD A,Н AND A RET LLAF5E CALL LLAFOD SCF RET LLAFбЗ LD D,Н LD Е,L INC Е LD ВС,#000A LD (HL),#61 ;байт атрибутов LDIR RET Вот еще u резидент для часов: :РЕЗИДЕНТ CMOS ЧАСОВ ДЛЯ IS=DOS ORG #С350 MEMO EQU $-1 DEFW INIT DEFW #0000 LD A,#FF МЕМ1 EQU $ LD HL,МЕМЗ LD С,#1Е RST #10 RET INIT INC A RET Z INC A RET NZ МЕМ2 EQU $ LD HL,МЕМЗ LD С,#1Е RST #10 RET DEFW #0000 МЕМЗ EQU $ LLC36A LD A,(LLC44D) ADD A,#10 МЕМЧ EQU $ LD (LLC44D),A RET NC DI LD ВС,#EFF7 LD A,#80 OUT (С),A LLC373 LD A,#0A MEMS EQU $ CALL LLC444 RLCA JR С,LLC373 LD A,#07 МЕМб EQU $ CALL LLC444 LD Е,A LD A,#08 МЕМ7 EQU $ CALL LLC444 AND #0F RRCA RRCA RRCA LD D,A AND #Е0 OR Е LD Е,A LD A,#01 AND D LD D,A LD A,#09 МЕМ8 EQU $ CALL LLC444 SLA A OR D LD D,A PUSH DE LD A,#00 МЕМ9 EQU $ CALL LLC444 RR A PUSH AF LD A,#02 МЕМ10 EQU $ CALL LLC444 LD Е,A LD D,#00 PUSH DE LD A,#04 МЕМ11 EQU $ CALL LLC444 LD Е,A LD A,#02 AND A PUSH AF МЕМ12 EQU $ LD HL,LLC44E LD ВС,#107С RST #10 РОР AF РОР DE МЕМ13 EQU $ LD HL,LLC451 RST #10 МЕМ14 EQU $ LD HL,LLC44D LD В,#04 LD A,#20 LLC3D4 INC HL СР (HL) JR NZ,LLC3DA LD (HL),#30 LLC3DA DJNZ LLC3D4 DEC HL РОР AF LD A,#3A JR С,LLC3E4 AND #20 LLC3E4 LD (HL),A LD С,#45 RST #10 EXX DEC HL DEC HL РОР DE LD (HL),D DEC HL LD (HL),Е LD В,#05 МЕМ15 EQU $ LD HL,LLC44E LD DE,#401В LLC3F7 PUSH ВС PUSH HL PUSH DE LD L,(HL) LD Н,#00 ADD HL,HL ADD HL,HL ADD HL,HL LD ВС,#3С00 ADD HL,ВС ЕХ DE,HL LD В,#08 РОР HL PUSH HL LLC409 PUSH ВС LD A,(DE) LD (HL),A LD ВС,#0100 ADD HL,ВС INC DE РОР ВС DJNZ LLC409 РОР DE РОР HL РОР ВС INC HL INC DE DJNZ LLC3F7 LD ВС,#EFF7 XOR A OUT (С),A EI RET LLC444 LD ВС,#DFF7 OUT (С),A LD В,#BF IN A,(С) RET LLC44D DEFB #00 LLC44E DEFM "## ##" LLC451 EQU $-2 DEFB #FF,#FF DEFW MEMO,МЕМ1,МЕМ2,МЕМЗ DEFW МЕМЧ,MEMS,МЕМб,МЕМ7 DEFW МЕМ8,МЕМ9,МЕМ10,МЕМ11 DEFW МЕМ12,МЕМ13,МЕМ14,МЕМ15 В приложении находится установщик рези- дента вместе с резидентом часов.