Vi Điều Khiển

Chào mừng các bạn đến với thế giới của Vi điều khiển!

--welcome to the world of microcontrollers^^ --

Điện Tử Cơ Bản

nơi khởi đầu

Lập Trình

linh hồn của phần cứng

Thứ Tư, 2 tháng 1, 2013

[Download] CCS 4.104 FULL - Trình biên dịch vi điều khiển PIC



CCS là trình biên dịch lập trình bằng ngôn ngữ C cho Vi điều khiển PIC, là sự tích hợp của 3 trình biên dịch riêng biệt cho 3 dòng PIC khác nhau:

Thứ Ba, 4 tháng 9, 2012

Bit - Byte


Bit

Lý thuyết phát biểu rằng “bit” là đơn vị cơ bản của thông tin ... Hãy tạm thời quên định nghĩa khô khan này, và nhìn vào thực tế. Câu trả lời không có gì đặc biệt, rằng đây là một chữ số nhị phân. Tương tự như hệ thống số thập phân, trong đó cùng 1 chữ số trong 1 số không có cùng giá trị (ví dụ chữ số 4 trong số 444 là như nhau, nhưng có giá trị khác nhau), "ý nghĩa" của bit cũng phụ thuộc vào vị trí của nó trong số nhị phân, bằng cách đánh số các bit: bit 0 (bit ngoài cùng bên phải), bit 1 (bit thứ 2 từ bên phải), bit 2 ... Ngoài ra, vì hệ thống số nhị phân sử dụng 2 chữ số (0 và 1), do đó giá trị của 1 bit cũng có thể là 0 hoặc 1.
Đừng nhầm lẫn nếu bạn thấy 1 bit có giá trị là 4, là 16 hoặc 64. Nó chỉ đơn giản là chúng ta đã quy đổi giá trị của bit đó từ hệ nhị phân ra hệ thập phân. Ví dụ: "giá trị của bit thứ 6 trong số nhị phân tương đương với 64 trong hệ thập phân".

Byte
 
Một byte bao gồm 8 bit nhóm lại với nhau. Nếu một bit là một chữ số, ta có thể coi byte là một số. Tất cả các phép tính toán học có thể được thực hiện trên đó, như trên số thập phân bình thường. Cũng như các hệ thống số khác, các chữ số trong 1 byte không có cùng giá trị. Giá trị lớn nhất là bit ngoài cùng bên trái, được gọi là bit có trọng số cao nhất (MSB-the most significant bit), bit ngoài cùng bên phải có giá trị bé nhất và do đó được gọi là bit có trọng số thấp nhất (LSB-the least significant bit). Giống như hệ thống số nhị phân, 8 chữ số có thể đại diện cho 256 giá trị, do vậy số thập phân lớn nhất mà 1 byte có thể đại diện là 255 (vì có 1 giá trị dành để đại diện cho số 0).

Nibble

Nibble là một nửa byte. Tùy thuộc vào một nửa byte bên trái hoặc bên phải, mà ta gọi là " Nibble cao" hay " Nibble thấp". Hoặc đơn giản ta có thể gọi là “nửa byte cao” hay “nửa byte thấp”. 

Thế giới của những Con số



Các khái niệm cơ bản

Bạn có biết rằng tất cả mọi người trong chúng ta có thể được xếp vào 1 trong 10 nhóm: nhóm 1 là những người đã quen thuộc với hệ thống số nhị phân, và nhóm 10 là những người không quen thuộc với nó. Có thể bạn không hiểu tại sao tôi lại nói là “1 trong 10 nhóm”? J Điều đó có nghĩa rằng bạn vẫn còn thuộc nhóm phía sau. Đừng lo lắng, nếu bạn muốn thuộc vào nhóm đầu tiên, để hiểu được “ngôn ngữ của máy tính”, hãy đọc tiếp các phần tiếp theo, chúng ta sẽ mô tả một cách vắn tắt về các khái niệm cơ bản (chỉ để chắc chắn rằng chúng ta có thể hiểu được nhau), các khái niệm này được sử dụng rất nhiều trong lĩnh vực điện tử máy tính. Còn nếu bạn đã nắm rõ, chúng ta cũng có thể coi đây như một cơ hội củng cố thêm kiến thức.

Thế giới của những con số

Toán học là một ngành khoa học cơ bản! Tạo hóa sinh ra vạn vật rất hợp lý và logic. Toàn thể vũ trụ có thể được con người mô tả chỉ với 10 chữ số. Tuy nhiên, điều này có thực sự đúng? Chúng ta có thực sự cần chính xác đến 10 chữ số? Tất nhiên là không, đây chỉ là một vấn đề của thói quen mà thôi. Hãy nhớ lại các bài học từ thời tiểu học.
Ví dụ, số 764 có nghĩa là:
4 đơn vị, 6 hàng chục và 7 hàng trăm.
Rất đơn giản!  
Và nó có thể được mô tả một cách phức tạp hơn:
4 + 60 + 700.
Thậm chí còn phức tạp hơn nữa:
4 * 1 + 6 * 10 + 7 * 100.
Có thể nhìn nhận các con số này một cách khoa học hơn không? Câu trả lời là có:
4 * 10 ^ 0 + 6 * 10 ^ 1 + 7 * 10 ^ 2.
Điều này có ý nghĩa gì? Tại sao chúng ta có thể hiểu và sử dụng chính xác ngay lập tức với những con số như: 100, 101 và 102? Tại sao các con số này lại liên quan mật thiết với số 10? Đó là bởi vì chúng ta sử dụng 10 chữ số khác nhau (0, 1, 2, ... 8, 9) để biểu diễn mọi thứ. Nói cách khác, bởi vì chúng ta sử dụng cơ số 10, tức là hệ thống số thập phân. Và qua thời gian sử dụng lâu dài, chúng ta đã quen, đến mức không cần thiết phải biểu diễn lại theo các cách “phức tạp” như trên mà ta vẫn dễ dàng hiểu được chúng.

Thứ Hai, 3 tháng 9, 2012

Sự khác biệt giữa một Vi điều khiển và một Vi xử lý



Vi điều khiển và vi xử lý có rất nhiều điểm khác nhau. Sự khác biệt đầu tiên và quan trọng nhất chính là chức năng của nó. Để bộ vi xử lý có thể hoạt động được, các thành phần ngoại vi khác như bộ nhớ phải được thêm vào nó. Mặc dù các bộ vi xử lý được coi là những bộ máy tính toán mạnh mẽ, nhưng điểm yếu của chúng là chúng không được thiết kế để giao tiếp trực tiếp với các thiết bị ngoại vi.
Để giao tiếp với môi trường ngoại vi, bộ vi xử lý phải cần thêm các bo mạch đặc biệt khác bên ngoài. Bộ vi xử lý được ví như trái tim thuần khiết của các máy tính, và nó không thể hoạt động một mình được. Đây là đặc trưng của các bộ vi xử lý, và điều này vẫn giữ nguyên cho đến ngày hôm nay.

Lịch sử ra đời của Vi xử lý/Vi điều khiển

Giới thiệu

Sự phát triển mạnh mẽ của vi điều khiển như ngày hôm nay là nhờ công nghệ mạch tích hợp. Công nghệ này đã cho phép chúng ta lưu trữ hàng trăm nghìn bóng bán dẫn vào một con chip, mở đầu cho việc sản xuất các bộ vi xử lý. Các máy tính đầu tiên được tạo ra bằng cách kết hợp các thiết bị ngoại vi bên ngoài vào bộ vi xử lý chính như bộ nhớ, các bus vào ra, các bộ định thời … Theo thời gian, việc tăng thêm mật độ tích hợp đã tạo ra các loại chip đầu tiên, có chứa cả bộ xử lý, các thiết bị ngoại vi, mà chúng ta quen gọi là vi điều khiển. Vậy mọi thứ đã bắt đầu phát triển từ đâu?

Trở về quá khứ…

