Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.81 KB | None | 0 0
  1. #include "iodefine.h"
  2. #include "lcd.h"
  3. #include "inline.h"
  4.  
  5. #define klawiatura_Obszar 0x20000
  6. #define klawiatura_bufor (*(volatile unsigned char*)(klawiatura_Obszar+1))
  7.  
  8.  
  9. const short sin_table[360] = {
  10. 0x07FF,0x0822,0x0846,0x086A,0x088D,0x08B1,0x08D5,0x08F8,0x091C,0x093F,
  11. 0x0962,0x0985,0x09A8,0x09CB,0x09EE,0x0A11,0x0A33,0x0A55,0x0A77,0x0A99,
  12. 0x0ABB,0x0ADC,0x0AFE,0x0B1F,0x0B3F,0x0B60,0x0B80,0x0BA0,0x0BC0,0x0BDF,
  13. 0x0BFF,0x0C1D,0x0C3C,0x0C5A,0x0C78,0x0C95,0x0CB2,0x0CCF,0x0CEB,0x0D07,
  14. 0x0D23,0x0D3E,0x0D59,0x0D73,0x0D8D,0x0DA7,0x0DC0,0x0DD8,0x0DF0,0x0E08,
  15. 0x0E1F,0x0E36,0x0E4C,0x0E62,0x0E77,0x0E8C,0x0EA0,0x0EB4,0x0EC7,0x0EDA,
  16. 0x0EEC,0x0EFE,0x0F0F,0x0F1F,0x0F2F,0x0F3F,0x0F4D,0x0F5C,0x0F69,0x0F76,
  17. 0x0F83,0x0F8F,0x0F9A,0x0FA5,0x0FAF,0x0FB9,0x0FC2,0x0FCA,0x0FD2,0x0FD9,
  18. 0x0FDF,0x0FE5,0x0FEB,0x0FEF,0x0FF3,0x0FF7,0x0FFA,0x0FFC,0x0FFD,0x0FFE,
  19. 0x0FFF,0x0FFE,0x0FFD,0x0FFC,0x0FFA,0x0FF7,0x0FF3,0x0FEF,0x0FEB,0x0FE5,
  20. 0x0FDF,0x0FD9,0x0FD2,0x0FCA,0x0FC2,0x0FB9,0x0FAF,0x0FA5,0x0F9A,0x0F8F,
  21. 0x0F83,0x0F76,0x0F69,0x0F5C,0x0F4D,0x0F3F,0x0F2F,0x0F1F,0x0F0F,0x0EFE,
  22. 0x0EEC,0x0EDA,0x0EC7,0x0EB4,0x0EA0,0x0E8C,0x0E77,0x0E62,0x0E4C,0x0E36,
  23. 0x0E1F,0x0E08,0x0DF0,0x0DD8,0x0DC0,0x0DA7,0x0D8D,0x0D73,0x0D59,0x0D3E,
  24. 0x0D23,0x0D07,0x0CEB,0x0CCF,0x0CB2,0x0C95,0x0C78,0x0C5A,0x0C3C,0x0C1D,
  25. 0x0BFF,0x0BDF,0x0BC0,0x0BA0,0x0B80,0x0B60,0x0B3F,0x0B1F,0x0AFE,0x0ADC,
  26. 0x0ABB,0x0A99,0x0A77,0x0A55,0x0A33,0x0A11,0x09EE,0x09CB,0x09A8,0x0985,
  27. 0x0962,0x093F,0x091C,0x08F8,0x08D5,0x08B1,0x088D,0x086A,0x0846,0x0822,
  28. 0x07FF,0x07DB,0x07B7,0x0793,0x0770,0x074C,0x0728,0x0705,0x06E1,0x06BE,
  29. 0x069B,0x0678,0x0655,0x0632,0x060F,0x05EC,0x05CA,0x05A8,0x0586,0x0564,
  30. 0x0542,0x0521,0x04FF,0x04DE,0x04BE,0x049D,0x047D,0x045D,0x043D,0x041E,
  31. 0x03FE,0x03E0,0x03C1,0x03A3,0x0385,0x0368,0x034B,0x032E,0x0312,0x02F6,
  32. 0x02DA,0x02BF,0x02A4,0x028A,0x0270,0x0256,0x023D,0x0225,0x020D,0x01F5,
  33. 0x01DE,0x01C7,0x01B1,0x019B,0x0186,0x0171,0x015D,0x0149,0x0136,0x0123,
  34. 0x0111,0x00FF,0x00EE,0x00DE,0x00CE,0x00BE,0x00B0,0x00A1,0x0094,0x0087,
  35. 0x007A,0x006E,0x0063,0x0058,0x004E,0x0044,0x003B,0x0033,0x002B,0x0024,
  36. 0x001E,0x0018,0x0012,0x000E,0x000A,0x0006,0x0003,0x0001,0x0000,0x0000,
  37. 0x0000,0x0000,0x0000,0x0001,0x0003,0x0006,0x000A,0x000E,0x0012,0x0018,
  38. 0x001E,0x0024,0x002B,0x0033,0x003B,0x0044,0x004E,0x0058,0x0063,0x006E,
  39. 0x007A,0x0087,0x0094,0x00A1,0x00B0,0x00BE,0x00CE,0x00DE,0x00EE,0x00FF,
  40. 0x0111,0x0123,0x0136,0x0149,0x015D,0x0171,0x0186,0x019B,0x01B1,0x01C7,
  41. 0x01DE,0x01F5,0x020D,0x0225,0x023D,0x0256,0x0270,0x028A,0x02A4,0x02BF,
  42. 0x02DA,0x02F6,0x0312,0x032E,0x034B,0x0368,0x0385,0x03A3,0x03C1,0x03E0,
  43. 0x03FE,0x041E,0x043D,0x045D,0x047D,0x049D,0x04BE,0x04DE,0x04FF,0x0521,
  44. 0x0542,0x0564,0x0586,0x05A8,0x05CA,0x05EC,0x060F,0x0632,0x0655,0x0678,
  45. 0x069B,0x06BE,0x06E1,0x0705,0x0728,0x074C,0x0770,0x0793,0x07B7,0x07DB
  46. };
  47.  
  48.  
  49. void Ekran_startowy(void);
  50.  
  51. short k=0, j=0;
  52. short count;
  53. short Fzad = 8;
  54. short Dzad = 5;
  55. short Przetwornik;
  56. short wy_filtr = 0;
  57. short reszta = 0;
  58. unsigned short fi = 5;
  59. char stan_pracy = 0;
  60. short wypelnienie = 5;
  61. unsigned long xxx;
  62.  
  63.  
  64.  
  65. void przerwanie2()
  66. {
  67. k++;
  68. j++;
  69.  
  70.  
  71. if(k>=360)
  72. {
  73. k = 0;
  74.  
  75. }
  76. if(j>=360) j -= 360;
  77.  
  78.  
  79. ITU2.GRB= (xxx*(((long)sin_table[j]*2800)/0x0FFF))/100;
  80.  
  81. ITU3.GRB=(xxx*(((long)sin_table[j]*2800)/0x0FFF))/100;
  82.  
  83. ITU3.TSR.BIT.IMFA = 0;
  84. }
  85.  
  86. void STOP_PWM3()
  87. {
  88. ITU.TSTR.BIT.STR3=0;
  89. ITU3.GRB=ITU3.GRA;
  90. ITU3.TIER.BYTE=0x00;
  91.  
  92.  
  93. }
  94.  
  95. void STOP_PWM2()
  96. {
  97.  
  98. ITU.TSTR.BIT.STR2=0;
  99. ITU2.GRB=ITU2.GRA;
  100. ITU2.TIER.BYTE=0x00;
  101. }
  102.  
  103. void odczytaj_klawiature(void)
  104. {
  105. unsigned char sk;
  106. sk = klawiatura_bufor&0x7f;
  107.  
  108. switch(sk)
  109. {
  110. case 0x7d:stan_pracy=0;GotoXY(2,1);puts("STOP ");STOP_PWM3();STOP_PWM2();break;
  111. case 0x7e:stan_pracy=1;GotoXY(2,1);puts("START");init_ITU3();init_ITU2();break;
  112.  
  113. case 0x77:
  114. if(fi<175)
  115. {
  116. fi++;
  117. j=k+fi;
  118. GotoXY(1,11);
  119. putfi(fi);
  120. };break;
  121.  
  122. case 0x7b:
  123. if(fi>5)
  124. {
  125. fi--;
  126. j=k+fi;
  127. GotoXY(1,11);
  128. putfi(fi);
  129. };break;
  130.  
  131.  
  132. }
  133.  
  134. GotoXY(2,9);
  135. if(fi <= 5)
  136. puts("MIN");
  137. else if(fi == 175)
  138. puts("MAX");
  139. else if(fi > 5 && fi <175)
  140. puts(" ");
  141. }
  142.  
  143. void Ekran_startowy(void)
  144. {
  145. GotoXY(1,1);
  146. puts("A=");
  147. GotoXY(1,8);
  148. puts("Fi=");
  149. putfi(fi);
  150. GotoXY(1,14);
  151. puts("st");
  152. GotoXY(2,1);
  153. puts("STOP ");
  154. }
  155.  
  156. void puts(char * c)
  157. {
  158.  
  159. do
  160. {
  161. putchar(*c);
  162. c++;
  163. }while(*c);
  164.  
  165. }
  166.  
  167. void putI(unsigned short i)
  168. {
  169. putchar(i/10+'0');
  170. putchar(i%10+'0');
  171. }
  172.  
  173. void putI2(unsigned short i)
  174. {
  175. if(i/1000)putchar((i/1000)+'0');
  176. putchar((i/100)%10+'0');
  177. putchar(',');
  178. putchar((i/10)%10+'0');
  179. putchar(i%10+'0');
  180. }
  181.  
  182. void putfi(unsigned short i)
  183. {
  184. if(i/1000)putchar((i/1000)+'0');
  185. putchar((i/100)%10+'0');
  186. putchar((i/10)%10+'0');
  187. putchar(i%10+'0');
  188. }
  189.  
  190.  
  191. void puthz(unsigned short i)
  192. {
  193. putchar(i+'0');
  194.  
  195. }
  196.  
  197. void init_ITU0(void)
  198. {
  199. ITU.TSTR.BIT.STR0 = 0;
  200. ITU0.TCR.BYTE = 0xC3;
  201. ITU0.GRB=1999;
  202. ITU.TSTR.BIT.STR0 = 1;
  203. }
  204.  
  205. void init_ITU3(void)
  206. {
  207. ITU.TMDR.BIT.PWM3 = 1;
  208. ITU.TSTR.BIT.STR3 = 0;
  209. ITU3.TCR.BYTE = 0xA1;
  210. ITU3.TIER.BYTE = 0xF9;
  211. ITU3.TIOR.BYTE= 0xF8;
  212. ITU3.GRA = 2800;
  213.  
  214.  
  215. }
  216.  
  217. void init_ITU2(void)
  218. {
  219. ITU.TMDR.BIT.PWM2 = 1;
  220. ITU.TSTR.BIT.STR2 = 0;
  221. ITU2.TCR.BYTE = 0xA1;
  222. ITU2.TIER.BYTE = 0xF8;
  223. ITU2.TIOR.BYTE= 0xF8;
  224. ITU2.GRA = 2800;
  225. ITU.TSTR.BIT.STR2 = 1;
  226. ITU.TSTR.BIT.STR3 = 1;
  227. }
  228.  
  229.  
  230. void init_AC(char l_kanalow)
  231. {
  232. AD.ADCSR.BIT.ADF = 0;
  233. AD.ADCSR.BIT.ADIE = 0;
  234. AD.ADCSR.BIT.SCAN = 1;
  235. AD.ADCSR.BIT.CKS = 0;
  236. AD.ADCSR.BIT.CH = l_kanalow;
  237. AD.ADCSR.BIT.ADST = 1;
  238. }
  239.  
  240. short odczyt_AC(char nr_kanalu)
  241. {
  242. if(AD.ADCSR.BIT.ADF){
  243. switch(nr_kanalu)
  244. {
  245. case 0: Przetwornik = (AD.ADDRA>>6); break;
  246. case 1: Przetwornik = (AD.ADDRB>>6); break;
  247. case 2: Przetwornik = (AD.ADDRC>>6); break;
  248. case 3: Przetwornik = (AD.ADDRD>>6); break;
  249. }
  250. }
  251. return Przetwornik;
  252. }
  253.  
  254. void filtr_cyfrowy(short wejscie, short * wyjscie)
  255. {
  256. long temp,temp1;
  257. temp=(255*(long)*wyjscie) + ((255*(long)reszta)>>8) + wejscie;
  258. temp1 = (temp>>8);
  259. *wyjscie = (short)temp1;
  260. reszta = (short)(temp - (temp1<<8));
  261. }
  262.  
  263. void czestotliwosc_zadana()
  264. {
  265. filtr_cyfrowy(odczyt_AC(2),&wy_filtr);
  266.  
  267. xxx =2+(((long)wy_filtr*97) / 1023);
  268.  
  269. GotoXY(1,3);
  270. putI2(xxx);
  271. if(xxx == 0) xxx = 50;
  272.  
  273. }
  274.  
  275.  
  276.  
  277.  
  278. int main (void)
  279. {
  280. IniLCD();
  281. Ekran_startowy();
  282. init_ITU0();
  283. init_AC(2);
  284. STOP_PWM2();
  285. STOP_PWM3();
  286. ITU.TSTR.BIT.STR1=0;
  287. ITU1.TCR.BYTE=0xA3;
  288. ITU1.GRA=1000;
  289. ITU1.TIOR.BYTE=0x88;
  290. ITU1.TIER.BYTE=0xF8;
  291. ITU.TSTR.BIT.STR1=1;
  292.  
  293.  
  294.  
  295.  
  296. while(1)
  297. {
  298.  
  299.  
  300. if(ITU0.TSR.BIT.IMFB)
  301. {
  302. ITU0.TSR.BIT.IMFB = 0;
  303. count++;
  304. czestotliwosc_zadana();
  305. if(count>=1000)
  306. {
  307.  
  308. count = 0;
  309. }
  310.  
  311. if(!(count%100))
  312. {
  313. odczytaj_klawiature();
  314. }
  315.  
  316. if(!(count%10))
  317. {
  318.  
  319.  
  320. }
  321.  
  322.  
  323. }
  324.  
  325.  
  326. }
  327. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement