Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Извиняюсь! вот ...

Отправлено avr123.nm.ru 13 марта 2007 г. 11:27
В ответ на: В таком виде он не будет ассемблироваться. Нужно форматировать текст. Используйте теги <pre>...</pre> отправлено Bill_ 13 марта 2007 г. 11:17

;Синтезатор частоты трансивера диапазона 144-146 мГц
;Диапазон частот на передачу 144-146 мГц шаг 25 кГц
;Диапазон частот на прием 133,3-135,3 Мгц (промежуточная частота 10,7 мГц)
;Диапазон принимаемых частот в режиме Repiter 133,9-135,9 Мгц
;запоминание 36 каналов в EEPROM
;4 репитерных канала (№32-№35)
;валкодер порт RB0,RB1
;Распознавание режимов: Н - передача (ТХ), L - прием (RX) порт RB2
;
;
;Автор Рябов Е.И.
;18 декабря 2005
;
;
;
;
;
;
;
;

list p=16F84
#include

__CONFIG _CP_OFF & _WDT_ON & _PWRTE_ON & _XT_OSC

;Раздел описания переменных---------

SensPos equ 22h ;Регистр датчиков валкодера
Count equ 0dh ;Временный счетчик
Count2 equ 0eh ;Временный счетчик
Count3 equ 2fh
D00 equ 19h
Digit0 equ 18h ;Цифры значения частоты
Digit1 equ 17h ;приема/передачи
Digit2 equ 16h ;
Digit3 equ 15h ;
Digit4 equ 14h
Digit5 equ 13h
D01 equ 12h ;Цифры номера канала
C0 equ 11h ;
C1 equ 10h
D02 equ 0fh
FreqL equ 1ch ;Младший байт частоты
FreqH equ 1bh ;Старший байт частоты приема
IFL equ 2ch ;Промежуточные байты
IFH equ 2bh ;частоты
Fm_number equ 1ah ;Номер канала
IFm equ 2ah
DF equ 2dh ;смещение (f-44,000 мГц)
Divisor_high equ 1eh ;Старший байт делителя
Divisor_low equ 1fh ;Младший байт делителя
Dtemp equ 1dh
Flag equ 3fh ;0-'L'канал/'H'частота 2-прием/передача 3- /репитер
th equ 20h ;Старший байт таймера
Count4 equ 21h
BUTTONS equ 23h ;Регистр кнопок
Bufer equ 24h

;Описание констант-----------------

SENSORS equ PORTB
SEN1 equ 01H
SEN2 equ 02H
SENS equ 03H ;маска датчиков
Pos0 equ 0
Pos1 equ SEN1
Pos2 equ SENS
Pos3 equ SEN2
BUTS equ 0xf0 ;маска кнопок
ButU equ 0xE0 ;увеличить
ButD equ 0xD0 ;уменьшить
ButF equ 0xB0 ;перейти в настройку
ButC equ 0x70 ;перейти в работу(запомнить канал по умолчанию)
Byt3 equ 0xA0 ;Управляющий байт LM7001 (FM, шаг 25 кГц)
D_h_s equ 16h
D_l_s equ 80h ;делитель при передаче 144 мГц
D_h_p equ 14h
D_l_p equ 0xD7 ;делитель при приеме 133,3 мГц
D_h_r equ 14h
D_l_r equ 0xEC ;делитель при репитерном приеме 133,9 мГц


;Раздел макроопределений

JZ macro LBL
btfsc STATUS,Z
goto LBL
endm
CJZ macro LBL
btfsc STATUS,Z
call LBL
endm
NODE macro pp1,nn1,pp2,nn2,pp3,nn3
local N0
N0 movfw SENSORS
movwf BUTTONS
andlw SENS
movwf SensPos
xorlw pp1
JZ nn1
movfw SensPos
xorlw pp2
JZ nn2
movfw SensPos
xorlw pp3
JZ nn3
call BTN
clrWDT
goto N0
endm

org 0x00
reset goto start
org 0x04

outsim addwf PCL,f ;таблица конвертации
retlw 0xee ;0
retlw 0x60 ;1
retlw 0x2f ;2
retlw 0x6d ;3
retlw 0xe1 ;4
retlw 0xcd ;5
retlw 0xcf ;6
retlw 0x68 ;7
retlw 0XEF ;8
retlw 0xed ;9
retlw 0x00 ;
retlw 0x01 ;-
retlw 0x08 ;^
retlw 0x43 ;п

