;************************************************************** ;* Ukol c.1 pro laboratore IMP ;* Pro monitor mode je BUSCLK = 2,4576 Mhz ;************************************************************** ; export symbols XDEF Entry ; exportuj 'Entry' symbol ABSENTRY Entry ; navesti, kde zacina aplikace ; prihrej definice zvoleneho mikrokontroleru Include 'derivative.inc' VectorStart EQU $FFDA ; zacatek tabulky prerusovacich vektoru ; Misto pro promenne a data ORG RAMStart text ds.b 64 ; Misto pro program ORG ROMStart ;************************************************************** ;* Entry - Tady se zacne provadet kod po resetu procesoru * ;* * ;************************************************************** Entry: rsp clra ; Inicializace A,X clrx clrh mov #$01,CONFIG1 ; Vypnout COP jsr Init_SCI ; Inicializace SCI cli ; Povoleni preruseni ;hlavni smycka programu main_loop: ;Sem doplnte kod, ktery bude cist znaky z SCI. Kazdy precteny ;znak posle zpet po SCI do PC (echo) a ulozi do pameti RAM ;(do vyse nadefinovaneho pole "text". Jakmile prijde ;znak "Esc" (ASCII kod $1B), prestane se cist a skoci se na ;navesti "kon", kde program pokracuje pipanim jsr Send_char cmp #$1B beq kon jsr Receive_char sta text, X incx bra main_loop kon: bset 1,DDRA ; PTA1 vystup (pipatko) beep_loop: ldx #$FF dela1: nop nop nop nop dbnzx dela1 lda #2 eor PTA ; beep je potreba generovat frekvenci cca 1kHz sta PTA brclr 5,SCS1,beep_loop ; prisel znak z SCI? lda SCDR ; precteni bclr 1,DDRA ; PTA1 vstup (a je klid) idle: bra idle ;********************************* ;* Init_SCI - inicializuj SCI * ;********************************* Init_SCI: mov #$A2,SCBR ; Baud Rate = 9600 @ 2,45MHZ-BUS CLK mov #$40,SCC1 ; povol SCI periferii mov #$0C,SCC2 ; povol SCI prijimac a vysilac clr SCC3 rts ;************************************************************** ;* Receive_char - prijmi znak z SCI vstupu a uloz jej do A * ;************************************************************** Receive_char: ;Zde doplnte kod pro prijem znaku z SCI. ;Rutinka bude cekat, dokud se v datovem registru SCI neobjevi ;novy znak. Pak vrati tento znak v registru A. brclr 5,SCS1,* lda SCDR rts ;************************************************************** ; Send_char - znak z A posli na SCI vystup * ;************************************************************** Send_char: brclr 7,SCS1,* ; vysila SCI znak(y)? sta SCDR ; ne -> muzeme poslat nas znak rts ;************************************************************** ;* spurious - obsluha pro nevyuzivana preruseni * ;************************************************************** spurious: NOP RTI ;************************************************************** ;* tabulka prerusovacich vektoru * ;************************************************************** ORG VectorStart ; routine ; popis vektoru ;adresa vektoru fdb spurious ; Real-time Clock Vector ;$FFDA fdb spurious ; ADC Conversion Complete ;$FFDC fdb spurious ; Keyboard Vector ;$FFDE fdb spurious ; SCI Transmit Vector ;$FFE0 fdb spurious ; SCI Receive Vector ;$FFE2 fdb spurious ; SCI Error Vector ;$FFE4 fdb spurious ; SPI Receive Vector ;$FFE6 fdb spurious ; SPI Transmit Vector ;$FFE8 fdb spurious ; TIM2 Overflow Vector ;$FFEA fdb spurious ; TIM2 Channel 1 Vector ;$FFEC fdb spurious ; TIM2 Channel 0 Vector ;$FFEE fdb spurious ; TIM1 Overflow Vector ;$FFF0 fdb spurious ; TIM1 Channel 1 Vector ;$FFF2 fdb spurious ; TIM1 Channel 0 Vector ;$FFF4 fdb spurious ; PLL Vector ;$FFF6 fdb spurious ; LVI Vector ;$FFF8 fdb spurious ; ~IRQ1 Vector ;$FFFA fdb spurious ; SWI Vector ;$FFFC fdb Entry ; Reset Vector ;$FFFE