Tại Châu Á, vào năm 1969, một nhóm các kỹ sư Nhật Bản từ BUSICOM đã đến Mỹ để đặt hàng một vài vi mạch tích hợp cần thiết cho các máy tính được thiết kế theo dự án của họ. Yêu cầu này được gửi đến INTEL, và Marcian Hoff là người phụ trách của dự án đó. Là người có kinh nghiệm trong lĩnh vực điện tử máy tính, ông đề xuất một ý tưởng mới, thay vì ý tưởng thiết kế được đưa ra trước đó. Giải pháp này là thiết kế các vi mạch hoạt động đúng theo chương trình được lưu trữ trong chính bản thân nó. Điều này có nghĩa là cấu hình vi mạch sẽ đơn giản hơn, nhưng nó sẽ đòi hỏi nhiều không gian bộ nhớ hơn so với giải pháp được đề xuất bởi các kỹ sư Nhật Bản. Sau một thời gian, trong khi các kỹ sư Nhật Bản vẫn cố gắng tìm một giải pháp dễ dàng hơn, thì ý tưởng của Marcian đã được hiện thực và bộ vi xử lý đầu tiên đã ra đời. Một cộng sự lớn của Marcian, góp phần biến ý tưởng trở thành sản phẩm đó là Federico Faggin. Chín tháng sau khi thuê anh ta, Intel đã thành công trong việc phát triển một sản phẩm từ ý tưởng ban đầu đó. Năm 1971, Intel có được quyền bán mạch tích hợp này. Trước đó, Intel đã mua lại bản quyền từ BUSICOM, trở thành kho báu của Intel. Trong năm đó, một bộ vi xử lý được gọi là 4004 xuất hiện trên thị trường. Đó là bộ vi xử lý 4-bit đầu tiên với tốc độ 108KHz, số lượng bóng bán dẫn là 2.300.

Chào mừng bạn đến với Thế giới của Vi điều khiển

Mở Đầu

Nội dung trong loạt bài này sẽ giới thiệu đến các bạn những kiến thức cơ bản nhất, mong góp phần dẫn đường cho các bạn đến với thế giới của vi điều khiển.
Thứ tự các bài đã được sắp xếp từ trên xuống dưới, từ đơn giản đến phức tạp. Do vậy bạn nên đọc theo thứ tự đó.
Hoan nghênh góp ý của các bạn!

Thứ Sáu, 31 tháng 8, 2012

Cách hàn linh kiện dán (SMD)



Chuẩn bị: mỏ hàn tốt, thiếc sợi nhỏ, thiếc lỏng, nhựa thông nước, dây hút thiếc, các dụng cụ lau chùi ...

Thứ Hai, 30 tháng 7, 2012

Mũi điện tử giúp chẩn đoán sớm căn bệnh ung thư


Trung tâm nghiên cứu công nghệ nano thuộc Học viện công trình hóa học, Đại học công nghệ Haifa (Israel) vừa tuyên bố đã nghiên cứu thành công mũi điện tử bionic chẩn đoán sớm bệnh ưng thư.
Ảnh minh hoa. Nguồn: Internet
Thiết bị trên có thể chẩn đoán nhanh, chính xác các bệnh ung thư và vị trí ung thư như ung thư phổi, ung thư tuyến vú, ung thư tuyến tiền liệt và ung thư ruột kết.

Thứ Tư, 25 tháng 7, 2012

Thấu kính áp tròng tích hợp màn hình Led


Thấu kính áp tròng tích hợp màn hình Led, có thể hiển thị nhiều thông tin kiểu đồ họa, đang bước dần từ phim ảnh viễn tưởng ra cuộc sống thật nhờ công trình nghiên cứu của các nhà khoa học.

Nắm bắt xu thế ngày càng nhỏ gọn của các thiết bị hiển thị hình ảnh di động, nhà nghiên cứu Babak Parviz tại ĐH Washington, Seattle, Mỹ, đã đưa ra ý tưởng tích hợp những thiết bị này với một thấu kính áp tròng.

Để thực hiện điều này, Parviz đã tìm cách nhúng những vi mạch điện tử trong chất nền như giấy hoặc nhựa. Những mạch điện và đi-ôt phát quang đã được bọc trong vật liệu tương hợp sinh học và sau đó đặt vào những đường nứt khắc vào ống kính.