start movlw 0x88 ;Для индикации
movwf FreqL ;
movlw 0x13 ;
movwf FreqH ;5,000 мГц
movlw .1 ;
movwf Digit5 ;
movlw .4 ;
movwf Digit4 ;140 мГц
movlw 20h ;
movwf Fm_number ;32 канал

movlw 0xA8 ;коэффициент деления частоты при передаче
movwf Divisor_low ;145,000/0,025=5800=0x16A8
movlw 0x16 ;
movwf Divisor_high ;
movlw 0x28 ;
movwf DF ;

clrf PORTA ;Пробуждение МТ10Т7
clrf PORTB
bsf STATUS,RP0
movlw 0x00
movwf PORTA
movlw 0x0f
movwf PORTB
bcf STATUS,RP0
bcf PORTA,1 ;Адрес
movlw 0xf0 ;триггера блокировки
call st1
movlw 0x10
call st
call RDeepromC
call RDeeprom
clrf Flag
btfsc Fm_number,5 ;каналы 32-35
bsf Flag,3 ;режим repit
btfss Fm_number,5 ;каналы 0-31
bcf Flag,3 ;режим прием
call Fg
call Fi ;!!!!!!!!!!!!!
call show
HELP nop
ND0 ;NODE Pos1,ND1,Pos3,ND4,Pos2,ND0
movfw SENSORS
movwf BUTTONS
andlw SENS
movwf SensPos
xorlw 01h
JZ ND1
movfw SensPos
xorlw 02h
JZ ND4
call BTN
clrWDT
goto ND0
ND1 NODE Pos2,ND2,Pos0,ND0,Pos3,ND0
ND2 NODE Pos3,ND3,Pos1,ND1,Pos0,ND0
ND3 NODE Pos0,ND3A,Pos2,ND2,Pos1,ND0
ND3A call mUp0 ;+1
goto ND0
ND4 NODE Pos2,ND5,Pos0,ND0,Pos1,ND0
ND5 NODE Pos1,ND6,Pos3,ND4,Pos0,ND0
ND6 NODE Pos0,ND6S,Pos2,ND5,Pos3,ND0
ND6S call mDown0 ;-1
goto ND0

BTN movlw 0bh
movwf th
movlw 05h
movwf Count4
movfw BUTTONS
andlw b'00000100' ;изменился ли вход
xorwf Flag,W ;режима прием\передача?
movwf Bufer
btfss Bufer,2 ;
goto btn1 ;
btfsc BUTTONS,2 ;переключаем флаг
bsf Flag,2 ;
btfss BUTTONS,2 ;
bcf Flag,2 ;
call Fi
call Fg
call show
clrWDT
btn1 movfw BUTTONS
andlw BUTS
movwf BUTTONS
xorlw ButU
CJZ mUp
movfw BUTTONS
xorlw ButD
CJZ mDown
movfw BUTTONS
xorlw ButF
CJZ mF
movfw BUTTONS
xorlw ButC
CJZ mC
return
mUp btfsc Flag,0
goto Up1
btfss Flag,0
goto Up
mDown btfsc Flag,0
goto Down1
btfss Flag,0
goto Down
mUp0 btfsc Flag,0
goto Up10
btfss Flag,0
goto Up
mDown0 btfsc Flag,0
goto Down10
btfss Flag,0
goto Down
mC btfsc Flag,0 ;работа
call WReeprom
btfss Flag,0
call WReepromС
bcf Flag,0
goto mF1
mF bsf Flag,0 ;настройка
mF1 call Fi
call Fg
call show
call time1
clrWDT
return
Down
call time1
decf Fm_number,f
movfw Fm_number
sublw 0xff
btfss STATUS,2
goto ChangeCanal
movlw 23h
movwf Fm_number
goto ChangeCanal
Up
call time1
incf Fm_number,f
movfw Fm_number
sublw 0x24
btfsc STATUS,2
clrf Fm_number
ChangeCanal
btfsc Fm_number,5 ;каналы 32-35
bsf Flag,3 ;режим repit
btfss Fm_number,5 ;каналы 0-31
bcf Flag,3 ;режим прием
call RDeeprom
call Fi
call Fg
call show
return
Down1 call time
Down10 decf DF,f
movfw DF
sublw 0xff ;Нижняя граница F
btfss STATUS,2
goto ChangeFreq
movlw 50h
movwf DF
movlw 0x70
movwf FreqL
movlw 0x17
movwf FreqH
goto ChangeFreq
Up1 call time
Up10 incf DF,f
movf DF,w
sublw 51h ;Верхняя граница F
btfss STATUS,2
goto ChangeFreq
clrf DF
movlw 0xA0
movwf FreqL
movlw 0x0F
movwf FreqH
ChangeFreq
call Fi
call show
clrWDT
movf Count4,f
btfss STATUS,2
decf Count4,f
btfss STATUS,2
goto aa
movlw 01h ;Ускорение ввода
subwf th,W
btfss STATUS,2
decf th,f
aa btfss PORTB,4
goto Up1
btfss PORTB,5
goto Down1
return

time
movlw 0xff
movwf Count2
movf th,W
movwf Count
t decf Count2,f
btfsc STATUS,2
decf Count,f
btfsc STATUS,2
return
goto t

time1
movlw 0xff
movwf Count2
movlw 0x0B
movwf Count
t1 decf Count2,f
btfsc STATUS,2
decf Count,f
btfsc STATUS,2
return
goto t1

Bin2LCD ;Перекодирование 2-x байт двоичного кода в двоично-десятичный
movf FreqH,w
movwf IFH
movf FreqL,w
movwf IFL
bcf STATUS,0
movlw .16
movwf Count
clrf Digit4
clrf Digit3
clrf Digit2
clrf Digit1
clrf Digit0
loop16
rlf FreqL,f
rlf FreqH,f
rlf Digit0,f
rlf Digit1,f
rlf Digit2,f
rlf Digit3,f
rlf Digit4,f
decfsz Count,f
goto adjDEC
movfw Digit4
andlw 0Fh
swapf Digit3,w
andlw 0Fh
movfw Digit3
andlw 0Fh
swapf Digit2,w
andlw 0Fh
movfw Digit2
andlw 0Fh
movwf Digit4
swapf Digit1,w
andlw 0Fh
movwf Digit3
movfw Digit1
andlw 0Fh
movwf Digit2
swapf Digit0,w
andlw 0Fh
movwf Digit1
movfw Digit0
andlw 0Fh
movwf Digit0
movf IFH,w
movwf FreqH
movf IFL,w
movwf FreqL
return
adjDEC
movlw Digit0
movwf FSR
call adjBCD
movlw Digit1
movwf FSR
call adjBCD
movlw Digit2
movwf FSR
call adjBCD
movlw Digit3
movwf FSR
call adjBCD
movlw Digit4
movwf FSR
call adjBCD
goto loop16
adjBCD
movlw 3
addwf 0,w
movwf Count2
btfsc Count2,3
movwf 0
movlw 30
addwf 0,w
movwf Count2
btfsc Count2,7
movwf 0
retlw 0
BCD ;Перекодирование 1 байтa двоичного кода в двоично-десятичный
movf Fm_number ,w
movwf IFm
bcf STATUS,0
movlw .8
movwf Count
clrf C1
clrf C0
loop8
rlf Fm_number,f
rlf C0,f
rlf C1,f
decfsz Count,f
goto adjDEC1
movfw C1
andlw 0Fh
movwf D02
swapf C0,w
andlw 0Fh
movwf C1
movfw C0
andlw 0Fh
movwf C0
movf IFm,w
movwf Fm_number
return
adjDEC1
movlw C0
movwf FSR
call adjBCD1
movlw C1
movwf FSR
call adjBCD1
movlw D02
movwf FSR
call adjBCD1
goto loop8
adjBCD1
movlw 3
addwf 0,w
movwf Count2
btfsc Count2,3
movwf 0
movlw 30
addwf 0,w
movwf Count2
btfsc Count2,7
movwf 0
retlw 0
RDeepromC ;Чтение из EEPROM
bcf STATUS,5 ;номера канала
movlw 0x3f
movwf EEADR
bsf STATUS,5
bsf EECON1,RD
bcf STATUS,5
movf EEDATA,W
btfsc EEDATA,7
return
movwf Fm_number
return
RDeeprom ;Чтение из EEPROM
bcf STATUS,5 ;частоты
movf Fm_number,W
movwf EEADR
bsf STATUS,5
bsf EECON1,RD
bcf STATUS,5
movf EEDATA,W
btfsc EEDATA,7
return
movwf DF
return
WReeprom ;Запись в EEPROM запомненой частоты
movf DF,w
movwf EEDATA
movf Fm_number,w
movwf EEADR
call write
return
WReepromС ;Запись в EEPROM канала по умолчанию
movf Fm_number,w
movwf EEDATA
movlw 3fh
movwf EEADR
call write
return
write ;Запись в EEPROM.
bsf STATUS,RP0
;bcf INTCON,GIE
bsf EECON1,WREN ;разрешение записи
bcf EECON1,EEIF
movlw 055h
movwf EECON2
movlw 0AAh
movwf EECON2
;bsf INTCON,GIE
bsf EECON1,WR
wee btfsc EECON1,WR ;проверка окончания записи
goto wee
bcf EECON1,WREN ;запрет записи
bcf STATUS,RP0
return
show call BCD
call Bin2LCD
movlw .1
movwf Digit5 ;
movlw .4 ;
movwf Digit4 ;140 мГц
btfsc Flag,0
goto show2
show1 ;Вывод на МТ10Т7 в режиме "канал"
movlw 0x0a
movwf D00
movwf D01
goto show0
show2 ;Вывод на МТ10Т7 в режиме "частота"
movlw 0x0a
movwf D01
movlw 0x0b
movwf D00
show0 btfsc Flag,3
movlw 0x0C
movwf D00
btfss Flag,2
goto sh3
movlw 0x0D
movwf D01
sh3 clrf PORTB
bsf STATUS,RP0
movlw 0x00
movwf PORTA
movlw 0x0f
movwf PORTB
bcf STATUS,RP0
movf C1,w
btfsc STATUS,2
call nolC1
movlw C1 ;Конвертация цифр в коды сегментов
movwf FSR
movlw 0X0A
movwf Count
nextk movf INDF,w
call outsim ;таблица конвертации
movwf INDF
incf FSR,f
decfsz Count,f
goto nextk
bsf Digit3,4 ;запятая
btfsc Flag,0
bsf Digit5,0 ;тире в режиме "частота"
btfsc Flag,0
bsf D00,0 ;тире в режиме "частота"
bcf PORTA,1 ;Адрес
movlw 0x00 ;знакоместа
call st1
movlw C1 ;Отслать коды сегментов на МТ10Т7
movwf FSR
movlw 0X0A
movwf Count
nexto swapf INDF,w
call st
movf INDF,w
call st
incf FSR,f
decfsz Count,f
goto nexto

; Вывод на LM7001
bsf PORTA,2
movf Divisor_low,w
movwf Dtemp
call outbyte
movf Divisor_high,w
movwf Dtemp
call outbyte
movlw Byt3
movwf Dtemp
call outbyte
bcf PORTA,2
clrf PORTB ;включение опроса кнопок
bsf STATUS,RP0 ;и валкодера
movlw 0xF7
movwf PORTB
bcf OPTION_REG,7
bcf STATUS,RP0
return
st ;Пересылка тетрады в МТ10Т7
bsf PORTA,1 ;данные
st1 bsf PORTA,0 ;адрес
nop
movwf PORTB
nop
bcf PORTA,0
nop
bsf PORTA,0
return
nolC1
movlw 0x0a
movwf C1
return

outbyte
movlw 0x08
movwf Count
ob bcf PORTA,4
rrf Dtemp,f
btfsc STATUS,0
bsf PORTA,4
nop
bsf PORTA,3
nop
bcf PORTA,3
decf Count,f
btfsc STATUS,2
return
goto ob
;Вычисление частоты гетеродина
Fg btfsc Flag,2
goto Fgsend
btfsc Flag,3
goto Fgr
goto Fgp
Fgsend movlw D_h_s ;передача
movwf Divisor_high
movlw D_l_s
movwf Divisor_low
goto FG
Fgp movlw D_h_p ;прием
movwf Divisor_high
movlw D_l_p
movwf Divisor_low
goto FG
Fgr movlw D_h_r ;репитер
movwf Divisor_high
movlw D_l_r
movwf Divisor_low
FG movfw DF
addwf Divisor_low,f
btfsc STATUS,0
incf Divisor_high,f
return
Fi movlw 0x0F
movwf FreqH
movlw 0xA0
movwf FreqL
movlw 0x19 ;вычисление частоты
movwf Count ;для индикации
movfw DF
Fi1 addwf FreqL,f ;DF*25
btfsc STATUS,0
incf FreqH,f
decf Count,f
btfsc STATUS,2
return
goto Fi1


; ORG 0x2100 ; Память данных


end



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

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

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 654:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru