Thanh ghi điều khiển MCU MCUCR (MCU Control Register)

Một phần của tài liệu đề tài thiết bị thực tập lập trình vi điều khiển AVR (Trang 36)

IV. NGÀY HỒN THÀNH NHI ỆM VỤ:

2.3.17Thanh ghi điều khiển MCU MCUCR (MCU Control Register)

Bit 7 – Reserved bit : Bit này là một bit đặt trong AT90S8535 và luơnđược đọc là 0. Ta khơng quan tâmđến nĩ.

Bit 6 – SE (Sleep Enable) Cho phép ngủ. Bit SE phải được thiết lập (bằng1) để bắt buộc MCU vào chế độ ngủ khi lệnh SLEEP được thi hành.Để tránh trường hợp MCU vào chế độ ngủ mà khơng do mục đích của người lập trình, bit SE chỉ được thiết lập lên 1 trước khi thi hành lệnh ngủ SLEEP.

Bit 5, 4 – SM1/SM0 (Sleep Mode Select Bits 1 and 0) Các bit chọn chế độ ngủ. Việc thiết lập hai bit này cho phép MCU chọn 1 trong 3 chế độ ngủ nhưsau :

Bảng 2.4 Thiết lập chế độ SLEEP cho vi điều khiển.

SM1 SM0 Chế độ ngủ

0 0 Idle : nghỉ 0 1 Khơng sử dụng

1 0 Power – down : nguồn giảm 1 1 Power save : nguồn dự trữ

Bit 3, 2 – ISC11, ISC10 (Interrupt Sense Control 1 Bits 1 and 0) các bit điều khiển nhận ngắt INT1

Ngắt ngoài 1 được kích hoạt trên chân INT1 nếu bit I trong thanh ghi trạng thái được thiết lập lên 1 và bit che ngắt tương ứng (bit cho phép ngắt) trong thanh ghi GIMSK

Hình 2.14 Cấu trúc thanh ghi cờ ngắt Timer/Counter - TIFR

được thiết lập lên 1. Kích hoạt chân INT1 bởi các cạnh hoặc mức thấp là do sự thiết lập hai bit ISC11 và ISC10 quyết định.

Bảng 2.5 Thiết lập ngắt ngoài INT1 cho viđiều khiển.ISC11 ISC10 Miêu tả ISC11 ISC10 Miêu tả

0 0 Mức thấp trên chân INT1 phát một yêu cầu ngắt 0 1 Khơng sử dụng

1 0 Cạnh xuống trên chân INT1 phát một yêu cầu ngắt 1 1 Cạnh lên trên chân INT1 phát một yêu cầu ngắt.

Giá trị trên chân INT1 được lấy mẩu trước khi các cạnh được phát hiện. Nếu ngắt cạnh

được chọn, những xung kéo dài hơn 1 chu kỳ xung đồng hồ CPU sẽ phát sinh một ngắt. Những xung ngắn hơn thì khơng bảo đảm sẽ phát sinh một ngắt. Nếu ngắt mức thấp được chọn, mức thấp phải được giữ cho đến khi MCU hoàn thành lệnh đang làm và phát sinh một ngắt. Nếu được cho phép, một ngắt kích hoạt mức sẽ phát sinh một yêu cầu ngắt nữa miễn là chân nàyđược giữ ở mức thấp.

Bit 1,0 – ISC01, ISC00 (Interrupt sense control 0 bit 1 and bit 0) các bit điều khiển nhậnngắt INT0.

Ngắt ngoài 0 được kích hoạt trên chân INT0 nếu bit I trong thanh ghi trạng thái được thiết lập lên 1 và bit che ngắt tương ứng (bit cho phép ngắt) trong thanh ghi GIMSK

được thiết lập lên 1. Kích hoạt chân INT0 bởi các cạnh hoặc mức thấp là do sự thiết lập hai bit ISC01 và ISC00 quyết định.

Bảng 2.6 Thiết lập ngắt ngoài INT0 cho viđiều khiển.ISC01 ISC00 Miêu tả ISC01 ISC00 Miêu tả

0 0 Mức thấp trên chân INT0 phát một yêu cầu ngắt 0 1 Khơng sử dụng

1 0 Cạnh xuống trên chân INT0 phát một yêu cầu ngắt 1 1 Cạnh lên trên chân INT0 phát một yêu cầu ngắt.

Giá trị trên chân INT0 được lấy mẩu trước khi các cạnh được phát hiện. Nếu ngắt cạnh

được chọn, những xung kéo dài hơn 1 chu kỳ xung đồng hồ CPU sẽ phát sinh một ngắt. Những xung ngắn hơn thì khơng bảo đảm sẽ phát sinh một ngắt. Nếu ngắt mức thấp được chọn, mức thấp phải được giữ cho đến khi MCU hoàn thành lệnh đang làm và phát sinh một ngắt. Nếu được cho phép, một ngắt kích hoạt mức sẽ phát sinh một yêu cầu ngắt nữa miễn là chân nàyđược giữ ở mức thấp.

2.4. Cấu tạo và lý thuyết chung Timer/Counter

Vi điều khiển AT90S8535 cĩ tất cả ba timer/counter khác nhau gồm hai timer/counter 8 bit và một timer/counter 16 bit. Timer/counter2 cĩ thể được chọn nguồn clock khơng đồng bộ từ dao động bên ngồi. Daođộng nàyđược tối ưu hố

khi sử dụng thạch anh đồng hồ 32.768 Khz, khi đĩ Timer/counter2 được sử dụng nhưmột đồng hồ thời gian thực (RTC : real timer clock). Timer/counter 0 và 1 cĩ bộ chia tần số riêng, nĩ cĩ thể chia tần số gần nhưmột bộ chia tần số 10bit. Timer/counter 2 thì cĩ một bộ chia riêng của nĩ. Cả ba Timer/counter này cĩ thể

được sử dụng nhưmột bộ định thời (timer) với nền xung clock bên trong của hệ thống hoặc cĩ thể sử dụng nhưbộ đếm (counter) với nguồn xung kích (trigger) bên ngồi.

2.4.1. Bộ chia Timer/counter

Cấu tạo bộ chia Timer/counter 0 và 1:

2.4.2. Timer/counter 0 (adsbygoogle = window.adsbygoogle || []).push({});

Timer/counter0 là Timer/counter 8 bit, cĩ thể chọn nguồn xung clock từ CK, bộ chia tần số CK hoặc từ một chân bên ngồi. Ta cũng cĩ thể cho dừng Timer/counter0 như

bảng miêu tả chức năng của thanh ghiđiều khiển Timer/counter 0 – TCCR0. Cờ trạng thái tràn Timer/counter0 thì cĩ thể tìm thấy trong thanh ghi TIFR. Tín hiệu điều khiển Timer/counter0 ta cĩ thể thiết lập trong thanh ghi TCCR0. Để thiết lập ngắt trong Timer/counter0 ta cĩ thể thiết lập các bit trong thanh ghi TIMSK.

Khi Timer/counter 0 lấy nguồn clock từ bên ngồi, tín hiệu bên ngồi này sẽ được

đồng bộ với tần số của CPU. Để đảm bảo sự lấy mẫu chính xác tín hiệu bên ngồi, tần số xung clock tối đa bên ngồi là CK/2. Tín hiệu xung clock bên ngồiđược lấy mẫu ở cạnh lên của xung clock CPU.

Timer/counter 0 là Timer/counter đơn giản nhất trong ba Timer/counter bởi vì nĩ khơng cĩ chức năng nào khác ngồi việc định thời vàđếm xung.

Sơđồ khốí Timer/counter 0

a. Thanh ghiđiều khiển TIMER/COUNTER0 – TCCR0

Bit 7..3 :đây là những bit dự trữ trong AT90S8515 và nĩ luơnđược đọc là giá trị 0. Bit 2,1,0: là 3 bit lựa chọn xung cho C/T dựa vào bảngsau đây :

Bảng 2.7 Thiết lập thanh ghi điều khiển Timer/Counter0CS02 CS01 CS00 Description CS02 CS01 CS00 Description

0 0 0 Stop the timer/counter0 is stopped

0 0 1 CK

0 1 0 CK/8

0 1 1 CK/64

1 0 0 CK/256

1 0 1 CK/1024

1 1 0 External Pin T0, falling edge 1 1 1 External Pin T0, rising edge

Hình 2.17 Sơđồ Timer/Counter0

b. Thanh ghi TIMER/COUNTER0 – TCNT0

Đây là thanh ghi chứa giá trị của Timer/counter 0. Timer/counter 0 được xem nhưmột bộ đếm lên với sự truy cập đọc / viết. Nếu Timer/counter 0 được viết một giá trị nào

đĩ và nguồn clock được chọn (TCCR0 khác 0), Timer/counter 0 sẽ tiếp tục đếm lên cho đến khi nĩ đến giá trị maxval=$ff và nĩ sẽ bị tràn và giá trị Timer/counter 0 bị Reset về $00 ( khi đĩ cờ TOV0 sẽ được set ).

2.4.3. Timer/counter1 (Timer/counter 16 bits)

Cĩ lẽ đây là Timer/counter phức tạp và khĩ sử dụng nhất trong ba Timer/counter. Sơđồ nguyên lý Timer/counter 1:

imer/counter1 cĩ thể chọn nguồn clock từ CK, bộ chia tần số CK hoặc từ một chân bên ngồi. Khi đĩ ta cĩ thể dùng Timer/counter1 nhưmiêu tả chức năng trong thanh ghi

điều khiển Timer/counter1 (TCCR1A và TCCR1B). Các cờ trạng thái khác nhau (cờ tràn TOV1, cờ so sánh OCF1A, OCF1B và cờ bắt sống ngõ vào ICF1) cĩ thể tìm thấy trong thanh ghi TIFR. Tín hiệu điều khiển Timer/counter1 cĩ thể được thiết lập trong TCCR1A và TCCR1B. Để thiết lập các ngắt do Timer/counter1 ta thiết lập các bit trong thanh ghi TIMSK.

Khi Timer/counter1 sử dụng nguồn clock bên ngồi, để đảm bảo sự lấy mẫu chính xác tần số tối đa của nguồn clock bên ngồi là CK/2.

Timer/counter1 hổ trợ hai chức năng so sánh ngõ ra sử dụng thanh ghi OCR1A và OCR1B nhưnguồn dữ liệu để so sánh với nội dung chứa trong thanh ghi Timer/counter1: TCNT1 (gồm TCNT1H và TCNT1L). Trong những điều kiện đặc biệt ta khơng thể điều khiển sự tràn của timer, thì ngắt do so sánh ngõ ra cĩ thể được sử dụng. Thanh ghi so sánh ngõ ra OCRx cĩ thể được nạp với giá trị nằm trong khoảng [0..maxval] (maxval là giá trị tối đa của Timer/counter ) và timer sẽ kiểm tra giá trị này tại mỗi chu kỳ xung clock của timer. Khi timer tiến đến giá trị so sánh, cờ so sánh ngõ ra tương ứng (OCFx) trong thanh ghi TIFR sẽ được set. Timer cĩ thể được đặt cấu hìnhđể xố bộ đếm về 0 trong thời điểm này. Các chân ngõ ra OC1x cĩ thể được đặt cấu hình để xố về 0, thiết lập lên 1 hoặc thay đổi tự động sau mỗilần so sánh. Đặc tính này rất hữu ích để ta cĩ thể tạo ra sĩng vuơng cĩ tần số khác nhau. Nĩ cho phép chúng ta thực hiện chức năng của một DAC (digital to analog convertion). Chế độ PWM (điều chế độ rộng xung) là một chế độ đặc biệt thích hợp để ta tạo ra các dạng sĩng khác nhau. Timer/counter1 cĩ thể được sử dụng nhưmột bộ điều chế độ rộng xung 8, 9 hoặc 10 bit.

Timer/counter1 cịn cung cấp một chức năng đặc biệt khác đĩ là chức năng bắt sống ngõ vào. Trên vi điều khiển AVR cĩ một chân để kích (trigger) sự kiện bắt sống ngõ vào ICP (Input Capture Pin). Sự thay đổi mức tín hiệu trên chân này sẽ làm cho giá trị hiện hành trong timer được đọc và lưu trữ trong thanh ghi bắt sống ngõ vào ICR1(input capture register). Vào thời điểm này, cờ bắt sống ngõ vào ICF1 trong thanh ghi TIFR sẽ được thiết lập lên 1.Điều này cực kỳ hữu ích trong việc đo độ rộng của xung bên ngồi. Ngồi ra, bộ so sánh Analog cũng cĩ thể được thiết lập lên 1 để trigger sự kiện bắt sống ngõ vào.

Sơđồ nguyên lý chân ICP.

Đây là thanh ghi timer/counter hiện thời. Một giá trị đã nạp vào thanh ghi nàyđược sử dụng làm giá trị xuất phát (bắt đầu), và bộ định thời làm tăng giá trị này theo từng tín hiệu xung nhịp của nĩ nếu bộ timer/counter0 được cho phép qua thanh ghi TCCR0.

Sau khi bộ timer/counter0 bị tràn, được đặt lại về $00 và tiếp tục đếm tiếp theo từng tín hiệu xung nhịp timer/cuonter0. (adsbygoogle = window.adsbygoogle || []).push({});

a. Thanh ghi Ađiều khiển Timer/counter1

Bit 7,6: Các bit điều khiển COM1A1 và COM1A0 quy định bất kỳ tác động nào của chân lối ra kế tiếp theo một lần so sánh trong bộ timer/counter1. Bất kỳ tác động nào của chân lối ra đều ảnh hưởng đến chân OC1 (Output Compare pin 1). Đây là một chức năng lựa chọn đối với cổng I/O và bitđiều khiển hướng tươngứng cần phải được

đặt thành 1để điều khiển một chân lốira.

Bit 5,4 : COM1B1 và COM1B0 cĩ chức năng tương tự nhưbit 7,6. Ở đây vị mạch cĩ hai chức năng so sánh.

Bảng 2.8 Thiết lập thanh ghi A điều khiển Timer/Counter1COM1X1 COM1X1 Description COM1X1 COM1X1 Description

0 0 Timer/counter1 ngắt ra khỏi chân lối ra OC1X

0 1 Kim tra (toglle) lối ra OC1X 1 0 Xĩa lối ra OC1X thành 0 1 1 Đặt lối ra OC1X thành 1

Bit 3,2 : Là các bit dự trữ trong AT90S8515và luơnđược đọc giá trị 0.

Bit 1,0 : Các bit lựa chọn bộ điều chế độ rộng xung (Pulse Width Modulator). Các bit này lựa chọn thao tác PWM của bộ timer/counter1 được cho ở bảng sau:

PWM11 PWM10 Description

0 0 Thao tác PWM của timer/counter bị cấm 0 1 PWM 8 bit

1 0 PWM 9 bit 1 1 PWM 10 bit

b. Thanh ghi B điều khiển Timer/counter1

Hình 2.22 Cấu trúc thanh ghi A điều khiển Timer/Counter1

Bit 7 : Khi bit ICNC1 bit bị xĩa thành 0 chức năng input capture trigger noise canceler bị cấm. Mạch input capture được lật trạng thái ở sườn dương/ âm đầu tiên được lấy mẫu trên chân ICP (input capture pin) nhưđược chỉ định. Khi bit ICNC1 được đặt thành 1, 4 mẫu đãđuợc lấy trọn vẹn được đo trên chân ICP và tất cả các mẫu cần phải phù hợp về mức High/Low với thơng số kỹ thuật về input capture trigger quy định cho bit ICES. Tần số lấy mẫu hiện thời là tần số đồng hồ XTAL.

Bit 6 : Lựa chọn sườn input capture 1. Khi bit ICES1 được xĩa thành 0, nội dungcủa bộ timer/counter1 được truyền đến thanh ghi ICR1 (input capture register), trên sườn âm của chân ICP (input capture pin). Khi bit ICES1 được đặt thành 1 thì nội dung của bộ timer/counter1 được truyền đến thanh ghi ICR1 (input capture) trên sườn dương của chân ICP.

Bit 5,4 : Là các bit dự trữ trong AT90S8515 và luơnđược đọc giá trị là 0

Bit 3 : Xĩa timer/counter1 theo lần so sánh (clear timer/counter1 on compare match). Khi bit điều khiển CTC1 được đặt thành 1 bộ timer/counter1 được Reset về $0000 trong chu trìnhđồng hồ sau một lần so sánh. Nếu bit điều khiển CTC1 bị xĩa, thì bộ timer/counter1 tiếp tục đếm và khơng bị ảnh hưởng bởi kết quả sau lần so sánh. Bởi vì mỗi lần so sánh được phát hiện trong chu kỳ đồng hồ CPU kế tiếp theo lần trước, nên chức năng này sẽ thực hiện một cách khĩ khăn khi số chia tần số cao hơn 1 được sử dụng cho bộ định thời. Khi số chia tần số bằng 1 được sử dụng và thanh ghi so sánh A

đuợc đặt thành C thì bộ timer sẽ được thiết lập nhưsau : …|C-2|C-1| C | 0 | 1 |…

Khi mà bộ chia tần được đặt số chia thành 8, bộ định thời sẽ đếm giống nhưsauđây : …|C-2, C-2, C-2, C-2, C-2, C-2, C-2, C-2|C-1, C-1, C-1, C-1, C-1, C-1, C-1, C-1| C,0 ,0,0,0,0,0,0|…

Bit 2,1,0 : là các bit lựa chọn nguồn chia tần số của bộ timer/counter1 Bảng2.9 Thiết lập thanh ghi B điều khiển Timer/Counter1

CS12 CS11 CS10 Description

0 0 0 Stop the timer/counter1 is stopped

0 0 1 CK

0 1 0 CK/8

0 1 1 CK/64

1 0 0 CK/256

1 0 1 CK/1024

1 1 0 External Pin T1, falling edge 1 1 1 External Pin T1, rising edge

c. Thanh ghi Timer/counter1 TCNT1 (gồm TCNT1H và TCNT1L) (adsbygoogle = window.adsbygoogle || []).push({});

Thanh ghi 16 bit này chứa giá trị được đem chia tần số của bộ timer/counter 16 bit. Để

đảm bảo rằng cả hai byte High và Low được đọc và ghi đồng thời khi khối CPU try nhập các thanh ghi này, việc truy nhập được thực hiện bằng cách sử dụng một thanh ghi tạm thời 8 bit (TEMP). Thanh ghi tạm thời này cũng được sử dụng khi truy nhập OCR1A và ICR1. Nếu chương trình chính và cả đoạn chương trình ngắt cũng thực hiện việc truy nhập đến các thanh ghi bằng cách sử dụng TEMP, thì các ngắt cần phải bị cấm (disable) trong khoảng thời gian truy nhập từ chương trình chính hoặc các ngắt truy nhập nếu các ngắt đượccho phép lại

TCNT1 Timer/Counter1 write : khi CPU ghi vào byte cao (High) TCNT1H, dữ liệu đã ghi được đặt vào trong thanh ghi TEMP. Tiếp theo khi khối CPU ghi byte thấp TCNT1L, byte dữ liệu nàyđược kết hợp với byte dữ liệu trong thanh ghi TEMP, và tồn bộ 16 bit được ghi đồng thời vào thanh ghi TCNT1 Timer/Counter1. Do đĩ byte High TCNT1H cần phải được truy cập trước tiên đối với thao tác ghi trọn vẹn thanh thi 16 bit.

TCNT1 Timer/Counter1 read : khi khối CPU đọc byte thấp TCNT1L, dữ liệu của byte thấp TCNT1L được gửi tới CPU và dữ liệu của byte cao TCNT1H bị thay thế trong thanh ghi TEMP. Khi khối CPUđọc dữ liệu trong byte High TCNT1H thì CPU nhận dữ liệu trong thanh ghi TEMP. Do đĩ byte thấp TCNT1L cần phải được truy nhập trước tiên đối với thao tác đọc trọn vẹn thanh ghi 16 bit. Bộ timer/counter1 được thiết kế để hoạt động nhưmột bộ đếm tiến hoặc tiến/lùi (trong chế độ PWM) với thao tác truy nhập đọc và ghi. Nếu bộ timer/counter1 được ghi vào và một nguồn xung nhịp

được lựa chọn thì bộ timer/counter1 tiếp tục đếm trong chu trìnhđồng hồ định thời sau khi nĩđược đặt trước (Reset) bằng giá trị đãđược ghi.

d. Thanh ghi so sánh-A ngõ ra của Timer/counter1 OCR1A (gồm OCR1AH và OCR1AL)

Thanh ghi so sánh lỗi ra (output compare register) là một thanh ghi đọc/ghi 16 bit. Thanh ghi OCR bộ timer/counter1 chứa dữ liệu cần được so sánh liên tục với bộ timer/counter1. Diễn biến của những lần so sánh (actions on compare matches) được chỉ định trên thanh ghi điều khiển và trạng thái timer/counter1.

Bởi vì thanh ghi so sánh lối ra OCR1A là một thanh ghi 16 bit nên một thanh ghi tạm thời TEMP được sử dụng khi ghi vào OCR1A để bảo đảm rằng cà hai byte được cập nhật đồng thời. Khi CPU ghi byte cao OCR1AH dữ liệu được lưu trữ tạm thời trong thanh ghi. Khi khối CPU ghi byte thấp OCR1AH thanh ghi TEMPđược ghi đồng thời vào OCR1AH. Do đĩ byte cao OCR1AH cần phải được ghi trước tiên đối với một thao tác ghi trọn vẹn thanh ghi 16 bit. Thanh ghi TEMP cũng được sử dụng khi truy nhập TCNT1 và ICR1. Nếu chương trình chính và đoạn chương trình ngắt (routine) cũng thực hiện thao tác truy nhập lên các thanh ghi bằng cách sử dụng TEMP, các ngắt cần phải bị cấm trong thời gian xảy ra quá trình truy nhập từ chương trình chính hoặc các ngắt truy nhập nếu các ngắt được cho phép lại.

Một phần của tài liệu đề tài thiết bị thực tập lập trình vi điều khiển AVR (Trang 36)