Ghép thành công vi mạch điện tử cho người mù


Vi mạch điện tử kích thước 3 x 3mm, được cấy vào nhãn cầu mắt của người mù
Vi mạch điện tử kích thước 3 x 3mm, được cấy vào nhãn cầu mắt của người mù.
TPO - “Lần đầu tiên tôi thấy ánh sáng sau 20 năm sống trong bóng tối”. Người đàn ông mù người Anh đã hồi phục được khả năng thị giác sau khi phẫu thuật thành công vi mạch điện tử vào nhãn cầu mắt.

Thứ Năm, 19 tháng 7, 2012

[Học lập trình 8051] Bài 7: Ngắt trong 8051


Ngắt trong 8051

Mục tiêu

Kết thúc bài học này, bạn có thể:

Ø  Phân biệt cơ chế ngắt với hỏi vòng
Ø  Nắm rõ các loại ngắt trong 8051
·        Ngắt timer/counter
·        Ngắt ngoài
·        Ngắt truyền thông nối tiếp
Ø  Lập trình các ngắt
·        Trình phục vụ ngắt là gì?
·        Cho phép ngắt và cấm ngắt
·        Thiết lập mức ưu tiên của các ngắt

Giới thiệu

            Ngắt (Interrupt) - như tên của nó, là một số sự kiện khẩn cấp bên trong hoặc bên ngoài bộ vi điều khiển xảy ra, buộc vi điều khiển tạm dừng thực hiện chương trình hiện tại, phục vụ ngay lập tức nhiệm vụ mà ngắt yêu cầu – nhiệm vụ này gọi là trình phục vụ ngắt (ISR: Interrupt Service Routine).
Trong bài này ta tìm hiểu khái niệm ngắt và lập trình các ngắt trong bộ vi điều khiển 8051.

1. Các ngắt của 8051

1.1  Phân biệt cơ chế ngắt với hỏi vòng

Lấy ví dụ: Bộ vi điều khiển đóng vai trò như một vị bác sĩ, các thiết bị kiểm soát bởi vi điều khiển được coi như các bệnh nhân cần được bác sĩ phục vụ.
Bình thường, vị bác sĩ sẽ hỏi thăm lần lượt từng bệnh nhân, đến lượt bệnh nhân nào được hỏi thăm nếu có bệnh thì sẽ được bác sĩ phục vụ, xong lại đến lượt bệnh nhân khác, và tiếp tục đến hết. Điều này tương đương với phương pháp thăm dò - hỏi vòng (Polling) trong vi điều khiển.
Cứ như thế, nếu chúng ta có 10 bệnh nhân, thì bệnh nhân thứ 10 dù muốn hay không cũng phải xếp hàng chờ đợi 09 bệnh nhân trước đó. Giả sử trường hợp bệnh nhân thứ 10 cần cấp cứu thì sao? Anh ta sẽ gặp nguy cấp trước khi đến lượt hỏi thăm của bác sĩ mất! L Nhưng, nếu anh ta sử dụng phương pháp “ngắt” thì mọi chuyện sẽ ổn ngay. Lúc đó vị bác sĩ sẽ ngừng mọi công việc hiện tại của mình, và tiến hành phục vụ trường hợp khẩn cấp này ngay lập tức, xong việc bác sĩ lại trở về tiếp tục công việc đang dở. Điều này tương đương với phương pháp ngắt (Interrupts) trong vi điều khiển.
            Trở lại với bộ vi điều khiển của chúng ta: 1 bộ vi điều khiển có thể phục vụ cho nhiều thiết bị, có 2 cách để thực hiện điều này đó là sử dụng các ngắt (Interrupts) và thăm dò (polling):

Ø  Trong phương pháp sử dụng ngắt: mỗi khi có một thiết bị bất kỳ cần được phục vụ thì nó báo cho bộ vi điều khiển bằng cách gửi một tín hiệu ngắt. Khi nhận được tín hiệu ngắt thì bộ vi điều khiển ngừng tất cả những gì nó đang thực hiện để chuyển sang phục vụ thiết bị gọi ngắt. Chương trình ngắt được gọi là trình phục vụ ngắt ISR (Interrupt Service Routine) hay còn gọi là trình quản lý ngắt (Interrupt handler). Sau khi phục vụ ngắt xong, bộ vi xử lý lại quay trở lại điểm bị ngắt trước đó và tiếp tục thực hiện công việc.
Ø  Trong phương pháp thăm dò: bộ vi điều khiển kiểm tra liên tục tình trạng của tất cả các thiết bị, nếu thiết bị nào có yêu cầu thì nó dừng lại phục vụ thiết bị đó. Sau đó nó tiếp tục kiểm tra tình trạng của thiết bị kế tiếp cho đến hết. Phương pháp thăm dò rất đơn giản, nhưng nó lại rất lãng phí thời gian để kiểm tra các thiết bị kể cả khi thiết bị đó không cần phục vụ. Trong trường hợp có quá nhiều thiết bị thì phương án thăm dò tỏ ra không hiệu quả, gây ra chậm trễ cho các thiết bị cần phục vụ.

Điểm mạnh của phương pháp ngắt là:

Ø  Bộ vi điều khiển có thể phục vụ được rất nhiều thiết bị (tất nhiên là không tại cùng một thời điểm). Mỗi thiết bị có thể nhận được sự chú ý của bộ vi điều khiển dựa trên mức ưu tiên được gán cho nó. Đối với phương pháp thăm dò thì không thể gán mức ưu tiên cho các thiết bị vì nó kiểm tra tất cả mọi thiết bị theo kiểu hỏi vòng.
Ø  Quan trọng hơn, trong phương pháp ngắt thì bộ vi điều khiển còn có thể che (làm lơ) một yêu cầu phục vụ của thiết bị. Điều này lại một lần nữa không thể thực hiện được trong phương pháp thăm dò.
Ø  Lý do quan trọng nhất mà phương pháp ngắt được ưu chuộng là vì nó không lãng phí thời gian cho các thiết bị không cần phục vụ. Còn phương pháp thăm dò làm lãng phí thời gian của bộ vi điều khiển bằng cách hỏi dò từng thiết bị kể cả khi chúng không cần phục vụ.

Ví dụ trong các bộ định thời được bàn đến ở các bài trước ta đã dùng một vòng lặp kiểm tra và đợi cho đến khi bộ định thời quay trở về 0. Trong ví dụ đó, nếu sử dụng ngắt thì ta không cần bận tâm đến việc kiểm tra cờ bộ định thời, do vậy không lãng phí thời gian để chờ đợi, trong khi đó ta có thể làm việc khác có ích hơn.

1.2 Sáu ngắt trong 8051

            Thực tế chỉ có 5 ngắt dành cho người dùng trong 8051 nhưng các nhà sản xuất nói rằng có 6 ngắt vì họ tính cả lệnh RESET. Sáu ngắt của 8051 được phân bố như sau:

1.      RESET: Khi chân RESET được kích hoạt từ 8051, bộ đếm chương trình nhảy về địa chỉ 0000H.  Đây là địa chỉ bật lại nguồn.
2.      2 ngắt dành cho các bộ định thời: 1 cho Timer0 và 1 cho Timer1. Địa chỉ tương ứng của các ngắt này là 000BH001BH.
3.      2 ngắt dành cho các ngắt phần cứng bên ngoài: chân 12 (P3.2) và 13 (P3.3) của cổng P3 là các ngắt phần cứng bên ngoài INT0INT1 tương ứng. Địa chỉ tương ứng của các ngắt ngoài này là 0003H0013H.
4.      Truyền thông nối tiếp: có 1 ngắt chung cho cả nhận và truyền dữ liệu nối tiếp. Địa chỉ của ngắt này trong bảng vector ngắt là 0023H.

1.3 Trình phục vụ ngắt

            Đối với mỗi ngắt thì phải có một trình phục vụ ngắt (ISR) hay trình quản lý ngắt để đưa ra nhiệm vụ cho bộ vi điều khiển khi được gọi ngắt. Khi một ngắt được gọi thì bộ vi điều khiển sẽ chạy trình phục vụ ngắt. Đối với mỗi ngắt thì có một vị trí cố định trong bộ nhớ để giữ địa chỉ ISR của nó. Nhóm vị trí bộ nhớ được dành riêng để lưu giữ địa chỉ của các ISR được gọi là bảng vector ngắt. Xem Hình 1.


