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

đồ án môn vi điều khiển đồng hồ số

29 974 0

Đ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 29
Dung lượng 269,5 KB

Nội dung

Khi ta ấn nút Stop thì đồng hồ sẽ ngưng hoạt động, nếu ta ấn Start nữa thì đồng hồ hoạt động lại nhưng bắt đầu từ 0000.. Sau khi đồng hồ đã được chạy và được dừng bởi ấn nút Stop mà ta ấ

Trang 1

Bài Tập Kết Thúc Học Phần

Đề tài: Đồng Hồ Số

Trang 2

I-MỤC TIÊU ĐỀ TÀI

- Nêu vấn đề:

Cùng với sự phát triển của khoa học và công nghệ, các thiết bị điện tử đã,đang và sẽ tiếp tục được ứng dụng ngày càng rộng rãi và mang lại hiệu quả tronghầu hết các lĩnh vực khoa học kỹ thuật cũng như trong đời sống xã hội

Việc gia công, xử lý các tín hiệu điện-điện tử hiện đại đều dựa trên cơ sởnguyên lý số Vì các thiết bị làm việc dựa trên cơ sở nguyên lý số có ưu điểm hơnhẳn so với các thiết bị làm việc dưạ trên cơ sở nguyên lý tương tự, đặc biệt làtrong kỹ thuật tính toán

Sự phát triển mạnh mẽ của công nghệ điện tử đã cho ra đời nhiều vi mạch số

cỡ lớn với giá thành rẻ và khả năng lập trình cao đã mang lại những thay đổi lớntrong ngành điện tử Mạch số ở những mức độ khác nhau đã đang thâm nhậptrong các lĩnh vực điện tử thông dụng và chuyên nghiệp một cách nhanh chóng.Tuy nhiên bên cạnh đó ngày nay những chíp vi xử lý cũng được ứng dụng rộngrãi trong nhiều lãnh vực, các họ 89XXX là một loại IC thích hợp cho các sinhviên mới bắt đầu tìm hiểu về vi xử lý Các IC họ 89XXX có thể được ứng dụngtrong khá nhiều mạch điện tử với khá nhiều chức năng Một trong những mạchthông dụng có sử dụng IC họ 89XXX đó là mạch đồng hồ

Đề tài về đồng hồ rất đa dạng với nhiều chức năng khác nhau tùy vào khảnăng lập trình và kiến thức về mạch số của người chế tạo

Mục tiêu của nhóm như sau :

-Phần cứng: thiết kế được mạch điện hoàn chỉnh có thể hiện được phút trên led 7 đoạn

-Phần mềm: Sử dụng hợp ngữ để lập trình cho đồng hồ hiển thị, ứng dụngngắt timer, ngắt ngoài Sau khi lập trình hoàn chỉnh thì thời gian chạy chính xácnhư mong muốn

Giới hạn của đề tài trong phạm vi hiển thị giờ, phút Không có hiển thịgiây và ngày, tháng, năm

GVHD: Nguyễn Khắc Nguyên 2

Trang 3

II-GIẢI QUYẾT VẤN ĐỀ

1 Phần cứng

- Sơ đồ khối của hệ thống:

- Hoạt động chung của hệ thống

Bộ điều khiển vật lý gồm có 2 nút ấn start và stop Khi ta ấn start thì khối CPU sẽ cho đồng hồ hoạt động và hiển thì ra led 7 đoạn Khi ta ấn nút Stop thì đồng hồ sẽ ngưng hoạt động, nếu ta ấn Start nữa thì đồng hồ hoạt động lại nhưng bắt đầu từ 0000

- Sơ đồ nguyên lý chi tiết

CPU KHỐI XỬ LÝ VÀ ĐIỀU KHIỂN TRUNG

TÂM

KHỐI HIỂN THỊ

BỘ ĐIỀU KHIỂN VẬT LÝ

(NÚT ẤN)

Trang 4

* Khối hiển thị

Gồm 4 Led 7 đoạn – Anode chung –(LED7SEG) gắn thành cặp hiển thị theodạng HH:MM (Giờ:Phút), ngăn giữa hai cặp

HH và MM là 2 Led đơn (SEC)

 Có nhiệm vụ hiển thị phút và giờ

 Kiểu hiển thị được dùng là kiểu quét Led với tần số cố định vàđều nhau nên độ sáng giữa các Led trước sau là như nhau Các chân điềukhiển nhận tín hiệu từ Vi điều khiển (4 chân ở Port0 – P0.3, P0.2, P0.1, P0.0ứng với HH MM) tác động ở mức cao Các chân a,b,…,g (ở đây không dùngđến dp nên sẽ không đề cập đến đoạn dp) nhận tín hiệu BCD từ Port1 của Viđiều khiển, tác động ở mức thấp

Khi mới khởi động bốn Led này hiển thị 4 số 0 Khi ấn Start

đồng hồ bắt đầu đếm 2 Led đầu hiển thị giờ, 2 Led sau hiển thị phút Khi ấn

Stop đồng hồ ngừng đếm, số giờ và phút được chốt lại và hiển thị trên 4 Led

theo thứ tự HH MM (giờ phút) Khi muốn đồng hồ đếm lại chỉ cần ấn Start,

số giờ phút sẽ trờ về 0 và bắt đầu đếm như cũ Nếu sau khi đã ấn Start mà lại

ấn Start nữa thì không có tác dụng  nhằm tránh trường hợp lỡ ấn trên hai lần vào nút Start làm đồng hồ bắt đầu không như mong muốn Sau khi đồng

hồ đã được chạy và được dừng bởi ấn nút Stop mà ta ấn Stop nữa thì cũng không có tác dụng, số trên đồng hồ chỉ được reset khi ấn nút Start.

 Hai Led đơn (SEC) sẽ có tần số sáng tắt theo Giây (tần số 1Hz).Ngoài chức năng cho biết số Giây, hai Led đơn này còn cho ta biết khi nào

đồng hồ đang đếm và khi nào đồng hồ ngừng đếm Cụ thể là khi ta ấn Start hai Led này sẽ chớp tắt với tần số như trên, khi ấn Stop đồng hồ ngừng đếm

và hai Led này cũng tắt không chớp nữa

GVHD: Nguyễn Khắc Nguyên 4

Trang 5

* Khối CPU – Khối xử lý và điều khiển trung tâm

 Để nhận, xuất, xử lý cũng như hiển thị ta cầnmột bộ điều khiển trung tâm (CPU)

 Nhận tín hiệu điều khiển từ bộ điềukhiển vật lý: vi điêu khiển nhận tínhiệu từ nút ấn ở hai chân P3.0 và P3.1

ở Port3 tương ứng với nút Start và nútStop Tín hiệu ở hai chân này lúckhông ấn nút là ở mức cao, khi ấn làmức thấp

 Xử lý tín hiệu: Sau khi nhận tín hiệu

từ nút ấn, vi điều khiển xem xét vàđưa ra các kết quả tùy thuộc vào nútđược ấn là nút nào mà sẽ cho đồng hồngừng chạy hay chạy, hay là reset

 Xuất tín hiệu: vi điều khiển được ta lập trình dùng bảng dữ liệu mãBCD cho Led 7 đoạn kiểu Cathod để điều khiển và hiển thị 4 Led 7đoạn ở trên Nguyên nhân dùng mã 7 đoạn kiểu Cathod là do bảng mãnày đã được lập sẵn, ta không cần tốn công lập lại bảng mã kiểu Anode

mà chỉ cần lấy đảo tín hiệu mã 7 đoạn kiểu Cathod thì sẽ được kết quả

là mã 7 đoạn kiểu Anode Bốn chân điều khiển tác động ở mức caođược điều khiển bởi Port0

 MSC51 là một giải pháp tốt và cũng nhằm phù hợp với yêu cầu của đề tài

Cụ thể AT89C52 – một loại vi điều khiển thuộc họ MSC51 của hãng Atmel

 AT89C52 về chức năng phần cứng cũng như phần mềm đều có thể đápứng được yêu cầu của đề tài

 Việc lập trình cũng như thực hiện lắp mạch nguyên lý khi ta dùngAT89C52 cũng không khác gì mấy so với các loại vi điều khiển kháccùng dòng MSC51

 Nguyên nhân dẫn đến sự lựa chọn này là ở sự đáp ứng tốt khả năng xuấtnhập của các Port (có 4 Port) và ở bộ nhớ lưu trữ ROM 8K byte vàRAM 256 byte Bên cạnh đó sự chênh lệch về giá thành của AT89C52với các loại vi điều khiển 8051 (như AT89C51) là không là bao Do đólựa chọn sử dụng AT89C52 là rất thiết thực

Trang 6

 Để điều khiển việc hoạt động của đồng hồ tadùng hai nút ấn thường hở 1 tần tiếp điểm Để

có thể nhận tín hiệu từ nút ấn này ta dùng 2điện trở 330  kéo dương giữa nút ấn và chân

vi điều khiển nối với nút ấn như sơ đồ nguyên

lý Phía còn lại của nút ta nối xuống MASS.Như vậy trạng thái bình thường – không ấn –thì tín hiệu vi điều khiển đọc được sẽ là mứccao, khi ấn nút thì tín hiệu sẽ là mức thấp

 Nút Start: Có nhiệm vụ sau khi được ấn sẽ phát tín hiệu cho vi điềukhiển biết để chạy đồng hồ Khi được ấn, thời gian lưu trữ về giờ, phút,giây… sẽ được reset về ban đầu

 Nút Stop: Có nhiệm vụ sau khi được ấn sẽ phát tín hiệu cho vi điềukhiển biết để ngừng đồng hồ, nếu như đồng hồ đang đếm Bên cạnh đónút Stop còn là nút để cho phép nút Start có tác dụng sau khi đã ấn Startrồi Cụ thể: Sau khi ấn Start thì nút Start sẽ bị vô hiệu hóa và mất tácdụng, chỉ khi ấn Stop thì nút Start mới trở lại như cũ và có tác dụng nhưban đầu

* Chú ý: Ngoài các khối được kể trên còn một số phần khối khác ta không nhắc

đến nhưng được lắp vào mạch đó là:

o Khối Reset cho vi điều khiển

o Khối tạo xung cho vi điều khiển

o Khối tạo nguồn 5V

GVHD: Nguyễn Khắc Nguyên 6

Trang 7

STOPCLOCK MAIN

Trang 8

Khởi động gồm:

o Khởi động con trỏ Stack

o Khởi động vùng đệm hiển thị Buff Gồm bốn byte đều được reset về 0

o Biến nhớ điều khiển việc chạy/ngừng đồng hồ IsStart được đưa về 0

o Khởi động các biến nhớ thời gian đếm HH, MM, SS, MSS lần lượt là: giờ,phút, giây và MSS=SS/100 (phần trăm giây) Tất cả được reset về 0

o Khởi động hai biến nhớ phục vụ tối ưu hóa ấn phím ckStart và ckStop.Được reset về 0

o Reset chân SecTic (P3.4) là chân chớp tắt hai led có nhiệm vụ thể hiện sựdao động của số giây

o Khởi động ColLed và VarCol lần lượt là Port0 - xuất tín hiệu điều khiển 4Led bảy đoạn - và biến nhớ tương ứng ColLed là ánh xạ của VarCol Việc

GVHD: Nguyễn Khắc Nguyên 8

BEGIN

Khởi Động

SP Buff isStart HH,MM,SS,MSS TMOD,IE T0,T1 TR0,TR1 VAR…

SCANBUTTON

MAIN

Trang 9

xoay Port0 để hiển thị Led 7 đoạn kiểu quét được thực hiện trên VarColsau đó mới xuất ra ColLed Nguyên nhân của việc này là nếu dùng xoaytrực tiếp ColLed thì sau khi hiển thị thì tín hiệu mức cao đưa ra Led bị kéoxuống mức thấp do sụt áp cũng như do Led 7 đoạn đã tiêu thụ dòng làmmất tín hiệu (chứng minh bằng thực nghiệm) Nếu ta tiếp tục xoay thìPort0 (ColLed) sẽ toàn là tín hiệu mức thấp, vì vậy không thể điều khiểnđược led sáng nữa.

