Introduction to PIC C
(Embedded C)
Krerk Piromsopa, Ph.D.
Department of Computer Engineering Chulalongkorn University
1 Tuesday, November 11, 2008
• Background
• Introduction to Embedded C
• Library
• Using C in your Lab
2 Tuesday, November 11, 2008
Why learn C?
• History/Background
• Most commonly used for operating systems.
• Unix was created solely by C. (So was Windows?)
• Language Features
• High-level language that can do low-level activities.
• Efficient Programs.
• Compile on a variety of computers
• etc.
Down-side of C
• Powerful, buy difficult to learn (comparing to Java, Pascal, etc)
• No built-in support for common data type (e.g. String, Boolean).
• etc.
Facts About C
• C++ is C with object-oriented paradigm.
(So was objective-C)
• Java is C++ minus ambiguous features.
(So was C#)
• C is a required skill for embedded systems.
5 Tuesday, November 11, 2008
Mysterious of C
#include <stdio.h>
main(t,_,a) char *a;
{return!0<t?t<3?main(-79,-13,a+main(-87,1-_,
main(-86, 0, a+1 )+a)):1,t<_?main(t+1, _, a ):3,main ( -94, -27+t, a )&&t == 2 ?_<13 ?main ( 2, _+1, "%s %d %d\n" ):9:16:t<0?t<-72?main(_, t,"@n'+,#'/*{}w+/w#cdnr/+,{}r/*de}+,/*{*+,/w{%+,/w#q#n+,/#{l,+,/n{n+\
,/+#n+,/#;#q#n+,/+k#;*+,/'r :'d*'3,}{w+K w'K:'+}e#';dq#'l q#'+d'K#!/\
+k#;q#'r}eKK#}w'r}eKK{nl]'/#;#q#n'){)#}w'){){nl]'/+#n';d}rw' i;# ){n\
l]!/n{n#'; r{#w'r nc{nl]'/#{l,+'K {rw' iK{;[{nl]'/w#q#\
n'wk nw' iwk{KK{nl]!/w{%'l##w#' i; :{nl]'/*{q#'ld;r'}{nlwb!/*de}'c \
;;{nl'-{}rw]'/+,}##'*}#nc,',#nw]'/+kd'+e}+;\
#'rdq#w! nr'/ ') }+}{rl#'{n' ')# }'+}##(!!/")
:t<-50?_==*a ?putchar(a[31]):main(-65,_,a+1):main((*a == '/')+t,_,a\
+1 ):0<t?main ( 2, 2 , "%s"):*a=='/'||main(0,main(-61,*a, "!ek;dc \ i@bK'(q)-[w]*%n+r3#l,{}:\nuwloca-O;m .vpbks,fxntdCeghiry"),a+1);}
6 Tuesday, November 11, 2008
PIC C
Data type in PIC C
• Integer types
• 8 bit - char (sign/unsigned)
• 16 bit - short, int (sign/unsigned)
• 32 bit - long (sign/unsigned)
• Floating point types
• 32 bit - double (default)
• 24 bit - float
• Bit
• bit (none standard)
Type varies for each compiler/platform.
Constants
• Radix
• binary - 0b10010101
• octal - 0763
• decimal - 217
• hexadecimal - 0x30
• String
• char * test=”Hello”;
• Float
• float x=30.0f;
• double y=30.0;
9 Tuesday, November 11, 2008
Bit Operations
int data=0x05;
bit myvar=data;
bit myvar=data & 0x01;
bit myvar=(data!=0);
int data=data;
data |=0x40; bsf _data, 6
int data=data;
data &=0x40; bcf _data, 6
10 Tuesday, November 11, 2008
Macros
int data=data;
data |=0x40; bsf _data, 6
int data=data;
data &=0x40; bitclear(data, 6)
#define bitset(var,bitno) ((var) |= 1UL < < (bitno))
#define bitclr(var,bitno) ((var) &= ~(1UL < < (bitno)))
bitset(data,6)
Lab1 in C
#include <pic1687x.h>
void main (void) {
! TRISB=0x01;
! while ( 1 ) {
! if (RB0) {
! ! PORTB |=0x02;
! ! PORTB &=0xFB;
! } else {
! ! PORTB |=0x04;
! ! PORTB &=0xFD;
! }
! } }
12
#include <pic1687x.h>
void main (void) {
! TRISB=0x01;
! while ( 1 ) {
! if (RB0)
! ! PORTB=0x02;
! else
! ! PORTB=0x04;
! }
} #include <pic1687x.h>
void main (void) {
! TRISB=0x01;
! while ( 1 ) {
! if (RB0) {
! ! RB1=1; RB2=0;
! } else {
! ! RB1=0; RB2=1;
! }
! }
}
Mix C and Assembly
#include <pic16f87.h>
void main (void) {
! TRISB=0x01;
! while ( 1 ) {
! if (RB0) {
! ! #asm
! ! BSF! _PORTB, 1
! ! BCF! _PORTB, 2
! ! #endasm
! } else {
! ! asm("BCF! _PORTB, 1");
! ! asm("BSF! _PORTB, 2");
! }
! } }
Inline assembly Use #asm and
#endasm for multiple line.
Use asm(“ “) for single line
Add _ to variable in C
13
13 Tuesday, November 11, 2008
See list file for more
details.
14 Tuesday, November 11, 2008
Good library can help inexperience
programmer.
15
See 16 adders in C
int sum(int i, int j) {
! int sum;
! sum=i+j;
! return sum;
}
CLRF 0x3 MOVF 0x22, W ADDWF 0x20, W MOVWF 0x20 MOVF 0x23, W BTFSC 0x3, 0 INCF 0x23, W ADDWF 0x21, W MOVWF 0x21 MOVWF 0x7f MOVF 0x20, W MOVWF 0x7e RETURN
How is your LAB 2/Quiz?
16
What if there is no library to do your job?
17
17 Tuesday, November 11, 2008
How to use C in my LAB?
18
18 Tuesday, November 11, 2008
When to write in C?
When to write in Assembly?
19
POP Quiz:
Will recursive program work in PIC?
20