Hướng dẫn sử dụng vi điều khiển 8-Bit SG8V1 (Phần 1)

1. Giới thiệu

SG8V1 là một vi điều khiển RISC 8-bit đa dụng, sử dụng cho nhiều mục đích khác nhau. Tập

lệnh gồm 60 lệnh, độ rộng mỗi từ lệnh 16-bit. Bộ nhớ chương trình 64Kx16 và bộ nhớ dữ liệu

16KB. Có 91 thanh ghi có chức năng đặc biệt. SG8V1 được tích hợp rất nhiều ngoại vi như

Watchdog Timer, Timer/Counter, PWM, UART, I2C, SPI, SG8V1 có thể được sử dụng để làm

bộ phận điều khiển trung tâm của rất nhiều ứng dụng như máy giặt, máy điều hòa, robot, thiết bị

truyền thông, quang báo điện tử,

Đặc tính chung

 Tần số hoạt động: 1 MHz - 20 MHz

 Tập lệnh 60 lệnh, độ rộng từ lệnh 16-bit

 Có 19 nguồn ngắt

 Có 15 mức stack chương trình

 Bộ nhớ chương trình Flash bên trong chip, dung lượng 64K x 16

 Bộ nhớ dữ liệu bên trong chip, dung lượng 16K x 8

 Bộ nhân 8x8 bằng phần cứng, thực hiện đơn chu kỳ

 Có chế độ tiết kiệm năng lượng

 Có chế độ bảo mật bộ nhớ chương trình

 Trình biên dịch Assembly/C

 Có Watchdog Timer

 Điện áp hoạt động 3.3V

 Package cho chip LQ

pdf98 trang | Chia sẻ: phuongt97 | Ngày: 14/07/2021 | Lượt xem: 55 | Lượt tải: 0download
Bạn đang xem trước 20 trang nội dung tài liệu Hướng dẫn sử dụng vi điều khiển 8-Bit SG8V1 (Phần 1), để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ả PORTC[0]/RX1 0 I Dữ liệu vào /ngõ vào nối tiếp của UART1 1 O Dữ liệu ra PORTC[1]/TX1 0 I Dữ liệu vào 1 O Dữ liệu ra /ngõ ra nối tiếp của UART1 PORTC[2]/PWM1 0 I Dữ liệu vào 1 O Data output/PWM1 output PORTC[3]/PWM2 0 I Dữ liệu vào 1 O Data output/PWM2 output PORTC[4]/SCK 0 I Dữ liệu vào /clock vào nối tiếp của SPI trong chế độ slave 1 O Dữ liệu ra / clock ra nối tiếp của SPI trong chế độ master PORTC[5]/SDI 0 I Dữ liệu ra /dữ liệu vào nối tiếp của SPI 1 O Dữ liệu ra PORTC[6]/SDO 0 I Dữ liệu vào 1 O Dữ liệu ra /dữ liệu ra nối tiếp của SPI PORTC[7]/SSx 0 I Dữ liệu vào/chân SSx trong chế độ slave của SPI 1 O Dữ liệu ra Bảng 9-10: Thanh ghi DIRC Tên Bit R/W Mô tả DIRC [7:0] R/W Thanh ghi xác định chiều dữ liệu của PortC. Mỗi bit trong thanh ghi DIRC tương ứng với một chân trong PortC. 0: DATAINC = PortC 1: PortC = DATAOUTC. Cổng truy xuất dữ liệu © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 66 Bảng9-11: Chức năng PORTC Tên Bit R/W Mô tả PORTC [7:0] R Khi CPU đọc tại địa chỉ PORTC, dữ liệu gửi về là từ thanh ghi DATAINC. Mỗi bit trong hanh ghi DATAINC tương ứng với một chân trong PortC. W Khi CPU ghi vào tại địa chỉ PORTC, dữ liệu được ghi vào thanh ghi DATAOUTC. Mỗi bit trong hanh ghi DATAOUTC tương ứng với một chân trong PortC khi DIRC = 1. Ngõ ra PortC[1] còn phụ thuộc vào bit U1ON trong thanh ghi U2STA (xem phần 17.2.1 Thanh ghi trạng thái của ngoại vi UART thứ x (UxSTA). Ngõ ra PortC[2] còn phụ thuộc vào bit PWM1ON trong thanh ghi PWM1CON (xem phần 14.5.1 PWMxCON) Ngõ ra PortC[3] còn phụ thuộc vào bit PWM2ON trong thanh ghi PWM2CON (xem phần 14.5.1 PWMxCON) Ngõ ra PortC[4], PortC[5] và PortC[7] ] còn phụ thuộc vào bit SPION trong thanh ghi SPICON (xem phần 15.2.1 Thanh ghi điều khiển SPI - SPICON) 9.4. GPIO PortD PortD là một port 8-bit hai chiều. người sử dụng có thể lập trình để chọn chiều vào/ ra của dữ liệu. Hầu hết các chân PortD được pull-up. Khi bit DIRD = 0 thì PortD là ngõ vào. Khi bit DIRD = 1 thì PortD là ngõ ra. PortD có 2 thanh ghi lưu dữ liệu: một thanh ghi lưu dữ liệu đưa ra PortD do CPU ghi vào (DATAOUTD), một thanh ghi nhận dữ liệu từ PortD vào (DATAIND). Bên cạnh chức năng GPIO, PortD còn được sử dụng cho các chức năng khác như ngắt ngoài, I2C, Capture/Compare, Timer1. Nếu sử dụng ngắt ngoài thì PortD[3:0] được cấu hình là ngõ vào. Nếu I2C được sử dụng thì PortD[5:4] được điều khiển bằng tín hiệu đặc biệt từ khối I2C. PortD[5:4] không được pull-up. Nếu Capture được sử dụng thì PortD[6] được cấu hình là ngõ vào. Nếu Compare được sử dụng thì PortD[6] được cấu hình là ngõ ra. Cổng truy xuất dữ liệu © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 67 Nếu Timer1 sử dụng clock ngoài cho bộ đếm thì PortD[7] được cấu hình là ngõ vào. PORTD /INT0 PORTD /INT1 PORTD /INT2 PORTD /INT3 Edge detect Set interrupt Flag INTEDGx x: number of interrupt source D Q Q D DIR latch /WE D Q /WE Data bus Write to port Write to DIR Input buffer Portout Portin Hình 9-11: IO PortD[0:3] - dùng chung với ngắt ngoài Q D PORTD /SCL DIR latch 0 10 I2CON 0 1Clock output PORTD /SDA SDA input D /WE D /WE Q Q Write to port Write to DIR Input buffer Portout Portin SCL input Q D DIR latch 0 10 I2CON 0 1Clock output D /WE D /WE Q Q Write to port Write to DIR Input buffer Portout Portin Data bus Data bus Hình 9-12: IO PortD[4:5] - dùng chung với I2C Cổng truy xuất dữ liệu © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 68 Q D PORTD/CC DIR latch 0 1 Output compare T1ON Input capture CCEN D Q D Q /WE Data bus Write to port Write to DIR Portin Portout Input buffer Hình 9-13: IO PortD[6] - dùng chung với Capture/Compare Q D PORTD /T1CLK DIR latch Timer1 external clock D Q /WE D Q /WE Data bus Write to port Write to DIR Input buffer Portin Portout Hình 9-14: IO PortD[7] - dùng chung với Timer1 Bảng9-12: Chức năng của PortD Tên chân Bit DIR I/O Mô tả PORTD[3:0]/EXINT[3:0] 0 I Dữ liệu vào/ngắt ngoài 1 O Dữ liệu ra PORTD[4]/SCL 0 I Dữ liệu vào/clock vào nối tiếp của I2C 1 O Dữ liệu ra/clock ra nối tiếp I2C PORTD[5]/SDA 0 I Dữ liệu vào/dữ liệu vào nối tiếp của I2C 1 O Dữ liệu ra/dữ liệu ra nối tiếp I2C PORTD[6]/CC 0 I Dữ liệu vào/ngõ vào của khối Compare 1 O Dữ liệu ra/ngõ ra của khối Capture PORTD[7]/T1CLK 0 I Dữ liệu vào/clock ngoài của Timer1 1 O Dữ liệu ra Cổng truy xuất dữ liệu © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 69 Bảng 9-13: Thanh ghi DIRD Tên Bit R/W Mô tả DIRD [7:0] R/W Thanh ghi xác định chiều dữ liệu của PortD. Mỗi bit trong thanh ghi DIRD tương ứng với một chân trong PortD. 0: DATAIND = PortD 1: PortD = DATAOUTD Bảng 9-14: Mô tả chức năng PORTD Tên Bit R/W Mô tả PORTD [7:0] R Khi CPU đọc tại địa chỉ PORTD, dữ liệu gửi về là từ thanh ghi DATAIND. Mỗi bit trong hanh ghi DATAIND tương ứng với một chân trong PortD. W Khi CPU ghi vào tại địa chỉ PORTD, dữ liệu được ghi vào thanh ghi DATAOUTD. Mỗi bit trong hanh ghi DATAOUTD tương ứng với một chân trong PortD khi DIRD = 1. Ngõ ra PortD[5:4] còn phụ thuộc vào bit I2CON trong thanh ghi I2CCON1 (xem phần 16.1.1 I2CCON1) Ngõ ra PortD[6] còn phụ thuộc vào bit T1ON và CCEN trong thanh ghi T1CON (xem phần 13.5.1 TxCON ). Bộ nhân 8-bit © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 70 10. Watchdog Timer Watchdog Timer là một bộ đếm tự do hoạt động với xung clock hệ thống. Trong trạng thái hoạt động bình thường, khi Watchdog Timer tràn (WDT timeout) sẽ tạo ra tín hiệu reset hệ thống. Khi chip ở trạng thái nghỉ (IDLE), WDT timeout sẽ đánh thức vi xử lý ra khỏi trạng thái nghỉ. Có thể xóa hay vô hiệu các bộ đếm của Watchdog Timer khi xóa bit WDTON. Giữa Timer 0 và Watchdog Timer có một bộ đếm 8-bit chia sẻ. Khi bộ đếm chia sẻ này dùng cho Timer 0 (bit PSS bằng 1) thì nó có nhiệm vụ như một bộ đếm chia tần trước (prescaler), khi được dùng cho Watchdog Timer thì nó hoạt động như một bộ đếm chia tần sau (postscaler). Không thể dùng bộ đếm này cho cả Timer 0 và Watchdog Timer, do đó khi sử dụng bộ đếm chia sẻ này cho Timer 0 thì Watchdog Timer sẽ không có bộ chia tần sau và ngược lại. WDT Counter :65536 Fosc WDTON 0 1 From Timer0 clock source Postscaler 1:2 to 1:256 PS2:PS0 1 0 PSS PSS Watchdog timeout (reset)/RST CLRWDT PSS (reset) Hình 10-1 : Mô tả khối Watchdog Timer Chú ý: 1. Khi xử lý lệnh CLRWDT (và bộ đếm chia sẻ được định nghĩa cho Watchdog Timer) thì bộ đếm chia sẻ sẽ bị xóa về 0. 2. Bộ đếm 16-bit WDT không hỗ trợ đọc/ghi, nó luôn đếm lên khi bit WDTON bằng 1. Bộ đếm này cũng bị xóa về 0 khi reset, WDTON bằng 0 hay khi thực thi lệnh CLRWDT. Bảng 10-1 : Mô tả thanh ghi WT0CON Tên bit R/W Mô tả WDTON [7] R/W Bit tắt/mở Watchdog Timer 0: Tắt/cấm Watchdog Timer 1: Mở/cho phép Watchdog Timer T0ON [6] R/W Xem mô tả 11.4.1 WT0CON (Timer 0) T0CKE [5] R/W Xem mô tả 11.4.1 WT0CON (Timer 0) T0CKS [4] R/W Xem mô tả 11.4.1 WT0CON (Timer 0) Bộ nhân 8-bit © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 71 PSS [3] R/W Bit gán bộ đếm chia sẻ 0: gán cho Timer 0 1: gán cho Watchdog Timer PS [2:0] R/W Bit chọn tỉ số chia cho Postscaler. 000: 1:2 001: 1:4 010: 1:8 011: 1:16 100: 1:32 101: 1:64 110: 1:128 111: 1:256 Chú ý: Bộ đếm chia sẻ 8-bit được gọi là prescaler khi sử dụng với Timer0 và postscaler khi sử dụng với Watchdog Timer. Xem phần mô tả 3.2 để biết thêm chi tiết về bit WDT0 trong thanh ghi CPUSTA. Timer0 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 72 11. Timer 0 Timer 0 là bộ đếm/định thời 8-bit. Các chức năng chính của Timer 0 như sau:  Thanh ghi bộ đếm/định thời 8-bit với bộ chia tần trước và sau.  Cho phép đọc trạng thái thanh ghi.  Phát ngắt khi tràn bộ đếm từ FFh qua 00h.  8-bit prescaler lập trình.  Cho phép chọn xung clock nội hay từ bên ngoài.  Chọn cạnh đồng bộ cho xung clock ngoài. 11.1. Mô tả Timer 0 Chế độ định thì được chọn khi xóa bit T0CKS. Trong chế độ định thì, Timer 0 chạy với xung clock hệ thống, thanh ghi T0REG sẽ đếm lên sau mỗi cạnh lên của xung clock (trong trường hợp không gán bộ đếm chia sẻ cho Timer 0) hay mỗi cạnh lên của ngõ ra bộ đếm chia sẻ (trong trường hợp dùng clock nguồn là clock thạch anh và bộ đếm chia sẻ gán cho Timer 0). Thanh ghi T0REG cho phép ghi giá trị khởi tạo của bộ định thì. Chế độ đếm sự kiện được chọn khi bit T0CKS bằng 1. Trong chế độ này, bộ đếm Timer 0 sẽ tăng một đơn vị tại mỗi cạnh (cạnh xuống hoặc cạnh lên) của xung clock ngoài hoặc cạnh lên của bộ chia tần trước nếu bộ chia này được gán cho Timer 0 (lúc này bộ chia tần trước cũng chạy theo cạnh lên hoặc cạnh xuống của xung clock ngoài). Bit T0CKE sẽ chọn cạnh lên hay cạnh xuống của xung clock ngoài làm xung đếm (T0CKE bằng 0 sẽ chọn cạnh lên và ngược lại). Chú ý: Khi sử dụng xung clock ngoài, PortB[4] phải được cấu hình là một ngõ vào. Bộ chia trước (prescaler) của Timer 0 là một bộ đếm 8-bit được chia sẻ giữa Timer 0 và Watchdog Timer (trong Watchdog Timer thanh ghi này được gọi là postscaler). Việc gán bộ đếm này cho Timer 0 hay Watchdog Timer phụ thuộc vào bit PSS, xóa bit PSS sẽ gán bộ đếm này cho Timer 0 và ngược lại gán cho Watchdog Timer khi PSS bằng 1. Bộ đếm chia sẻ không hỗ trợ đọc/ghi và tỉ số chia cho phép từ 1:2 đến 1:256. Timer0 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 73 Synchronize external clock and edge detect T0CKE Fosc 0 1 Programmable Prescaler T0CKS 3 PS[2:0] 1 0 PSS T0REG Set T0IF Portb[4]/T0CLK T0ON Hình 11-1: Mô tả sơ đồ khối Timer0 11.2. Ngắt Timer0 Ngắt Timer 0 phát khi thanh ghi đếm T0REG tràn từ FFh qua 00h. Tín hiệu phát ngắt sẽ được lưu trong cờ ngắt T0IF. Ngắt Timer 0 bị cấm khi bit mặt nạ ngắt T0IE bị xóa. Cờ ngắt T0IF phải xóa bằng phần mềm trong chương trình đáp ứng ngắt trước khi ngắt tiếp tục được cho phép. Chú ý: Khi ngắt Timer phát ngay khi có lệnh xóa bit cờ ngắt T0IF thì cờ ngắt sẽ không bị xóa. 11.3. Bộ chia tần trước Một bộ đếm 8-bit được chia sẻ giữa Timer 0 và Watchdog Timer. Khi bộ đếm này dùng cho Timer 0 (bit PSS bằng 1) thì nó có nhiệm vụ như một bộ đếm chia tần trước (prescaler), khi được dùng cho Watchdog Timer thì nó hoạt động như một bộ đếm chia tần sau (postscaler). Không thể dùng bộ đếm này cho cả Timer 0 và Watchdog Timer, do đó khi sử dụng bộ đếm này cho Timer 0 thì Watdog Timer sẽ không có bộ chia tần sau và ngược lại. Bit PSS quy định bộ đếm chia sẻ được gán cho Timer 0 hay cho Watchdog Timer, các bit PS[2:0] chọn tỉ số chia. Khi bộ đếm chia sẻ này được gán cho Timer 0, tất cả các lệnh ghi vào thanh ghi T0REG sẽ reset lại bộ đếm chia sẻ này. Khi gán bộ đếm chia sẻ này cho Watchdog Timer thì lệnh CLRWDT sẽ reset bộ đếm chia sẻ này, đồng thời cũng reset bộ đếm 16-bit của Watchdog Timer. Chú ý: Để tránh những reset không mong muốn từ Watchdog Timer khi chuyển bộ đếm chia sẻ từ Timer 0 qua Watchdog Timer và ngược lại, người sự dụng cần phải xóa thanh ghi đếm và bộ đếm chia sẻ trước khi chuyển: Khi chuyển bộ đếm chia sẻ từ Timer 0 qua Watchdog Timer: + Xóa thanh ghi T0REG về giá trị 0 + Chọn gán cho Watchdog Timer (PSS = 1), lập trình prescaler cho Watchdog Timer. Timer0 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 74 Khi chuyển bộ đếm chia sẻ từ Watchdog Timer qua Timer 0: + Xóa thanh ghi bộ đếm Watchdog Timer bằng lệnh CLRWDT + Chọn gán cho Timer 0 (PSS = 0), lập trình prescaler cho Timer 0. 11.4. Thanh ghi Timer 0 được điều khiển thông qua thanh ghi WT0CON, thanh ghi này đồng thời cũng chứa một số bit điều khiển của Watchdog Timer. 11.4.1. WT0CON Bảng 11-1: Mô tả thanh ghi WT0CON Tên bit R/W Mô tả WDTON [7] R/W Xem mô tả 10 Watchdog Timer T0ON [6] R/W Bit tắt/mở Timer0 0: tắt/cấm Timer0 1: mở/cho phép Timer0 T0CKE [5] R/W Bit chọn cạnh đếm của xung clock ngoài 0: đếm tại cạnh lên của cung clock ngoài 1: đếm tại cạnh xuống của cung clock ngoài T0CKS [4] R/W Bit chọn nguồn xung clock cho Timer 0 0: chọn xung clock nội 1: chọn xung clock ngoài PSS [3] R/W Bit gán bộ đếm prescaler/postscaler 0: gán cho Timer 0 1: gán cho Watchdog Timer PS [2:0] R/W Bit chọn tỉ số chia cho Postscaler. 000: 1:2 001: 1:4 010: 1:8 011: 1:16 100: 1:32 101: 1:64 110: 1:128 111: 1:256 Timer0 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 75 11.4.2. T0REG Bảng 11-2: Mô tả thanh ghi T0REG Tên bit R/W Mô tả T0REG [7:0] R/W Đây là thanh ghi bộ đếm chính của Timer 0. Khi Timer 0 bật, T0REG luôn đếm tại cạnh lên của xung clock hệ thống hoặc mỗi xung ngõ ra bộ chia tần trước. Ngắt sẽ phát sinh và cập nhật vào cờ ngắt T0IF khi thanh ghi này đếm tràn từ FFh về 00h. Chú ý: Xem phần 8.3, 8.4 và 8.5 để biết thêm chi tiết về các bit T0IE, T0IP và T0IF. Xem phần 9.2 để biết thêm chi tiết về thanh ghi chọn chiều của PortB. Timer1 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 76 12. Timer 1 Timer 1 là bộ đếm/định thời 16-bit. Các chức năng chính của Timer 1 như sau:  Thanh ghi bộ đếm/định thời 16-bit với bộ chia tần trước  Cặp thanh ghi bộ đếm 8-bit T1RH, T1RL cho phép đọc và ghi.  Hỗ trợ đọc ghi 16-bit.  Chọn lựa nguồn xung clock nội hay clock ngoài (đếm sự kiện).  Phát ngắt Timer và ngắt đo sự kiện (capture).  Hỗ trợ đo sự kiện và so sánh các sự kiện (compare). 12.1. Chức năng của Timer 1 12.1.1. Tổng quan chức năng định thời của Timer 1 Timer 1 là bộ đếm/định thời 16-bit (gồm hai thanh ghi cho phép đọc/ghi 8-bit T1RH và T1RL). Thanh ghi Timer 1 (T1RH:T1RL) đếm lên từ 0000h đến FFFFh và quay về 0000h. Ngắt Timer 1, khi được cho phép, sẽ phát tại thời điểm bộ đếm tràn và chứa sự kiện này trong cờ ngắt T1IF. Ngắt Timer sẽ bị cấm/được phép bằng cách sử dụng bit T1IE. Timer 1 chạy với hai chế độ:  Chế độ định thời  Chế độ đếm sự kiện Chế độ hoạt động của Timer 1 được quy định bằng bit chọn nguồn clock T1CKS. Trong chế độ định thời, bộ đếm Timer 1 sẽ tăng với mỗi cạnh lên của xung clock hệ thống. Trong chế độ đếm sự kiện, bộ đếm Timer 1 sẽ tăng tại cạnh lên của xung clock ngoài. Timer 1 có thể tắt/mở với bit cho phép T1ON. Timer 1 được hỗ trợ một bộ chia tần trước (prescaler) lập trình được. Timer1 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 77 Synchronize external clock and edge detect Portd[7]/T1CLK Fosc 0 1 T1CKS Prescaler 2 T1PRES1:T1PRES0 ST1RH T1RL T1ON Set T1IF Hình 12-1: Mô tả sơ đồ khối Timer 1 12.1.2. Các chế độ của Timer1 12.1.2.1. Chế độ định thời Chế độ định thời được chọn khi bit T1CKS bằng 0. Chế độ định thời hoạt động dựa trên clock hệ thống. Trước khi đưa vào bộ đếm, xung clock đếm có thể được chia theo tỉ lệ 1:1 đến 1:8 bằng cách sử dụng bit lập trình T1PRES[1:0]. Khi giá trị thanh ghi bộ đếm Timer 1 bằng FFFFh và quay về 0000h. Ngắt Timer 1, khi được cho phép, sẽ phát tại thời điểm bộ đếm tràn và lưu sự kiện này trong cờ ngắt T1IF. Ngắt Timer sẽ bị cấm/cho phép bằng cách sử dụng bit T1IE. Chú ý: Người sử dụng nên tắt Timer 1 (xóa bit T1ON) trước khi thay đổi cấu hình hoạt động của Timer 1. 12.1.2.2. Chế độ đếm sự kiện. Chế độ đếm sự kiện được chọn khi bit T1CKS bằng 1. Trong chế độ này, bộ đếm Timer 1 sẽ tăng lên tại mỗi cạnh lên của xung clock ngoài hay cạnh lên của xung clock ngoài sau khi đã chia xuống bằng bộ prescaler. Chú ý: Bộ chia tần trước bị reset khi có reset hệ thống, watchdog timeout và khi ghi vào thanh ghi T1RL (ghi vào thanh ghi T1RH không ảnh hưởng). Trong chế độ đếm sự kiện, portD[7] phải được cấu hình là một ngõ vào. Khi sử dung xung clock ngoài làm xung đếm thì tần số xung clock ngoài phải lớn hơn ít nhất hai lần tần số xung clock hệ thống. 12.1.2.3. Ngắt Timer1 Cặp thanh ghi bộ đếm Timer 1 (T1RH:T1RL) tăng dần từ 0000h (hoặc từ giá trị lập trình) tới FFFFh và tràn về 0000h. Tại thời điểm tràn này, ngắt Timer 1 sẽ xảy ra và cập nhật vào cờ ngắt T1IF. Nếu bit cho phép ngắt Timer 1 (T1IE) tích cực thì tín hiệu ngắt sẽ được gửi tới CPU. Chú ý: Khi ngắt Timer phát ngay khi có lệnh xóa bit cờ ngắt T1IF thì cờ ngắt sẽ không bị xóa. Timer1 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 78 12.1.3. Đọc và ghi 16-bit thanh ghi bộ đếm Timer1 Timer1 hỗ trợ đọc ghi 16-bit giá trị tại 1 thời điểm đối với thanh ghi bộ đếm (T1RH:T1RL). Khi lệnh đọc thanh ghi T1RL xảy ra, giá trị của T1RH đồng thời cập nhật vào một bộ đệm 8-bit ngay lập tức. Do đó T1RH sau đó luôn nhận được giá trị bộ đếm cao tại ngay thời điểm đọc T1RL (khi đọc T1RH sẽ đọc giá trị thanh ghi bộ đệm phụ). Ngược lại, quá trình ghi vào T1RH sẽ ghi giá trị muốn ghi vào bộ đệm, sau đó lệnh ghi vào T1RL đồng thời cũng cập nhật giá trị bộ đệm đã ghi trước đó vào thanh ghi bộ đếm cao. Người sử dụng cần phải tuân theo các bước được mô tả trong phần ghi chú dưới đây để nhận được giá trị bộ đếm đúng. Nếu không theo thứ tự mô tả, giá trị của T1RH sẽ cập nhật hoặc lấy sai. Chú ý: 1. Nếu người sử dụng muốn ghi 16-bit giá trị vào T1RH:T1RL thì phải tuân theo các bước sau: 1. Ghi 8-bit vào T1RH trước 2. Sau đó tiếp tục ghi 8-bit vào T1RL 2. Nếu người sử dụng muốn đọc 16-bit giá trị của T1RH:T1RL thì phải tuân theo các bước sau: 1. Đọc 8-bit giá trị từ T1RL trước 2. Sau đó đọc 8-bit giá trị từ T1RH 3. Do việc ghi vào T1RH không tác động trực tiếp vào thanh ghi bộ đếm (lúc này ghi vào bộ đệm), nên việc ghi vào T1RH không gây reset bộ prescaler. Chỉ có quá trình ghi vào T1RL mới gây reset prescaler. 12.2. Khối bắt và so sánh sự kiện Khi sử dụng khối bắt hoặc so sánh sự kiện, khối Timer 1 luôn chạy kèm theo hai chức năng này. Trong chế độ bắt sự kiện, cặp thanh ghi CCRH:CCRL sẽ cập nhật giá trị thanh ghi bộ đếm T1RH:T1RL khi có sự kiện xảy ra tại PortD[6], sự kiện đó là:  Mỗi cạnh xuống của ngõ vào.  Mỗi cạnh lên của ngõ vào.  Mỗi cạnh lên thứ 4 của ngõ vào.  Mỗi cạnh lên thứ 16 của ngõ vào. Trong chế độ so sánh sự kiện, giá trị của cặp thanh ghi CCRH:CCRL sẽ được so sánh với thanh ghi bộ đếm T1RH:T1RL. Khi hai cặp thanh ghi này bằng nhau thì ngõ ra tại PortD[6] sẽ xảy ra một trong các sự kiện sau: Timer1 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 79  Chuyển mức cao.  Chuyển mức thấp.  Không thay đổi.  Đổi trạng thái. Các sự kiện trên phụ thuộc vào 3 bit cấu hình chế độ CCMOD[2:0]. Cũng tại thời điểm này, cờ ngắt CCIF sẽ được cập nhật. Chú ý: 1. CCRH và CCRL là thanh ghi cho phép đọc/ghi. Ngoài ra trong chế độ bắt sự kiện, CCRH và CCRL cập nhật giá trị của T1RH và T1RL khi có sự kiện xảy ra. 2. Bộ bắt và so sánh sự kiện là một khối con trong Timer 1, chúng phải chạy kèm với timer 1 và được cho phép/cấm bằng bit CCEN. Bit T1ON có ưu tiên cao hơn bit CCEN, CCEN chỉ có tác dụng khi T1ON bằng 1, do đó người sử dụng cần mở Timer 1 trước (T1ON = 1) trước khi cho phép bộ bắt và so sánh sự kiện hoạt động (CCEN = 1). 3. Khi sử dụng chế độ so sánh sự kiện, sẽ rất nguy hiểm nếu bit CCEN được đặt lên trước bit T1ON vì lúc này, trạng thái cấu hình của ngõ ra không được xác định nên sẽ không thấy được sự kiện xảy ra trên PortD[6]. Người sử dụng phải bật Timer 1 trước trong chế độ này. 4. Trong chế độ bắt sự kiện, PortD[6] phải được cấu hình là một ngõ vào, ngược lại trong chế độ so sánh sự kiện thì PortD[6] phải được cấu hình là một ngõ ra. Khi PortD[6] được cấu hình thành ngõ ra, phép ghi xuống PortD[6] có thể gây ra sự kiện mà chế độ bắt sự kiện có thể nhầm lẫn. Sự nhầm lẫn này có thể gây ngắt không mong muốn nên người sử dụng cần phải xóa bit cho phép ngắt (CCIE = 0) để tránh ngắt sai và nên xóa bit CCIF trước khi sử dụng bất kỳ chế độ nào. 12.2.1. Chế độ bắt sự kiện Các sự kiện được chọn bằng bit CCMOD[2:0] (trong thanh ghi T1ON). Khi có sự kiện xảy ra, đồng thời cờ ngắt CCIF cũng đặt lên, cờ ngắt này chỉ xóa bằng phần mềm. Nếu một sự kiện khác xảy ra trước khi giá trị của CCRH:CCRL được đọc lên thì giá trị cũ sẽ bị mất. Khi sử dụng chế độ bắt sự kiện, một bộ chia trước được sử dụng và tỉ số chia phụ thuộc vào bit CCMOD[2:0]. Khi Timer 1 tắt hoặc không hoạt động trong chế độ bắt sự kiện hoặc bất kỳ reset nào xảy ra thì bộ chia này sẽ bị xóa về 0. Việc chuyển từ tỉ lệ chia này qua tỉ lệ khác có thể gây ngắt không mong muốn. Bên cạnh đó, do bộ chia không bị xóa khi bật chế độ này, do đó lần bắt sự kiện đầu tiên có thể được đếm từ một giá trị bộ đếm chia tần trước khác không. Khi người sử dụng muốn chuyển giá trị prescaler, người sử dụng cần phải tắt chế độ bắt sự kiện (CCEN = 0) trước khi chuyển đổi. Sau đó cho phép chế độ bắt sự kiện hoạt động trở lại (CCEN = 1). Timer1 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 80 Fall and rise edge detect prescaler CCMOD[2:0] CCEN (Capture Enable) CCRH CCRL T1RH T1RL Set CCIF PORTD[6]/CC Hình 12-2: Sơ đồ của khối bắt sự kiện Timer 1 có thể chạy ở chế độ định thời hay đếm sự kiện khi hoạt động với chế độ bắt sự kiện. 12.2.2. Chế độ so sánh sự kiện Khi sự kiện so sánh xảy ra, ngõ ra tại PortD[6] sẽ xảy ra một trong các sự kiện sau:  Chuyển mức cao.  Chuyển mức thấp.  Không thay đổi.  Đổi trạng thái. Người sử dụng phải cấu hình PortD[6] thành một ngõ ra trước khi sử dụng nó cho chế độ so sánh sự kiện. Khi hoạt động ở chế độ so sánh phát ngắt mềm (CCMOD[3:0] = 1110), không sử dụng chân PortD[6]. Chú ý: Khi tắt chế độ bắt/so sánh sự kiện (xóa bit CCEN) hoặc Timer 1 tắt (T1ON = 0) hoặc không trong chế độ so sánh sự kiện thì ngõ ra khối Timer 1 giữ mức thấp. Drive output DIRD[6] CCMOD[2:0] CCEN CCRH CCRL T1RH T1RL Comparator (match) Set CCIF PORTD[6]/CC Hình 12-3: Sơ đồ của khối so sánh sự kiện 12.3. Thanh ghi Timer 1 có 2 thanh ghi bộ đếm 8-bit: T1RH và T1RL tạo thành một bộ đếm 16-bit. Tất cả các chức năng của Timer 1 được điều khiển thông qua thanh ghi T1CON. Bên cạnh đó, Timer 1 còn có cặp thanh ghi CCRH và CCRL dùng cho chế độ bắt/so sánh sự kiện. Timer1 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 81 12.3.1. T1CON Bảng 12-1: Mô tả thanh ghi T1CON Tên bit R/W Mô tả T1ON [7] R/W Bit tắt/mở Timer 1 0: tắt/cấm Timer 1 1: mở/cho phép Timer 1 T1CKS [6] R/W Bit chọn nguồn xung clock cho Timer 1 0: chọn xung clock nội 1: chọn xung clock ngoài CCEN [5] R/W Bit cho phép chế độ bắt/so sánh sự kiện. 0: cấm chế độ bắt/so sánh sự kiện. 1: cho phép chế độ bắt/so sánh sự kiện CCMOD [4:2] R/W Bit chọn chế độ hoạt động (khi sử dụng bắt/so sánh sự kiện) 000: Chế độ Timer/Counter 16-bit kết hợp bắt sự kiện cạnh xuống. 001: Chế độ Timer/Counter 16-bit kết hợp bắt sự kiện cạnh lên. 010: Chế độ Timer/Counter 16-bit kết hợp bắt sự kiện cạnh lên thứ 4. 011: Chế độ Timer/Counter 16-bit kết hợp bắt sự kiện cạnh lên thứ 16. 100: Chế độ Timer/Counter 16-bit kết hợp so sánh sự kiện và chuyển mức cao ngõ ra. 101: Chế độ Timer/Counter 16-bit kết hợp so sánh sự kiện và chuyển mức thấp ngõ ra. 110: Chế độ Timer/Counter 16-bit kết hợp so sánh sự kiện và phát ngắt mềm. 111: Chế độ Timer/Counter 16-bit kết hợp so sánh sự kiện và chuyển trạng thái ngõ ra. T1PRES [1:0] Bit quy định tỉ lệ chia prescaler 00: tỉ lệ 1:1 01: tỉ lệ 1:2 10: tỉ lệ 1:4 11: tỉ lệ 1:8 Timer1 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 82 12.3.2. T1RH Bảng 12-2: Mô tả thanh ghi T1RH Tên bit R/W Mô tả T1RH [7:0] R/W Đây là thanh ghi lưu giá trị bộ đếm cao của Timer 1. Thanh ghi này là một bộ đệm 8-bit, giá trị của thanh ghi này sẽ cập nhật giá trị của bộ đếm cao khi người sử dụng đọc thanh ghi T1RL và sẽ lưu giá trị mà CPU muốn ghi vào bộ đếm cao. Xem thêm phần “Đọc và ghi 16-bit thanh ghi bộ đếm Timer 1” để biết thêm thông tin về thanh ghi này. 12.3.3. T1RL Bảng 12-3: Mô tả thanh ghi T1RL Tên bit R/W Mô tả T1RL [7:0] R/W Đây là 8-bit thanh ghi bộ đếm thấp của Timer 1. Thanh ghi này kết hợp với thanh ghi bộ đếm cao thành bộ đếm 16-bit. 12.3.4. CCRH Bảng 12-4: Mô tả thanh ghi CCRH Tên bit R/W Mô tả CCRH [7:0] R/W Đây là thanh ghi lưu giá trị cao của giá trị so sánh khi sử dụng trong chế độ so sánh sự kiện hoặc dùng để bắt giá trị (byte cao) trong chế độ bắt sự kiện. Thanh ghi nay chỉ nên ghi trong chế độ so sánh sự kiện và chỉ nên đọc trong chế độ bắt sự kiện. 12.3.5. CCRL Bảng 12-5: Mô tả thanh ghi CCRL Tên bit R/W Mô tả CCRL [7:0] R/W Đây là thanh ghi lưu giá trị thấp của giá trị so sánh khi sử dụng trong chế độ so sánh sự kiện hoặc dùng để bắt giá trị (byte thấp) trong chế độ bắt sự kiện. Thanh ghi nay chỉ nên ghi trong chế độ so sánh sự kiện và chỉ nên đọc trong chế độ bắt sự kiện. Chú ý: Xem phần 8.3, 8.4 và 8.5 để biết thêm chi tiết về các bit T1IE, T1IP và T1IF. Xem phần 8.6, 8.7 và 8.8 để biết thêm chi tiết về các bit CCIE, CCIP và CCIF Xem phần 9.4 để biết thêm chi tiết về các bit cấu hình chiều của PortD Timer1 © 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 83 13. Timer 2 và Timer 3 (Timer_x) 13.1. Tổng quan Timer_x Do Timer 2 và Timer 3 được thiết kế

Các file đính kèm theo tài liệu này:

  • pdfhuong_dan_su_dung_vi_dieu_khien_8_bit_sg8v1_phan_1.pdf