⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 portszeregowy.c

📁 LPC2103 - preasure measurement.
💻 C
字号:
/******************************************************************************/
/* PortSzeregowy.c                                                            */
/******************************************************************************/

#include <LPC2103.H>                  //Definicje dla procesora LPC2103.
#include <STRING.H>					  //Zawiera funkcje operujace na lancuchach znakow.
#ifndef __PortSzeregowy_c			  //Zabezpieczenie przed wielokrotnym wczytaniem pliku.
#define __PortSzeregowy_c


#define CR     0x0D					  //Znak przejscia do nowej linii.


extern char informacja[40];
extern char pomiarCisnienia_hPa[10];  //Zdefiniowane w pliku ProgramGlowy.c
extern char pomiarCisnienia_mmHg[10]; //Zdefiniowane w pliku ProgramGlowy.c

  char wyslijZnak(char znak)          //Wysyla znak (char) portem szeregowym.
  {
   if(znak == '\n')
     {
      while(!(U1LSR & 0x20));
        U1THR = CR;                   
     }
   while(!(U1LSR & 0x20));		      //Wysylaj dopoki w buforze nadajnika sa dane.
   return(U1THR = znak);
  }




void wyslijWyraz(char *p)             //Wysyla ciag znakow (string) portem szeregowym.
  {
   while(*p) 
     wyslijZnak(*p++);
  }

  
char czytajZnak (void)
  {                 
   while (!(U1LSR & 0x01));
   return (U1RBR);
  }




__irq void IRQodUART1(void) 		  //Procedura obslugi przerwania od UART1.
  {	                        
   switch(czytajZnak())
	 {
      case '1':
	    {
	     strcpy(informacja,"Cisnienie wynosi: ");
         strcat(informacja,pomiarCisnienia_hPa);
         strcat(informacja,".\n");         
		 wyslijWyraz(informacja);
	    };break; 	 
	   
      case '2':
	    {
	     strcpy(informacja,"Cisnienie wynosi: ");
         strcat(informacja,pomiarCisnienia_mmHg);
		 strcat(informacja,".\n");
		 wyslijWyraz(informacja);
	    };break;	   
      
	  case '3':
	    {
         strcpy(informacja,"Cisnienie wynosi: ");
         strcat(informacja,pomiarCisnienia_hPa);
         strcat(informacja," (");
         strcat(informacja,pomiarCisnienia_mmHg);
         strcat(informacja,")\n");
         wyslijWyraz(informacja);
	    };break;	   


	  default:
	    {
	     wyslijWyraz("\nZle polecenie!!!\n\n1 -> cisnienie w hPa.\n2 -> cisnienie w mmHg.\n3 -> pelna informacja.\n");
	    }
	 }
   VICVectAddr = 0;        //Zerowanie rejestru z wektorami przerwan. 
  }



void inicjalizujPortSzeregowy(void)   
  {									  
   PINSEL0 = 0x00050000;       //P0.8 -> TxD1, P0.9 -> RxD1. 
   U1LCR = 0x80;		       //DLAB = 1 (Umozliwia precyzyjne ustawienie predkosci transmisji).
   U1LCR |= 0x0B;			   //8bitow danych,1 bit stopu, kontrola parzystosci typu "odd", 
   U1DLL = 38;				   //Predkosc 19200 bodow (przy PCLK = 15MHz).
   U1FDR |=0x72;			   //DivAddVal=7, MulVal=2.
   U1LCR = 0x0B;			   //DLAB = 0 (Divisor Latch Access Bit).
   
   
   U1IER =0x01;   //Jesli jakies dane znajda sie w buforze odbiornika, generowane jest przerwanie.
   VICVectAddr5 = (unsigned long)IRQodUART1;    //Adres procedury obslugi przerwania od UART1.
   VICVectCntl5 = 0x27;                         //Przerwanie od UART1 jest przerwaniem wektorowanym.
   VICIntEnable |= 0x80;                        //Uaktywnienie przerwania od UART1. 
  }

 #endif // __PortSzeregowy_c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -