Thanh ghi trạng thái (Status Register – SREG)

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 30)

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

2.3.8 Thanh ghi trạng thái (Status Register – SREG)

Thanh ghi trạng thái trong AT90S8535 nằm trong vùng I/O cĩđịa chỉ$3F,được mơ tả nhưsau :

Bit 7 – I : Cho phép ngắt toàn cục (Global Interrupt Enable). Bit cho phép ngắt toàn cục phải được thiết lập bằng 1 để các ngắt được cho phép. Khi bit I được thiết lập bằng 1, từng ngắt riêng lẻ lại được điều khiển bởi các thanh ghi chức năng riêng. Khi bit I bị xĩa, tất cả các ngắt riêng lẻ sẽ bị cấm cho dù chúng cĩ được cho phép bởi các thanh ghi chức năng riêng. Bit I bị xĩa bằng phần cứng ngay sau khi cĩ một ngắt được vận hành (vào chương trình ngắt), và nĩ được thiết lập bằng 1trở lại khi gặp lệnh RETI để cho phép những ngắt tiếp theo.

Bit 6 – T : Bit truyền hay cờ truyền (Bit Copy Storage). Lệnh copy bit BLD (Bit LoaD) và BST (Bit Store) sử dụng bit T “nguồn” và “đích” của sự vận hành. Một bit từ một thanh ghi trong tệp thanh ghi cĩ thể được sao chép sang bit T bằng lệnh BST, và nội dung của bit T cĩ thể được sao chép sang một bit trong một thanh ghi của tệp thanh ghi bằng lệnh BLD.

Bit 5 – H : Cờ mang một nửa hay cờ nhớ một nửa(Half – carry Flag). Báo cho biết sự nhớ một nửa trong một vài lệnh số học.

Bit 4 – S : Bit dấu hay Cờ dấu(Sign Bit), S = N V.Bit dấu là kết quả của phép EX-OR giữa cờ phủ định N và cờ tràn bù hai V.

Bit 3 – V : Cờ tràn phép lấy bù 2 (Two’s Complement Overflow Flag). Cờ V hỗ trợ cho các phép tốn lấy bù 2.

Bit 2 – N : Cờ phủ định (Negative Flag) báo kết quả phủ định(âm) từ một sự vận hành logic hoặc số học.

Bit 1 – Z : Cờ Khơng hay cờ Zer (Zero Flag) Báo kết quả là zero từ một sự vận hành logic hoặc số học.

Bit 0 – C : Cờ nhớ (Carry Flag) Báo hiệu cĩ nhớ trong phép logic hoặc số học.

Chú ý : Thanh ghi trạng thái SREG sẽ khơng được lưu trữ tự động khi vào chương trình ngắt, cũng nhưkhơngđược trả lại ( hay “ phục hồi “) khi thốt khỏi chương trình ngắt. Cho nên người dùng phải xử lý điều này bằng phần mềm để đảm bảo chương trình chạy đúng.

2.3.9. Con trỏ ngăn xếp– SP (Stack Pointer)

Con trỏ ngăn xếp AVR 16-bitđược xây dựng gồm 2 thanh ghi 8-bit trong vùng khơng gian $3E($5E) và $3D($5D). AT90S8515 hỗ trợ đến 64Kb cho SRAM ngồi cho việc sử dụng hết 16 bits.

2.3.10. Sử dụng ngắt trong AT90S8515

AT90S8515 cung cấp 16 nguồn ngắt khác nhau. Mỗi ngắt cĩ một vectơchương trình riêng trong khơng gian bộ nhớ chương trình. Các ngắt được cho phép bởi từng bit cho phép ngắt riêng lẻ và được quản lý bit bit cho phép ngắt toàn cục. Để cho phép một ngắt nàođĩ thì bit cho phép ngắt riêng của nĩ phải được thiết lậplên 1 vàđồng thời bit cho phép ngắt toàn cục( bit I trong thanh ghi trạng thái) phải được thiết lập lên 1. Khi bit cho phép ngắt toàn cục I bị xĩa thì tất cả các ngắt sẽ bị cấm.

Những địa chỉ thấp nhất trong khơng gian bộ nhớ chương trình được định nghĩa (một cách tự động) nhưlà những vectơngắt và Reset. Bảng bên dưới sẽ liệt kêđịa chỉ của các vectơngắt và Reset. Ta cũng cĩ thể dựa vào bảng nàyđể xác định mức độ ưu tiên của các ngắt khác nhau. Địa chỉ thấp hơn thì mức độ ưu tiên sẽ cao hơn. Chẳng hạn theo bảng ta thấy, RESET cĩ mức ưu tiên cao nhất, kế đến là INT0, …

Bảng 2.3 Bảng địa chỉ các ngắt của vi điều khiển

Số tt Địa chỉ chương trình Nguồn Định nghĩa ngắt

1 $000 RESET Do Reset phần cứng, do nguồn, Watchdog

2 $001 INT0 Yêu cầu ngắt bên ngồi trên chân INT0 3 $002 INT1 Yêu cầu ngắt bên ngồi trên chân INT1 4 $003 TIMER1 CAPT Sự kiện bắt sống ở Timer/counter1 5 $004 TIMER1 COMPA So sánh Aở Timer/counter1 6 $005 TIMER1 COMPB So sánh Bở Timer/counter1 7 $006 TIMER1 OVF Tràn Timer/counter1

8 $007 TIMER0 OVF Tràn Timer/counter0

9 $008 SPI, STC Hồn thành truyền nối tiếp SPI 10 $009 UART, RX Nhận hoàn thành UART 11 $00A UART. UDRE Thanh ghi dữ liệu UART rỗng 12 $00B UART, TX Phát hồn thành UART

2.3.11. Reset

Các nguồn Reset

Viđiều khiển AT90S8515 cĩ ba nguồn Reset là:

Reset do nguồn (Power-on Reset) : MCU sẽ được Reset khi nguồn cung cấp thấp hơn ngưỡng Reset VPOT.

Reset bên ngồi (External Reset) : MCU sẽ bịReset khi cĩ mức “thấp” trên chân Reset trong khoảng thời gian lớn hơn 50ns.

Reset do Watchdog (Watchdog Reset) : MCU sẽ bịReset khi chu kỳ thời gian Watchdog kết thúc và Watchdogđược cho phép.

Trong suốt thời gian Reset, tất cả các thanh ghi I/O sẽ được đặt về giá trị mặc định của nĩ và chương trình bắt đầu thi hành từ địa chỉ $000. Lệnh đặt tại địa chỉ $000 phải là một lệnh nhảy RJMP đến chương trình xử lý Reset. Nếu chương trình khơng bao giờ sử dụng đến các nguồn ngắt, các địa chỉ vectơngắt khơng được sử dụng thì mã chương trình thơng thường cĩ thể được đặt ở các địa chỉ vectơngắt này.

2.3.12. Ngắt

AT90S8515 cĩ hai thanh ghi điều khiển che ngắt 8-bit – GIMSK (General Interrupt Mask register: Thanh ghi che ngắt chung) và TIMSK (Timer/counter Interrupt Mask register : thanh ghi che ngắt Timer/counter).

Khi một ngắt xảy ra (chương trình ngắt đang được thi hành) thì mặc định bit cho phép ngắt toàn cục I bị xĩa về 0 và tất cả các ngắt bị cấm. Tuy nhiên, người sử dụng cĩ thể dùng phần mềm để thiết lập lên 1, bit I để cho phép các ngắt lồng vào. Bit cho phép

ngắt toàn cục I sẽ được thiết lập trở lại bằng 1 khi MCU thốt khỏi chương trình ngắt (gặp lệnh RETI).

Khi bộ đếm chương trình được đặt đến địa chỉ vectơngắt thực sự để thi hành chương trình xử lý ngắt, phần cứng sẽ xĩa cờ tương ứng phát sinh ngắt này. Một vài cờ ngắt cũng cĩ thể được xĩa bằng cách viết mức logic “1” đến vị trí bit tương ứng của cờ. Nếu điều kiện ngắt xảy ra khi bit cho phép ngắt tương ứng bị xĩa bằng 0, thì cờ ngắt này sẽ được thiết lập lên 1 và nhớ cho đến khi ngắt này được cho phép hoặc là cờ bị xĩa bởi phần mềm.

Nếu một hoặc nhiềungắt xảy ra khi bit cho phép ngắt toàn cục bị xĩa, thì các cờ ngắt tươngứng sẽ được thiết lập lên 1 và nhớ cho đến khi bit cho phép ngắt toàn cục I được thiết lập lên 1 và các ngắt sẽ thi hành theo mức ưu tiên.

Chú ý : Thanh ghi trạng thái SREG sẽ khơng được lưu trữ tự động khi vào chương trình ngắt, cũng nhưkhơngđược trả lại ( hay “ phục hồi “) khi thốt khỏi chương trình ngắt. Cho nên người dùng phải xử lý điều này bằng phần mềm để đảm bảo chương trình chạy đúng.

2.3.13. Thanh ghi che ngắt chung – GIMSK (General Interrupt Mask Register)

Bit 7 – INT1 (External Interrupt Request 1 Enable) Cho phép ngắt ngoài trên chân INT1. Khi bit INT1được thiết lập lên 1 và I = 1 thì ngắt ngoài trên chân INT1được cho phép.Để quy định ngắt ngoài INT1 được kích hoạt bởi cạnh lên hay cạnh xuống hay kích hoạt mức ta sử dụng hai bit ISC10 và ISC11 trong thanh ghi MCUCR. Ngắt trên chân INT1 cĩ thể kích hoạt ngay cả khi chân nàyđược cấu hình là ngõ ra (output). Ngắt INT1 sẽ được thi hành tại địa chỉ bộ nhớ chương trình là $002.

Bit 6 – INT0 (External Interrupt Request 0 Enable) Cho phép ngắt ngoài trên chân INT0. Khi bit INT0được thiết lập lên 1 và I = 1 thì ngắt ngoài trên chân INT0 được cho phép.Để quy định ngắt ngoài INT0 được kích hoạt bởi cạnh lên hay cạnh xuống hay kích hoạt mức ta sử dụng hai bit ISC00 và ISC01 trong thanh ghi MCUCR. Ngắt trên chân INT0 cĩ thể kích hoạt ngay cả khi chân nàyđược cấu hình là ngõ ra (output). Ngắt INT0 sẽ được thi hành tại địa chỉ bộ nhớ chương trình là $001.

Bit 5 .. 0 (Reserved Bits) các bit này là bit dự trữ trong AT90S8515 và luơnđược đọc là 0.

2.3.14. Thanh ghi cờ ngắt chung – GIFR (General Interrupt Flag Register)

Bit 7 – INTF1 (External Interrupt Flag1) Cờ ngắt ngoài trên INT1. Khi sự thay đổi của cạnh xung hoặc mức logic trên chân INT1 cĩ động kích (trigger) một ngắt, thì cờ INTF1 sẽ được thiết lậplên 1. Cờ này luơn luơn được xố về 0 khi chân nàyđược cấu hình cho các ngắt ở mức thấp. Trạng thái của một ngắt mức thấp cĩ thể được xác định bằng việc đọc giá trị thanh ghi PIN.

Nếu bit I trong thanh ghi trạng thái SREG bằng 1 và bit INT1 trong thanh ghi GIMSK bằng 1, khi cĩ tác động ngắt thì MCU sẽ nhảy đến địa chỉ ngắt $002. Đối với các ngắt do sự thay đổi mức logic và cạnh, cờ ngắt sẽ được xĩa khi chương trình ngắt được thi hành.Đồng thời, cờ này cũng cĩ thể được xĩa bằng cách viết mức logic “1” lên nĩ. Bit 6 – INTF0 (External Interrupt Flag 0) Cờ ngắt ngoài trên INT0. Khi sự thay đổi của cạnh xung hoặc mức logic trên chân INT0 cĩ tácđộng kích (trigger) một ngắt, thì cờ INTF0 sẽ được thiết lập lên 1. Cờ này luơn luơn được xố về 0 khi chân nàyđược cấu hình cho các ngắt ở mức thấp. Trạng thái của một ngắt mức thấp cĩ thể được xác

định bằng việc đọc giá trị thanh ghi PIN.

Nếu bit I trong thanh ghi trạng thái SREG bằng 1 và bit INT0 trong thanh ghi GIMSK bằng 1, khi cĩ tác động ngắt thì MCU sẽ nhảy đến địa chỉ ngắt $001. Đối với các ngắt do sự thay đổi mức logic và cạnh, cờ ngắt sẽ được xĩa khi chương trình ngắt được thi hành.Đồng thời, cờ này cũng cĩ thể được xĩa bằng cách viết mức logic “1” lên nĩ. Bit 5 .. bit 0 (Reserved bits) các bit này là bit dự trữ trong AT90S8515 và luơn được

đọc là 0.

2.3.15. Thanh ghi che ngắt Timer/counter – TIMSK (Timer/counter Interrupt Mask Register)

Hình 2.12 Cấu trúc thanh ghi cờ ngắt chung - GIFR

2.3.16. Thanh ghi cờ ngắt Timer/counter – TIFR (Timer/counter interrupt FlagRegister) Register)

2.3.17. Thanh 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

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

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 30)

Tải bản đầy đủ (PDF)

(181 trang)