wm idudkHfhka MICRO CONTROLLER PROGRAM lsÍug Ndú;d lrk ASSEMBLER my, uÜgfï NdIdjla fia ie,fla' kuq;a my, uÜgfï NdIdjlska fÄ; ,sùfï§ l%uf,aLKhg wjYH mßÈ 100] fÄ;h yeisrùug bv ,efí' kuq;a ,sùfï myiqj fodaY fidhd .ekSfï (DEBUGGING ) myiqj wd§ lreKq /ila ksid by< uÜgfï NdId ckm%sh fjñka mj;S' PIC MICROCONTROLLER i|yd ie,iQ by, uÜgfï NdId /ils' tajd BASIC, C, PASCAL , JAVA hk NdId weiqßka ÈhQKq lr ;sfí' fuu .%ka:fhka Tng jvd ckm%sh C NdIdfjka MICRO CONTROLLER l%u f,aLKh lrk wdldrh .ek woyila ,nd §ug n,dfmdfrd;a;= fjñ' C NdIdj .;a l, MICRO CONTROLLER i|yd ÈhqKQ l, c j¾. (DIALECTS) lSmhls' MIKROC , PIC C, HI-TECH C CCS tajdhska lsysmhls' fuu .%ka:fhka Tng b.ekSug jvd myiq yd LIBRARIES /ila wka;¾.; MIKROC j,ska PIC PROGRAM lrk wdldrh b.ekaùug woyia lrñ' C j,ska uhsfl%da l%uf,aLKh lsÍug fmr Tn úiska C NdIdj ms<sn| yeoEÍu w;HdjYH fõ' flfia fj;;a C NdIdj ;rula ixlS¾K NdIdjls' my; fldgiska Tng w;HdjYH jk C NdIdfõ fldgia ms<sn| m%udKj;a ±kqula ,nd.; yel'
WWHHIITTEE SSPPAACCEE White Space hkq ysia;eka i|yd fokq ,nk iuQy kduhls' Wod(- int i; float f; int i; float f;
KKEEYYWWOORRDDSS fïjd mikroc NdIdfõ úfYaI wjYH;d i|yd fjka l, jpk fõ' fïjd Tn úiska variables i|yd mdúÉÑ fkdl, hq;=h' Wod(-
• asm • auto • break • case • char • const • continue • default • do • double • else • enum • extern • float • for • goto • if • int • long • register • return • short • signed • sizeof • static • struct • switch
• typedef • union • unsigned • void • volatile • while
IIDDEENNTTIIFFIIEERRSS Identifiers hkq hkdÈhg fokq ,nk fmdÿ kduhls' Wod(- temperature_V1 Pressure no_hit dat2string SUM3 _vtext
CCOOMMMMEENNTTSS hkqfjka kï flfrkafka fÄ;fha l%shdldÍ fkdjk hï jdlH LKavhhs' fÄ; fma<s ms<sn| l%uf,aLKhg hï ±kqj;a lsÍula ,nd .ekSug fïjd mdúÉÑ flf¾' Wod(- int i; // this is a comment int j;
PPUUNNCCTTUUAATTOORRSS mikroc j,È my; ±lafjk Punctuators fhdod .efka'
• [ ] – Brackets • ( ) – Parentheses • { } – Braces • , – Comma • ; – Semicolon • : – Colon • * – Asterisk • = – Equal sign • # – Pound sign
[ ] – Brackets (fldgq jryka ) (-
;ks yd nyqudk wrd (single and multidimensional arrays) ye¢kaùu i|yd m%fhdackhg .kS' Wod(- char ch, str[] = "mikro"; int mat[3][4]; /* 3 x 4 matrix */ ch = str[3]; /* 4th element */
( ) – Parentheses (jryka
hkdÈh ye¢kaùug Ndú;d lrhs' Wod(- d = c * (a + b); /* override normal precedence */ if (d == z) ++x; /* essential with conditional statement */ func(); /* function call, no args */ void func2(int n); /* function declaration with parameters */
{ } – Braces (iÕ, jryka
ixhqla; m%ldYk j, wdrïNh yd wjidkh ±laùug Ndú;d lrhs' Wod(- if (d == z) { ++x; func(); }
, – Comma ( fldudj )
fjka fldg ±laùu i|yd fhdod .kS' Wod(- void func(int n, float f, char ch);
; – Semicolon ( ;s;a fldudj )
ish¨u m%ldYk ;s;a fldudjlska wjika úh hq;=h' Wod(- a + b; /* Evaluate a + b, but discard value */ ++a;
: – Colon
f,an,a tlla i|yka lrhs'
start: x = 0; ...goto start;
* – Asterisk
.=K lsÍula fyda POINTER TYPE VARIABLE tlla i|yka lrhs'
= – Equal sign
úp,H yd tajdg ,ndfok w.hka w;r iudk;dj i|yka lrhs' int test[5] = { 1, 2, 3, 4, 5 }; int x = 5;
OOPPEERRAATTOORRSS Mikroc NdIdfõ operators j¾. lsysmhla Ndú;d lrhs'
• Arithmetic Operators • Assignment Operators • Bitwise Operators • Logical Operators • Relational Operators • Conditional Operators • Preprocessor Operators
Arithmetic OperatorsArithmetic Operators
+ tl;= lsÍu - wvq lsÍu
* .=K lsÍu / fn§u + + iajhxl%Sh w.h jeäùu (auto increment) - - iajhxl%Sh w.h wvqùu (auto decrement) Wod(- /* Adding two integers */ 5 + 12 // equals 17 /* subtracting two integers */ 120 – 5 // equals 115 10 – 15 // equals – 5 /* Dividing two integers */ 5 / 3 // equals 1 12 / 3 // equals 4 /* Multiplying two integers */ 3 * 12 // equals 36 /* Adding two floating point numbers */ 3.1 + 2.4 // equals 5.5 /* Multiplying two floating point numbers */ 2.5 * 5.0 // equals 12.5 /* Dividing two floating point numbers */ 25.0 / 4.0 // equals 6.25 /* Remainder (not for float) */ 7 % 3 // equals 1 /* Post-increment operator */ j = 4; k = j++ ; // k = 4 , j = 5 /* Pre-increment operator */ j = 4; k =++ j ; // k = 5, j = 5 /* Post-decrement operator */ j = 12; k = j-- ; // k =12, j = 11
/* Pre-decrement operator */ j =12; k =-- j; // k =11, j =11
RELATIONAL OPERATORSRELATIONAL OPERATORS
ixikaOkh i|yd Ndú;d lrhs' ixikaOkh l, miq ms<s;=r true kï 1lao false kï 0 wdmiq tjhs'
• = = iudk • != wiudk • < úYd, • > l=vd • <= úYd, fyda iudk • >= l=vd fyda iudk
Wod(-
x = 10
x > 8 // returns 1
x == 10 // returns 1
x < 100 // returns 1
x > 20 // returns 0
x ! = 10 // returns 0
x >= 10 // returns 1
x <= 10 // returns 1
BITWISE OPERATORSBITWISE OPERATORS
• & ìÜ jhsiA wekAä • │ ìÜ jhsiA ´¾
• ^ ìÜ jhsiA tlAiA ´¾ • ~ wmj¾;kh • >> jï w;g shift lrhs' • << ol=Kq w;g shift lrhs'
ìÜ jhsiA Tmf¾Ika j, m%;sM, my; j.=fjka n,d.; yel' Wod(- i. 0xFA & 0xEE returns 0xEA 0xFA: 1111 1010 0xEE: 1110 1110 ---------------- 0xEA: 1110 1010 ================ ii. 0x01 | 0xFE returns 0xFF 0x08: 0000 0001 0xFE: 1111 1110 ---------------- 0xFE: 1111 1111 ================ iii. 0xAA ^ 0x1F returns 0xB5 0xAA: 1010 1010 0x1F: 0001 1111 --------------- 0xB5: 1011 0101 =============== iv. ~0xAA returns 0x55 0xAA: 1010 1010 ~ : 0101 0101 -------------------- 0x55: 0101 0101 ====================
v. 0x14 >> 1 returns 0x08 (shift 0x14 right by 1 digit) 0x14: 0001 0100 >>1 : 0000 1010 ---------------- 0x0A: 0000 1010 ================ vi. 0x14 >> 2 returns 0x05 (shift 0x14 right by 2 digits) 0x14: 0001 0100 >> 2: 0000 0101 ---------------- 0x05: 0000 0101 ================ vii. 0x235A << 1 returns 0x46B4 (shift left 0x235A left by 1 digit) 0x235A: 0010 0011 0101 1010 <<1 : 0100 0110 1011 0100 ----------------------------- 0x46B4 : 0100 0110 1011 0100 ============================= viii. 0x1A << 3 returns 0xD0 (shift left 0x1A by 3 digits) 0x1A: 0001 1010 <<3 : 1101 0000 ---------------- 0xD0: 1101 0000 ================
LOGICAL OPERATORSLOGICAL OPERATORS
• && wekAä ( logical and) • ║ ´¾ ( logical or) • ! fkdá ( logical not)
Wod(-
x = 7;
x > 0 && x < 10 // returns 1
x > 0 | | x < 10 // returns 1
x >=0 & & x < = 10 // returns 1
x >=0 & & x < 5 // returns 0
a = 10; b = 20; c = 30; d = 40;
a > b & & c > d // returns 0
b > a & & d > c // returns 1
a > b | | d > c // returns 1
ASSIGNMENT OPERATORSASSIGNMENT OPERATORS
Mikroc NdIdj ;=< Assignment Operators j¾. 2 ls' tajd kï
• Simple assignment • Compound assignment
SIMPLE ASSIGNMENT
Expression1 = Expression2
or
Result = Expression1 → operation→ Expression2
Wod(-
Temp = 10;
Cnt = Cnt +Temp;
CCOOMMPPOOUUNNDD AASSSSIIGGNNMMEENNTT
Result → operation = Expression1
fuys§ m<uq m%ldYkh iq¿ fldg ms<s;=re tu m%ldYkfha úp,Hhys ;=,u .nvd lrhs' Wod(-
j += k; is same as: j =j + k;
also
p*= m; is same as p =p*m;
CCOONNDDIITTIIOONNAALL OOPPEERRAATTOORRSS
Conditional Operator tll wdldrh' (syntax of a conditional operator) Result = Expression1 ? Expression2 : Expression3 my; WodyrKfha§ x yd y fj;skA úYd, úp,H fidhd .kq ,nhs(max)' fuys§ x>y kñ max = x o ke;s kñ max = y o fõ' max =(x > y) ? x:y ;
PPRREEPPRROOCCEESSSSOORR OOPPEERRAATTOORRSS
fuh Ndú;d lsÍfuka my; myiqlï ,efnk w;r Tn ±kgu;a iuyrúg ASSEMBLER iuÕ fïjd Ndú;d lrkjd úh yel'
• fldkafoais iys;j PROGRAM tlla COMPILE lsÍu ^wjYH fldgia muKla l, yel'&
• ixfÄ; fjk;a ixfÄ; yd w.hkaf.ka m%;sia:dmkh l, yel' ;=<g we;=,a l, yel' WodyrK (- #define MAX =100 fuys§ MAX hk úp,H fhfok iEu ;eku variable tl 100 w.h uÕska m%;sia:dmkh lrhs' # undef MAX uÕska fuh bj;a l, yel' #ifndef MAX #define MAX 100 #endif uÕska MAX we;ae±hs mÍCId lr n,d we;akï muKla 100 uÕska m%;sia:dmkh lrhs' ke;skï tu fma<sh w;yer ouhs' #include
AArrrraayyss tlsfklg iïnkaO o;a; whs;u tlu memory block tlla hgf;a .nvd lsÍug Ndú;d lrhs' array tlla m%ldY lsÍug j¾.h" ku iy ta hgf;a Ndú;d jk uQ,hka .Kk m%ldY l, hq;=h' Wod( fuys§ uQ,hka 5 l wrdjla we;s w;r m<uq uQ,h 0 o wjika uQ,h 5 o fõ' fï w;r we;s ish¨u whs;uhka wkqhd; f,i fuußh ;=< msysghs' WodyrK (- unsigned int Total[ 5] ; SSttrruuccttuurreess hkq tlsfklg iïnkaO o whs;u j, tl;=jls' kuq;a wrdjl fuka fkdj fuhg úúO j¾.fh o;a; we;=,a l, yel' WodyrKhla jYfhka mqoa.,fhl=f.a Ôj o;a; i,ld n,uq' wdrïN jkafka structure hk keyword tl iuÕsks' bkamiq ku iy we;=<;a jk whs;u m%ldY l, yel' fuu whs;u j,g fuußfha bvla fjka lr fkd.kakd w;r l%shd;aul jk wjia:dfõ§ bv .ekSu i|yd compiler tl úiska template tlla ilia lr .kq ,efí' WodyrK (- structure Person { unsigned char name[20] ; unsigned char surname[20] ; unsigned char nationality[20] ; unsigned char age; }
UUnniioonn fïjd iEu w;skau j,g iudk jk w;r fjkilg we;af;a tlu memory area tl Ndú;d lsrSuhs' union flags { unsigned char x; unsigned int y; }P; Wod (- fuys§ memory area tfla m%udKh jkqfha byte 2 ka úYd,u byte tfla m%udKhhs' fuys§ Y =0 x AEFA hehs is;=jfyd;a túg X j, w.h = 0XFA ' Data types ( o;a; j¾.) mikroc o;a; j¾. lsysmhla Ndú;d lrhs' Tn mdúÉÑ lrk o;a; j¾.h ksjerÈj f;dard.ekSfuka memory b;sß lr.; yel'
D A T A T Y P E D E S C R I P T I O N S I Z E ( N U M B E R O F B I T S ) R A N G E O F V A L U E S
char Character 8 0 to 255
int Integer 16 -32768 to 32767
float Floating point 32 ±1.17549435082 ·10-38 to
±6.80564774407 ·1038
double Double precision floating
point 32
from ±1.17549435082 ·10-38 to ±6.80564774407 ·1038
D A T A T Y P E D A T A T Y P E W I T H P R E F I X
S I Z E ( N U M B E R O F B I T S ) R A N G E
char signed char 8 -128 to 128
int
unsigned int 16 0 to 65535
short int 8 0 to 255
signed short int 8 -128 to 127
long int 32 0 to 4294967295
signed long int 32 -2147483648 to 2147483647
SSStttaaattteeemmmeeennntttsss
Label f,an,a fÄ;hl hï fÄ; LKavhla kï lsÍug fhdod .kS' kej; kej; th l%shd;aul lrùu f,an, uÕska l, yel' Wod(- for (...) { for (...) { ... if (disaster) goto Error; ... } } . . Error: /* error handling code */
IIFF SSTTAATTEEMMEENNTT fÄ;fha hï lsis ;;a;ajhla fldkafoaishla jYfhka mÍCId lr th i;H fõ kï tl ld¾hhl=;a wi;H fõ kï tl ld¾hhl=;a bgq lrhs' Wod(- if (expression1) statement1 else statement2 /* this belongs to: if (expression3) */
SSWWIITTCCHH SSTTAATTEEMMEENNTT fuys§ switch expression tlg wod< value tl case table tflka ixikaOkh lr n,d wod< Case value tl ,nd.kS' data table i|yd Ndú;d lrhs' Wod(- switch (condition) { case condition1: Statements; break ; case condition2: Statements;
break ; ..................... .....................
WWHHIILLEE SSTTAATTEEMMEENNTT fuys§ While Condition tl False jk ;=re Statement tl execute ùu isÿfõ' Æma i|yd nyq,j mdúÉÑ lrhs' fldkafoais rys; while loop tlla while (1); endless loop tlla wdldrfhka yeisf¾' Wod(- while(PORTB.0 == 0) ; // Wait until PORTB.0 becomes 1 or while(PORTB.0) ; FFOORR SSTTAATTEEMMEENNTT fuys§ m<uq fldgiska fuh i|yd Ndú;d lrk úp,Hhla initialize lrk w;r bka miqj Condition tl mÍCId lrhs' f;jk fldgiska loop tl mÍlaId lrhs' fldkafoaish ix;Dma; jk ;=re fuh isÿfõ' fldkafoais rys; for loop tlla for(;;) endless loop tlla wdldrfhka yeisf¾' for(i = 0 ; i < 10; i ++) { Statements ; }
WWWOOORRRKKKIIINNNGGG WWWIIITTTHHH MMMIIIKKKRRROOOCCC c ia:dmkh lr.;a miq Project > New Project yryd kj jHdmD;shla weröfuka l%uf,aLKh wdrïN l, yel'
rEmfha ±lafjk wdldrhg Tng wjYH mrsoss SETTINGS idod .ekSu ;=<ska Tng ksjerÈj PIC tl
úkHdi.; lr .ekSug( CONFIGURE ) mq¿jk'
túg ,efnk HEX FILE tl idudkH mßÈ Tfí PIC tlg FLASH lr .ekSug mq¿jk'
uhsfl%da C fÄ;hl iajNdjh uhsfl%da C j,ska fyda ´kEu NdIdjlska fÄ;kh lrk l, uq¿ fÄ;h l=vd fldgia j,g lvdf.k ,sùfuka fodaI fidhd .ekSu myiqh' fÄ;hla ks;ru FUNCTION DEFINE lsÍfuka wdrïN úh hq;= w;r Tn mdúÉÑ lrk VARIABLES bkamiqj DEFINE l< hq;=h' wk;=rej VOID MAIN hk FUNCTION tflka wdrïN lrk w;r fÄ;h wdrïNh yd wjidkh CURLY BRACKETS j,ska igyka fõ'
VOID (LEFT); \\ FUNCTION DEFINED
Unsigned char J = 1; \\ VARIABLE
VOID MAIN()
{ PROGRAM
}