Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <c8051f340.h>
- #include "time.h"
- #include "uart.h"
- // znojimo preprocesor
- #define cekaj_prijem() while(!UART0_Available())
- #define primljen_karakter() UART0_Available() > 0
- //#define CURIOUS_MODE
- char strLen(char *str);
- char* intToStr(int num, char *digits);
- /*
- * Niz u kome se cuvaju cifre brojeva koji se konvertuju
- * u sringove kako bi se mogli ispisivati.
- */
- char cifre[8];
- // enable flag za ispis uvodne poruke
- bit ispisano = 0;
- int i = 0;
- char prijem[64];
- void OSCILLATOR_Init (void);
- void PORT_Init (void);
- void main(void)
- {
- OSCILLATOR_Init(); // Inicijalizacija oscilatora (Fosc = 22.1184 MHz)
- TIME_Init(); // Inicijalizacija sistemskog vremena (koristi se prekid tajmera 2)
- PORT_Init(); // Inicijalizacija portova
- UART0_Init();
- while (1)
- {
- if(!ispisano) {
- UART0_PutString("Unesite tekst za provjeru: \n");
- ispisano = 1;
- }
- cekaj_prijem();
- if(primljen_karakter()) {
- delay_ms(100);
- UART0_GetString(prijem);
- }
- UART0_PutString("Unijeli ste: ");
- UART0_PutString(prijem);
- UART0_PutString("\n\n");
- UART0_PutString("Duzina unosa je: ");
- // + 0 vrsi konverziju char tipa u integer.
- UART0_PutString(intToStr(strLen(prijem) + 0, cifre));
- UART0_PutString("\n\n");
- // pretvaram broj string cifara kako bih ga ispisao.
- intToStr(12345, cifre);
- UART0_PutString("Uneseni broj kao string: ");
- UART0_PutString(cifre);
- UART0_PutString("\n\n");
- /* --- */
- /* --- */
- // dozvoli ponovni ispis pocetne poruke
- ispisano = 0;
- }
- }
- char strLen(char *str) {
- char len = 0;
- while(*str) {
- len++;
- str++;
- }
- // Ovaj -1 je kompenzacija za '\0' character
- return len - 1;
- }
- /*
- * Integer proizvoljne duzine prebacuje u string.
- * Nije trazeno u zadatku, ali sto da ne.
- * Sto da ne? Sto da ne kolega...
- */
- char* intToStr(int num, char *digits) {
- // broj cifara
- char digitCnt = 0;
- // pomocna cifra
- char digitTmp;
- char i = 0;
- while(num) {
- // +'0' prisiljava konverziju integera u char,
- // kastovanje iz nekog razloga ne radi.
- digitTmp = (num % 10)+'0';
- num = num / 10;
- /*
- * Za one koji zele da vide kako radi ovaj while(num)
- * Ispisuje jednu po jednu cifru... Radice dobro samo ako se
- * koristi van neke druge funkcije, pozoves samu negdje npr.
- */
- #ifdef CURIOUS_MODE
- UART0_PutString("Cifra: ");
- UART0_PutChar(digitTmp);
- UART0_PutChar('\n');
- delay_ms(500);
- #endif
- *(digits+digitCnt) = digitTmp;
- digitCnt++;
- }
- // u ovom trenutku imamo sve cifre, ali naopako poslagane. Obrcem.
- for(i = 0; i < digitCnt / 2; i++) {
- // komentari za prvi prolaz petlje:
- digitTmp = *(digits+i); // uzmem prvu cifru niza
- /*
- * -1 postoji da se odmaknem korak nazad
- * od terminacionog karaktera
- */
- *(digits+i) = *(digits+digitCnt-1-i); // na prvu stavim poslednju
- *(digits+digitCnt-1-i) = digitTmp; // na poslednju stavim prvu
- // i proces se ponavlja sa 2. i n-1, sa 3. i n-2 cifrom itd.
- }
- // pravim string, dodajem terminacioni karakter na kraj.
- *(digits+digitCnt) = '\0';
- return digits;
- }
- void PORT_Init (void)
- {
- //P2MDIN |= 0x0F; // 4 najniza bita porta P2 -> digitalni
- //P2MDOUT = 0x0C; // Pinovi za LED -> push-pull izlazi
- // Crossbar inicijalizacija
- //XBR1 = 0x40; // Dozvola crossbar-a i slabih pull-up otpornika
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement