Tìm hiểu lập trình C cho 8051

7 667 13
Tìm hiểu lập trình C cho 8051

Đang tải... (xem toàn văn)

Thông tin tài liệu

Lập trình C cho 8051 trên KeilC

L I M Đ UỜ Ở Ầ Trong l p trình vi x lý ngôn ng th ng dùng là ngôn ng l p trìnhậ ử ữ ườ ữ ậ ASM và ngôn ng C . Ngôn ng l pữ ữ ậ trình ASM hay l p trình h p ng là ngôn ng l p trình tr c ti p cho vi đi u khi n ( l p trình tr c ti p )ậ ợ ữ ữ ậ ự ế ề ể ậ ự ế còn ngôn ng C hay còn g i là l p trình h ng đ i t ng nó g n v i ngôn ng con ng i h n . Đi u nàyữ ọ ậ ướ ố ượ ầ ớ ữ ườ ơ ề có nghĩa là v i ASM ng i l p trình ra l nh tr c ti p thông qua ngôn ng câu l nh có tính ràng bu c cònớ ườ ậ ệ ự ế ữ ệ ộ ngôn ng C s d ng các c u trúc đi u ki n và vòng l p theo ý mu n .Nói v ngôn ng C thì ữ ử ụ ấ ề ệ ặ ố ề ữ u đi mư ể c a ngôn ng C là nó d hi u nh ng c u trúc l i dài và ph c t p so v i ngôn ng ASM . Ph n ti u lu nủ ữ ễ ể ư ấ ạ ứ ạ ớ ữ ầ ể ậ c a em g m 2 v n đ và chia làm 2 ph n chính ủ ồ ấ ề ầ 1. Tìm hi u l p trình C cho 8051ể ậ 2. Ch ng trình minh h a trên dãy led đ nươ ọ ơ Ph n I : Tìm hi u l p trình C cho 8051ầ ể ậ . 1. Gi i thi u :ớ ệ C là m t ngôn ng khá m nh và có r t nhi u ng i dung. Nh ng v i vi x lý ta ch c n bi t m t vài v nộ ữ ạ ấ ề ườ ư ớ ử ỉ ầ ế ộ ấ đ c b n sau :ề ơ ả + Các ki u toán t c a C .ể ử ủ + Các ki u d li u (int , float , double , char , unsigned char , …)ể ữ ệ + Các hàm trong C +C u trúc c b n c a m t ch ng trình.ấ ơ ả ủ ộ ươ + C u trúc đi u khi n hay các t p l nh.ấ ề ể ậ ệ 2. Ki n th c c b n v C :ế ứ ơ ả ề a. Các ki u toán t c a Cể ử ủ Toán t gánử (=) Các toán t s h cử ố ọ ( + , - ,* , / , % ) + c ngộ - trừ * nhân / chia % l y ph n d (trong phép chia)ấ ầ ư Các toán t gán ph c h pử ứ ợ : (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=) a -= 5; t ng đ ng v i a = a - 5;ươ ươ ớ a /= b; t ng đ ng v i a = a / b;ươ ươ ớ a*=2 ; t ng đ ng v i a = a*2ươ ươ ớ ……… Tăng và gi mả ( ++ , -- ) a++; <=> a+=1; <=> a=a+1; a--; <=> a+=1 <=> a=a-1 Ti n t hay h u tề ố ậ ố ( ++a ; a++ ) B=3; B=3;A=++B; // A là 4, B là 4 Hay :B=3; A=B++; // A là 3, B là 4 Các toán t quan hử ệ ( = = , != ,< , > , <= , >= ) = = B ngằ != Khác > L n h nớ ơ < Nh h nỏ ơ > = L n h n ho c b ngớ ơ ặ ằ < = Nh h n ho c b ngỏ ơ ặ ằ Các toán t logicử (!, &&, || ) ! NOT && AND || OR Các toán t thao tác bit ử (&, |, ^, ~, <<, >> ) & AND Logical AND | OR Logical OR ^ XOR Logical exclusive OR ~ NOT Đ o ng c bitả ượ << SHL D ch bit sang tráiị >> SHR D ch bit sang ph iị ả *Th t u tiênứ ự ư 1 () [ ] -> . 2 ++ -- tăng/gi mả ~ Đ o ng c bitả ượ ! NOT & * Toán t con trử ỏ + - D ng ho c âmươ ặ 3 * / % Toán t s h c ử ố ọ 4 + - Toán t s h cử ố ọ 5 << >> D ch bit ị 6 < <= > >= Toán t quan h ử ệ 7 == != Toán t quan h ử ệ 8 & ^ | Toán t thao tác bit ử 9 && || Toán t logic ử 10 ?: Toán t đi u ki n ử ề ệ 11 = += -= *= /= %= >>= <<= &= ^= |= Toán t gán ử 12 , D u ph yấ ẩ b. Các ki u bi n d li u :ể ế ữ ệ Char : 1byte ( -128 ; 127 ) Unsigned char : 1byte ( 0; 255) Enum : 2byte ( -32,768 ; 32,768 ) Short : 2byte ( -32,768 ; 32,768 ) Unsigned short : 2byte ( 0 ; 65,535 ) Int : 2byte ( -32,768 ; +32,767 ) Unsigned int : 2byte (0 ; 65,535 ) Long : 4byte (- 2,147,483,648 ; +2,147,483,647 ) Unsigned long : 4byte (0 ; 4,294,697,295 ) …………. Khai báo bi n:ế C u trúc :ấ Ki u bi nể ế Tên bi nế VD : unsigned char x; Ta cũng có th gán luôn giá tr ban đ u cho bi n. Nghĩa là thay vì:ể ị ầ ế unsigned char x; x=0; ta vi t là : unsigned char x=0;ế Ho c ta cũng có th khai báo nhiêu bi n m t lúc:ặ ể ế ộ unsigned char x,y,z; Ngoài ra dung cho vi đi u khi n trình biên dich chuyên d ng còn h tr các bi n sauề ể ụ ỗ ợ ế D ng bi nạ ế S Bitố S Byteố Mi n giá trề ị Bit 1 0 0 ; 1 sbit 1 0 0 ; 1 sfr 8 1 0 đ n 255ế sf16 16 & ; ;nbs p; 2 ; ; ; ;0 đ n 65,535ế Trong đó bit có th dung nh các bi n trong C nh ng các bi n còn l i thì liên quan đ n các thanh ghi ho cể ư ế ư ế ạ ế ặ đ a ch c ng cua 8051( có nghĩa là khi khai bao bi n ki u bit thì không c n đ nh đ a ch trong RAM cácị ỉ ổ ế ể ầ ị ị ỉ bi n khác ph i đ n rõ đ a ch trong RAM vì nó làế ả ị ị ỉ các d ng bi n đ c bi t g i là special function registersạ ế ặ ệ ọ (SFR) VD: bit kiemtra; sfr P1_0=0x90 Các SFR đ c khai báo trong th vi nượ ư ệ at89x51.h và at89x52.h c. Các hàm trong C Có hai loai hàm trong C : +Hàm tr lai giá tr :ả ị Ki u giá tr hàm tr l iể ị ả ạ Tên hàm(Bi n truy n vào hàm)ế ề { // Các câu l nh x lýệ ử } VD; unsigned char cong(unsigned char x, unsigned char y) + Hàm không tr l i giá trả ạ ị void Tên hàm( Bi n truy n vào hàm)ế ề { // các câu l nh x lýệ ử } VD: void cong(unsigned char x,unsigned char y) { //các câu l nhệ } (*) Hàm có th có bi n truy n vào ho c khôngể ế ề ặ + Hàm không có bi n truy n vàoế ề unsigned char Tên hàm(void) { //câu l nhệ } + Hàm có bi n truy n vàoế ề void Tên hàm(unsigned char x) { //các câu l nhệ } (**) S bi n truy n vào là tùy ý mi n sao là đ b nh , các bi n ngăn cách nhau b ng d u “,”.ố ế ề ễ ủ ộ ớ ế ằ ấ VD: void Tên hàm(unsigned char x,unsigned char y,unsigned char z) (***) Ngoài ra trong Keil C còn co m t lo i hàm là hàm ng t:ộ ạ ắ C u trúc:ấ void Tên hàm(void) interrupt ngu n ng t using băng thanh ghiồ ắ { } Hàm ng t không đ c phép tr l i giáắ ượ ả ạ tri hay truy n tham bi n vào hàmề ế Tên hàm : tùy ch nọ Interrupt : t khóa ch hàm ng từ ỉ ắ Ngu n ng t : t 0 đ n 5 theo b ng vecter ng tồ ắ ừ ế ả ắ Ng t do ắ Cờ Đ a ch vectorị ỉ Ngu n ng tồ ắ Reset h th ngệ ố RST 0000H - Ng t ngoài 0 ắ IE0 0003H 0 Timer 0 TF0&am p;am p;nb sp; 000BH 1 Ng t ngoài 1 ắ IE1 001 3H 2 Timer 1 TF1&am p;am p;nb sp; 001BH 3 Port n i ti pố ế RI ho c TIặ 0023H 4 Timer 2 TF2 ho c EXF2ặ 002BH 5 Băng thanh ghi trên RAM chon t 0 đ n 3.ừ ế d. Các câu l nh c b n c a Cệ ơ ả ủ + C u trúc đi u ki n: if , elseấ ề ệ C u trúc if : if (đi u ki n) l nh ( đ a ra đi u ki n và tuyên b th c hi n)ấ ề ệ ệ ư ề ệ ố ư ệ VD : if (x<10) x++; // n u x< 10 thì tăng x thêm 1ế C u trúc if & else : if (đi u ki n) l nh1 else l nh 2 ( th a mãn đi u ki n if thì th c hi nấ ề ệ ệ ệ ỏ ề ệ ự ệ l nh 1 cònệ ng c l i th c hi n l nh 2ượ ạ ự ệ ệ VD : if (x=10) x++; Elese x--; + C u trúc l p :ấ ặ - Vòng l p whileặ . D ng c a nó nh sau:ạ ủ ư while (bi u hi n) l nhể ệ ệ C u trúc hay găp trong ch ng trình vi x lý làấ ươ ử while(1) { //vòng l p mãi mãi ;ặ } T o vòng l p mãi mãi trong l p trình VXL .Ch ng trình chính s đ c vi t trong d uạ ặ ậ ươ ẽ ượ ế ấ ngo c.ặ - Vòng l p do-whileặ D ng th c:ạ ứ do l nh while (đi u ki n);ệ ề ệ VD: do { x++; // cho nay cac ban co the viet nhieu cau lenh , } while(x>10) tăng giá tr c a x cho đ n khi x > 10ị ủ ế Ch c năng c a nó là hoàn toàn gi ng vòng l p while ch tr có m t đi u là đi u ki n đi u khi n vòng l pứ ủ ố ặ ỉ ừ ộ ề ề ệ ề ể ặ đ c tính toán sau khi l nh đ c th c hi n, vì v y l nh s đ c th c hi n ít nh t m t l n ngay c khiượ ệ ượ ự ệ ậ ệ ẽ ượ ự ệ ấ ộ ầ ả đi u ki n không bao gi đ c tho mãn .Nh ví d trên k c x >10 thì nó v n tăng giá tr 1 l n tr cề ệ ờ ượ ả ư ụ ể ả ẫ ị ầ ướ khi thoát - Vòng l p for:ặ C u trúc : for (kh i t o;đi u ki n;tăng giá tr ) l nhấ ở ạ ề ệ ị ệ và ch c năng chính c a nó là l p l i l nh ch ng nào đi u ki n còn mang giá tr đúng, nhứ ủ ặ ạ ệ ừ ề ệ ị ư trong vòng l p while. Nh ng thêm vào đó, for cung c p ch dành cho l nh kh i t o và l nh tăng. Vì v yặ ư ấ ỗ ệ ở ạ ệ ậ vòng l p này đ c thi t k đ c bi t l p l i m t hành đ ng v i m t s l n xác đ nh.ặ ượ ế ế ặ ệ ặ ạ ộ ộ ớ ộ ố ầ ị Cách th c ho t đ ng c a nó nh sau:ứ ạ ộ ủ ư (*) Kh i t o đ c th c hi n. Nói chung nó đ t m t giá khí ban đ u cho bi n đi u khi n. L nh này đ cở ạ ượ ự ệ ặ ộ ầ ế ề ể ệ ượ th c hi n ch m t l n.ự ệ ỉ ộ ầ (**) Đi u ki n đ c ki m tra, n u nó là đúng vòng l p ti p t c còn n u không vòng l p k t thúc và l nhề ệ ượ ể ế ặ ế ụ ế ặ ế ệ đ c b qua.ượ ỏ (***) L nh đ c th c hi n. Nó có th là m t l nh đ n ho c là m t kh i l nh đ c bao trong m t c pệ ượ ự ệ ể ộ ệ ơ ặ ộ ố ệ ượ ộ ặ ngo c nh n.ặ ọ (****) Cu i cùng, th c hi n đ tăng bi n đi u khi n và vòng l p quay tr l i b c ki m tra đi u ki n.ố ự ệ ể ế ề ể ặ ở ạ ướ ề ề ệ Ph n kh i t o và l nh tăng không b t bu c ph i có. Chúng có th đ c b qua nh ng v n ph i có d uầ ở ạ ệ ắ ộ ả ể ượ ỏ ư ẫ ả ấ ch m ph y ngăn cách gi a các ph n. Vì v y, chúng ta có th vi t for (;n<10;) ho c for (;n<10;n++).ấ ẩ ữ ầ ậ ể ế ặ B ng cách s d ng d u ph y, chúng ta có th dùng nhi u l nh trong b t kì tr ng nào trong vòng for,ằ ử ụ ấ ẩ ể ề ệ ấ ườ nh là trong ph n kh i t o. Ví d chúng ta có th kh i t o m t lúc nhi u bi n trong vòng l p:ư ầ ở ạ ụ ể ở ạ ộ ề ế ặ for ( n=0, i=100 ; n!=i ; n++, i-- ) { // các câu l nh;ệ } VD: T o hàm delayms dung vòng lăp forạ void delay (unsigned int ms) // ham tao thoi gian tre ms { unsigned int i ; // ho c ta có th khai báo intặ ể i j; unsigned char j ; for (i=0;i<ms;i++) { for (j=0;j<125;j++) {} // khong lam gi ca } } + Các l nh r nhánh và l nh nh yệ ẽ ệ ả L nh break.ệ S d ng break chúng ta có th thoát kh i vòng l p ngay c khi đi u ki n đ nó k t thúc ch a đ c thoử ụ ể ỏ ặ ả ề ệ ể ế ư ượ ả mãn. L nh này có th đ c dùng đ k t thúc m t vòng l p không xác đ nh hay bu c nó ph i k t thúcệ ể ượ ể ế ộ ặ ị ộ ả ế gi a ch ng thay vì k t thúc m t cách bình th ng. Ví d , chúng ta s d ng vi c đ m ng c tr c khi nóữ ừ ế ộ ườ ụ ẽ ừ ệ ế ượ ướ k t thúc.ế // break loop example #include int main () { int n; for (n=10; n>0; n--) { cout << n << ", "; if (n==3) { cout << "dung dem”; break; //dem den 3 thi dung; } } return 0; } L nh continue.ệ L nh continue làm cho ch ng trình b qua ph n còn l i c a vòng l p và nh y sang l n l p ti pệ ươ ỏ ầ ạ ủ ặ ả ầ ặ ế theo. Ví d chúng ta s b qua s 5 trong ph n đ m ng c:ụ ẽ ỏ ố ầ ế ượ #include int main () { Sau đây em xin trình bày ph ng pháp n p ch ng trình ch y cho IC . Đ u tiên click chu t ph i vào Icươ ạ ươ ạ ầ ộ ả ch n hàng Edit Proties ta th y hi n ra b ng sau:ọ ấ ệ ả Trong m c Program File ch n đ ng d n đ n file hex c n mô ph ng vi d ch ng trình led ch y cácụ ọ ườ ẫ ế ầ ỏ ụ ươ ạ ki u:ể sau đó ch n OK đ ch y mô ph ng nhân F12 ch ng trình s mô ph ng ọ ể ạ ỏ ươ ẽ ỏ Led sáng d n:ồ Led sáng đu i:ổ Led sáng d n t t h tầ ắ ế Bài ti u lu n:http://www.mediafire.com/?sharekey=1e65ae7dd8a980c808f8ể ậ df73f2072ed640e429f6c9b264c3a9a26c4ed87536eb Các file hex : http://www.mediafire.com/?sharekey=1e65ae7dd8a980c808f8df73f 2072ed6406d2821b46ea49df0a154af670496da T NG K TỔ Ế Nói tóm l i vi c l p trình trên m i lo i ngôn ng đ u có u nh c đi m riêng đi u quan tr ng là n mạ ệ ậ ỗ ạ ữ ề ư ượ ể ề ọ ắ v ng m c đích c a vi c l p trình . Vi c h c l p trình tr c tiên là làm trên ngôn ng ASM phát tri n trênữ ụ ủ ệ ậ ệ ọ ậ ướ ữ ể ngôn ng này đ hi u rõ sau đó l p trình trên C . Ch ng trình ch y dãy led trên ngôn ng C là ví d đ nữ ể ể ậ ươ ạ ữ ụ ơ gi n và là ki n th c c b n đ u tiên khi b c vào tìm hi u C ng d ng c a l p trình h ng đ i t ngả ế ứ ơ ả ầ ướ ể ứ ụ ủ ậ ướ ố ượ vào l p trình VXL . T ch ng trình mô ph ng có th th y ngôn ng trong l p trình hoàn toàn có th hi uậ ừ ươ ỏ ể ấ ữ ậ ể ể đ c t nghĩa c a các t ng và câu l nh . Đó là lý do mà ngôn ng C ngày càng đ c ng d ng r ng rãiượ ừ ủ ừ ữ ệ ữ ượ ứ ụ ộ không ch trong l p trình VXL mà trong nhi u lĩnh v c khác .ỉ ậ ề ự Read more: http://www.ant7.com/forum/forum_post.asp?TID=7003#ixzz0iwUgoDL7 . đ c b n sau :ề ơ ả + C c ki u toán t c a C .ể ử ủ + C c ki u d li u (int , float , double , char , unsigned char , …)ể ữ ệ + C c hàm trong C +C u tr c c. Trong đó bit c th dung nh c c bi n trong C nh ng c c bi n c n l i thì liên quan đ n c c thanh ghi ho c ư ế ư ế ạ ế ặ đ a ch c ng cua 8051( c nghĩa là

Ngày đăng: 05/09/2013, 21:46

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan