;Synthesizer--SI145M---1996-------------------- ;Михаил Кислинский. aktay@online.ural.ru ;ПЧ=10700. WDT ON. F_RC_osc=50...100кГц. ;__Files:_________________________ count equ 0C ;счетчик bufB equ 0E ;буфер порта В, rotate equ 0F ;ротация DATA switch equ 10 ;младшие 6 бит из порта B и результат обработки ;__Ports:_________________________ port_a equ 5 port_b equ 6 ;----------------------------------------------------- list p=16C54 ;----------------------------------------------------- org 0 ;Subroutine---выдать байт из rotate последовательно в RA0--- send movwf rotate ;байт из W в файл rotate clrf count ;загрузить 8 bsf count,3 ; в счетчик бит. bcf 3,0 ;сброс cary next rlf rotate,f ;сдвиг rotate влево (через Cary) btfsc 3,0 ;если Cary=0 skip bsf port_a,0 ;установить DATA=1 btfss 3,0 ;если Сary=1 skip bcf port_a,0 ;уст. DATA=0 bsf port_a,1 ;CLK=1 _- bcf port_a,1 ; =0 -_ тактовый импульс. decfsz count,1 ;проверить счетчик бит. goto next ;не равен 0. Следующий бит. retlw 0 ;выход из п\программы. ;######################################################### start movlw 0 ;байт конфигурации контроллера в W option ; W в option register. movlw 8 ;байт конфигурации порта в W. tris 5 ; 3 младших разряда RA на вывод, старший на ввод. movlw 3F ;загрузить невозможную F ;_____Контроль захвата ФАПЧ____________ btfss port_a,3 ;skip если есть захват movwf bufB ;W в bufB ;---опрос переключателей-------------- begin movf bufB,w ;из bufB в W xorwf port_b,w ;сравнить порт B и старый байт из bufB btfsc 3,2 ; sleep ;старое положение. Спать до срабатывания WDT ; при срабатывании WDT стартовый адрес- 1FF (goto start) movf port_b,w ;новая частота. Загрузить 1508ПЛ1. movwf bufB ; в буфер bufB movlw 3F ;берем andwf bufB,w ; 6мл.бит и помещаем movwf switch ; в switch movlw 1 ;выдать в 1508ПЛ1 call send ; 1й байт - 01 (всегда 01) ;----проверка переключателя 144/145--------------- btfsc port_b,6 goto Band145 ;-----144-------------------- rlf switch,f ;умножить на 2 bcf switch,0 ;проф.очистка 0го бита btfss port_b,7 ;ПРД ? goto RX144 ;-нет ;-----TX144------------------ movlw 2D ;выдать 2-й байт 2D call send ;-----третий байт------------ Third movf switch,w ;из switch в W call send ;выдать третий байт goto strob ;выдать строб. Возврат к опросу PB ;======RX144============================== RX144 movlw 29 call send ;выдать 2-й байт- 29 movlw 0A8 addwf switch,f ;прибавить A8 к switch goto Third ;выдать 3й байт ;=====анaлиз RX/TX======================== Band145 movlw 28 addwf switch,f ;прибаввить 28(hex) к switch rlf switch,f ;X2 bcf switch,0 ;очистка младшего бита btfss port_b,7 ;ПРД ? goto RX145 ; прием ;------TX 145-------------------- TX145 movlw 2D ; передача call send ;выдать 2-й байт- 2D goto Third ;и третий ;=====RX 145======================= RX145 movlw 0A8 ;прибавить A8 addwf switch,f ; к switch btfss 3,0 ;контроль переполнения goto R51 movlw 2A ;есть Cary. 2й байт=2A (145100...145975) R52 call send ;выдать 2й байт goto Third ; 3-ий R51 movlw 29 ;2й байт=29 (145000...145075) goto R52 ;=====Строб======================= strob bsf port_a,2 ;1 _- bcf port_a,2 ;0 -_ goto begin ;вернуться к опросу порта B ;================================== org 1FF ;стартовый адрес PIC16C54 = 1FF goto start end ;__________________________________