Thứ Sáu, 13 tháng 7, 2012

Virtual Serial Port Driver - Tạo cổng nối tiếp ảo


Virtual Serial Port Driver là phần mềm hữu hiệu để tạo ra các cổng nối tiếp ảo và kết nối chúng theo cặp thông qua dây cáp null-modem ảo. Các ứng dụng trên cả hai đầu của cặp đó sẽ có thể trao đổi dữ liệu cho nhau. 
Khi đó, dữ liệu được ghi trên cổng đầu tiên sẽ xuất hiện ở cổng thứ hai và ngược lại.
Tất cả các cổng nối tiếp ảo đều hoạt động chính xác như những cổng thực, mô phỏng các thiết lập của chúng. Do đó, bạn có thể tạo ra bao nhiêu cặp cổng ảo theo ý muốn mà không cần phải sử dụng phần cứng bổ sung nào.
Thêm vào đó, công nghệ cổng nối ảo Eltima có thể được tích hợp toàn diện vào trong phần mềm của chính bạn.

[Học lập trình 8051] Bài 6: Truyền thông nối tiếp với 8051

Truyền thông nối tiếp với 8051

Mục tiêu

Kết thúc bài học này, bạn có thể hiểu:

Ø  Truyền dữ liệu nối tiếp đồng bộ, không đồng bộ
Ø  Đóng khung dữ liệu trong truyền thông không đồng bộ
Ø  Chuẩn giao diện RS232
Ø  Nối ghép 8051 với chuẩn RS232
Ø  Các bước lập trình truyền thông nối tiếp cho 8051
·        Cài đặt khung truyền
·        Cài đặt tốc độ baud

Giới thiệu

Các máy tính truyền dữ liệu theo hai cách: Song song và nối tiếp. Trong truyền dữ liệu song song thường cần rất nhiều đường dây dẫn chỉ để truyền dữ liệu đến một thiết bị chỉ cách xa vài bước. Ví dụ của truyền dữ liệu song song là các máy in hoặc các ổ cứng, mỗi thiết bị sử dụng một đường cáp với nhiều dây dẫn. Mặc dù trong các trường hợp như vậy thì nhiều dữ liệu được truyền đi trong một khoảng thời gian ngắn bằng cách dùng nhiều dây dẫn song song, nhưng khoảng cách thì không thể lớn được. Vì các đường cáp dài làm suy giảm thậm chí làm méo tín hiệu. Ngoài ra, các đường cáp dài có giá thành cao. Vì những lý do này, để truyền d liệu đi xa thì  phải sử dụng phương pháp truyền nối tiếp.

1.      Các cơ sở của truyền thông nối tiếp

Trong truyền thông nối tiếp dữ liệu được gửi đi từng bit một, so với truyền song song thì là một hoặc nhiều byte được truyền đi cùng một lúc. Hình 1 so sánh giữa việc truyền dữ liệu nối tiếp và song song.

            Hình 1: Sơ đồ truyền dữ liệu nối tiếp so với sơ đồ truyền song song.

Thứ Tư, 11 tháng 7, 2012

Khái niệm cơ bản trong kỹ thuật Vi xử lý



Khái niệm cơ bản trong kỹ thuật Vi xử lý

I. CẤU TRÚC PHẦN CỨNG CỦA MỘT VI XỬ LÝ


Intel 4004, vi xử lý 4 bit thương mại đầu tiên năm 1971

Bộ vi xử lý Intel 80486DX2

        Những kiến thức được diễn đạt trong tài liệu này là những ý kiến mang tính chủ quan mà người viết muốn san sẻ với các bạn đọc có cùng mối quan tâm và chỉ liên quan đến những vấn đề cơ bản của kỹ thuật vi xử lý nói chung, không phải là kiến thức áp dụng cho một loại vi xử lý cụ thể.

Thứ Ba, 10 tháng 7, 2012

[Tự học Lập trình C] Bài 16: Hàm [Thực Hành]


Bài 16: Hàm [Thực Hành]

Mục tiêu:

Kết thúc bài học này, bạn có thể:

Ø  Định nghĩa và gọi hàm
Ø  Sử dụng các tham số trong hàm

Phần I – Trong thời gian 1 giờ 30 phút đầu:

16.1  Hàm

Như chúng ta đã biết, một hàm là một khối các lệnh thực hiện một tác vụ xác định. Trong bài này, chúng ta tập trung vào cách tạo và sử dụng hàm.

16.1.1  Định nghĩa hàm

Một hàm được định nghĩa với một tên hàm, theo sau bởi cặp dấu ngoặc nhọn {} bên trong chứa một hay nhiều câu lệnh.
Ví dụ:

argentina()
{
            statement 1;
            statement 2;
            statement 3;
}

16.1.2  Gọi một hàm

Một hàm có thể được gọi từ chương trình chính bằng cách đưa ra tên của hàm theo sau bởi cặp dấu ngoặc () và một dấu chấm phẩy ;.
Ví dụ:

argentina();

Bây giờ, xem chương trình hoàn thiện:

1.    Gọi trình soạn thảo chương trình C.
2.    Tạo tập tin mới.
3.    Đưa vào đoạn mã lệnh sau:

#include<stdio.h>
#include<conio.h>
void Vietnam();
void Italy();
void Brazil();
void Argentina();
main() 
{
            printf("\nI am in main");
            Vietnam();
            Italy();
            Brazil();
            Argentina();
            getch();
}
void Vietnam()
{
            printf("\nI am in Vietnam");
}
void Italy()
{
            printf("\nI am in Italy");
}
void Brazil()
{
            printf("\nI am in Brazil");         
}
void Argentina()
{
            printf("\nI am in Argentina");
}

4.    Biên dịch và thực thi chương trình.

Kết quả của chương trình:

Thứ Hai, 9 tháng 7, 2012

[Học lập trình 8051] Bài 5: Bộ đếm-Bộ định thời trong 8051


Bộ đếm/ bộ định thời trong 8051

Mục tiêu

Kết thúc bài học này, bạn sẽ nắm được:

Ø  Bộ đếm, bộ định thời là gì?
Ø  Các thanh ghi liên quan
Ø  Cách thức hoạt động của bộ đếm/bộ định thời
Ø  Các bước lập trình bộ đếm/bộ định thời

Giới thiệu

Bộ đếm/Bộ định thời: Đây là các ngoại vi được thiết kế để thực hiện một nhiệm vụ đơn giản: đếm các xung nhịp. Mỗi khi có thêm một xung nhịp tại đầu vào đếm thì giá trị của bộ đếm sẽ được tăng lên 01 đơn vị (trong chế độ đếm tiến/đếm lên) hay giảm đi 01 đơn vị (trong chế độ đếm lùi/đếm xuống).
Xung nhịp đưa vào đếm có thể là một trong hai loại:

Ø  Xung nhịp bên trong IC: Đó là xung nhịp được tạo ra nhờ kết hợp mạch dao động bên trong IC và các linh kiện phụ bên ngoài nối với IC. Trong trường hợp sử dụng xung nhịp loại này, người ta gọi là các bộ định thời (timers). Do xung nhịp bên loại này thường đều đặn nên ta có thể dùng để đếm thời gian một cách khá chính xác.
Ø  Xung nhịp bên ngoài IC: Đó là các tín hiệu logic thay đổi liên tục giữa 02 mức 0-1 và không nhất thiết phải là đều đặn. Trong trường hợp này người ta gọi là các bộ đếm (counters). Ứng dụng phổ biến của các bộ đếm là đếm các sự kiện bên ngoài như đếm các sản phầm chạy trên băng chuyền, đếm xe ra/vào kho bãi…

