• Tidak ada hasil yang ditemukan

Introduction to PIC C (Embedded C)

N/A
N/A
Protected

Academic year: 2025

Membagikan "Introduction to PIC C (Embedded C)"

Copied!
5
0
0

Teks penuh

(1)

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.

(2)

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.

(3)

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;

! }

! }

}

(4)

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

(5)

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

Referensi

Dokumen terkait