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
98 trang |
Chia sẻ: phuongt97 | Lượt xem: 429 | Lượt tải: 0
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:
- huong_dan_su_dung_vi_dieu_khien_8_bit_sg8v1_phan_1.pdf