1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo thực tập môn vi xử lý

72 1,1K 1

Đ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

Thông tin cơ bản

Định dạng
Số trang 72
Dung lượng 3,29 MB

Nội dung

BÀI 1 : ĐIỀU KHIỂN IO VỚI LED ĐƠN Trước hết điều khiển 1 LED,để điều khiển 1 LED ta chỉ việc gán chân nối đất của LED đó với 0 hoặc 1 thì điện áp ở chân đó sẽ là 0V hoặc 5V tương ứng vớ

Trang 1

TRƯỜNG ĐẠI HỌC ĐIỆN LỰC

KHOA ĐIỆN TỬ - VIỄN THÔNG

Trang 2

Giới Thiệu Chung

1 Sự khác nhau giữa vi xử lý và vi điều khiển

Vi xử lý, ví dụ như con chip intel hay ADM trong các máy tính thông thường,nó không có RAM,ROM,cổng IO và các thiết bị ngoại vi on chip Còn vi điều khiển chứa một bộ vi xử lý,RAM,ROM,cổng IO và có thể chứa các thiết bị ngoại vi Trong bài thực hành này chúng ta chỉ nghiên cứu về vi điều khiển

2 Giới thiệu về dòng AT89C51

AT89C51 là một bộ vi xử lý 8 bit,loại CMOS,có tốc độ cao và công suất thấp với

bộ nhớ Flash có thể lập trình được.Nó được sản xuất với công nghệ bộ nhớ không bay

Sơ đồ khối của AT89C51

Trang 3

AT89C51 có các đặc trưng cơ bản sau : 4Kbyte Flash,128 byte RAM, 32 đường xuất

nhập,hai bộ định thời/đếm 16 bit,một cấu trúc ngắt hai ưu tiên và 5nguyên nhân ngắt,một post nối tiếp song công,mạch dao động và tạo xung clock trên chip AT89C51 được thiết kế với logic tĩnh cho hoạt động có tần số giảm xuống 0 và hỗ trợ hai chế độ tiết kiệm năng lượng được lựa chọn bằng phần mềm.Chế độ nghỉ dừng CPU trong khi vẫn cho phép RAM,các bộ dịnh

thời/đếm,port nối tiếp và hệ thống ngắt tiếp tục hoạt động Chế độ nguồn giảm duy trì nội dung của RAM nhưng không cho mạch dao động cung cấp xung clock nhằm vô hiệu hóa các hoạt động khác của chip cho đến khi có reset cứng tiếp theo

Trong họ AT89C51 ta đi nghiên cứu vi điều khiển 8051

3 Giới thiệu chung về 8051

P0 từ chân 39 - 32 tương ứng là các chân P0_0 - P0_7

P1 từ chân 1 - 8 tương ứng là các chân P1_0 - P1_7

P2 từ chân 21 - 28 tương ứng là các chân P2_0 - P2_7

P3 từ chân 10 - 17 tương ứng là các chân P3_0 - P3_7

Riêng công 3 có 2 chức năng ở mỗi chân như hình vẽ:

P3.0 – RxD : chân nhận dữ liệu nối tiếp khi giao tiếp RS232(Cổng COM )

P3.1 _ TxD : phân truyền dữ liệu nối tiếp khi giao tiếp RS232

P3.2 _ INTO : interrupt 0 , ngắt ngoài 0

P3.3 _ INT1: interrupt 1, ngắt ngoài 1

P3.4 _T0 : Timer0 , đầu vào timer0

P3.5_T1 : Timer1, đầu vào timer 1

P3.6_ WR: Write, điều khiển ghi dữ liệu

Trang 4

P3.7 _RD: Read , điều khiển đọc dữ liệu

Chân 18,19 nối với thạch anh tạo thành mạch dao động cho vi điều khiển

Trang 5

BÀI 1 : ĐIỀU KHIỂN IO VỚI LED ĐƠN

Trước hết điều khiển 1 LED,để điều khiển 1 LED ta chỉ việc gán chân nối đất của

LED đó với 0 hoặc 1 thì điện áp ở chân đó sẽ là 0V hoặc 5V tương ứng với điện áp đèn

sẽ sang hoặc tắt.Làm tương tự với các chân còn lại của vi điều khiển ta sẽ có một dãy các

đèn LED sang theo ý muốn Ở đây ta sẽ điều khiển 8 LED

CODE:

#define bat 0 // dinh nghia bat den led//

#define tat 1 //dinh nghia tat den led//

//khai bao bien toan cuc

Trang 6

void tre (long time)

{

long n;

for (n=0;n<time;n++);

} //ham chinh//

void main (void)

{

{

Trang 7

tre(1000);

led8=tat;

tre(1000);

led1=bat;

Trang 8

Tuy nhiên,với cách điều khiển từng chân của vi điều khiển như ở trên thì rất tốn

công,thay cách điều khiển từng chân như thông thường ta có thể xuất giá trị ra cả cổng

Nguyên tắc thực hiện của cách này như sau: 1 cổng có 8 bit tổ hợp của 8 bit có

đưa ra cổng 1 giá trị hexa từ 0 tới ff tương ứng với 0 tới 255 Ví dụ P1=1 tương đương

Trang 9

với P1=0x01; P1=10 tương đương với P1=0x0A.Như vậy chương trình xuất ra cả cổng tương đương với chương trình điều khiển 8 LED từng chân như sau:

#include <AT89X51.H>

/************************************/

void tre(int time)

{

int n;// khai bao bien cuc bo

Trang 10

BÀI 2 : ĐIỀU KHIỂN LED 7 THANH DÙNG ANOT CHUNG

1 Led 7 đoạn

Led 7 đoạn có 2 loại la anot chung và katot chung,nó được cấu tạo chỉ là 8 con led đấu

chung 1 đầu anot hoặc katot.Led 7 đoạn có tất cả 10 chân được ký hiệu như hình vẽ

Mạch led sử dụng led anot chung như sau:

2 Nguyên lý hoạt động

Trang 11

Khi cắm nguồn vào mạch tất cả các chân của các cổng IO của vi điều khiển 5V(nếu cổng 0 không lắp điện trở treo thì sẽ là 0V) Nhìn sơ đồ mạch không có sự chênh lệch điện

áp nên không có đèn nào sáng Ta muốn led nào sáng ta chỉ việc đưa ra điện áp 0V ở chân vi điều khiển nối với thanh đó

Thanh hiện Thanh tắt Giá trị(P2)

Để hiển thị số 1: B,C các thanh còn lại 1111 1001

Để hiển thị số 2: A,B,D,E,G các thanh còn lại 1010 0100

Để hiển thị số 8: Tât cả các thanh không thanh nào 1000 0000

Ngoài led 7 thanh còn có thể hiển thị 1 chữ số.ví dụ :

Hiển thị chữ A: thanh hiện A,B,C,E,F,G;thanh tắt D;giá trị của P2 :1000 1000

3 Lập trình

- Cách 1 : giống như bài thứ nhất, lập trình dễ hiểu không cần tính toán nhưng phải

viết copy,past và chỉnh sửa nhiều

- Cách 2 : cũng giống như ở bài trên chúng ta điều khiển từng cổng không theo từng

chân như ở cách 1,tuy nhiên phải tính toán nhiều

Ở đây chúng ta sẽ làm theo cách 2,ta có code sau:

#include <REG2051.H>// dinh nghia

//khai bao bien toan cuc

//chuong trinh con

void taotre(long time )

P1 = (so_dem2[i]|so_dem[j]); //khai bao hang don vi

if(i==9) {

Trang 12

j++;

P1=(so_dem[j]|so_dem2[i]); //khai bao hang chuc

chuc den 9 roi ve 0

j=0;

} }

}

}

Sau khi chạy chương trình và kiểm tra lỗi thì kết quả hiển thị trên protus như sau :

Trang 13

BÀI 3 : ĐỌC BÀN PHÍM (Đọc ma trận phím)

1 Nhiệm vụ : quyét bàn phím 16 phím (4x4),xem phím nào được bấm,các phím được đánh

số từ 0 đến 15 rồi hiển thị ra led 7 thanh

2 Sơ đồ bàn phím :

3 Nguyên lý quét :

- Vì sao mạch phím đấu theo ma trận? vì nếu để đọc 16 nút bấm thông thường thì cần

phải đấu với 16 chân vi điều khiển Còn nếu đấu theo ma trận thì ta chỉ cần 8 chân vi

điều khiển cũng có thể điều khiển được 16 phím bấm

- Có hai cách quét phím theo cột và theo hàng Ở đây, chúng ta chọn cách quét phím

theo hàng

- Bước 1: Ta đưa chân P3.0 nối hàng 1 xuống 0V Rồi ta kiểm tra giá trị logic của các

chân P3.4,P3.5,P3.6.P3.7 Nếu phím 1 được bấm thì cột 1_P3.4 sẽ có giá trị bằng

0V.Nếu phím 2 được bấm thì cột 2_P3.5 sẽ có giá trị bằng 0V.Nếu phím 3 được

bấm thì cột 3_P3.6 sẽ có giá trị bằng 0V Nếu phím 4 được bấm thì cột 4_P3.7 sẽ có

giá trị bằng 0V Ta căn cứ vào đó để xác định xem phím nào được bấm

- Bước 2: Ta đưa chân P3.1 nối hàng 2 xuống 0V Rồi ta kiểm tra giá trị logic của các

chân P3.4,P3.5,P3.6.P3.7 Nếu phím 5 được bấm thì cột 1_P3.4 sẽ có giá trị bằng

0V.Nếu phím 6 được bấm thì cột 2_P3.5 sẽ có giá trị bằng 0V.Nếu phím 7 được

bấm thì cột 3_P3.6 sẽ có giá trị bằng 0V Nếu phím 8 được bấm thì cột 4_P3.7 sẽ có

giá trị bằng 0V Ta căn cứ vào đó để xác định xem phím nào được bấm

Trang 14

- Bước 3: Ta đưa chân P3.2 nối hàng 3 xuống 0V Rồi ta kiểm tra giá trị logic của các chân P3.4,P3.5,P3.6.P3.7 Nếu phím 8 được bấm thì cột 1_P3.4 sẽ có giá trị bằng 0V.Nếu phím 9 được bấm thì cột 2_P3.5 sẽ có giá trị bằng 0V.Nếu phím 10 được bấm thì cột 3_P3.6 sẽ có giá trị bằng 0V Nếu phím 11 được bấm thì cột 4_P3.7 sẽ

có giá trị bằng 0V Ta căn cứ vào đó để xác định xem phím nào được bấm

- Bước 4: Ta đưa chân P3.3 nối hàng 4 xuống 0V Rồi ta kiểm tra giá trị logic của các chân P3.4,P3.5,P3.6.P3.7 Nếu phím 12 được bấm thì cột 1_P3.4 sẽ có giá trị bằng 0V.Nếu phím 13 được bấm thì cột 2_P3.5 sẽ có giá trị bằng 0V.Nếu phím 14 được bấm thì cột 3_P3.6 sẽ có giá trị bằng 0V Nếu phím 15 được bấm thì cột 4_P3.7 sẽ

có giá trị bằng 0V Ta căn cứ vào đó để xác định xem phím nào được bấm

- Ta sẽ dung câu lệnh IF để kiểm tra

unsigned char stt=0,a;

Trang 15

if (!H_1) {

Trang 16

else if (!C_3) stt = 15;

else if (!C_4) stt = 16;

} }

Trang 17

BÀI 4 : ĐIỀU KHIỂN LCD 16X2

1 Nhiệm vụ : Điều khiển hiển thị LCD 16x2 dòng chữ : “Nhom 18-d3dtvt” và hiển thị thời

VEE: thay đổi điện áp để thay đổi độ tương phản

Nhãm 2: (8 chân) Vào ra thông tin với VĐK : Từ chân D0-D7

Nhãm 3 : (3 chân) Điều khiển việc vào ra thông tin : E,RS,R/W

E :(bật /tắt ) (cho phép/ không cho phép trao đổi thông tin với VĐK )

RS :(loại thông tin trao đổi)Thông tin trao đổi là lệnh điều khiển hay là

dữ liệu để hiển thị

R/W : (hướng truyền của thông tin) đọc trạng thái từ LCD hay thông tin cho VĐK để

Trang 18

LCD hiển thị

Cụ thể tên gọi và bảng chức năng của các chân được viết trong bảng sau :

Interface Pin Connections

Nếu RS=1: LCD nhận dữ liệu từ VĐK để hiển thị

RS=1 : chọn chức năng đọc dữ liệu từ LCD vào VĐK RS=0 : chọn chức năng ghi dữ liệu từ VĐKvào LCD để hiển thị

Cho phép/ ko cho phép LCD trao đổi thông tin với VĐK

Chờ khi E chuyển từ 10 thì tín hiệu ở các chân D7 mới được đưa vào LCD

Trang 19

Từ những đặc điểm và chức năng đã được đề cập ở trên ta có sơ đồ VDK sau :

3 Nguyên tắc hoạt động

khiển chế độ tương phản của LCD

Chân chọn thanh ghi RS(regiter select):Có hai thanh ghi trong LCD,chân RS được dùng để chọn thanh ghi,như sau : nếu RS=0 thi thanh ghi mà lệnh được chọn để cho phép người dùng gửi 1 lệnh chẳng hạn như xóa màn hình,đưa con trỏ về đầu dòng…nếu RS=1 thì thanh ghi dữ liệu được chọn cho phép người dùng gửi dữ liệu cần hiển thị trên LCD Chân đọc/ghi (R/W):Đầu vào đọc/ghi cho phép người dùng ghi thông tin trên LCD khi RW=0 hoặc đọc thông tin từ nó khi RW=1

Chân cho phép E(Enable):chân cho phép E được sử dụng bởi LCD để chốt dữ liệu của nó.Khi dữ liệu được cấp đến chân dữ liệu thì một xung mức cao xuống thấp phải được

áp đến chân này để LCD chốt dữ liệu trên các chân dữ liệu.Xung này phải rộng tối thiểu 450ns

Chân D0-D7: đây là 8 chân dữ liệu 8bit được dùng để gửi nội dung lên LCD hoặc đọc nội dung của các thanh ghi trong LCD.Để hiển thị các chữ cái và các con số chúng ta

Trang 20

sử dụng mã ASCII của các chữ cái từ A-Z,a-f và các con số từ 0-9 đến các chân này khi RS=1

Cũng có các mã lệnh được gửi đến LCD để xóa màn hình hoặc đưa con trỏ về đầu dòng hoặc nhấp nháy con trỏ

*Chú ý: Chúng ta có thể sử dụng RS=0 để kiểm tra bit bận để xem LCD có sẵn sàng nhận thông tin.Cờ bận là bít D7 và có thể được đọc thi R/W=1 và RS=0 như sau:

Nếu R/W=1, RS=0, D7=1(cờ bận) thì LCD bận thì LCD bận bởi các công việc bên trong và sẽ không nhận bất kỳ thông tin mới nào.Khi D7=0 thì LCD sẵn sàng nhận thông tin mới.Lưu ý chúng ta nên kiểm tra cờ bận trước khi ghi bất kỳ dữ liệu nào lên LCD Sau đây là bảng mã lệnh của LCD:

14

Điều khiển LCD qua các bước sau:

- Bước 0: chẩn bị phần cứng.dùng tuốc vít xoay biến trở 5k điều chỉnh độ tương phản của

LCD.Xoay cho đến khi các ô vuông (các điểm ảnh)của LCD hiện lên thì xoay ngược biến trở lại

1 chút

-Bước 1: Khởi tạo cho LCD

-Bước 2: Gán giá trị cho các bit điều khiển các chân RS,R/W,EN cho phù hợp với các chế độ.Hiển thị ký tự lên LCD hay thực hiện 1 lệnh của LCD

-Bước 3: Xuất byte dữ liệu ra cổng điều khiển 8 bit dữ liệu của LCD

-Bước 4: Kiểm tra cờ bận xem LCD sẵn sàng nhận dữ liệu mới chưa

-Bước 5: Quay vòng lại bước 1

4 Lập trình

Trang 21

// -Sau day la cac chuong trinh con -//

unsigned char min,sec,hour,x0,x1;

//ngat do bo dinh thoi 0

void timer0_isr() interrupt 1

sec=0;

min++;

if(min==60) {

min=0;

hour++; if(hour==24) {

hour=0; } }

} }

} }

// -Ham tre khoang thoi gian rat ngan phuc vu viec kiem tr co ban -// void delay()

{

unsigned int i;

for(i=0;i<125;i++);

Trang 22

// -Ham ghi lenh giao tiep voi LCD -//

void ghi_lenh(unsigned char lenh)

{

kt_ban();

P0 = lenh;

Trang 23

}

/*CHUONG TRINH CHINH */

void main()

{

TMOD = 0x02; //Bit chon che do thu nhat cho timer0

Trang 24

Hiển thị mô phỏng :

Trang 25

Dựa trên nguyên tắc như quét màng hình,ta có thể thực hiện việc hiển thị ma trận đèn bằng

cách quét theo hàng và quét theo cột.Mỗi led trên ma trận có thễ coi là một điểm ảnh.Địa chỉ của mỗi điểm ảnh được xác định đồng thời với bộ giải mã hàng và giải mã cột.Điểm ảnh này dược xác định trạng thái nhờ vi điều khiển 8051

Như vậy tại mỗi thời điểm chỉ có trạng thái của một điểm ảnh được xác định.Tuy nhiên khi xác định địa chỉ và trạng thái của điểm ảnh tiếp theo thì các điểm ảnh còn lại sẽ chuyển về trạng thái tắt(nếu LED đang sáng thì sẽ tắt dần).Vì thế đẻ hiển thị được toàn bộ hình ảnh của ma trận đèn.Ta có thể quét ma trận nhiều lần với tốc độ quét rất lớn,lớn hơn nhiều lần thời gian tắt của đèn.Mắt người chỉ nhận biết được tối đa 24hình/s do đó nếu tốc độ quet rất lớn thì sẽ không nhận ra được sự thay đổi nhỏ của đèn mà sẽ thấy được toàn bộ hình ảnh cần hiển thị

Trang 26

3 Nguyên lý hoạt

động

Muốn cho led sáng ta cấp dương 5V vào hàng,0V vào cột dòng 10mA đến 15mA

Ví dụ : muốn led ở vị trí 5x4 sáng, ta đưa điện áp cột 4(P0_3) xuống 0V đến hàng

5(P2_5) lên 5V

Hiển thị chữ : thống kê các điểm sáng thành chữ rồi cho các hàng cột điện áp tương ứng.Giống như quyét bàn phím đưa điện áp 0V ra từng cột nối với cổng 0 Như vậy sẽ có

8 giá trị: 0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F phải đưa vào 1 mảng 8

phần tử,rồi sau đó đưa vào 1 vòng for tăng dần 1 biến để tăng dần phần tử mảng cot[8] Với mỗi lần 1 chân cổng 0 xuống 0V ta dùng cổng 2 đưa ra 1 giá trị 8 bít để điều khiển trong 1 cột những đèn nào sáng Ví dụ muốn hàng 1và hàng 3 sáng thì hàng 1và 3 có giá trị 5V còn các hàng khác 0V, ta được giá trị 8 bít sau: 0x05 (1010 000) Tại mỗi thời

điểm chỉ có một số đèn trên 1cột sáng,nhưng do ta quét 8 cột với tần sô nhanh, vì mắt có hiện tượng lưu ảnh nên ta thấy trong 1 thời điểm ta thấy toàn bộ kí tự.Với 8 cột lần lượt bằng 0V ta phải đưa ra tương ứng 8 giá trị 8 bit ra cổng 2, do đó ta phải lưu 8 giá trị đó vào 1 mảng 8 kí tự kytu1[8], ta sẽ viết các ký tự trên 7 cột Để mỗi kí tự sẽ cách nhau

1cột không sáng.Ta khai báo mảng kytu1[9] có 9 phần tử và phần tử đầu tiên có giá trị đấy ra cổng 2 là 0x00 để tắt toàn bộ cột đó

Quá trình điều khiển hiển thị như sau:

Cột 1, hàng 1, cột 2 hàng 2, …, cột 8 , hàng 8

Để làm chữ chạy:

Thêm 1 biến vào để điều khiển thứ tự hiển thị hàng

Hiện 1 chữ trên led như trên đã đưa ra:

Trang 27

unsigned int m,n,k,p,x,y;

unsigned char hang[8]={0X80,0X40,0X20,0X10,0X08,0X04,0X02,0X01};

unsigned char cot[75]={0XFF,0XFF,0XFF,0XFF,

{ unsigned int i;

Trang 28

for(i=0;i<=t;i++);

{ P3=hang[n];

for(n=0;n<=7;n++) {

} delay(3000);

Trang 29

m++;

if(m==75) m=0;

} }

Hiển thị trên protus :

Trang 30

BÀI 6 : NGẮT NGOÀI – ĐẾM XUNG

a Xử lý ngắt

Có 5 nguyên nhân tạo ra ngắt (gọi tắt là nguyên nhân ngắt) đối với 8051: hai ngắt do bên

ngoài, hai ngắt do bộ định thời và một ngắt do port nối tiếp Song cũng có nhiều tài liệu kỹ thuật nói rằng có 6 ngắt, nguyên nhân là do họ tính cả lệnh RESET, khi ta thiết lập trạng thái ban đầu cho hệ thống (gọi tắt là reset hệ thống), tất cả các ngắt đều bị vô hiệu hóa (cấm) và sau đó chúng được cho phép riêng rẽ bằng phần mềm

Khi xảy ra hai hay nhiều ngắt đồng thời hoặc xảy ra một ngắt trong khi một ngắt khác đang được phục vụ, ta có 2 sơ đồ xử lý các ngắt: sơ đồ chỗi vòng và sơ đồ hai mức ưu tiên Sơ đồ chuổi vòng là sơ đồ cố định, còn sơ đồ ưu tiên ngắt được lập trình bởi người sử dụng

Khi Reset thì tất cả mọi ngắt đều bị cấm (bị che), có nghĩa là không có ngắt nào được bộ vi điều khiển đáp ứng nếu chúng được kích hoạt Các ngắt phải được cho phép bằng phần mềm để

bộ vi điều khiển có thể đáp ứng được Có một thanh ghi được gọi là cho phép ngắt (Interrupt Enable) chịu trách nhiệm về việc cho phép (không che) và cấm (che) các ngắt

IE Register (Interrupt Enable)

EA – bit enable hoặc disable tất cả các interrupt

EA=0 thì không ngắt nào được nhận

EA=1 thì từng nguồn ngắt sẽ được mở hoặc cấm bằng cách bật hoặc xóa bit cho phép tương ứng

ES – bit enable hoặc disable ngắt cổng nối tiếp

ES=0 thì không cho phép ngắt nối tiếp

ES=1 cho phép ngắt nối tiếp

ET1 – bit enable hoặc disable ngắt tràn của của Timer1

Trang 31

ET1=0 Timer1 không ảnh hưởng đến ngắt

ET1=1 Timer1 kích hoạt ngắt

EXT1 – cho phép hoặc cấm ngắt ngoài của Timer1

EXT1=0 thì sự thay đổi trạng thái của cổng INT0 không ảnh hưởng đến việc ngắt

EXT1=1 enable ngắt ngoại ngay tại thời điểm INT0 thay đổi trạng thái

ET0 – bit enable hoặc disable ngắt tràn của Timer0

ET0=0 Timer0 không ảnh hưởng đến ngắt

ET0=1 Timer0 kích hoạt ngắt

EX0 – bit enable hoặc disable ngắt ngòai của Timer0

EX0=0 thì sự thay đổi trạng thái của INT1 không ảnh hưởng đến việc ngắt

EX0=1 enable ngắt ngoại ngay tại thời điểm INT1 thay đổi trạng thái

Việc chọn các ngắt loại tác động cạnh hay các ngắt loại tác động mức được lập trình thông qua các bit IT0 và IT1 của thanh ghi TCON Lấy ví dụ nếu IT1=0, ngắt ngoài 1 được kích khởi cạnh, ở chế độ này nếu các mẫu liên tiếp ở chân INT1 cho thấy chân này ở mức cao trong một chu kỳ và ở mức thấp trong chu kỳ kế, cờ ngắt IE1 trong thanh ghi TCON được set bằng 1; kế đến IE1 yêu cầu một ngắt

Vì các chân ngắt ngoài được lấy mẫu một lần ở mỗi một chu kỳ máy, các ngõ vào này phải được duy trì tối thiểu 12 chu kỳ dao động để bảo đảm việc lấy mẫu là đúng Nếu ngắt ngoài thuộc loại tác động cạnh, nguyên nhân ngắt ngoài phải được duy trì tại chân yêu cầu ở mức cao tối thiểu một chu kỳ và sau đó ở mức thấp tối thiệt một chu kỳ nữa để đảm bảo rằng sự chuyển trạng thái được phát hiện IE0 và IE1 tự động được xóa khi CPU trỏ tới trình phục vụ ngắt tương ứng

Trang 32

Nếu ngắt ngoài thuộc loại tác động mức, nguyên nhân ngắt ngoài phải được duy trì trạng thái tích cực cho đến khi ngắt theo yêu cầu thực sự được tạo ra Sau đó nguyên nhân ngắt phải ở trạng thái thụ động trước khi trình phục vụ ngắt được thực thi xong hoặc trước khi có một ngắt khác được tạo ra

Thông thường, một công việc được thực thi bên trong trình phục vụ ngắt làm cho nguyên nhân ngắt trả tín hiệu yêu cầu ngắt trở về trạng thái không tích cực

unsigned char giay = 0,gio=3,phut=45;

unsigned char date=29,month=9;

//unsigned char count=0;

Trang 33

void taotre(long time )

//chuong trinh kiem tra co bao ban cua LCD

void ready(void)

{

BF = 1; // de ban dau la 1

rs = 0; //chon thanh ghi lenh

rw = 1; //chon che do doc

// chuong trinh ghi lenh dieu khien

void control(unsigned char c) // c phai o dang hexa

Trang 34

{

ready();

databus = c;

rs = 0;//chon thanh ghi lenh

rw = 0;//chon che do ghi

e = 1;//dua chan chot tu 1 xuong 0 de day du lieu tren bus vao LCD

control(0x01);// xoa man hinh hien thi truoc do

control(0x38);//0x38:giao tiep 8 bit,hien thi 2 dong va che do 5x8 diem anh

//0x37:giao tiep 8 bit,hien thi 1 dong,kieu ky tu 5x10 diem anh control(0x0c);//0x0f: bat hien thi,nhap nhay con tro

//0x0c:tat con tro

control(0x06);//dich con tro sang phai 1 vi tri khi co thao tac doc/ghi du lieu tren

DDRAM,nhung

// khong dich toan bo noi dung hien thi.neu muon dich toan

bo thi nap vao 0x05

}

//chuong trinh ghi du lieu

void putchar(unsigned char c)

{

Trang 35

ready();

databus = c;

rs = 1;// chon thanh ghi du lieu

rw = 0; // chon che do ghi

e = 1;

e = 0;

}

// chuong trin in sau ki tu

void lcd_putsf(unsigned char *s)//,unsigned char row)

Trang 36

do_dai ;//tru do_dai di mot don vi,co den khi bang 0 di thoat khoi while }

}

//hien thi so nguyen

void integer(unsigned int d )

{

unsigned char nghin,tram,chuc,don_vi;

if(d>999)

{

don_vi = d%10; //duoc chuc so hang don vi

d = d/10; //duoc so da bo di hang don vi ->lam viec voi so d moi

//sau moi lan chia cho 10 va lay phan nguyen thi lai duoc 1 so moi mat di mot hang ben phai

chuc = d%10; //duoc chu so hang chuc

tram = d%10; // duoc chu so hang tram

putchar(48+nghin);//hien thi hang nghin putchar(48+tram); //hien thi hang tram putchar(48+chuc); //hien thi hang chuc putchar(48+don_vi); //hien thi hang don vi }

else if((d<1000)&&(d>99))

Ngày đăng: 18/02/2014, 02:30

HÌNH ẢNH LIÊN QUAN

Sơ đồ khối của AT89C51 - báo cáo thực tập môn vi xử lý
Sơ đồ kh ối của AT89C51 (Trang 2)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w