City
#20
14 июля 1999 |
|
Планета Шелезяка - программирование XTR модема.
──══░░▒▒▓▓ ПЛАНЕТА ШЕЛЕЗЯКА ▓▓▒▒░░══── <LD> X-TRADE GROUP ╔════════════════╗ ║ ║ ║ XTR-MODEM ║ ║ ║ ╚════════════════╝ продолжение ПРОГРАММИРОВАНИЕ Для любопытных пользователей сообщаем необходимый минимум информации. Общение с модемом происходит через единственный порт с адресом #B7 (183). IN A,(#B7), если линия не занята модемом Bit7 BitO 0 0 линия не подключена к модему 0 1 снята трубка паралл. аппарата 1 0 звонок ( возможны глюки ) 1 1 линия свободна IN A,(#B7), если линия занята модемом Bit7 всегда 0 BitO через него идут принимаемые данные OUT (#B7),A BitO при занятой линии - передаваемые данные, при приеме д.б. =1 при освобожденной линии неактуален Bit1 1-занять линию 0-освободить линию BitЧ биты определяют время, до которого BitS аппаратно растянется интервал вре- Bit7 мени между двумя соседними коман- Bitб дами IN A,(#B7) или OUT (#B7),A Bit7-BitЧ #00 время .000002*16 сек #10 время .000002*15 сек ... #E0 время .000002*1 сек #F0 асинхронный режим, NO WAIT Для случая #F0 ничего не растягивается, все выполняется, как для порта #FE в режиме эмуляции VICOMM. Для чего нужны биты 7-4? пример: LD A,#?0 * OUT (#B7),A * IN A,(#B7) ! POP AF IN A,(#B7) ! без аппаратной поддежки для команд, отмеченых знаком !, период выполненя составит: тактов секунд PENTAGON 11+10=21 .000006 TURBO PENTAGON 11+10=21* .000004 ! SCORPION 12+10=22 .0000063 TURBO SCORPION 12+10=22* .000004 ! KAY 12+10=22 .0000063 TURBO KAY 12+12=24 .0000034 * плюсуется WAIT ! приблизително Для случая XTR период для всех машин уравнивается, увеличиваясь (!) до значения, установленого в битах 7-4 (кроме значения #F0). То же спрведливо для OUT (#B7),A и для любых комбинаций IN/OUT с портом #B7. Примечание_1: естественно, программа должна быть писана под худшую машину, чтобы время исполнения команд на этой машине было меньше, чем установленое время, до которого все растягивается (иначе это будет сжатие!). Примечание_2: период без растягивания не должен быть менее .00000229 сек, (8 тактов heTURBO PENTAGONa, 16 тактов TURBO PENTAGONa), иначе растягивания не произойдет. Пример паузы в .002 секунды: W002 XOR A OUT (#B7),A ; период 32 мкС LD B,62 W002_1 IN A,(#B7) ; 62*.000032=.001984 DJNZ W002_1 ... На любой машине это будет .002 сек, независимо от TURBO/heTURBO. Примеры программирования: освободить линию OUT (#B7),#F0 занять линию OUT (#B7),#F3 Набор номера (WAIT ... в секундах): ADRNUM DB "1234567" DIAL OUT (#B7),#00 ; сброс линии WAIT 0.5 OUT (#B7),#02 ; занять линию LD HL,ADRNUM LD C,7 DIAL7 WAIT 0.5 LD A,(HL) SUB #30 JR NZ,DIAL7_0 LD A,10 ; для нуля-десять DIAL7_0 LD B,A INC HL PUSH HL PUSH BC CALL DIALN ; набор цифры POP BC POP HL DEC C JR NZ,DIAL7 WAIT 0.5 OUT (#B7),#03 RET DIALN OUT (#B7),#00 WAIT .06 OUT (#B7),#02 WAIT .04 DJNZ DIALN1 RET Передача данных (принцип VICOMM): OUT (#B7),#F2 WAIT OUT (#B7),#F3 WAIT повторять по алгоритму Ожидание звонка: WTCALL LD DE,#8180 XOR A OUT (#B7),A WTCLO LD BC,#FFOO WTCL1 WAIT .002 IN A,(#B7) AND D CP E JR NZ,WTCL2 INC C WTCL2 DJNZ WTCL1 LD A,C CP 30 ; антиглюк JR C,WTCLO ; нет звонка WTCLЗ LD B,0 ; ожидаем конец WTCLЧ WAIT .002 ; звонка IN A,(#B7) AND D CP E JR Z,WTCLЗ DJNZ WTCLЧ ; можно занимать линию RET ! не рекомендуется занимать линию в момент звонка (как-никак 120 вольт !!!), нужно дождаться паузы между звонками (сказанное справедливо для любого оконечного устройства телефонной линии).
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября