Choď na obsah Choď na menu

PIC12LF1840 morse FVR

list p=12F1840
#include <p12F1840.inc>
 
    __CONFIG _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
    __CONFIG _CONFIG2, _WRT_OFF & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF
 
 
CBLOCK 20h
N
N10
TMP
Cislo1
PocetRadu1
PocetRadu10
PocetRadu100
TMP_RS232
count_rs232
ADC_H
ADC_L
ENDC
 
 
#define LED PORTA,2
 
 
;***************************************************************************************************************************
org 00h
GOTO START
;***************************************************************************************************************************
 
 
nastavenie_PIC ;-----u-----;
   ;       + ; Vdd Vss ; -
   ; ; RA5 RA0 ; PGD
   ; ; RA4 RA1 ; PGC
   ; Vpp ; RA3 RA2 ; Morze 
;-----------;
 
banksel PORTA ;--------------------------------- bank 0 ----------------------------------------------------
clrf PORTA 
movlw b'00000000' ; bit7 GIE: 1=global interrupt ;bit6 PEIE: 1=peripheral interrupt
movwf INTCON
banksel LATA ;--------------------------------- bank 2 ----------------------------------------------------
clrf LATA 
 
 
 
 
 
 
;FIXNE NAPATIE PRE A/D PREVODNIK
movlw b'10000101' ;bit 7 Fixed Voltage Reference is enabled
;bit 5 Temperature Indicator on/off
;bit 4 Temperature Indicator Range Selection bit VOUT = VDD - 2VT (Low Range)
;bity 3-2 01 = Comparator, DAC and CPS module Fixed Voltage Reference Peripheral output is 1x (1.024V)
;bity 1-0 01 = ADC Fixed Voltage Reference Peripheral output is 1x (1.024V)
movwf FVRCON
 
 
 
 
 
 
 
banksel ANSELA ;--------------------------------- bank 3 ----------------------------------------------------
clrf ANSELA
banksel TRISA ;--------------------------------- bank 1 ----------------------------------------------------
movlw b'00000000' 
movwf TRISA 
;movlw b'01101010' ; bit7 zapnutie 4xPLL; bity6-3 frekvencia (4 MHz)
movlw b'00000000'
movwf OSCCON
;movlw b'00100101' ;256s bit 5-1 prescale; bit 0 on/off
;movlw b'00100011' ;128s bit 5-1 prescale; bit 0 on/off
;movlw b'00100001' ;64s bit 5-1 prescale; bit 0 on/off
;movlw b'00011111' ;32s bit 5-1 prescale; bit 0 on/off
;movlw b'00011101' ;16s bit 5-1 prescale; bit 0 on/off
;movlw b'00011011' ;8s bit 5-1 prescale; bit 0 on/off
;movlw b'00011001' ;4s bit 5-1 prescale; bit 0 on/off
; movlw b'00010111' ;2s bit 5-1 prescale; bit 0 on/off
;movlw b'00010101' ;1s bit 5-1 prescale; bit 0 on/off
;movlw b'00010011' ;512ms bit 5-1 prescale; bit 0 on/off
;movlw b'00010001' ;256ms 5-1 prescale; bit 0 on/off
;movlw b'00001111' ;128ms bit 5-1 prescale; bit 0 on/off
;movlw b'00001101' ;64ms bit 5-1 prescale; bit 0 on/off
;movlw b'00001011' ;32ms bit 5-1 prescale; bit 0 on/off
;movlw b'00001001' ;16ms bit 5-1 prescale; bit 0 on/off
;movlw b'00000111' ;8ms bit 5-1 prescale; bit 0 on/off
;movlw b'00000101' ;4ms bit 5-1 prescale; bit 0 on/off
;movlw b'00000011' ;2ms bit 5-1 prescale; bit 0 on/off
;movlw b'00000001' ;1ms bit 5-1 prescale; bit 0 on/off
movwf WDTCON ; nastavenie WATCHDOG
 
 
 
 
 
 
 
 
 
 
;A/D PREVODNIK
movlw b'01111100' ;bity 6-2 Analog Channel Select bits
;00000 = AN0
;00001 = AN1
;! 00010 = AN2 !
;00011 = AN3
;11101 = Temperature Indicator(3).
;11110 = DAC output(1)
;11111 =FVR (Fixed Voltage Reference) Buffer 1 Output(2) 
;bit 1 GO/DONE 
;bit 0 ADC Enable bit
movwf ADCON0
movlw b'01110000' ;bit 7 zarovnanie ADRESH/ADRESL 1=doprava, 0=dolava
;bity 6-4 zdroj hodin:
; 000 = FOSC/2 pre 32 MHz neodporucane    nefunguje
; 001 = FOSC/8 pre 32 MHz neodporucane    Tad = 5 us
; 010 = FOSC/32 Tad pre 32 MHz Tad = 13 us
; 011 = FRC (interny RC oscillator) Tad = 27 us
; 100 = FOSC/4 pre 32 MHz neodporucane Tad = 4 us
; 101 = FOSC/16 pre 32 MHz neodporucane Tad = 8 us
; 110 = FOSC/64 Tad pre 32 MHz = 2 us Tad = 24 us
; 111 = FRC (interny RC oscillator) Tad = 27 us
;bity 1-0 zdroj referencie: 00=Vdd, 10=Vref pin, 11=FVR modul
movwf ADCON1
 
 
 
 
 
 
 
 
 
 
 
 
 
banksel PORTA ;--------------------------------- bank 0 ----------------------------------------------------
clrf PORTA
clrf LATA
clrf N
clrf N10
clrf TMP
clrf Cislo1
clrf PocetRadu1
clrf PocetRadu10
clrf PocetRadu100
return
 
 
 
 
;********************************************************************************************************
;********************************** Vysielanie MORSE vystupu.**************************************
;********************************************************************************************************
 
; ciarka = 3 bodky
; medzera v znacke = 1 bodka
; medzera medzi znackami = 3 bodky
 
;=================================== Definicia elementov MORSE ====================================
 
pauza
movwf N10
clrwdt
p1 movlw .7;.35
movwf N
decfsz N
goto $-1
decfsz N10
goto p1
return
 
 
 
pauza_ciarka
movlw .90
call pauza
return
 
 
 
pauza_bodka
movlw .30
call pauza
return
 
 
 
medzera
movlw .90 ;.60
call pauza
return
 
 
 
 
prestavka
call pauza_ciarka
call pauza_ciarka
return
 
 
 
ciarka
bsf LED
call pauza_ciarka
bcf LED
call pauza_bodka
return
 
bodka
bsf LED
call pauza_bodka
bcf LED
call pauza_bodka
return
 
;=================================== Definicia znakov MORSE ====================================
 
_A
call bodka
call ciarka
call medzera
return
_B
call ciarka
call bodka
call bodka
call bodka
call medzera
return
_C
call ciarka
call bodka
call ciarka
call bodka
call medzera
return
_D
call ciarka
call bodka
call bodka
call medzera
return
_E
call bodka
call medzera
return
_F
call bodka
call bodka
call ciarka
call bodka
call medzera
return
_G
call ciarka
call ciarka
call bodka
call medzera
return
_H
call bodka
call bodka
call bodka
call bodka
call medzera
return
_I
call bodka
call bodka
call medzera
return
_J
call bodka
call ciarka
call ciarka
call ciarka
call medzera
return
_K
call ciarka
call bodka
call ciarka
call medzera
return
_L
call bodka
call ciarka
call bodka
call bodka
call medzera
return
_M
call ciarka
call ciarka
call medzera
return
_N
call ciarka
call bodka
call medzera
return
_O
call ciarka
call ciarka
call ciarka
call medzera
return
_P
call bodka
call ciarka
call ciarka
call bodka
call medzera
return
_Q
call ciarka
call ciarka
call bodka
call ciarka
call medzera
return
_R
call bodka
call ciarka
call bodka
call medzera
return
_S
call bodka
call bodka
call bodka
call medzera
return
_T
call ciarka
call medzera
return
_U
call bodka
call bodka
call ciarka
call medzera
return
_V
call bodka
call bodka
call bodka
call ciarka
call medzera
return
_X
call ciarka
call bodka
call bodka
call ciarka
call medzera
return
_Y
call ciarka
call bodka
call ciarka
call ciarka
call medzera
return
_Z
call ciarka
call ciarka
call bodka
call bodka
call medzera
return
_1
call bodka
call ciarka
call ciarka
call ciarka
call ciarka
call medzera
return
_2
call bodka
call bodka
call ciarka
call ciarka
call ciarka
call medzera
return
_3
call bodka
call bodka
call bodka
call ciarka
call ciarka
call medzera
return
_4
call bodka
call bodka
call bodka
call bodka
call ciarka
call medzera
return
_5
call bodka
call bodka
call bodka
call bodka
call bodka
call medzera
return
_6
call ciarka
call bodka
call bodka
call bodka
call bodka
call medzera
return
_7
call ciarka
call ciarka
call bodka
call bodka
call bodka
call medzera
return
_8
call ciarka
call ciarka
call ciarka
call bodka
call bodka
call medzera
return
_9
call ciarka
call ciarka
call ciarka
call ciarka
call bodka
call medzera
return
_0
call ciarka
call ciarka
call ciarka
call ciarka
call ciarka
call medzera
return
 
_PLUS
call bodka
call ciarka
call bodka
call ciarka
call bodka
call medzera
return
 
_MINUS
call ciarka
call bodka
call bodka
call bodka
call bodka
call ciarka
call medzera
return
 
_CIARKA
call ciarka
call ciarka
call bodka
call bodka
call ciarka
call ciarka
call medzera
return
 
 
 
 
_BODKA
call bodka
call ciarka
call bodka
call ciarka
call bodka
call ciarka
 
call medzera
return
 
 
_OTAZNIK
call bodka
call bodka
call ciarka
call ciarka
call bodka
call bodka
 
call medzera
return
 
 
_VYKRICNIK
call bodka
call bodka
call ciarka
call ciarka
call bodka
 
call medzera
return
 
 
 
_DVOJBODKA
call ciarka
call ciarka
call ciarka
call bodka
call bodka
call bodka
 
call medzera
return
 
 
 
 
 
 
 
 
CISLICA ;*************************** Premena jednej cislice na znak morze ****************************
movwf TMP
movlw .0
subwf TMP,w
btfsc STATUS,Z
call _0
movlw .1
subwf TMP,w
btfsc STATUS,Z
call _1
movlw .2
subwf TMP,w
btfsc STATUS,Z
call _2
movlw .3
subwf TMP,w
btfsc STATUS,Z
call _3
movlw .4
subwf TMP,w
btfsc STATUS,Z
call _4
movlw .5
subwf TMP,w
btfsc STATUS,Z
call _5
movlw .6
subwf TMP,w
btfsc STATUS,Z
call _6
movlw .7
subwf TMP,w
btfsc STATUS,Z
call _7
movlw .8
subwf TMP,w
btfsc STATUS,Z
call _8
movlw .9
subwf TMP,w
btfsc STATUS,Z
call _9
return
 
 
 
 
 
CISLO ;**************************** Premena cisla na sadu cislic morze ******************************
;nacitanie cisla
movwf Cislo1 ;cislo z W do registra
;nulovanie pocitadiel
clrf PocetRadu1 ;vynuluj pocitadlo radu jednotiek
clrf PocetRadu10 ;vynuluj pocitadlo radu desiatok
clrf PocetRadu100 ;vynuluj pocitadlo radu stoviek
;ziskanie poctu stoviek
stovkyl movlw .100 ;odpocitaj stovku od cisla
subwf Cislo1,F
incf PocetRadu100,F ;inkrementuj pocitadlo stoviek
btfsc STATUS,C ;ak je uz hodnota "zaporna", preskoc odcitavanie stoviek
goto stovkyl
movlw .100 ;pripocitaj naspat poslednu stovku, cez ktoru sa preslo "do minusu"
addwf Cislo1,F
decf PocetRadu100,F ;dekrementuj pocitadlo stoviek o 1. (tu stovku, ktorou sa preslo do "minusu") 
;ziskanie poctu desiatok
desiatl movlw .10 ;odpocitaj desiatku od cisla
subwf Cislo1,F
incf PocetRadu10,F ;inkrementuje pocitadlo desiatiek
btfsc STATUS,C ;ak je uz hodnota "zaporna", preskoc odcitavanie desiatok
goto desiatl
movlw .10 ;pripocitaj naspat poslednu desiatku, cez ktoru sa preslo "do minusu"
addwf Cislo1,F
decf PocetRadu10,F ;dekrementuj pocitadlo desiatok o 1. (tu desiatku, ktorou sa preslo do "minusu") 
;ziskanie poctu jednotiek
jednotl movlw .1 ;odpocitaj jednotku od cisla
subwf Cislo1,F
incf PocetRadu1,F ;inkrementuj pocitadlo jednotiek
btfsc STATUS,C ;ak je uz hodnota "zaporna", preskoc odcitavanie jednotiek
goto jednotl
movlw .1 ;pripocitaj naspat poslednu jednotku, cez ktoru sa preslo "do minusu" (toto uz netreba)
addwf Cislo1,F
decf PocetRadu1,F ;dekrementuj pocitadlo jednotiek o 1. (tu jednotku, ktorou sa preslo do "minusu") 
;premen cislice na kod morze
movf PocetRadu100,W ;nacitaj pocet stoviek do W
btfsc STATUS,Z ;ak su stovky nulove, vynechaj zobrazenie stoviek
goto psl
call CISLICA
movf PocetRadu10,W ;ak stovky niesu nulove, desiatky odvysielaj za kazdych okolnosti
call CISLICA
goto pdl ;preskoc standardne zobrazovanie desiatok
psl movf PocetRadu10,W ;nacitaj pocet desiatok do W
btfsc STATUS,Z ;ak su desiatky nulove, vynechaj zobrazenie desiatok
goto pdl
call CISLICA
pdl movf PocetRadu1,W ;nacitaj pocet jednotiek do W
call CISLICA
return
 
 
 
 
 
 
 
 
 
 
 
 
 
;nop = 129 us * 20 = 1290 us = 1.29 ms = 775 baud/s
cakaj_uart_bit
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
return
 
 
 
 
 
USART_TXW
;z W registra vloz hodnotu na vysielanie
movwf TMP_RS232
;nastav pocitadlo na vyslanie 8 datovych bitov
movlw .8
movwf count_rs232
 
;vyslanie START bitu
bcf LED ; 0
nop
nop
nop
scitx1
;vysielanie datovych bitov 
rrf TMP_RS232,f ; 1 3*nop rozptyl
btfsc STATUS,C ; 1(2) 5*nop minimum trvania bitu
bsf LED ; 0
btfss STATUS,C ; 1(2)
bcf LED ; 0
 
;opakuj 8 bitov
decfsz count_rs232,f ; 1(2)
goto scitx1 ; 2
nop
nop
nop
;vyslanie STOP bitu
bsf LED ; 0
return
 
; nop = 0.129 ms 03225806451612903225806451613e-4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
;***********************************************************************************************
;************************************* HLAVNY PROGRAM ******************************************
;***********************************************************************************************
 
START
call nastavenie_PIC
 
; bsf LED
 
opakuj
 
 
#ifdef K
 
movf PORTA,F ; zabezpecenie spravnej funkcie prerusenia zo SLEEP
SLEEP ; pauza SLEEP 
;call CISLICA
call _G
call _E
call _N
call _E
call _S
call _I
call _S
 
#endif
 
 
 
 
 
BANKSEL ADCON0
bsf ADCON0,ADON 
movlw .5
call pauza
bsf ADCON0,ADGO 
btfsc ADCON0,ADGO 
goto $-1 
BANKSEL ADRESH 
movf ADRESH,W 
BANKSEL PORTA
movwf ADC_H 
BANKSEL ADRESL
movf ADRESL,W
BANKSEL PORTA
movwf ADC_L
BANKSEL ADCON0
bcf ADCON0,ADON 
BANKSEL PORTA
movlw .5
call pauza
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
; movlw .123
movf ADC_H,w
call CISLO
 
call prestavka
call prestavka
 
 
 
 
 
 
 
goto opakuj
 
END