Lập trình C cho vi xử lý 8051 potx

18 708 7
Lập trình C cho vi xử lý 8051 potx

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Wednesday, July 23, 2008 Lập trine C cho VXL - Cơ bản bkav huy231086@yahoo.com Lập trình C cho VXL 8051 - Cơ bản I.Giới thiệu i. C là một ngôn ngữ khá mạnh và rất nhiều ngưòi dùng .Nếu nói số lệnh cơ bản của C thì không nhiều . Nhưng đối với lập trình cho vxl , chúng ta chi cần biết số lượng lệnh không nhiều . Đầu tiên bạn phải làm quen với ii. Các kiểu toán tử ở C iii. Các kiểu dữ liệu iv. Cẩu trúc cơ bản của một chương trình v. Các cấu trúc điều khiển (chính các tập lệnh ) 1. Cấu trúc điều kiện : if và else 2. Các cấu trúc lặp a. Vòng lặp while b. Vòng lặp do while c. Vòng lặp for 3. Lệnh break. 4. Cấu trúc lựa chọn: switch. case vi. Biết sử dụng các hàm và chương trình con. vii. II.Cơ bản C 1. Các chỉ thị trước xử của Keil C viii. // chu thich chu thich*** a. * b. */ ii. Đây là dòng chú thích. Tất cả các dòng bắt đầu bằng hai dấu sổ (//) được coi là chút thích mà chúng không có bất kì một ảnh hưởng nào đến hoạt động của chương trình. Chúng có thể được các lập trình viên dùng để giải thích hay bình phẩm bên trong mã nguồn của chương trình. Trong trường hợp này, dòng chú thích là một giải thích ngắn gọn những gì mà chương trình chúng ta làm. Còn trong dấu (/* */) bạn có thể chú thích bao nhiêu dòng tuỳ thích , Lập trine C cho VXL - Cơ bản bkav huy231086@yahoo.com #include <AT89X52.H> #include "AT89X52.H" trình biên dịch sẽ gọi file thư viện của 89 ra (cơ bản là 51 cũng như 52) #define bien_thay_the bien Vd #define Congtac P0_6 port0.6 được đặt tên là congtac , khi ta gọi tên này trình biên dịch Keil sẽ tự chuyển tới bit quản P0_6 Note :cách viết P0_6 phụ thuộc vào từng trình biên dịch , có chương trình thì lại viết là P0.6 , còn keil C viết như cách đầu #define m_left_tien P1_5 #define m_left_lui P1_4 #define m_left_forward m_left_tien=0;m_left_lui=1; các bạn chú ý đây là một cách sử dụng marco trong C khi mình gọi m_left_forward thì chân P1_5 = 0 và P1_4=1 Các viết này gần như cho chúng ta một chương trình con , tuy nhiên không nên quá lạm dụng nó Một ưu điểm nổi bật của C là các bạn có thể tạo ra các bộ thư viện . dụ sau là tạo thư viện thuvien.h (đuôi .h bạn có thể tạo bằng cách save as *.h ở Keil C ). #ifndef _thuvien_H #define _thuvien_H .//mã chương trình #endif 2. Các toán tử : ->Toán tử gán (=). Ex: Lập trine C cho VXL - Cơ bản bkav huy231086@yahoo.com b = 5; a = 2 + b; a = 2 + (b = 5); a = b = c = 5; ->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 (+=, -=, *=, /=, %=, >>=, <<=, &=, ^=, |=) value += increase; tương đương với value = value + increase; a - = 5; tương đương với a = a - 5; a /= b; tương đương với a = a / b; price *= units + 1; tương đương với price = price * (units + 1); Tăng và giảm ++ - - a++; <=> a+=1; <=> a=a+1; tính chất tiền tố hoặc hậu tố (++a) # (a++) Ex B=3; B=3;A=++B; // A is 4, B is 4 B=3; A=B++; // A is 3, B is 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 EX Lập trình C cho VXL - Cơ bản bkav huy231086@yahoo.com (7 == 5) sẽ trả giá trị false (6 >= 6) sẽ trả giá trị true tất nhiên thay sử dụng các số, chúng ta có thể sử dụng bất cứ biểu thức nào. Cho a=2, b=3 và c=6 (a*b >= c) sẽ trả giá trị true. (b+4 < a*c) sẽ trả giá trị false Chú ý rằng = (một dấu bằng) lf hoàn toàn khác với == (hai dấu bằng). (==) nhằm so sánh còn (=)gán giá trị của biểu thức bên phải cho biến ở bên trái . -> Các toán tử logic ( !, &&, || ). ! NOT && AND || OR EX: !(5 == 5) trả về false biểu thức bên phải (5 == 5) có giá trị true. !(6 <= 4) trả về true (6 <= 4)có giá trị false. !true trả về false. !false trả về true. ( (5 == 5) && (3 > 6) ) trả về false ( true && false ). ( (5 == 5) -> 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 của các toán tử Th ứ t ự Toán t ử Mô t ả 1 :: scope [...].. .Lập trình C cho VXL - C bản bkav huy231086@yahoo.com case constant1: block of instructions 1 break; case constant2: block of instructions 2 break; default: default block of instructions } Nó hoạt động theo c ch sau: switch tính biểu th c và kiểm tra xem nó c bằng constant1 hay không, nếu đúng thì nó th c hiện block of instructions 1 cho đến khi tìm thấy từ khoá break, sau đó nhảy đến phần cuối c a... đó nhảy đến phần cuối c a c u tr c lựa chọn switch C n nếu không, switch sẽ kiểm tra xem biểu th c có bằng constant2 hay không Nếu đúng nó sẽ th c hiện block of instructions 2 cho đến khi tìm thấy từ khoá break Cuối c ng, nếu giá trị biểu th c không bằng bất kì hằng nào đư c chỉ định ở trên (bạn c thể chỉ định bao nhiêu c u lệnh case tuỳ thích), chương trình sẽ th c hiện c c lệnh trong phần default:... bu c phải c nếu nút enter đư c bấm thì chương trình sẽ thoát ra khỏi vòng lặp while III C cho 8051 1 Keil Variable Extensions data địa chỉ tr c tiếp MOV A, 07Fh idata địa chỉ gián tiếp MOV R0, #080h MOV A, R0 xdata bộ nhớ ngoài MOVX @DPTR code bộ nhớ chương trình MOVC @A+DPTR VD unsigned int data bien = 0; // them data vao khai bao kieu bien Chú ý rằng , bạn c thể không c n khai báo c thể , chỉ c n... unsigned char speed_center; bkav huy231086@yahoo.com Lập trình C cho VXL - C bản bkav huy231086@yahoo.com unsigned char speed_right_1; unsigned char speed_right_2; unsigned char speed_right_3; unsigned char speed_right_4; unsigned char speed_right_5; unsigned char speed_right_6; unsigned char speed_right_7; unsigned char speed_right_8; unsigned char speed_left_1; unsigned char speed_left_2; unsigned char... khi thuc hien xong cong viec } void ngat0(void) interrupt 0 // chuong trinh ngat { } 3 Một dụ hoàn thiện về lập trình C cho 8051 Chương trình delay c bản: #define high(x) (((65536-x) & 0xFF00) >> 8) #define low(x) ((unsigned char)(65536-x)) void delay (unsigned int time) { while (time ) { TMOD = 0X01; TH0 = high(1000); TL0 = low(1000); TF0 = 0; TR0 = 1; while(!TF0); TR0 = 0; } } Lập trình C cho VXL... EX1 = 1 ; TF1 = 1 ; TF0 = 1 ; IT0 = 1 ; PT0 = 1 ; value_LED = 1234 ; Lập trình C cho VXL - C bản dk_LCD = 1 ; bkav huy231086@yahoo.com Lập trình C cho VXL - C bản bkav huy231086@yahoo.com LCD_cmd(0x01) ; LCD_cmd(0x38) ; LCD_cmd(0x 0C) ; LCD_cmd(0x01) ; LCD_cmd(0x80) ; LCD_putstring(s1) ; for (;;) ; } /* interrupt timer 1*/ void interrupt_timer1() interrupt 3 { TR1 = 0 ; TH1 = 0xEE; TL1 = 0x00; TR1... value_LCD_cmd ) Lập trình C cho VXL - C bản bkav huy231086@yahoo.com { READY() ; P0 = value_LCD_cmd ; RS = 0 ; RW = 0 ; E=1; E=0; } void LCD_DATA(const unsigned char value_LCD_DATA ) { READY() ; P0 = value_LCD_DATA ; RS = 1 ; RW = 0 ; E=1; E=0; } void READY() { bit_while = 1 ; RS = 0 ; RW = 1 ; while ( bit_while ) { E=0; E=1; } } void LCD_putstring(const unsigned char *str ) { while (*str != '\0') { LCD_DATA(*str)... c n unsigned int checksum = 0; 2 Địa chỉ ngắt Interrupt External 0 Vector address 0003h Interrupt number 0 Lập trình C cho VXL - C bản bkav huy231086@yahoo.com Timer 0 000Bh 1 External 1 0013h 2 Timer 1 001Bh 3 Serial 0023h 4 org ljmp main org 0003h ljmp ngat0 org 30h 00h main: Here: sjmp Here // chuong trinh chinh // vong lap vo tan ngat0: reti code C Code: void main { // chuong trinh chinh while(1)... =====================*/ /* Quet LED su dung truyen noi tiep va cac IC giai ma */ void interrupt_timer0() interrupt 1 { unsigned char LED_serial ; TR0 = 0 ; TH0 = 0xEE ; TL0 = 0x00 ; TR0 = 1 ; converse_LED() ; counter_TR++ ; switch (counter_TR) { case 1: LED_serial = LED1 ; LED_serial |= 0xE0 ; Lập trình C cho VXL - C bản bkav huy231086@yahoo.com out_serial(LED_serial) ; break ; case 2: LED_serial = LED2 ; LED_serial |=... READY() ; void LCD_putstring(const unsigned char *str ); void stop_run() ; void main() { unsigned char s1[] = "Hello" ; unsigned char s2[] = "Hello : HUY" ; unsigned char s3[] = "VIET NAM VO DICH" ; unsigned int i ; counter = 0 ; button = 0 ; TMOD = 0x11 ; EA = 1 ; ET0 = 1 ; ET1 = 1 ; EX0 = 1 ; EX1 = 1 ; TF1 = 1 ; TF0 = 1 ; IT0 = 1 ; PT0 = 1 ; value_LED = 1234 ; Lập trình C cho VXL - C bản dk_LCD = 1 ; bkav . break. 4. C u tr c lựa chọn: switch. case vi. Biết sử dụng c c hàm và chương trình con. vii. II .C bản C 1. C c chỉ thị trư c xử lý c a Keil C viii. // chu thich chu thich***. chú thích. Tất c c c dòng bắt đầu bằng hai dấu sổ (//) đư c coi là chút thích mà chúng không c bất kì một ảnh hưởng nào đến hoạt động c a chương trình. Chúng c thể đư c c c lập trình vi n. iv. C u tr c cơ bản c a một chương trình v. C c cấu tr c điều khiển (chính c c tập lệnh ) 1. C u tr c điều kiện : if và else 2. C c cấu tr c lặp a. Vòng lặp while b. Vòng lặp do while c.

Ngày đăng: 19/06/2014, 22:20

Từ khóa liên quan

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

Tài liệu liên quan