{"id":207478,"date":"2013-12-26T15:29:03","date_gmt":"2013-12-26T11:29:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=207478"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=207478","title":{"rendered":"<span class=\"post_title\">\u0411\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0441\u0442\u0435\u043d\u0434 \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438 \u043d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u0435 SiLabs C8051F120-TB<\/span>"},"content":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/179\/ced\/a87\/179ceda8753d0edeb435e11aadd9c32d.jpg\"\/><br \/>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0438 \u043e\u0442\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0435\u0435\u0441\u044f, \u0431\u0443\u0434\u044c \u0442\u043e \u043a\u043e\u043b\u0435\u0441\u043e, \u0432\u0438\u043d\u0442 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430 \u0438\u043b\u0438 \u043b\u0435\u0442\u0430\u044e\u0449\u0430\u044f \u0442\u0430\u0440\u0435\u043b\u043a\u0430. \u0418\u043b\u0438 \u0412\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0431\u0443\u0434\u043d\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430. \u0423\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430\u2026<br \/>  <a name=\"habracut\"><\/a><br \/>  \u041d\u0430\u0447\u043d\u0443 \u0441 \u043f\u0440\u0435\u0434 \u0438\u0441\u0442\u043e\u0440\u0438\u0438: \u0420\u0430\u0431\u043e\u0442\u0430\u044e \u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c \u0432 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 <\/p>\n<blockquote><p>\u0421\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435 \u0441\u0435\u043a\u0440\u0435\u0442\u043d\u043e, \u043d\u043e \u043a \u0434\u0435\u043b\u0443 \u043d\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f, \u0441\u043a\u0430\u0436\u0443 \u043b\u0438\u0448\u044c, \u0447\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u043c\u0441\u044f <abbr title=\"\u0411\u0435\u0441\u043f\u0438\u043b\u043e\u0442\u043d\u044b\u0435 \u041b\u0435\u0442\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0410\u043f\u043f\u0430\u0440\u0430\u0442\u044b\">\u0411\u041b\u0410<\/abbr><\/p><\/blockquote>\n<p>, \u0433\u0434\u0435 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447, \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0443 \u043d\u0430\u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438 \u0432\u0438\u043d\u0442\u0430 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430. \u041e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u043a\u0430\u043a \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u043a\u0443\u043f\u0438\u0442\u044c, \u043d\u043e \u0441\u0442\u043e\u0438\u0442\u044c \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u043e, \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u0438.<\/p>\n<p>  \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u0437\u0430\u0447\u0435\u043c \u044d\u0442\u043e \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c. \u041d\u0430\u0448 \u0441\u0430\u043c\u043e\u043b\u0435\u0442, \u0441 \u044d\u0442\u0438\u043c \u0432\u0438\u043d\u0442\u043e\u043c, \u0443\u0436\u0430\u0441\u043d\u043e \u043a\u043e\u043b\u0431\u0430\u0441\u0438\u043b\u043e \u043d\u0430 \u0445\u043e\u043b\u043e\u0441\u0442\u044b\u0445 \u043e\u0431\u043e\u0440\u043e\u0442\u0430\u0445(800 \u043e\u0431\/\u043c\u0438\u043d). \u041e\u0431\u044b\u0447\u043d\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u0443\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u0448\u0442\u0443\u043a\u0438, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438. \u0421\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0443\u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u0431\u0435\u0437 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u044d\u0442\u043e \u0443\u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0427\u0442\u043e \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u0438, \u0442\u043e \u0442\u0443\u0442 \u0432\u0441\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0432\u0438\u043d\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0443\u0440\u0430\u0432\u043d\u043e\u0432\u0435\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0446\u0435\u043d\u0442\u0440\u0430 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u0430 \u0432\u043e\u0442 \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043a\u043e\u0439, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u0438 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0432\u0438\u043d\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044e. <\/p>\n<p>  \u0414\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438 \u0431\u044b\u043b \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u043d\u0435\u0445\u0438\u0442\u0440\u044b\u0439 \u0434\u0435\u0432\u0430\u0439\u0441<\/b><\/p>\n<div class=\"spoiler_text\">, \u0441\u043e\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u0438\u0437 \u0440\u0430\u043c\u044b \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u043f\u0440\u0443\u0436\u0438\u043d\u043a\u0430\u0445 \u043a \u043c\u0430\u0441\u0441\u0438\u0432\u043d\u043e\u043c\u0443 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044e. <br \/>  \u041d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u043d\u043e\u043c \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c, \u0438 \u0447\u0435\u0440\u0435\u0437 \u0448\u043a\u0438\u0432 \u043e\u043d \u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0441\u044c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0432\u0438\u043d\u0442. \u0415\u0449\u0435 \u043d\u0430 \u0440\u0430\u043c\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440\u044b, \u0430 \u043d\u0430 \u043e\u0441\u044c \u0441 \u0432\u0438\u043d\u0442\u043e\u043c \u0434\u0430\u0442\u0447\u0438\u043a \u0445\u043e\u043b\u043b\u0430. \u042d\u043b\u0435\u043a\u0442\u0440\u043e\u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u043a \u0447\u0430\u0441\u0442\u043e\u0442\u043d\u0438\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 \u0435\u0433\u043e \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f.<br \/>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044f \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u044f \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0430\u043a\u0441\u0435\u043b\u0435\u0440\u043e\u043c\u0435\u0442\u0440 \u043d\u0430 \u0434\u0432\u0435 \u043e\u0441\u0438, \u0447\u0435\u0440\u0435\u0437 \u0443\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 <abbr title=\"\u0410\u043d\u0430\u043b\u043e\u0433\u043e \u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\">\u0410\u0426\u041f<\/abbr> \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b SiLabs C8051F120-TB. \u0427\u0442\u043e\u0431\u044b \u043e\u0442\u043b\u043e\u0432\u0438\u0442\u044c \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0435\u0433\u043e\u0441\u044f \u0442\u0435\u043b\u0430 \u0447\u0435\u0440\u0435\u0437 0 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432, \u0431\u044b\u043b \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0434\u0430\u0442\u0447\u0438\u043a \u0445\u043e\u043b\u043b\u0430, \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043f\u043e\u0434\u0430\u0432\u0430\u043b\u0441\u044f \u0435\u0449\u0435 \u043d\u0430 \u043e\u0434\u043d\u0443 \u043d\u043e\u0436\u043a\u0443 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u043f\u043b\u0430\u0442\u044b.<\/p>\n<p>  \u0418\u0442\u0430\u043a \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043d\u0435\u0445\u0438\u0442\u0440\u044b\u0439 \u0430\u0433\u0440\u0435\u0433\u0430\u0442, <\/p><\/div>\n<\/div>\n<p> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u043c\u044b \u0441 \u0442\u0435\u043b\u043e\u043c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u0438 \u043f\u043e\u0434\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u043e \u043f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0438 \u0447\u0435\u0440\u0435\u0437 0 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432 \u0432\u0430\u043b\u0430, \u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0435\u0433\u043e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u0432\u0438\u043d\u0442.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/715\/03d\/ccb\/71503dccba86317705c25149eab7ba6d.jpg\"\/><br \/>  \/\u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043d\u0435\u0445\u0438\u0442\u0440\u043e\u0433\u043e \u0434\u0435\u0432\u0430\u0439\u0441\u0430\/<\/p>\n<p>  \u041c\u043d\u0435 \u0434\u0430\u043b\u0438 \u044d\u0442\u0443 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e, \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u043c \u043f\u0443\u0442\u0435\u043c \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e <s>\u0438\u0437\u043e\u043b\u0435\u043d\u0442\u044b <\/s>, <s>\u043a\u0443\u0441\u043e\u0447\u043a\u043e\u0432 \u043f\u043b\u0430\u0441\u0442\u0438\u043b\u0438\u043d\u0430<\/s> <s>\u0438\u043b\u0438 \u0430\u0440\u0430\u043a\u0430\u043b\u0430<\/s> \u043e\u0447\u0435\u043d\u044c \u0442\u043e\u0447\u043d\u043e \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u044b\u0445 \u0433\u0440\u0443\u0437\u043e\u0432, \u043f\u0440\u0438\u043b\u0435\u043f\u0438\u0442\u044c \u043d\u0430 \u043a\u0440\u0430\u0435\u0448\u0435\u043a \u043b\u043e\u043f\u0430\u0441\u0442\u0438 \u0432\u0438\u043d\u0442\u0430, \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u0441\u0442\u0430\u043b \u043e\u0442\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c. \u0418 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441 \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u0437\u0430 5 \u043c\u0438\u043d\u0443\u0442 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0435\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.    <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418 \u044f \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u0437\u0430 \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443<\/b><\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/57c\/d31\/e2a\/57cd31e2a2cf5e97b5e034e84b5843c8.jpg\"\/> <\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/618\/f06\/7e3\/618f067e376bc6617cb86db309237c7d.jpg\"\/>  <\/div>\n<\/div>\n<p>  \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u043f\u043e\u0434\u0443\u043c\u0430\u043b, \u0447\u0442\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044e\u0441\u044c \u0437\u0430 \u043e\u0434\u0438\u043d \u0434\u0435\u043d\u044c, \u0438 \u0437\u0430\u0434\u0430\u0447\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f. \u041d\u043e \u043f\u0440\u0438 \u0441\u043d\u044f\u0442\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043e\u0441\u0446\u0438\u043b\u043b\u043e\u0433\u0440\u0430\u0444\u043e\u043c, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044f \u0432\u0441\u0435\u0439 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u043f\u043e\u043c\u0435\u0445\u0438 \u043e\u0442 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u0441\u0435\u0442\u0438, \u0438 \u043f\u0440\u043e\u0447\u0438\u0439 \u0448\u0443\u043c, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u0441\u043d\u044f\u0442\u044b\u0439 \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u0410\u0426\u041f \u0432 \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0439 \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0439 \u0448\u0443\u043c. \u0425\u043e\u0442\u044f \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0433\u043b\u044f\u0434\u0435\u0442\u044c\u0441\u044f, \u0442\u043e \u043f\u0440\u043e\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u044f\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c \u0438 \u043c\u0438\u043d\u0438\u043c\u0443\u043c. \u041d\u0430 \u043e\u0442\u043b\u0430\u0434\u043a\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438 \u0436\u0435\u043b\u0435\u0437\u0430 \u0443\u0448\u043b\u043e \u043e\u043a\u043e\u043b\u043e \u043d\u0435\u0434\u0435\u043b\u0438, \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0447\u0443\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0437\u0430\u0442\u043e \u043f\u043e\u0442\u043e\u043c \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u0432\u0430\u0439\u0441\u0430 \u0441\u0442\u0430\u043b\u0430 \u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c \u0433\u043b\u0430\u0437.<\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/61b\/6c8\/68a\/61b6c868ac291a99a66b3b70054a33b1.jpg\"\/><br \/>  \/\u041f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u043e\u0441\u0446\u0438\u043b\u043e\u0433\u0440\u0430\u0444\u0430\/<\/p>\n<p>  \u041d\u0430 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0438\u044f, \u0438 \u043f\u043e\u0441\u044b\u043b\u0430\u0435\u0442 \u0438\u0445 \u043d\u0430 COM \u043f\u043e\u0440\u0442.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0434\u0435\u0444\u0430\u0439\u043d\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0438 \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b. \u0413\u043e\u0442\u043e\u0432\u0438\u043c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u0443\u044e \u043f\u043b\u0430\u0442\u0443 \u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e.<\/p>\n<pre><code class=\"cpp\">#include &quot;c8051f120.h&quot;  #define SYSCLK       98000000\t\t\/\/\u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 #define BAUDRATEU0   57600           \t\/\/ \u0447\u0430\u0441\u0442\u043e\u0442\u0430 Uart0 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u043f\u043e RS232 \u043d\u0430 COM \u043f\u043e\u0440\u0442 #define SAMPLE_RATE  24500000         \/\/ Sample frequency in Hz #define INT_DEC\t\t 256 #define SAR_CLK      12250000              \/\/ \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u0410\u0426\u041f #define FREQT0  \t (748*2)\t\t\t\/\/\u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0422\u0430\u0439\u043c\u0435\u0440\u0430 0 #define BUFADCSIZE   512 \/\/BUFADC  sfr16 ADC0     = 0xbe;                 \/\/ ADC0 data sfr16 RCAP2    = 0xca;                 \/\/ Timer2 capture\/reload sfr16 RCAP3    = 0xca;                 \/\/ Timer3 capture\/reload sfr16 TMR2     = 0xcc;                   \/\/ Timer2 sfr16 TMR3     = 0xcc;                   \/\/ Timer3  bit ProcessFlag = 0, ADCFlag = 0, flFree = 1, flNewADC = 0; \/\/\u0444\u043b\u0430\u0433\u0438   xdata unsigned int  BufADC[BUFADCSIZE], ADCcount = 0, RTC = 0, RTCP = 0, int_dec = INT_DEC, tmpA = 0, lastTmp = 0; xdata float Propeller = 0.0, tmp_float; xdata long accumulator = 0L;    #define RESETTICK (1496)  sbit LED = P1^6;                       \/\/\u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0445\u043e\u043b\u043b\u0430 sbit BUTTON = P3^7;              \/\/\u043a\u043d\u043e\u043f\u043a\u0430               \/\/UART0  \u0431\u0443\u0444\u0435\u0440\u044b \u0438 \u0444\u043b\u0430\u0433\u0438 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 #define NBFM \t\t50 xdata unsigned char BuferFromModem [NBFM];  xdata unsigned char wBFM, rBFM, marBFM;  #define SIZE_BUFFER0 \t\t50 xdata char BufferInModem[SIZE_BUFFER0];  xdata int r0, rk; bit flTransmiter;\t  \/\/-----\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0432 \u0431\u0443\u0444\u0435\u0440 \u0432\u044b\u0432\u043e\u0434\u0430 \u0434\u043b\u044f \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043f\u0440\u043e\u0442\u043e\u043a\u043e\u043b\u0430 \u043e\u0431\u043c\u0435\u043d\u0430 void OutModem1(unsigned char Data, char i) { \tBufferInModem[i] = Data | 0x80; } \/\/------------------------------------------------------------------------------ void OutModem2(unsigned int Data, char i) { \tBufferInModem[i] = (Data & 0x007f)| 0x80; \tBufferInModem[i+1] = ((Data & 0x3f80) &gt;&gt; 7)| 0x80; } \/\/------------------------------------------------------------------------------ void OutModem4(unsigned long int Data, char i) { \tBufferInModem[i] = (Data & 0x0000007f)| 0x80; \tBufferInModem[i+1] = ((Data & 0x3f80) &gt;&gt; 7) | 0x80; \tBufferInModem[i+2] = ((Data & 0x1fc000) &gt;&gt; 14) | 0x80;         BufferInModem[i+3] = ((Data & 0xfe00000)&gt;&gt; 21) | 0x80; } \/\/---- \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c void OSCILLATOR_Init (void) { \tint loop; \tchar SFRPAGE_SAVE = SFRPAGE; \tSFRPAGE = CONFIG_PAGE; \tOSCICN = 0x83; \tCLKSEL = 0x00; \tSFRPAGE = CONFIG_PAGE; \tPLL0CN = 0x00; \tSFRPAGE = LEGACY_PAGE; \tFLSCL = 0x10; \tSFRPAGE = CONFIG_PAGE; \tPLL0CN |= 0x01; \tPLL0DIV = 0x01; \tPLL0FLT = 0x01; \tPLL0MUL = 0x04; \tfor (loop=0; loop&lt;256; loop++); \tPLL0CN |= 0x02; \twhile(!(PLL0CN & 0x10)); \tCLKSEL = 0x02; \tSFRPAGE = SFRPAGE_SAVE; } \/*Init*\/ void Init() {  \/\/\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0439\u043c\u0435\u0440\u043e\u0432 \tSFRPAGE   = TIMER01_PAGE; \tTCON      = 0x51; \tTMOD      = 0x11;  \tCKCON      = 0x18; \tSFRPAGE = TMR3_PAGE; \tTMR3CN = 0x04;                     \tTMR3CF = 0x08;                     \tRCAP3   = -SYSCLK\/SAMPLE_RATE;                 \tTMR3    = RCAP3;                     \tEIE2   &= ~0x01;                     \tTR3     = 1;     \/\/\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u0442\u0430\u0439\u043c\u0435\u0440\u0435 Uart \tSFRPAGE   = TMR2_PAGE; \tTMR2CF = 0x08; \/\/ Timer 2 Configuration         RCAP2 = - ((long) SYSCLK\/BAUDRATEU0\/16);         TMR2L = 0x00;   \/\/ Timer 2 Low Byte         TMR2H = 0x00;   \/\/ Timer 2 High Byte         TMR2CN = 0x04;  \/\/ Timer 2 CONTROL \tTR2 = 1; \tSFRPAGE = UART0_PAGE; \tSCON0 = 0x50; \tSSTA0 = 0x05;     \tES0 = 1;  \/\/\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c ADC(\u0410\u0426\u041f)        SFRPAGE   = ADC0_PAGE;       AMX0SL    = 0x01;       ADC0CN    = 0x80;       SFRPAGE = ADC0_PAGE;       ADC0CN = 0x04;         REF0CN = 0x07;         AMX0CF = 0x00;        AMX0SL = 0x01;         ADC0CF = (SYSCLK\/SAR_CLK) &lt;&lt; 3;            ADC0CF |= 0x00;                \/\/ \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u0443\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044f PGA gain =&gt; 00 = 1 (default), 01 =2, 02 = 4, 03 = 8       EIE2 |= 0x02;                       \/\/ enable ADC interrupts       SFRPAGE   = ADC0_PAGE;       ADC0CN    = 0x84;  \/\/\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u043d\u043e\u0436\u043a\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430     SFRPAGE   = CONFIG_PAGE;     P0MDOUT   = 0xFF;     P1MDOUT   = 0xFF;     P2MDOUT   = 0xFF;     P3MDOUT   = 0xFF;*\/      XBR0      = 0x44;     XBR1      = 0x04;     XBR2      = 0x40;  \/\/\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b    OSCILLATOR_Init();  \/\/\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f     IE        = 0x9B;     EIE2      |= 0x02;  \/\/\u0420\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b \tIP       = 0x13; \tEIP2     = 0x02; \/\/\u0410\u0426\u041f  }  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041c\u0430\u0439\u043d\u043e\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0443\u0442 \u043c\u044b \u043a\u0440\u0443\u0442\u0438\u043c\u0441\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435, \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f \u0410\u0426\u041f  <\/p>\n<pre><code class=\"cpp\">\/\/------------------------------------------------------------------- void main(void) { \txdata unsigned int i=0, tmpint; \tWDTCN = 0xde;\t\/\/\u041e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u0436\u0435\u0432\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043d\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \t\t \tWDTCN = 0xad;  \/\/ \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0436\u0435\u043b\u0430\u043d\u0438\u0435, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0433\u043e \u0437\u0430\u0432\u0438\u0441\u043b\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u043b\u0438 \u043d\u0435\u0442, \u0438 \u0440\u0435\u0431\u0443\u0442\u043d\u0443\u0442\u044c \u0432 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 \tEA=0;                  \/\/\u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u0434 \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \tInit();                   \/\/\u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043c \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \ti = 0; \twhile(i++ &lt; BUFADCSIZE) \t{ \t\tBufADC[i]=0; \t} \tEA=1; \twhile(1) \t{ \t\tif(RTC&gt;(7*FREQT0)) \t\t{ \t\t\tIE0=1; \t\t} \t\tif(ProcessFlag == 1) \t\t{ \t\t\tADCFlag = 0; \t\t\tflFree  = 0; \t\t\tEIE2    &= ~0x02; \/\/\u0410\u0426\u041f \u0432\u044b\u043a\u043b \t\t\t\/\/\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 \u043f\u043e \u043a\u043e\u043c \u043f\u043e\u0440\u0442\u0443 \t\t\ttmpint = ADCcount; \t\t\tADCcount = 1; \t\t\t \t\t\twhile(ADCcount &lt; tmpint) \t\t\t{ \t\t\t\t\/\/Write to UART0-------------------------------------- \t\t\t\tBufferInModem[0] = 40 | 0x40;\t\t\t \t\t\t\tBufferInModem[0] &= ~0x80; \t\t\t\tOutModem2((int)Propeller, 1); \t\t\t\tOutModem2((int)ADCcount, 3); \t\t\t\tOutModem2((int)BufADC[ADCcount++],5); \t\t\t\tOutModem2((int)tmpint, 7); \t\t\t\tr0 = 0; \t\t\t\trk = 9; \t\t\t\tBufferInModem[rk] = 0; \t\t\t\tfor (i = r0; i &lt; rk; i++ ) \t\t   \t  \t\tBufferInModem[rk] = BufferInModem[rk] ^ BufferInModem[i]; \t\t\t\tBufferInModem[rk] = BufferInModem[rk] | 0x80; \t\t\t\trk++; \t\t\t \t \t\t\t\tflTransmiter = 1; \t\t\t\tSFRPAGE = 0x00; \t\t\t\t \t\t\t\tTI0 = 1; \t\t\t\tRTC=0; \t\t\t\twhile(flTransmiter) \t\t\t\t{ \t\t\t\t\tif(RTC&gt;(RESETTICK)) \t\t\t\t\t{ \t\t\t\t\t\tRTC=0; \t\t\t\t\t\tbreak; \t\t\t\t\t} \t\t\t\t} \t\t\t\tRTC=0; \t\t\t\tLED=0; \t\t\t}                         i = 0;                         while(i++ &lt; BUFADCSIZE)                         { \t                        BufADC[i]=0;                         } \t\t        ADCcount = 0; \t\t\tProcessFlag = 0; \t\t\tflFree = 1;  \t\t} \t} }  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u0434\u043b\u044f \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0441 \u043d\u043e\u0436\u043a\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u0434\u0430\u0442\u0447\u0438\u043a \u0445\u043e\u043b\u043b\u0430  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0443\u0442 \u043c\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043c \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0425\u043e\u043b\u043b\u0430.  <\/p>\n<pre><code class=\"cpp\">void INT0 (void) interrupt 0 \t\t\t\/\/ \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u043e \u0444\u0440\u043e\u043d\u0442\u0443 \u0432\u0441\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b \u043e\u0431\u043e\u0440\u043e\u0442\u043e\u0432 \u0432\u0438\u043d\u0442\u0430 { \tif(LED!=1) \t{ \t\tLED=1;                                         \/\/ \u0437\u0430\u0436\u0438\u0433\u0430\u0435\u043c \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 \t} \telse if(RTC &gt; RTCP)                         \/\/\u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0431\u043e\u0440\u043e\u0442\u043e\u0432 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443 (\u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d 0 - 60000 \u043e\u0431\/\u043c\u0438\u043d) \t{ \t\tPropeller = Propeller+((60.0*FREQT0\/(RTC - RTCP))-Propeller)*1.0; \t\tRTCP = RTC; \t} \tRTCP=0; \tRTC=0;   \tif((flFree == 1)&& (ADCFlag == 1))  \t{ \t\tProcessFlag = 1;                        \t} \telse if(!ProcessFlag) EIE2 |= 0x02;  \/\/\u0410\u0426\u041f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \treturn; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0442\u043e\u0447\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0442\u0430\u0439\u043c\u0435\u0440, \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0432 \u043d\u0435\u043c \u0432\u0440\u0435\u043c\u044f  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u0430\u0439\u043c\u0435\u0440<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void TIMER_ISR0 (void) interrupt 1  \/\/ \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0432\u0440\u0435\u043c\u044f \u0441 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439 FREQT0 = SYSCLK\/65535 \u0413\u0446 { \tRTC++; \treturn; }  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435, \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u043e\u0440\u0442\u043e\u043c \u0432\u0432\u043e\u0434\u0430 \u0432\u044b\u0432\u043e\u0434\u0430.<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void UART0_isr(void) interrupt 4 \t\/\/ \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u043c \u0438\u043b\u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u043e\u0441\u044b\u043b\u043a\u0443 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c \u043f\u043e\u0440\u0442 { \txdata char SFRPAGE_SAVE = SFRPAGE; \tSFRPAGE = UART0_PAGE; \t \tif (RI0)     \t{  \t\tBuferFromModem [wBFM++] = SBUF0;  \/\/ \u0447\u0438\u0442\u0430\u0435\u043c \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \t\tif(wBFM &gt;= NBFM) \t\t{      \t\twBFM = 0; \t\t\tmarBFM = 1;\t \t\t}       \t  \tRI0 = 0;\t\t \t} \tif (TI0) \t{ \t\tif(r0 &lt; rk) \t\t{ \t\t\tSBUF0 = BufferInModem[r0++];  \/\/ \u043f\u0438\u0448\u0435\u043c \u0432 \u0431\u0443\u0444\u0435\u0440 \t\t} \t\telse \t\t{ \t\t\tflTransmiter = 0; \t\t} \t\tTI0 = 0; \t} \tSFRPAGE = SFRPAGE_SAVE; \treturn; }  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043d\u0438\u043c\u0430\u0435\u043c\u044b\u0435 \u0441 <abbr title=\"\u0410\u043d\u0430\u043b\u043e\u0433\u043e \u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\">\u0410\u0426\u041f<\/abbr> \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0431\u0443\u0444\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0432\u0441\u044e \u043f\u0430\u0447\u043a\u0443 \u0437\u0430 \u043e\u0434\u0438\u043d \u043e\u0431\u043e\u0440\u043e\u0442. \u0422\u0430\u043a\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u043d\u0435 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0443 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043d\u044f\u0442\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0448\u0443\u0441\u0442\u0440\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438 \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u043e\u0447\u0435\u043a. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u044f \u0410\u0426\u041f<\/b><\/p>\n<div class=\"spoiler_text\">\u0422\u0443\u0442 \u043c\u044b \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u0432 \u0431\u0443\u0444\u0435\u0440 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u044f <abbr title=\"\u0410\u043d\u0430\u043b\u043e\u0433\u043e \u0426\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\">\u0410\u0426\u041f<\/abbr>   <\/p>\n<pre><code class=\"cpp\">void ADC0_ISR (void) interrupt 15                          \/\/\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0430\u0445 \u0410\u0426\u041f {   \txdata char SFRPAGE_SAVE = SFRPAGE; \tSFRPAGE = ADC0_PAGE;                              \/\/\t\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u043f\u043e\u0442\u043e\u043c \u0441\u0442\u043e\u043f\u044d \tAD0INT = 0;            accumulator += ADC0;         int_dec--;          \t \tif (int_dec == 0)            { \t\tint_dec = INT_DEC;     \t\tBufADC[ADCcount] = accumulator &gt;&gt; 8;  \t\tAMX0SL = 0x00; \t\tADCcount++; \t\tADCFlag = 1; \t\tif(ADCcount&gt;BUFADCSIZE) \t\t{ \t\t\tADCcount=BUFADCSIZE; \t\t\tProcessFlag=1; \t\t\tEIE2    &= ~0x02; \/\/\u0410\u0426\u041f \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u043c \t\t}  \t\taccumulator = 0L; \t} \tSFRPAGE = SFRPAGE_SAVE; \treturn; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u043a-\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u044f, \u043d\u0430 \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043a\u043e\u043b\u0434\u043e\u0432\u0430\u0432 \u0441 \u0431\u0443\u0431\u043d\u043e\u043c, \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b.<br \/>  \u0414\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b C++ Builder 6.0<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/\/---------------------------------------------------------------------------  #include &lt;vcl.h&gt; #pragma hdrstop  #include &quot;balansCom4.h&quot; #include &lt;windows.h&gt; #include &lt;vector.h&gt; #include &quot;fstream.h&quot; #include &quot;math.h&quot; \/\/--------------------------------------------------------------------------- #define assert(ignore)((void)0) #define BUFSIZE 4096 \/\/--------------------------------------------------------------------------- #pragma package(smart_init) #pragma link &quot;CPort&quot; #pragma link &quot;PERFGRAP&quot; #pragma resource &quot;*.dfm&quot; TForm1 *Form1;  int N=1024,k=10; ShortComplex arr[4096]; double Amp_F[4096]; double Phase_F[4096]; double Amp_max=0, Phase_max=0; float r=0,rmax=0, fi=0, xx=0, yy=0; float K_flt = 0.00005; float Krmax = 0.05; float kAmp = 0.1; float a=1, b=0; \/\/---------------------------------------------------------------------------                                                                          bool perekl=false; struct hComException{}; String tmptxt; float RadMass[365], RadMassMax, j_max; int fiMax, WACHDOG; long data_i=0; long bad = 0; int V, Xlast, A, Alast, Vlast;   #define COM &quot;Com5&quot; #define BodRate CBR_57600 #define TIMEOUT 3000  \/\/--------------------------------------------------------------------------- <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0414\u043b\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0443\u0436\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u044b, \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u044f\u043c\u043e\u0435 \u0438 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0424\u0443\u0440\u044c\u0435. \u0414\u0430\u043d\u043d\u044b\u0435 \u043b\u044c\u044e\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c, \u0438 \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u043f\u0435\u0432\u0430\u0442\u044c \u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e, \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u0443\u044e <abbr title=\"Fast Fourier Transformation\">FFT<\/abbr>. \u044d\u0442\u043e \u043d\u0435 \u043f\u0430\u043d\u0430\u0446\u0435\u044f, \u0438 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432\u0438\u0434\u0435\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u0435\u043b\u0438\u0432\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c GPU, \u043d\u043e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0438, \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f FFT<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">static unsigned char reverse256[]= {     0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,     0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,     0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,     0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,     0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,     0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,     0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,     0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,     0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,     0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,     0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,     0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,     0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,     0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,     0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,     0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,     0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,     0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,     0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,     0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,     0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,     0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,     0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,     0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,     0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,     0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,     0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,     0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,     0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,     0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,     0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,     0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF, };  static long double temp; inline void operator+=(ShortComplex &x, const Complex &y)        { x.re += (double)y.re; x.im += (double)y.im; } inline void operator-=(ShortComplex &x, const Complex &y)        { x.re -= (double)y.re; x.im -= (double)y.im; } inline void operator*=(Complex &x,        const Complex &y)        { temp = x.re; x.re = temp * y.re - x.im * y.im; x.im = temp * y.im + x.im * y.re; } inline void operator*=(Complex &x,        const ShortComplex &y)    { temp = x.re; x.re = temp * y.re - x.im * y.im; x.im = temp * y.im + x.im * y.re; } inline void operator\/=(ShortComplex &x, double div)                { x.re \/= div; x.im \/= div; }  \/\/array exp(-2*pi*j\/2^n) for n= 1,...,32 \/\/exp(-2*pi*j\/2^n) = Complex( cos(2*pi\/2^n), -sin(2*pi\/2^n) ) static Complex W2n[32]={     {-1.00000000000000000000000000000000,  0.00000000000000000000000000000000}, \/\/ W2 calculator (copy\/paste) : po, ps     { 0.00000000000000000000000000000000, -1.00000000000000000000000000000000}, \/\/ W4: p\/2=o, p\/2=s     { 0.70710678118654752440084436210485, -0.70710678118654752440084436210485}, \/\/ W8: p\/4=o, p\/4=s     { 0.92387953251128675612818318939679, -0.38268343236508977172845998403040}, \/\/ p\/8=o, p\/8=s     { 0.98078528040323044912618223613424, -0.19509032201612826784828486847702}, \/\/ p\/16=     { 0.99518472667219688624483695310948, -9.80171403295606019941955638886e-2}, \/\/ p\/32=     { 0.99879545620517239271477160475910, -4.90676743274180142549549769426e-2}, \/\/ p\/64=     { 0.99969881869620422011576564966617, -2.45412285229122880317345294592e-2}, \/\/ p\/128=     { 0.99992470183914454092164649119638, -1.22715382857199260794082619510e-2}, \/\/ p\/256=     { 0.99998117528260114265699043772857, -6.13588464915447535964023459037e-3}, \/\/ p\/(2y9)=     { 0.99999529380957617151158012570012, -3.06795676296597627014536549091e-3}, \/\/ p\/(2y10)=     { 0.99999882345170190992902571017153, -1.53398018628476561230369715026e-3}, \/\/ p\/(2y11)=     { 0.99999970586288221916022821773877, -7.66990318742704526938568357948e-4}, \/\/ p\/(2y12)=     { 0.99999992646571785114473148070739, -3.83495187571395589072461681181e-4}, \/\/ p\/(2y13)=     { 0.99999998161642929380834691540291, -1.91747597310703307439909561989e-4}, \/\/ p\/(2y14)=     { 0.99999999540410731289097193313961, -9.58737990959773458705172109764e-5}, \/\/ p\/(2y15)=     { 0.99999999885102682756267330779455, -4.79368996030668845490039904946e-5}, \/\/ p\/(2y16)=     { 0.99999999971275670684941397221864, -2.39684498084182187291865771650e-5}, \/\/ p\/(2y17)=     { 0.99999999992818917670977509588385, -1.19842249050697064215215615969e-5}, \/\/ p\/(2y18)=     { 0.99999999998204729417728262414778, -5.99211245264242784287971180889e-6}, \/\/ p\/(2y19)=     { 0.99999999999551182354431058417300, -2.99605622633466075045481280835e-6}, \/\/ p\/(2y20)=     { 0.99999999999887795588607701655175, -1.49802811316901122885427884615e-6}, \/\/ p\/(2y21)=     { 0.99999999999971948897151921479472, -7.49014056584715721130498566730e-7}, \/\/ p\/(2y22)=     { 0.99999999999992987224287980123973, -3.74507028292384123903169179084e-7}, \/\/ p\/(2y23)=     { 0.99999999999998246806071995015625, -1.87253514146195344868824576593e-7}, \/\/ p\/(2y24)=     { 0.99999999999999561701517998752946, -9.36267570730980827990672866808e-8}, \/\/ p\/(2y25)=     { 0.99999999999999890425379499688176, -4.68133785365490926951155181385e-8}, \/\/ p\/(2y26)=     { 0.99999999999999972606344874922040, -2.34066892682745527595054934190e-8}, \/\/ p\/(2y27)=     { 0.99999999999999993151586218730510, -1.17033446341372771812462135032e-8}, \/\/ p\/(2y28)=     { 0.99999999999999998287896554682627, -5.85167231706863869080979010083e-9}, \/\/ p\/(2y29)=     { 0.99999999999999999571974138670657, -2.92583615853431935792823046906e-9}, \/\/ p\/(2y30)=     { 0.99999999999999999892993534667664, -1.46291807926715968052953216186e-9}, \/\/ p\/(2y31)= };  void fft(ShortComplex *x, int T, bool complement) {     unsigned int I, J, Nmax, N, Nd2, k, m, mpNd2, Skew;     unsigned char *Ic = (unsigned char*) &I;     unsigned char *Jc = (unsigned char*) &J;     ShortComplex S;     ShortComplex *Wstore, *Warray;     Complex WN, W, Temp, *pWN;      Nmax = 1 &lt;&lt; T;      \/\/first interchanging     for(I = 1; I &lt; Nmax - 1; I++)     {         Jc[0] = reverse256[Ic[3]];         Jc[1] = reverse256[Ic[2]];         Jc[2] = reverse256[Ic[1]];         Jc[3] = reverse256[Ic[0]];         J &gt;&gt;= (32 - T);         if (I &lt; J)         {             S = x[I];             x[I] = x[J];             x[J] = S;         }     }      \/\/rotation multiplier array allocation     Wstore = new ShortComplex[Nmax \/ 2];     Wstore[0].re = 1.0;     Wstore[0].im = 0.0;      \/\/main loop     for(N = 2, Nd2 = 1, pWN = W2n, Skew = Nmax &gt;&gt; 1; N &lt;= Nmax; Nd2 = N, N += N, pWN++, Skew &gt;&gt;= 1)     {         \/\/WN = W(1, N) = exp(-2*pi*j\/N)        \tWN= *pWN;          if (complement)             WN.im = -WN.im;         for(Warray = Wstore, k = 0; k &lt; Nd2; k++, Warray += Skew)         {             if (k & 1)             {                 W *= WN;                 *Warray = W;             }             else                 W = *Warray;              for(m = k; m &lt; Nmax; m += N)             {                 mpNd2 = m + Nd2;                 Temp = W;                 Temp *= x[mpNd2];                 x[mpNd2] = x[m];                 x[mpNd2] -= Temp;                 x[m] += Temp;             }         }     }      delete [] Wstore;      if (complement)     {         for( I = 0; I &lt; Nmax; I++ )             x[I] \/= Nmax;     } }  <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0413\u043e\u0442\u043e\u0432\u0438\u043c <abbr title=\"Graphical user interface\">GUI<\/abbr>, \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c COM \u043f\u043e\u0440\u0442 \u0434\u043b\u044f \u043f\u0440\u0438\u0435\u043c\u0430.   <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0438 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">__fastcall TForm1::TForm1(TComponent* Owner)    : TForm(Owner) {       for(int i=0; i&lt;362; i++)            RadMass[i]=0;       RadMassMax=0;       Image1-&gt;Canvas-&gt;Rectangle(0,0,Image1-&gt;Width, Image1-&gt;Height);     int i=0;    float r, fi=0;    float xx, yy;    while(i&lt;100)    {          Image1-&gt;Canvas-&gt;Pen-&gt;Color=clGreen;          i=i+10;          r=i;          fi=0;          while(fi&lt;360)          {              fi=fi+1;              xx = r*cos(fi) + Image1-&gt;Width\/2;              yy = r*sin(fi) + Image1-&gt;Height\/2;              Image1-&gt;Canvas-&gt;Ellipse((int)xx,(int)yy, (int)xx+2,(int)yy+2);          }    }    Image1-&gt;Canvas-&gt;Pen-&gt;Color=clBlack;    Button2Click(Owner);    flEdit=0;    hCom = CreateFile(COM,GENERIC_READ | GENERIC_WRITE,0,NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);    if( hCom == INVALID_HANDLE_VALUE )    {          ShowMessage(&quot;Com port error&quot;);          CloseHandle(hCom);          Stat-&gt;SimpleText=&quot;Com port error&quot;;    }    else    {          SetCommMask(hCom, EV_RXCHAR);          SetupComm(hCom, 1500, 1500);           CommTimeOuts.ReadIntervalTimeout = MAXDWORD;          CommTimeOuts.ReadTotalTimeoutMultiplier = TIMEOUT;          CommTimeOuts.ReadTotalTimeoutConstant = TIMEOUT;          CommTimeOuts.WriteTotalTimeoutMultiplier = TIMEOUT;          CommTimeOuts.WriteTotalTimeoutConstant = TIMEOUT;        if(!SetCommTimeouts(hCom, &CommTimeOuts))       {             hCom = 0;             throw hComException();       }        memset(&dcb, 0, sizeof(dcb));       dcb.DCBlength = sizeof(DCB);       GetCommState(hCom, &dcb);       dcb.BaudRate = BodRate;       dcb.fParity = 0;       dcb.ByteSize = 8;       dcb.Parity = NOPARITY;       dcb.StopBits = ONESTOPBIT;       dcb.fAbortOnError = FALSE;       dcb.fDtrControl = DTR_CONTROL_DISABLE;       dcb.fRtsControl = RTS_CONTROL_DISABLE;       dcb.fBinary = TRUE;       dcb.fParity = FALSE;       dcb.fInX = FALSE;       dcb.fOutX = FALSE;       dcb.XonChar = 0;       dcb.XoffChar = (unsigned char)0xFF;       dcb.fErrorChar = FALSE;       dcb.fNull = FALSE;       dcb.fOutxCtsFlow = FALSE;       dcb.fOutxDsrFlow = FALSE;       dcb.XonLim = 128;       dcb.XoffLim = 128;              SetCommState(hCom,&dcb);       PurgeComm(hCom, PURGE_RXCLEAR);       begin = GetTickCount();         tmptxt = COM;       tmptxt += &quot; br&quot;;       tmptxt += dcb.BaudRate;       tmptxt += &quot; p&quot;;       tmptxt += dcb.Parity;       tmptxt += &quot; By&quot;;       tmptxt += dcb.ByteSize;       tmptxt += &quot; sb&quot;;       tmptxt += dcb.StopBits;       Stat-&gt;SimpleText= tmptxt;       overlapped.hEvent = CreateEvent(NULL, true, true, NULL);    } } void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action) {    CloseHandle(hCom); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0420\u0435\u0448\u0438\u043b \u043f\u0440\u0438\u0434\u0435\u043b\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043a\u0430\u043a-\u0442\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438, \u0445\u043e\u0442\u044f \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u0441\u0442\u0435\u043d\u0434\u0430. \u0414\u0430\u043d\u043d\u044b\u0435 \u0445\u043e\u0442\u044c \u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0438\u0441\u044c, \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0442\u044c.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void TForm1::SaveToFile(String FileName) {    fstream file_;    file_.open(FileName.c_str(), ios::out);    if (!file_)    {       file_.close();       return;    }    int count_ = 0, tmp_count;    tmp_count = Series1-&gt;XValues-&gt;MaxValue-1;    if(tmp_count&gt;(Series2-&gt;XValues-&gt;MaxValue-1))       tmp_count = Series2-&gt;XValues-&gt;MaxValue-1;     if(tmp_count&gt;(Series6-&gt;XValues-&gt;MaxValue-1))       tmp_count = Series6-&gt;XValues-&gt;MaxValue-1;    while(count_++ &lt; tmp_count)    {       int a1Propeller = Series1-&gt;YValue[count_];       int a2X1 = Series2-&gt;YValue[count_];       int a6Ugol = Series6-&gt;YValue[count_];       file_ &lt;&lt; a1Propeller &lt;&lt; &quot; &quot; &lt;&lt; a2X1 &lt;&lt; &quot; &quot; &lt;&lt; a6Ugol &lt;&lt; &quot; &quot; ;    }    file_.close(); }  void TForm1::LoadFromFile(String FileName) {    fstream file;    file.open(FileName.c_str());    if (!file)    {       file.close();       return;    }    float a1Propeller = 0, a2X1 = 0, a6Ugol = 0;    Series1-&gt;Clear();    Series2-&gt;Clear();    Series6-&gt;Clear();    long file_i=0;    file_i=0;    while(!file.eof())    {       file &gt;&gt; a1Propeller &gt;&gt; a2X1 &gt;&gt; a6Ugol;        Application-&gt;ProcessMessages();       Series1-&gt;Add(a1Propeller);       Series2-&gt;Add(a2X1);       Series6-&gt;Add(a6Ugol);       Dannye-&gt;Cells[0][0]=&quot;Propeller&quot;;       Dannye-&gt;Cells[1][0]=a1Propeller;       Dannye-&gt;Cells[0][1]=&quot;X1&quot;;       Dannye-&gt;Cells[1][1]=a2X1;       float r, fi, xx, yy;       r = (Image1-&gt;Height\/2)*(a*a2X1-b)\/4095;       fi = a6Ugol;       RadMass[(int)fi]=RadMass[(int)fi] + (r-RadMass[(int)fi])*Krmax;       if(RadMass[(int)fi]&gt;RadMassMax)       {          float lastRadMax;          int lastfiMax;          lastfiMax = fiMax;          lastRadMax = RadMass[lastfiMax];          Image1-&gt;Canvas-&gt;Pen-&gt;Color=clWhite;          Image1-&gt;Canvas-&gt;MoveTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2);          xx= lastRadMax*cos(lastfiMax) + Image1-&gt;Width\/2;          yy= lastRadMax*sin(lastfiMax) + Image1-&gt;Height\/2;          Image1-&gt;Canvas-&gt;LineTo(xx, yy);          Image1-&gt;Canvas-&gt;MoveTo(xx, yy+1);          Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2+1);          Image1-&gt;Canvas-&gt;MoveTo(xx, yy-1);          Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2-1);          Image1-&gt;Canvas-&gt;MoveTo(xx+1, yy);          Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2+1, Image1-&gt;Height\/2);          Image1-&gt;Canvas-&gt;MoveTo(xx-1, yy);          Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2-1, Image1-&gt;Height\/2);          RadMassMax =  RadMass[(int)fi];          fiMax = fi;          lastRadMax = RadMassMax;          lastfiMax = fiMax;          Image1-&gt;Canvas-&gt;Pen-&gt;Color=clRed;          Image1-&gt;Canvas-&gt;MoveTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2);          xx= RadMassMax*cos(2*M_PI*fiMax\/360)+Image1-&gt;Width\/2;          yy= RadMassMax*sin(2*M_PI*fiMax\/360) + Image1-&gt;Height\/2;          Image1-&gt;Canvas-&gt;LineTo(xx, yy);          Image1-&gt;Canvas-&gt;MoveTo(xx, yy+1);          Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2+1);          Image1-&gt;Canvas-&gt;MoveTo(xx, yy-1);          Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2-1);          Image1-&gt;Canvas-&gt;MoveTo(xx+1, yy);          Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2+1, Image1-&gt;Height\/2);          Image1-&gt;Canvas-&gt;MoveTo(xx-1, yy);          Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2-1, Image1-&gt;Height\/2);          Image1-&gt;Canvas-&gt;Pen-&gt;Color=clBlack;          Dannye-&gt;Cells[0][3]=&quot;\u0414\u0438\u0441\u0431\u0430\u043b\u0430\u043d\u0441&quot;;          Dannye-&gt;Cells[1][3]= (int)RadMassMax;       }       xx = r*cos(2*M_PI*fi\/360) + Image1-&gt;Width\/2;       yy = r*sin(2*M_PI*fi\/360) + Image1-&gt;Height\/2;       Image1-&gt;Canvas-&gt;Ellipse((int)xx,(int)yy, (int)xx+2,(int)yy+2);        if (file_i &gt; (N+1))       {          int count_= 0;          while(count_ &lt; N)          {             arr[count_].re= Series2-&gt;YValue[count_+file_i-N];             arr[count_++].im= 0.0;          }          Series7-&gt;Clear();          Series8-&gt;Clear();          fft(arr, k, false);          int i=0;          double nSamplesPerSec;          int Nmax= (N + 1) \/ 2;          double *freq= new double[Nmax];          double *amp= new double[Nmax];          double *phase= new double[Nmax];          int j= 0;          double limit= 0.001;          double abs2min= limit * limit * N * N;          double abs2max= 10E150;          if (arr[i].re &gt;= limit)          {             amp[j]= arr[i].re \/ N;             freq[j]= 0.0; \t\t      phase[j]= 0.0; \t\t      ++j;          }          ++i;          for(i= 1; i &lt; Nmax; ++i)          {             double re= arr[i].re;             double im= arr[i].im;             long double\tabs2;             abs2 = re * re + im * im;             if (abs2 &lt; abs2min)                continue;             if (abs2 &gt; abs2max)                abs2=abs2max;             amp[j]= 2.0 * sqrt((double)abs2) \/ N;             Amp_F[j] = Amp_F[j]+(amp[j]-Amp_F[j])*K_flt;             Series7-&gt;Add(Amp_F[j]);             phase[j]= atan2(im, re);             phase[j]+= M_PI_2;             if (phase[j] &gt; M_PI)                phase[j]-= 2*M_PI;             phase[j]= phase[j] * M_PI \/ 180.0;             Phase_F[j] = Phase_F[j] + (phase[j] - Phase_F[j])*K_flt;             Series8-&gt;Add(Phase_F[j]);             freq[j]= (nSamplesPerSec * i) \/ N;             ++j;          }          delete[] amp;          delete[] freq;          delete[] phase;        }       file_i++;    }           file.close();    return; } \/\/---------------------------------------------------------------------------  void __fastcall TForm1::Button1Click(TObject *Sender) {    String FileName_;    FileName_ = ExtractFilePath(Application-&gt;ExeName);    FileName_ += &quot;Data\\\\&quot;;    FileName_ += FormatDateTime(&quot;dd_mmm_yyy'-'hh_nn'&quot;,Now());    SaveDialog1-&gt;FileName = FileName_;    if(SaveDialog1-&gt;Execute())    {       SaveToFile(SaveDialog1-&gt;FileName);       flEdit=0;    } } \/\/---------------------------------------------------------------------------   void __fastcall TForm1::Button3Click(TObject *Sender) {    if(OpenDialog1-&gt;Execute())    {       LoadFromFile(OpenDialog1-&gt;FileName);    } } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0435\u043c \u0438 \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0430 \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u043b\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438, \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u043e \u0442\u0430\u0439\u043c\u0435\u0440\u0443, \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0434\u0430\u0447\u043d\u0430\u044f \u0438\u0434\u0435\u044f, \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u044b \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u044f \u0431\u044b \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0442\u043e\u043a\u0435, \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u043b \u043d\u0430 \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043c\u0435\u0448\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u0432\u0432\u043e\u0434\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u0438 \u0442\u0430\u043a\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0436\u0438\u0437\u043d\u0435\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c, \u0438 \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0441\u043f\u0440\u0430\u0432\u0438\u043b\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u0430\u0439\u043c\u0435\u0440 \u0441 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u043e\u0439<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void __fastcall TForm1::Timer1Timer(TObject *Sender) {    if(CheckBox1-&gt;Checked)    {       flEdit=1;       int Propeller, X1, ADCcount, ADCcountMax, Amax;       unsigned char tmp40;       int attempts = 3, nLetter40 = 11;       int rBUF=0, wBUF=0, marBUF=0;       feedback = 0;       BYTE data1[BUFSIZE];       vector&lt;unsigned char&gt; data(data1, data1+BUFSIZE);       unsigned char* buf = &data[0];       ADCcountMax=0;                 WaitCommEvent(hCom, &mask, &overlapped);           signal = WaitForSingleObject(overlapped.hEvent, 7000);          if(signal == WAIT_OBJECT_0)          {             if(GetOverlappedResult(hCom, &overlapped, &feedback, true))             if((mask & EV_RXCHAR)!=0)             {                ClearCommError(hCom, &feedback, &comstat);                btr = comstat.cbInQue;                if(btr)                {                   ReadFile(hCom, buf, btr, &feedback, &overlapped);                   wBUF+=btr;\/\/(DWORD)data.size();                   if(wBUF &gt;= BUFSIZE) \t\t            {      \t\t            wBUF = 0; \t\t\t            marBUF = 1; \t\t            }                }                while(rBUF &lt; (wBUF + (marBUF*BUFSIZE)))                {                   unsigned char tmpBuf = data[rBUF];                   tmpBuf = tmpBuf&~0x80;                   if(tmpBuf==(0x40 | 40))                   {                      nLetter40=0;                      tmp40 = 0;                      tmp40 = tmp40 ^ data[rBUF];                   }                   else if(nLetter40==0 && (data[rBUF]&gt;&gt;7)==1)                   {                      nLetter40++;                      Propeller = data[rBUF]&~0x80;                      tmp40 = tmp40 ^ data[rBUF];                   }                   else if(nLetter40==1 && (data[rBUF]&gt;&gt;7)==1)                   {                      nLetter40++;                      Propeller |= ((int)(data[rBUF]&~0x80)&lt;&lt;7);                      tmp40 = tmp40 ^ data[rBUF];                   }                   else if(nLetter40==2 && (data[rBUF]&gt;&gt;7)==1)                   {                      nLetter40++;                      ADCcount = data[rBUF]&~0x80;                      tmp40 = tmp40 ^ data[rBUF];                   }                   else if(nLetter40==3 && (data[rBUF]&gt;&gt;7)==1)                   {                      nLetter40++;                      ADCcount |= ((int)(data[rBUF]&~0x80)&lt;&lt;7);                      tmp40 = tmp40 ^ data[rBUF];                   }                   else if(nLetter40==4 && (data[rBUF]&gt;&gt;7)==1)                   {                      nLetter40++;                      X1 = data[rBUF]&~0x80;                      tmp40 = tmp40 ^ data[rBUF];                   }                   else if(nLetter40==5 && (data[rBUF]&gt;&gt;7)==1)                   {                      nLetter40++;                      X1 |= ((int)(data[rBUF]&~0x80)&lt;&lt;7);                      tmp40 = tmp40 ^ data[rBUF];                   }                   else if(nLetter40==6 && (data[rBUF]&gt;&gt;7)==1)                   {                      nLetter40++;                      Amax = data[rBUF]&~0x80;                      tmp40 = tmp40 ^ data[rBUF];                   }                   else if(nLetter40==7 && (data[rBUF]&gt;&gt;7)==1)                   {                      nLetter40++;                      Amax |= ((int)(data[rBUF]&~0x80)&lt;&lt;7);                      tmp40 = tmp40 ^ data[rBUF++];                      tmp40 = tmp40 | 0x80;                      float Angle=400;                      if(Amax&gt;0)                         Angle = 360*ADCcount\/Amax;                      if(tmp40 != 0x80 && tmp40 == data[rBUF]                                                     && ADCcount&gt;0 && X1&lt;4096 && X1&gt;0 && Amax&gt;0                                                     && Propeller&lt;1000 && Propeller&gt;100 && Angle&gt;=0                                                     && Angle&lt;=360)                      {                         \/\/Chart1-&gt;BottomAxis-&gt;Scroll(1, false);                         Dannye-&gt;Cells[0][0]=&quot;\u041e\u0431\u043e\u0440\u043e\u0442\u044b&quot;;                         Dannye-&gt;Cells[1][0]=Propeller;                         Series1-&gt;Add(Propeller);                         Dannye-&gt;Cells[0][1]=&quot;X1&quot;;                         Dannye-&gt;Cells[1][1]=X1;                         V=Xlast-X1;                         A=Vlast-V;                         Vlast=V;                         Alast=A;                         Series2-&gt;Add(X1);                         Series6-&gt;Add(360*ADCcount\/Amax);                         if (data_i &gt; (N+1))                         {                            int count_= 0;                            while(count_ &lt; N)                            {                               arr[count_].re= Series2-&gt;YValue[count_+data_i-N];                               arr[count_++].im= 0.0;                            }                            Series7-&gt;Clear();                            Series8-&gt;Clear();                            fft(arr, k, false);                            int i=0;                            double nSamplesPerSec;                            int Nmax= (N + 1) \/ 2;                            double *freq= new double[Nmax];                            double *amp= new double[Nmax];                            double *phase= new double[Nmax];                            int j= 0;                            double limit= 0.001;                            double abs2min= limit * limit * N * N;                            double abs2max= 10E150;                            if (arr[i].re &gt;= limit)                            {                               amp[j]= arr[i].re \/ N;                               freq[j]= 0.0; \t\t                        phase[j]= 0.0; \t\t                        ++j;                            }                            ++i;                            for(i= 1; i &lt; Nmax; ++i)                            {                               double re= arr[i].re;                               double im= arr[i].im;                               long double\tabs2;                               abs2 = re * re + im * im;                               if (abs2 &lt; abs2min)                                  continue;                               if (abs2 &gt; abs2max)                                  abs2=abs2max;                               amp[j]= 2.0 * sqrt((double)abs2) \/ N;                               \/\/Series7-&gt;Add(amp[j]);                               Amp_F[j] = Amp_F[j]+(amp[j]-Amp_F[j])*K_flt;                               Series7-&gt;Add(Amp_F[j]);                                phase[j]= atan2(im, re);                               phase[j]+= M_PI_2;                               if (phase[j] &gt; M_PI)                                  phase[j]-= 2*M_PI;                               phase[j]= phase[j] * M_PI \/ 180.0;                               \/\/Series8-&gt;Add(phase[j]);                               Phase_F[j] = Phase_F[j] + (phase[j] - Phase_F[j])*K_flt;                               Series8-&gt;Add(Phase_F[j]);                               freq[j]= (nSamplesPerSec * i) \/ N;                               ++j;                            }                            delete[] amp;                            delete[] freq;                            delete[] phase;                                                        for(i= 0; i&lt;Nmax; i++)                            {                               if(i&gt;(j_max+1))                                  arr[i].re = 0;                               arr[i].im = 0;                            }                            fft(arr, k, true);                            \/*                            count_= 0;                            while(count_ &lt; N)                            {                               Series4-&gt;Add(arr[count_++].re);                            }  *\/                                                Series4-&gt;Add(arr[(N-1)].re);                            float r, fi, xx, yy;                            r = (Image1-&gt;Height\/2)*(a*arr[(N-1)].re-b)\/4095;                            \/\/X1=arr[1023].re; \/\/\/!!!!!!!!!!                            fi = 360*(ADCcount)\/Amax;                            xx= r*cos(2*M_PI*fi\/360)+Image1-&gt;Width\/2;                            yy= r*sin(2*M_PI*fi\/360) + Image1-&gt;Height\/2;                            Image1-&gt;Canvas-&gt;Pen-&gt;Color = clYellow;                            Image1-&gt;Canvas-&gt;Ellipse((int)xx,(int)yy, (int)xx+2,(int)yy+2);                          }                         else                         {                          Series4-&gt;Add(X1);                         }                         Image1-&gt;Canvas-&gt;Pen-&gt;Color = clBlack;                         data_i++;                         Dannye-&gt;Cells[0][2]=&quot;\u0418\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439 \u043d\u0430 \u043a\u0440\u0443\u0433&quot;;                         Dannye-&gt;Cells[1][2]=Amax;                          float r, fi, xx, yy;                         r = (Image1-&gt;Height\/2)*(a*X1-b)\/4095;                         fi = 360*(ADCcount)\/Amax;                         if(X1&gt;0 && X1&lt;4095 && fi&lt;361 && fi &gt;0)                         {                            \/\/\u0427\u0435\u0440\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438                            xx = r*cos(2*M_PI*fi\/360) + Image1-&gt;Width\/2;                            yy = r*sin(2*M_PI*fi\/360) + Image1-&gt;Height\/2;                            Image1-&gt;Canvas-&gt;Ellipse((int)xx,(int)yy, (int)xx+2,(int)yy+2);                            X1=arr[(N-1)].re; \/\/\/!!!!!!!!!!                            r = (Image1-&gt;Height\/2)*(a*X1-b)\/4095;                            RadMass[(int)fi]=RadMass[(int)fi] + (r-RadMass[(int)fi])*Krmax;                            \/\/\u041a\u0440\u0430\u0441\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438                               xx= RadMass[(int)fi]*cos(2*M_PI*fi\/360)+Image1-&gt;Width\/2;                               yy= RadMass[(int)fi]*sin(2*M_PI*fi\/360) + Image1-&gt;Height\/2;                                Image1-&gt;Canvas-&gt;Pen-&gt;Color = clYellow;                               Image1-&gt;Canvas-&gt;Ellipse((int)xx,(int)yy, (int)xx+2,(int)yy+2);                               Image1-&gt;Canvas-&gt;Pen-&gt;Color = clBlack;                            if(RadMass[(int)fi]&gt;RadMassMax)                            {                               Image1-&gt;Canvas-&gt;Pen-&gt;Color=clWhite;                               Image1-&gt;Canvas-&gt;MoveTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2);                               xx= RadMassMax*cos(2*M_PI*fiMax\/360)+Image1-&gt;Width\/2;                               yy= RadMassMax*sin(2*M_PI*fiMax\/360) + Image1-&gt;Height\/2;                               Image1-&gt;Canvas-&gt;LineTo(xx, yy);                               Image1-&gt;Canvas-&gt;MoveTo(xx, yy+1);                               Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2+1);                               Image1-&gt;Canvas-&gt;MoveTo(xx, yy-1);                               Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2-1);                               Image1-&gt;Canvas-&gt;MoveTo(xx+1, yy);                               Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2+1, Image1-&gt;Height\/2);                               Image1-&gt;Canvas-&gt;MoveTo(xx-1, yy);                               Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2-1, Image1-&gt;Height\/2);                                RadMassMax =  RadMass[(int)fi];                               fiMax = (int)fi;                               Image1-&gt;Canvas-&gt;Pen-&gt;Color=clRed;                               Image1-&gt;Canvas-&gt;MoveTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2);                               xx= RadMassMax*cos(2*M_PI*fiMax\/360)+Image1-&gt;Width\/2;                               yy= RadMassMax*sin(2*M_PI*fiMax\/360) + Image1-&gt;Height\/2;                                Image1-&gt;Canvas-&gt;LineTo(xx, yy);                               Image1-&gt;Canvas-&gt;MoveTo(xx, yy+1);                               Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2+1);                               Image1-&gt;Canvas-&gt;MoveTo(xx, yy-1);                               Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2-1);                               Image1-&gt;Canvas-&gt;MoveTo(xx+1, yy);                               Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2+1, Image1-&gt;Height\/2);                               Image1-&gt;Canvas-&gt;MoveTo(xx-1, yy);                               Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2-1, Image1-&gt;Height\/2);                                  Image1-&gt;Canvas-&gt;Pen-&gt;Color=clBlack;                               Dannye-&gt;Cells[0][6]=&quot;\u0414\u0438\u0441\u0431\u0430\u043b\u0430\u043d\u0441&quot;;                               Dannye-&gt;Cells[1][6]= (int)RadMassMax;                               Dannye-&gt;Cells[0][7] =&quot;\u0423\u0433\u043e\u043b&quot;;                               Dannye-&gt;Cells[1][7] =(int)fiMax;                            }                            RadMassMax =  RadMass[(int)fiMax];                         }                          }                      else                      {                         bad++;                      }                          String tmp_txt;                          if(Amax&gt;0)                          j_max = (int)((float)N\/(float)Amax);                          Amp_max = Amp_max + ((Amp_F[(int)j_max]+Amp_F[(int)j_max-1]+Amp_F[(int)j_max+1])\/3. - Amp_max)*kAmp;                          Phase_max = Phase_F[(int)j_max];                          Dannye-&gt;Cells[0][3]=&quot;\u0410\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u0430&quot;;                          Dannye-&gt;Cells[1][3]=(int)Amp_max;                          Dannye-&gt;Cells[0][4]=&quot;\u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u0438 \u0424\u0430\u0437\u0430&quot;;                          tmp_txt = j_max;                          tmp_txt += &quot; |&quot;;                          tmp_txt +=Phase_max;                          Dannye-&gt;Cells[1][4]=tmp_txt;                          Dannye-&gt;Cells[0][5]=&quot;\u041e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438\u0435\u043c\u0430&quot;;                       if(data_i&gt;0)                      {                         tmp_txt = (int)(100*bad\/(data_i+bad));                         tmp_txt +=&quot; %&quot;;                      }                      else                      {                         tmp_txt = &quot;100%&quot;;                      }                      Dannye-&gt;Cells[1][5]=tmp_txt.c_str();                   }                      if(rBUF++ &gt;= BUFSIZE) \t\t   {       \t\t         rBUF = 0; \t\t\tmarBUF = 0; \t\t    }                }                memset(buf, 0, BUFSIZE);             }          }          else          {                CheckBox1-&gt;Checked = false;          }        delete[] buf;       }  } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u0441\u0435 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0437\u0430\u043d\u043e\u0432\u043e, \u0441\u0434\u0435\u043b\u0430\u043b \u043a\u043d\u043e\u043f\u043a\u0443 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0447\u0438\u0449\u0430\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435 \u0441 \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void __fastcall TForm1::Button2Click(TObject *Sender) {    Series1-&gt;Clear();    Series2-&gt;Clear();    Series3-&gt;Clear();    Series4-&gt;Clear();    Series5-&gt;Clear();    Series6-&gt;Clear();    Series7-&gt;Clear();    Series8-&gt;Clear();    r=0;    rmax=0;    fi=0;    xx=0;    yy=0;    data_i = 0; bad=0;     Image1-&gt;Canvas-&gt;Rectangle(0,0,Image1-&gt;Width, Image1-&gt;Height);     rmax = 0.3*sqrt(Image1-&gt;Width*Image1-&gt;Width+Image1-&gt;Height*Image1-&gt;Height);    Image1-&gt;Canvas-&gt;Pen-&gt;Color=clBlue;    r = rmax;    while(fi&lt;360)    {       if(fi&gt;1)       {          Image1-&gt;Canvas-&gt;Pen-&gt;Color=clGreen;       }       xx = r*cos(2*M_PI*fi\/360) + Image1-&gt;Width\/2;       yy = r*sin(2*M_PI*fi\/360) + Image1-&gt;Height\/2;       Image1-&gt;Canvas-&gt;MoveTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2);       Image1-&gt;Canvas-&gt;LineTo(xx, yy);       if(fi&lt;=1){         Image1-&gt;Canvas-&gt;MoveTo(xx, yy+1);         Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2+1);         Image1-&gt;Canvas-&gt;MoveTo(xx, yy-1);         Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2, Image1-&gt;Height\/2-1);         Image1-&gt;Canvas-&gt;MoveTo(xx+1, yy);         Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2+1, Image1-&gt;Height\/2);         Image1-&gt;Canvas-&gt;MoveTo(xx-1, yy);         Image1-&gt;Canvas-&gt;LineTo(Image1-&gt;Width\/2-1, Image1-&gt;Height\/2);       }       fi=fi+30;    }    r=0;    do    {       r=r+15;        fi=0;       while(fi&lt;360)       {          fi=fi+1;          xx = r*cos(2*M_PI*fi\/360) + Image1-&gt;Width\/2;          yy = r*sin(2*M_PI*fi\/360) + Image1-&gt;Height\/2;          Image1-&gt;Canvas-&gt;Ellipse((int)xx,(int)yy, (int)xx+2,(int)yy+2);       }    }while(r&lt;rmax);     Image1-&gt;Canvas-&gt;Pen-&gt;Color=clRed;    fi=0;    while(fi&lt;360)    {       fi=fi+1;       r=RadMass[(int)fi];       xx = r*cos(2*M_PI*fi\/360) + Image1-&gt;Width\/2;       yy = r*sin(2*M_PI*fi\/360) + Image1-&gt;Height\/2;       \/\/Image1-&gt;Canvas-&gt;LineTo(xx, yy);       Image1-&gt;Canvas-&gt;Ellipse((int)xx,(int)yy, (int)xx+2,(int)yy+2);    }    Image1-&gt;Canvas-&gt;Pen-&gt;Color=clRed;    for(int i=0; i&lt;4; i++)    {       Image1-&gt;Canvas-&gt;MoveTo(Image1-&gt;Width\/2+i, Image1-&gt;Height\/2+i);       Image1-&gt;Canvas-&gt;LineTo(RadMassMax*cos(2*M_PI*fiMax\/360)+Image1-&gt;Width\/2+i, RadMassMax*sin(2*M_PI*fiMax\/360) + Image1-&gt;Height\/2+i);    }    for(int i=0; i&lt;362; i++)       RadMass[i]=0;    RadMassMax=0;    for(int i=0; i&lt;4095; i++)    {       Amp_F[i]=0;       Phase_F[i]=0;       arr[i].re=0;       arr[i].im=0;    }    Image1-&gt;Canvas-&gt;Pen-&gt;Color=clBlack; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u043e\u043b\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u044f \u0431\u0430\u043b\u0430\u043d\u0441\u0430, \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u043b\u044c\u043d\u043e\u0441\u0442\u0438.  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">void __fastcall TForm1::RadioButton1Click(TObject *Sender) {    a=1;    b=0; } \/\/---------------------------------------------------------------------------  void __fastcall TForm1::RadioButton2Click(TObject *Sender) {    a=2;    b=2550; } \/\/---------------------------------------------------------------------------  void __fastcall TForm1::RadioButton3Click(TObject *Sender) {    a=3;    b=5500; } \/\/---------------------------------------------------------------------------  void __fastcall TForm1::RadioButton4Click(TObject *Sender) {    a=4;    b=8000; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0430\u0441\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u0430\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0432 \u043a\u0430\u043a\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0438\u0441\u0431\u0430\u043b\u0430\u043d\u0441, \u0438 \u043f\u0440\u0438\u043d\u043e\u0440\u043e\u0432\u0438\u0432\u0448\u0438\u0441\u044c \u043f\u0440\u0438\u043a\u043b\u0435\u0438\u0432\u0430\u044f \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u0430\u0440\u0430\u043a\u0430\u043b\u0430 \u043f\u043e 0,15\u0433 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043e\u0442\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u043d\u0442. <\/p>\n<p>  <img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/f88\/a51\/592\/f88a51592ac2113630a08bb1926929cb.jpg\"\/><br \/>  \/\u0421\u0430\u043c\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043a\u0430 \u0432 \u0440\u0430\u0431\u043e\u0442\u0435\/<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0438\u043a\u0438 \u043f\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u043c, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044f\u0440\u043a\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u044b \u0434\u0432\u0435 \u0430\u043c\u043f\u043b\u0438\u0442\u0443\u0434\u044b, \u043a\u0430\u043a \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c \u043e\u0434\u043d\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0432\u0438\u0431\u0440\u0430\u0446\u0438\u044e \u0432\u0438\u043d\u0442\u0430, \u0430 \u0432\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043c\u043e\u0442\u043e\u0440\u043e\u043c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d \u0447\u0435\u0440\u0435\u0437 \u0440\u0435\u043c\u0435\u043d\u044c \u0438 \u043a\u0440\u0443\u0442\u0438\u0442\u044c\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u0443\u044f \u0432\u0438\u043d\u0442 \u043c\u044b \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043f\u0435\u0440\u0432\u044b\u0439 \u043f\u0438\u043a, \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u044f \u0433\u0440\u0443\u0437\u0438\u043a \u0441\u043e\u0440\u0430\u0437\u043c\u0435\u0440\u043d\u044b\u0439 \u0441 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u0435\u043c \u043a\u0440\u0443\u0433\u0430, \u043d\u0430 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443. \t\t\t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/207478\/\"> http:\/\/habrahabr.ru\/post\/207478\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\"> \t\t\t<img decoding=\"async\" src=\"http:\/\/habr.habrastorage.org\/post_images\/179\/ced\/a87\/179ceda8753d0edeb435e11aadd9c32d.jpg\"\/><br \/>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0437\u0430\u0434\u0443\u043c\u0430\u043b\u0438 \u043e\u0442\u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0435\u0435\u0441\u044f, \u0431\u0443\u0434\u044c \u0442\u043e \u043a\u043e\u043b\u0435\u0441\u043e, \u0432\u0438\u043d\u0442 \u0441\u0430\u043c\u043e\u043b\u0435\u0442\u0430 \u0438\u043b\u0438 \u043b\u0435\u0442\u0430\u044e\u0449\u0430\u044f \u0442\u0430\u0440\u0435\u043b\u043a\u0430. \u0418\u043b\u0438 \u0412\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u0438\u0441\u0442\u043e\u0440\u0438\u044f, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0442 \u0440\u0430\u0431\u043e\u0447\u0438\u0435 \u0431\u0443\u0434\u043d\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430. \u0423\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043d\u0434\u0430\u2026  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-207478","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/207478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=207478"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/207478\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=207478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=207478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=207478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}