Chương trình Hello world

Một phần của tài liệu LUẬN VĂN:CÁC KỸ THUẬT GỠ LỖI TRONG VIỆC PHÁT TRIỂN HỆ THỐNG NHÚNG VỚI NGÔN NGỮ C doc (Trang 52 - 54)

Ở chương trình trên, ta mô phỏng sự hoạt động của các các chân cắm trên cổng để đèn led nhấp nháy. Chương trình tiếp theo là để minh họa cho việc sử dụng cổng nối tiếp UART để ghi ra các chuỗi kí tự.

Chương trình thực hiện việc ghi ra cổng nối tiếp UART dòng chữ “Hello world” và lặp lại 5 lần dòng chữ: “This is my embedded programming. ”:

Bảng 5.2: Mã lệnh Hello.c

/* Chuong trinh Hello.c thuc hien viec in ra man hinh cac dong chu Hello world. * va 5 lan dong chu “This is my embedded programming. ”

*/

#include <stdio.h>

#include <LPC214x.H> /* Thu vien LPC214x.h */

/* Ham main thuc hien chuong trinh chinh */ int main () {

int count = 5; // Khai bao gia tri cua bien dem count = 5 // Cac khai bao cho cac chan cam, cong

PINSEL0 = 0x00050000; // Bat RXD1 và TXD1

U1LCR = 0x83; // Bat DLAB = 1, 8 bit. 1 stop bit

U1DLL = 97; // 9600 Baud Rate @ 15MHz VPB Clock U1LCR = 0x03; // DLAB = 0

printf ("Hello World\n"); // In ra “Hello world”

// Ham in ra 5 lan dong chu “This is my embedded programming. ” while (count > 0) {

printf("This is my embedded programming. \n"); count --;

}

// Ham lap vo han de dung chuong trinh while (1) {;}

}

Ý nghĩa của các hàm, giá trị, phép gán:

• PINSEL0 có giá trị 0x00050000 tương đương với mã nhị phân có các bit 16 và 18 có giá trị bằng 1. Bit 16 trong PINSEL0 có giá trị bằng 1 tức là mở cổng truyền dữ liệu TXD1 của UART1. Bit 18 trong PINSEL0 có giá trị bằng 1 là mở cổng nhận dữ liệu RXD1 của UART1.

• Ở đây U1LCR có giá trị là 0x83 tương đương với mã nhị phân 1000 0011. Trong đó bit 7 bằng 1 là bật DLAB lên, bit 2 bằng 0 là có 1 stop bit, bit 0 và 1 là 11 nên trạng thái là truy cập với độ dài 8 bit ký tự.

• U1DLL truy cập vào bộ khóa chia (Divisor Latch Access) của UART1. Giá trị 97 là để tính toán tốc độ baud của thiết bị.

• Giá trị của U1LCR là 0x03 là tắt DLAB (bit 7 đại diện cho DLAB chuyển về mức 0).

• Vòng lặp while (count > 0) để chương trình in ra 5 lần dòng chữ “This is my embedded programming. ”

• Vòng lặp while (1) là vòng lặp vô hạn, để chương trình dừng lại, không tiếp tục thực hiện lại hàm main.

Để thực hiện việc in các ký tự ra cổng nối tiếp thì ta còn cần phải viết các hàm phụ để thực hiện việc truyền nhận dữ liệu từ chương trình đến cổng nối tiếp UART1.

Sau khi biên dịch và thực hiện chương trình ta được kết quả như sau:

Hình 5.2. Kết quả thực thi chương trình Hello world

Chương trình của ta lập trình cho việc ghi ra cổng nối tiếp UART1, nhưng trong hình thì cổng xuất ra các ký tự lại là cổng UART1. Điều này được giải thích như sau: trong bộ gỡ lỗi của µVision các cổng nối tiếp UART được đánh số từ UART1, UART2 chứ không đánh số như trong thiết kế của LPC2148 là UART0, UART1. Vì vậy, UART2 tương ứng với UART1 mà ta đã khai báo trong chương trình.

Một phần của tài liệu LUẬN VĂN:CÁC KỸ THUẬT GỠ LỖI TRONG VIỆC PHÁT TRIỂN HỆ THỐNG NHÚNG VỚI NGÔN NGỮ C doc (Trang 52 - 54)