o Cài đặt TMOD để sử dụng 2 Timer dùng cho ngắt Timer

o Cài đặt các khởi trị của 2 Timer

o Cài đặt IE, cho phép ngắt 2 Timer và 2 ngắt ngoài

o Bắt đầu khởi động 2 Timer

Trang 10

Code lập trình cho khởi động:

Mov TH1,#0D8H ;Tran sau 10000 CM

Mov IE,#8FH ;Cho phep ngat 2 ngat ngoai va 2 timer

SetB TR0 ;Bat Timer0

SetB TR1 ;Bat Timer1

Trang 11

Là vòng lặp chính của chương trình Trong vòng lặp này chỉ chứa một lệnh đó

là gọi chương trình con SCANBUTTON Là lệnh kiểm tra nút ấn,SCANBUTTON được quét liên tục và lặp đi lặp lại

Chương trình con SCANBUTTON:

Trang 12

Việc kiểm tra phím ấn sử dụng thêm hai biến ckStart và ckStop, chươngtrình con này hoạt động như sau:

Việc đầu tiên là kiểm tra biến ckStart để xem có phải là nút Start đã được

ấn rồi hay chưa Nếu nút Start chưa được ấn lần nào thì sẽ khởi động ngắtngoài INT0 để gọi chương trình phục vụ ngắt ngoài STARTCLOCK và Set bit

GVHD: Nguyễn Khắc Nguyên 12

ckStart=1? Yes

Start INT0, SetB ckStart

ckStop=1?

Stop=1?

Start INT1, SetB ckStop, Clr ckStart

Yes

Yes

SCANBUTTON

Trang 13

ckStart Nếu ckStart là 1, nghĩa là đồng hồ đang chạy thì sẽ không làm gì vànhảy đến kiểm tra nút Stop.

Sau khi kiểm tra nút Start, ta tiến hành kiểm tra nút Stop Đầu tiên biếnckStop được xét xem có bằng 1 hay không Ở đây hơi khác so với khi làmviệc với nút Start vì chức năng hai nút có phần khác nhau Nếu ckStop=1nghĩa là nút Stop vừa được ấn (trong thời gian rất ngắn ngay lúc trước đó) thì

sẽ không làm gì và nhảy ra khỏi chương trình con này Nếu nút Stop chưađược ấn, nghĩa là ckStop=0 thì sẽ kích hoạt ngắt ngoài INT1 hoạt động để gọichương trình con STOPCLOCK và Set bit ckStop, song song đó là khôi phụclại tác dụng của nút Start bằng cách Set bit ckStart trở lại Còn về nút Stop saukhi ấn cũng bị vô tác dụng do ckStop bị Set lên 1, để trả lại tác dụng cho nútStop thì trong chương trình con Clock ta đặt vài dòng lệnh để Set ckStop,dòng lệnh đó đặt ngay trong vùng kiểm tra số Giây của đồng hồ Nghĩa là nútStop sẽ có tác dụng trở lại sau 1 giây được ấn

Code chương trình con SCANLED

Trang 14

HAI NGẮT NGOÀI INT0, INT1 VÀ HAI CHƯƠNG TRÌNH PHỤC VỤ NGẮT NGOÀI STARTCLOCK VÀ STOPCLOCK:

SetB P3.2 CheckStop:

Jb CkStop,ScanButton_Exit

Jb Stop,ScanButton_Exit SetB CkStop

Clr SecTic

SetB P3.3 ScanButton_Exit:

Ret

Trang 15

Như ta đã đề cập ở trên, hai chương trình con phục vụ ngắt ngoàiSTARTCLOCK và STOPCLOCK được kích hoạt từ việc kiểm tra nút ấn Start

và Stop

Việc sử dụng 2 ngắt ngoài này có thể được lược bỏ vì ta có thể hoàn toànđặt các dòng lệnh của hai ngắt này trong chương trình con SCANBUTTON.Nhưng vì nhằm phục vụ cho việc học tập, nghiên cứu nên ta vẫn sử dụng 2 ngắtngoài này để kiểm chứng những gì ta đã học trong lý thuyết

STARTCLOCK: Đơn giản chỉ Set bit IsStart để kích hoạt đồng hồ chạy,reset các biến thời gian HH, MM, SS, MSS và vùng đệm hiển thị

STOPCLOCK: Clear bit IsStart để ngưng đồng hồ

IsStart=1;

Reset HH,MM,SS,MSS INT0

STARTCLOCK

IsStart=0;

INT1

STOPCLOCK

Trang 16

NGẮT TIMER0 VÀ CHƯƠNG TRÌNH PHỤC VỤ NGẮT ISR_SCANLED:

GVHD: Nguyễn Khắc Nguyên 16

SetB IsStart Mov Buff+0,#0 Mov Buff+1,#0 Mov Buff+2,#0 Mov Buff+3,#0 Mov HH,#0 Mov MM,#0 Mov SS,#0 Mov MSS,#0 Reti

StopClock:

Clr IsStart Reti

Trang 17

Để phục vụ cho việc hiển thị ra Led 7 đoạn theo kiểu quét, ta dùng ngắtTimer (Timer0) Khi thực hiện lệnh ngắt, chương trình con SCANLED được gọi

và hiển thị từng Led 7 đoạn 1 lần lượt trong 4 Led 7 đoạn trên Trước khi gọilệnh SCANLED thì việc cài đặt lại Timer0 là không thể thiếu Chu kỳ được tínhcho mỗi vòng quét Led này (Chu kỳ để ngắt Timer0 hoạt động) là 5000 chu kỳmáy (CM) Nghĩa là: Sau 5000x4=20000 CM = 0.02s thì Led 7 đoạn này sẽđược sáng trở lại Điều này tương đương với tần số sáng là f=1/T=1/0.02=50Hz,

đủ để mắt người có thể không phát hiện được có sự thay đổi giữa sáng và tắt

SCANLED T=5000 CM

Trang 18

Việc tại sao ta lại cộng thêm 10 vào TL0 và việc tại sao lại nói là trừ 10Chu ký máy… sẽ được nhắc ở phần ngắt Timer1.

CHƯƠNG TRÌNH CON SCANLED:

Chương trình con SCANLED được gọi nhờ lệnh trong chương trình phục vụngắt Timer0 IRS_SCANLED Nhiệm vụ chính của chương trình con ScanLed làhiển thị giá trị thời gian đếm của đồng hồ ra led 7 đoạn, cũng như việc chớp tắt 2led đơn SEC Lệnh được gọi sau mỗi 5000CM để hiển thị lần lượt mỗi khi gọi là

1 led 7 đoạn được cho sáng

Mov TH0,#0ECH ;Tran sau 5000 CM

Call ScanLed

Reti

Trang 19

Code chương trình con SCANLED:

Trang 20

Chương trình ngắt Timer1 là phần có thể nói là thiết yếu trong đề tài này, đểquyết định độ chính xác cho đồng hồ tùy thuộc phần lớn vào việc ta xử lý ngắtnày Ở đây ta dùng ngắt Timer1 và chương trình phục vụ ngắt ISR_CLOCK.Ngắt Timer1 hoạt động sau mỗi 10000CM Lý do ta con con số 10000CM là dođơn giản hóa việc tính toán, giúp cho việc tính toán được chính xác hơn Vì đềtài này cần có một đồng hồ có thời gian thực, nên chương trình con được gọitrong ngắt Timer1 là CLOCK cũng phải kết hợp nhuần nhuyễn với ngắt Timer1

để tính toán được con số chính xác nhất Trong chương trình con phục vụ ngắtTimer1 ISR_CLOCK chỉ đơn giản là việc cài đặt lại Timer1 và gọi chương trìnhcon CLOCK

Code chương trình con phục vụ ngắt Timer1 ISR_CLOCK:

Cũng như ở chương trình con phục vụ ngắt Timer0, ở chương trình conphục vụ ngắt Timer1, biến TL1 được cộng thêm 10 và ghi chú là trừ đi 10 chu

kỳ máy nảy vào lệnh ngắt Lý do là: để cho đồng hồ hoạt động 1 cách chính xácnhất, việc hiển thị một cách đều đặn nhất, thì các ngắt Timer phải được gọi mộtcách đều đặn nhất Bằng thực nghiệm mô phỏng với phần mềm KeilC, ta biếtđược, kể từ khi ngắt Timer (Timer0 và Timer1) được gọi ngắt (tràn) cho đến khiđược hoạt động trở lại thì ta cần thêm 10 CM nữa gồm các lệnh nhảy vào ngắt

và cài đặt lại khởi trị cho các Timer Vì vậy ta sẽ thêm 10 vào byte TL của cácTimer đồng nghĩa với giảm đi 10 CM cho các Timer

Cho nên qua đây ta có thể chứng minh được rằng, đồng hồ dùng code lậptrình như vậy sẽ chạy một cách chính xác và có thể nói nếu không có vấn đềkhác xảy ra thì sai số có thể là bằng 0 Tuy nhiên, nếu 2 Timer0 và Timer1 cùngtràn 1 lúc, 2 lệnh ngắt được gọi cùng lúc thì đó là điều không thể, điều này dẫntới sai số cho đồng hồ Để khắc phục điều này, ban đầu khi qua chương trìnhkhởi động, ta cho khởi động 2 Timer cách nhau 1 khoảng nhất định, cụ thể là:Timer0 tràn lần đầu tiên sau 2500CM, còn Timer1 tràn lần đầu tiên sauGVHD: Nguyễn Khắc Nguyên 20

ISR_Clock:

Clr TR1 Mov TL1,#0F0H+10 ;Tru di 10 Chu ky may di nhay vao lenh

ngat

Mov TH1,#0D8H ;Tran sau 10000 CM

Call Clock Reti

Trang 21

10000CM Ở đây Timer1 không thay đổi gì khi tràn sau 10000CM ở các lần tràntiếp Nhưng sau lần tràn đầu Timer0 được cài sẽ tràn sau 5000CM Việc này sẽlàm cho 2 Timer tràn ở những thời gian khác nhau, không có việc 2 Timer cùngtràn 1 lúc, đảm bảo cho tính chính xác của đồng hồ.

Trang 22

Để tính toán thời gian cho đồng hồ, ta sử dụng biến nhớ HH, MM, SS,MSS tương ứng với giờ, phút, giây, phần trăm giây

Trang 23

Như vậy mỗi lần gọi gọi lệnh CLOCK ta sẽ cộng thêm 1 vào MSS Nếusau khi cộng 1 vào MSS mà MSS bằng 100 thì ta sẽ cộng thêm 1 vào SS và gánMSS bằng 0

Lệnh này được lặp lại cho đến khi SS bằng 60 (60 giây) thì cộng thêm 1vào MM (phút) và gán SS bằng 0 Và làm tương tự đối với HH (Giờ)

Cuối cùng nếu HH bằng 99 thì ta sẽ ngừng đồng hồ bằng cách ClearIsStart

Code chương trình con CLOCK:

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

HÌNH ẢNH LIÊN QUAN

• Xuất tín hiệu: vi điều khiển được ta lập trình dùng bảng dữ liệu mã BCD cho Led 7 đoạn kiểu Cathod để điều khiển và hiển thị 4 Led 7 đoạn ở trên - đồ án môn vi điều khiển đồng hồ số
u ất tín hiệu: vi điều khiển được ta lập trình dùng bảng dữ liệu mã BCD cho Led 7 đoạn kiểu Cathod để điều khiển và hiển thị 4 Led 7 đoạn ở trên (Trang 5)
SƠ ĐỒ KHỐI: - đồ án môn vi điều khiển đồng hồ số
SƠ ĐỒ KHỐI: (Trang 7)

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w