Một khái niệm quan trọng cần phải nói đến là sự kiện “tràn” (overflow). Nó được hiểu là sự kiện bộ đếm đếm vượt quá giá trị tối đa mà nó có thể biểu diễn và quay trở về giá trị 0. Với bộ đếm 8 bit, giá trị tối đa là 255 (tương đương với FF trong hệ Hexa) và là 65535 (FFFFH) với bộ đếm 16 bit.

            8051 có 02 bộ đếm/bộ định thời. Chúng có thể được dùng như các bộ định thời để tạo một bộ trễ thời gian hoặc như các bộ đếm để đếm các sự kiện xảy ra bên ngoài bộ VĐK. Trong bài này chúng ta sẽ tìm hiểu về cách lập trình cho chúng và sử dụng chúng như thế nào. Phần 1 là Lập trình bộ định thời, và phần 2 là Lập trình cho bộ đếm.

1. Các bộ định thời của 8051

            8051 có hai bộ định thời là Timer 0Timer 1, ở phần này chúng ta bàn về các thanh ghi của chúng và sau đó trình bày cách lập trình chúng như thế nào để tạo ra các độ trễ thời gian.

1.1 Các thanh ghi cơ sở của bộ định thời

            Cả hai bộ định thời Timer 0Timer 1 đều có độ dài 16 bit được truy cập như hai thanh ghi tách biệt byte thấpbyte cao. Chúng ta sẽ bàn riêng về từng thanh ghi.

1.1.1 Các thanh ghi của bộ Timer 0

            Thanh ghi 16 bit của bộ Timer 0 được truy cập như byte thấp và byte cao:

Ø  Thanh ghi byte thấp được gọi là TL0 (Timer0 Low byte).
Ø  Thanh ghi byte cao được gọi là TH0 (Timer0 High byte).

Các thanh ghi này có thể được truy cập, hoặc được đọc như mọi thanh ghi khác chẳng hạn như A, B, R0, R1, R2 v.v...


Hình 1: Các thanh ghi của bộ Timer 0

Chủ Nhật, 8 tháng 7, 2012

[Học lập trình 8051] Bài 4: Các chân, cổng vào/ra

Các chân, cổng vào/ra

Mục tiêu:

Kết thúc bài học này, bạn có thể:

Ø  Nắm được cấu trúc các chân của 8051
Ø  Biết rõ tác dụng của chúng, cách sử dụng

1. Mô tả các chân của 8051
           
Mặc dù các thành viên của họ 8051 (ví dụ 8751, 89C51, DS5000) đều có các kiểu đóng vỏ khác nhau, chẳng hạn như hai hàng chân DIP (Dual In-Line Pakage) dạng vỏ dẹt vuông QFP (Quad Flat Pakage) và dạng chíp không có chân đỡ LLC (Leadless Chip Carrier) thì chúng đều có 40 chân cho các chức năng khác nhau như vào/ra I/0, đọc RD, ghi WR, địa chỉ, dữ liệu và ngắt. Cần phải lưu ý rằng một số hãng cung cấp một phiên bản 8051 có 20 chân với số cổng vào-ra ít hơn cho các ứng dụng yêu cầu thấp hơn. Tuy nhiên, vì hầu hết các nhà phát triển chính sử dụng chíp đóng vỏ 40 chân với hai hàng chân DIP nên ta chỉ tập trung mô tả phiên bản này.

Hình 1: Sơ đồ bố trí chân của 8051.

Thứ Hai, 2 tháng 7, 2012

Quy ước khi viết Mã nguồn C/C++



QUY ƯỚC KHI VIẾT MÃ NGUỒN C/C++ 

      Giới thiệu
Khi viết mã nguồn, việc sửa lỗi, hay dùng lại mã nguỗn là điều rất cần thiết. Để sử dụng mã nguồn một cách hiệu quả và làm cho người đọc dễ hiểu thì việc trình bày mã nguồn là điều rất quan trọng. Nếu không có một quy tắc nào trong viết mã nguồn, thì chính người viết ra nó cũng khó hiểu được mã nguồn đó sau một thời gian dài. Do đó chúng ta cần có các Quy tắc, hay còn gọi là Phong cách viết mã nguồn. Bài viết này liệt kê một số Quy tắc cơ bản cần thiết.