217
© 2014 ICDREC SG8V1 Hướng dẫn sử dụng 1 Trang chủ: www.icdrec.edu.vn E-mail: [email protected] Điện thoại: (84-8).37242171 - (84-8).37242172 Email kinh doanh: [email protected] Email hỗ trợ: [email protected] HƯỚNG DN SDNG VI ĐIỀU KHIN 8-bit SG8V1

SG8V1 Huong Dan Su Dung

Embed Size (px)

Citation preview

Page 1: SG8V1 Huong Dan Su Dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 1

Trang chủ: www.icdrec.edu.vn E-mail: [email protected]

Điện thoại: (84-8).37242171 - (84-8).37242172 Email kinh doanh: [email protected]

Email hỗ trợ: [email protected]

HƯỚNG DẪN SỬ DỤNG

VI ĐIỀU KHIỂN 8-bit

SG8V1

Page 2: SG8V1 Huong Dan Su Dung

Thông tin cập nhật

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 2

Ngày cập nhật Thông tin cập nhật Phiên bản

13/10/2014 Mô tả lại bit trạng thái ngắt

UxRCIF của thanh ghi IF2,

thuộc ngoại vi UART

Bổ sung đặc tính điện, thông

tin package, kết nối các chân

đặc biệt

Rev 1.0

29/10/2014 Chỉnh sửa lại mô tả tập lệnh Rev 1.1

10/12/2014 Bổ sung công suất tiêu thụ Rev 1.2

12/12/2014 Sửa phần mô tả lệnh SUBI Rev 1.3

Page 3: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 3

Nội dung

Nội dung........................................................................................................................................... 3 Mục lục hình .................................................................................................................................... 7 Mục lục bảng.................................................................................................................................. 10 Danh Mục Thuật Ngữ và Từ Viết Tắt............................................................................................ 11

1. Giới thiệu ................................................................................................................................... 14 1.1. Sơ đồ chân ........................................................................................................................... 16 1.2. Sơ đồ khối ........................................................................................................................... 18

2. Kiến trúc pipeline ....................................................................................................................... 19 2.1. Các bước thực hiện lệnh ..................................................................................................... 19

2.2. Kiến trúc pipeline 3 tầng ..................................................................................................... 19 2.3. Cách tính số chu kỳ thực hiện lệnh ..................................................................................... 20

3. Chế độ tiết kiệm năng lượng (IDLE Mode) ............................................................................... 23

3.1. Mô tả ................................................................................................................................... 23 3.2. Thanh ghi báo trạng thái CPU - CPUSTA ......................................................................... 25 3.3. Bộ đếm chương trình (PC) .................................................................................................. 25 3.4. Stack .................................................................................................................................... 25

3.4.1. Truy xuất giá trị mới nhất của Stack (TS: Top of Stack) ............................................. 26 3.4.2. Stack Pointer (SP) ........................................................................................................ 26

4. Reset của SG8V1 ....................................................................................................................... 29 4.1. Tổng quan về Reset ............................................................................................................. 29

4.2. Reset bởi người sử dụng (chân RST ) .............................................................................. 29

4.3. Reset khi chọn lập trình Flash (chân SPCS) ....................................................................... 29 4.4. Reset bởi stack .................................................................................................................... 30

4.5. Reset bởi Watchdog ............................................................................................................ 30 5. Kết nối các chân tín hiệu đặc biệt .............................................................................................. 31

5.1. Tụ nguồn, Cap, SPCS ......................................................................................................... 31 5.2. Mạch kết nối thạch anh ....................................................................................................... 32 5.3. Reset .................................................................................................................................... 33

6. Tổ chức bộ nhớ chương trình ..................................................................................................... 35 6.1. Bộ đếm chương trình .......................................................................................................... 35 6.2. Stack .................................................................................................................................... 36

6.2.1. Truy xuất giá trị mới nhất của Stack (TS: Top of Stack) ............................................. 36

6.2.2. Stack Pointer (SP) ........................................................................................................ 37

7. Tổ chức bộ nhớ dữ liệu .............................................................................................................. 38 7.1. Bộ nhớ Flash Data Memory ................................................................................................ 38

7.2. Bộ nhớ RAM ....................................................................................................................... 38 7.2.1. Thanh ghi chọn băng .................................................................................................... 39 7.2.2. Truy cập nhanh bộ nhớ dữ liệu .................................................................................... 40

7.2.3. Thanh ghi mục đích chung ........................................................................................... 40 7.2.4. Thanh ghi chức năng đặc biệt ...................................................................................... 40

7.2.5. Các chế độ định địa chỉ bộ nhớ .................................................................................... 46 8. Bộ nhân 8-bit.............................................................................................................................. 48 9. Ngắt ............................................................................................................................................ 49

9.1. Thanh ghi quản lý ngắt toàn cục (GIC) .............................................................................. 50

9.2. Thanh ghi điều khiển ngắt theo cạnh (INTEDG)................................................................ 52

9.3. Thanh ghi cho phép ngắt 1 (IE1) ........................................................................................ 52

Page 4: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 4

9.4. Thanh ghi độ ưu tiên ngắt 1 (IP1) ....................................................................................... 53 9.5. Thanh ghi lưu cờ ngắt 1 (IF1) ............................................................................................. 54 9.6. Thanh ghi cho phép ngắt 2 (IE2) ........................................................................................ 56 9.7. Thanh ghi độ ưu tiên ngắt 2 (IP2) ....................................................................................... 57

9.8. Thanh ghi lưu cờ ngắt 2 (IF2) ............................................................................................. 58 9.9. Thanh ghi cho phép ngắt 3 (IE3) ........................................................................................ 60 9.10. Thanh ghi độ ưu tiên ngắt 3 (IP3) ..................................................................................... 61 9.11. Thanh ghi lưu cờ ngắt 3 (IF3) ........................................................................................... 61

10. Cổng truy xuất dữ liệu (General Purpose Input/Output - GPIO) ............................................. 63

10.1. GPIO PortA ....................................................................................................................... 65 10.2. GPIO PortB ....................................................................................................................... 66 10.3. GPIO PortC ....................................................................................................................... 70

10.4. GPIO PortD ....................................................................................................................... 73 11. Watchdog Timer ...................................................................................................................... 77 12. Timer 0 ..................................................................................................................................... 79

12.1. Mô tả Timer 0 ................................................................................................................... 79 12.2. Ngắt Timer0 ...................................................................................................................... 80

12.3. Bộ chia tần trước ............................................................................................................... 80 12.4. Thanh ghi .......................................................................................................................... 81

12.4.1. WT0CON ................................................................................................................... 81

12.4.2. T0REG ....................................................................................................................... 82 13. Timer 1 ..................................................................................................................................... 83

13.1. Chức năng của Timer 1 ..................................................................................................... 83

13.1.1. Tổng quan chức năng định thời của Timer 1 ............................................................. 83

13.1.2. Các chế độ của Timer1 .............................................................................................. 84 13.1.3. Đọc và ghi 16-bit thanh ghi bộ đếm Timer1 .............................................................. 85

13.2. Khối bắt và so sánh sự kiện .............................................................................................. 85

13.2.1. Chế độ bắt sự kiện ...................................................................................................... 86 13.2.2. Chế độ so sánh sự kiện ............................................................................................... 87

13.3. Thanh ghi .......................................................................................................................... 87 13.3.1. T1CON ....................................................................................................................... 88 13.3.2. T1RH.......................................................................................................................... 89 13.3.3. T1RL .......................................................................................................................... 89

13.3.4. CCRH ......................................................................................................................... 89 13.3.5. CCRL ......................................................................................................................... 89

14. Timer 2 và Timer 3 (Timer_x) ................................................................................................. 90

14.1. Tổng quan Timer_x........................................................................................................... 90

14.2. Hoạt động của Timer_x .................................................................................................... 90 14.3. Ngắt Timer_x .................................................................................................................... 91 14.4. Đọc/ghi 10-bit trong Timer_x. .......................................................................................... 91

14.5. Thanh ghi .......................................................................................................................... 92 14.5.1. TxCON ....................................................................................................................... 92 14.5.2. TxRH.......................................................................................................................... 92 14.5.3. TxRL .......................................................................................................................... 93 14.5.4. TxPRH ....................................................................................................................... 93

14.5.5. TxPRL ........................................................................................................................ 93 15. Bộ tạo xung PWM (The Pulse Width Modulation) ................................................................. 94

15.1. Tổng quan PWM_x ........................................................................................................... 94

15.2. Chu kỳ xung PWM_x ....................................................................................................... 94 15.3. Chu kỳ nhiệm vụ ............................................................................................................... 95

Page 5: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 5

15.4. Cấu hình hoạt động cho khối PWM_x .............................................................................. 96 15.5. Thanh ghi .......................................................................................................................... 97

15.5.1. PWMxCON................................................................................................................ 97 15.5.2. PWMxRL ................................................................................................................... 97

16. Serial Peripheral Interface (SPI) .............................................................................................. 98 16.1. Giới thiệu SPI.................................................................................................................... 98 16.2. Các thanh ghi của SPI ....................................................................................................... 99

16.2.1. Thanh ghi điều khiển SPI - SPICON ......................................................................... 99 16.2.2. Thanh ghi trạng thái - SPISTA ................................................................................ 100

16.3. Hoạt động của SPI .......................................................................................................... 101 16.4. Các bước cấu hình SPI .................................................................................................... 103

16.4.1. Cấu hình SPI ở chế độ master .................................................................................. 103

16.4.2. Cấu hình SPI ở chế độ slave .................................................................................... 103 17. Inter-Integrated Circuit (I2C) ................................................................................................. 106

17.1. Thanh ghi của I2C ........................................................................................................... 106 17.1.1. I2CCON1 ................................................................................................................. 106 17.1.2. I2CCON2 ................................................................................................................. 108

17.1.3. I2CSTA .................................................................................................................... 109 17.1.4. CNTH/ADDRH và CNTL/ADDRL ........................................................................ 112 17.1.5. I2CBUF .................................................................................................................... 113

17.2. Hoạt động ........................................................................................................................ 114 17.3. Chế độ Master ................................................................................................................. 115

17.3.1. Master Truyền .......................................................................................................... 115

17.3.2. Master Nhận ............................................................................................................. 118

17.3.3. Đồng bộ clock .......................................................................................................... 121 17.3.4. Phân xử .................................................................................................................... 121 17.3.5. Định thời của sự kiện Start ...................................................................................... 122

17.3.6. Định thời của sự kiện Repeat Start .......................................................................... 123 17.3.7. Định thời của sự kiện Stop ....................................................................................... 124

17.3.8. Xung đột bus ............................................................................................................ 124 17.4. Chế độ Slave ................................................................................................................... 128

17.4.1. Định địa chỉ Slave .................................................................................................... 128 17.4.2. Mặt nạ địa chỉ........................................................................................................... 128

17.4.3. Địa chỉ 7-bit ............................................................................................................. 129 17.4.4. Chế độ 10-bit địa chỉ ................................................................................................ 131

17.5. Kéo dài xung clock ......................................................................................................... 132

17.6. Địa chỉ General Call........................................................................................................ 133

17.7. Dạng sóng ....................................................................................................................... 133 17.7.1. Dạng sóng I2C Master phát (chế độ 7-bit hoặc 10-bit địa chỉ) ................................ 134 17.7.2. Dạng sóng I2C Master nhận (chế độ 7-bit địa chỉ) .................................................. 135

17.7.3. Dạng sóng I2C Slave nhận chế độ 7-bit địa chỉ ....................................................... 136 17.7.4. Dạng sóng I2C Slave phát chế độ 7-bit địa chỉ ........................................................ 137 17.7.5. Dạng sóng I2C Slave nhận chế độ 10-bit địa chỉ ..................................................... 138 17.7.6. Dạng sóng I2C Slave phát chế độ 10-bit địa chỉ ...................................................... 139

18. Ngoại vi UART ...................................................................................................................... 140

18.1. Tổng quan về ngoại vi UART ......................................................................................... 140 18.2. Các thanh ghi liên quan đến ngoại vi UART .................................................................. 140

18.2.1. Thanh ghi trạng thái của ngoại vi UART thứ x (UxSTA) ....................................... 141

18.2.2. Thanh ghi điều khiển của UART thứ x .................................................................... 142 18.2.3. Thanh ghi tốc độ baud của UART thứ x (UxBRL) ................................................. 143

Page 6: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 6

18.2.4. Thanh ghi lưu dữ liệu truyền của UART thứ x (UxTXREG) .................................. 144 18.2.5. Thanh ghi lưu dữ liệu nhận của UART thứ x (UxRXREG) .................................... 144 18.2.6. Thanh ghi cho phép ngắt thứ 2 (IE2) ....................................................................... 144 18.2.7. Thanh ghi thiết lập ưu tiên ngắt thứ 2 (IP2) ............................................................. 145

18.2.8. Thanh ghi trạng thái ngắt thứ 2 (IF2) ....................................................................... 146 18.2.9. Thanh ghi cấu hình chiều dữ liệu cho Port C (DIRC) ............................................. 148 18.2.10. Thanh ghi cấu hình chiều dữ liệu cho Port B (DIRB) ........................................... 149

18.3. Bộ tạo tốc độ Baud (BRG) .............................................................................................. 150 18.3.1. Tính toán tốc độ Baud .............................................................................................. 151

18.3.2. Xung lấy mẫu và xung dịch dữ liệu bên trong UART ............................................. 153 18.3.3. Lấy mẫu dữ liệu ....................................................................................................... 154 18.3.4. Dịch dữ liệu .............................................................................................................. 155

18.4. Bộ truyền UART ............................................................................................................. 155 18.4.1. Cấu trúc bộ truyền UART ........................................................................................ 155 18.4.2. Cấu hình sử dụng bộ truyền của ngoại vi UART ..................................................... 156

18.5. Bộ nhận UART ............................................................................................................... 158 18.5.1. Cấu trúc bộ nhận UART .......................................................................................... 158

18.5.2. Cấu hình sử dụng bộ nhận của ngoại vi UART ....................................................... 159 19. Ngoại vi ADC ........................................................................................................................ 162

19.1. Cấu trúc cơ bản của ADC ............................................................................................... 162

19.2. Các thanh ghi liên quan đến hoạt động của ADC ........................................................... 163 19.2.1. Thanh ghi điều khiển thứ 1 của ADC (ADCON1) .................................................. 163 19.2.2. Thanh ghi điều khiển thứ 2 của ADC (ADCON2) .................................................. 164

19.2.3. Thanh ghi lưu dữ liệu ADC (ADBUF) .................................................................... 164

19.2.4. Thanh ghi cho phép ngắt số 3 (IE3) ......................................................................... 165 19.2.5. Thanh ghi ưu tiên ngắt số 3 (IP3) ............................................................................ 165 19.2.6. Thanh ghi trạng thái ngắt số 3 (IF3) ........................................................................ 165

19.3. Hoạt động của ngoại vi ADC .......................................................................................... 166 19.4. Các chú ý khi sử dụng ngoại vi ADC ............................................................................. 167

19.4.1. Nguồn xung clock cấp cho ngoại vi ADC ............................................................... 167 19.4.2. Các yêu cầu về thông số và kết nối .......................................................................... 168

20. Bộ điều khiển truy xuất Flash ................................................................................................ 170 20.1. Thanh ghi điều khiển truy xuất Flash ............................................................................. 170

20.1.1. Thanh ghi trọng số cao của Flash Pointer (FPTH) .................................................. 171 20.1.2. Thanh ghi trọng số thấp của Flash Pointer (FPTH) ................................................. 171

20.2. Hoạt động của bộ điều khiển truy xuất flash .................................................................. 171

20.2.1. Truy xuất Flash Program Memory ........................................................................... 171

20.2.2. Truy xuất Flash Data Memory ................................................................................. 173 21. Bộ nhớ chương trình FLASH ................................................................................................ 174

21.1. Phân vùng FLASH .......................................................................................................... 174

21.2. Chế độ bảo vệ chương trình ............................................................................................ 175 22. Tập lệnh ................................................................................................................................. 176

22.1. Giới thiệu ........................................................................................................................ 176 22.2. Thanh ghi cờ phép toán ................................................................................................... 178 22.3. Tóm tắt tập lệnh .............................................................................................................. 178

22.4. Hoạt động của lệnh ......................................................................................................... 181 23. Đặc tính vật lý điện ................................................................................................................ 214 24. Thông tin package .................................................................................................................. 215

Page 7: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 7

Mục lục hình

Hình 1-1: Sơ đồ chân ..................................................................................................................... 16 Hình 1-2: Sơ đồ khối của vi điều khiển SG8V1 ............................................................................ 18 Hình 2-1: Các bước thực hiện lệnh ................................................................................................ 19 Hình 2-2: Hoạt động thực hiện lệnh với kiến trúc không có pipeline ........................................... 20 Hình 2-3: Thực hiện lệnh với kiến trúc có pipeline ....................................................................... 20

Hình 2-4: Thực hiện lệnh thường với kiến trúc đường ống ........................................................... 20 Hình 2-5: Thực hiện lệnh bypass với kiến trúc đường ống ........................................................... 21 Hình 2-6: Thực hiện lệnh rẽ nhánh đơn chu kỳ với kiến trúc đường ống...................................... 21 Hình 2-7: Thực hiện lệnh rẽ nhánh 2 chu kỳ với kiến trúc đường ống .......................................... 22

Hình 3-1: Mô tả clock trong chế độ nghỉ ....................................................................................... 23 Hình 3-2: Mô tả trường hợp CPU wake up và thực hiện tiếp tục quá trình trước đó .................... 24 Hình 3-3: Mô tả trường hợp CPU wake up và vào chương trình ngắt........................................... 24 Hình 3-4: Stack và các thanh ghi liên quan ................................................................................... 26

Hình 5-1. Các tụ và điện trở kết nối ở các chân ............................................................................. 31 Hình 5-2. Mạch kết nối thạch anh .................................................................................................. 32 Hình 5-3. Layout cho chân thạch anh ............................................................................................ 33

Hình 5-4. Mạch kết nối đến chân RST cơ bản ............................................................................ 33

Hình 5-5: Định thời mạch reset ngoài ............................................................................................ 34

Hình 5-6. Mạch kết nối đến chân RST hạn chế nhiễu................................................................. 34

Hình 5-7. Mạch reset được mắc thêm diode .................................................................................. 34

Hình 6-1: Bản đồ địa chỉ của bộ nhớ dữ liệu ................................................................................. 35 Hình 6-2: Stack và các thanh ghi liên quan ................................................................................... 37

Hình 7-1: Bộ nhớ Flash Data Memory .......................................................................................... 38 Hình 7-2: Cấu trúc bộ nhớ dữ liệu ................................................................................................. 39 Hình 7-3: Sử dụng thanh ghi BS để chọn băng ............................................................................. 40

Hình 10-1: Cell chuẩn của IO_PAD .............................................................................................. 63 Hình 10-2: Mô tả một kết nối Port cơ bản ..................................................................................... 65

Hình 10-3: IO PortA ...................................................................................................................... 66 Hình 10-4: PortB[4] - dùng chung với Timer0 .............................................................................. 68 Hình 10-5: IO PortB[0:1] - dùng chung với UART3..................................................................... 68 Hình 10-6: IO PortB[2:3] - dùng chung với UART2..................................................................... 68

Hình 10-7: IO PortB[5:7] - dùng chung với bộ lập trình FLASH ................................................. 69

Hình10-8: IO PortC[0:1] - dùng chung với UART1...................................................................... 71 Hình10-9: IO PortC[2:3] - dùng chung với PWM ......................................................................... 71 Hình10-10: IO PortC[4:5] - dùng chung với SPI ........................................................................... 71 Hình10-11: IO PortC[6:7] - dùng chung với SPI ........................................................................... 72 Hình 10-12: IO PortD[0:3] - dùng chung với ngắt ngoài .............................................................. 74 Hình 10-13: IO PortD[4:5] - dùng chung với I2C ......................................................................... 74

Hình 10-14: IO PortD[6] - dùng chung với Capture/Compare ...................................................... 75 Hình 10-15: IO PortD[7] - dùng chung với Timer1....................................................................... 75 Hình 11-1 : Mô tả khối Watchdog Timer ...................................................................................... 77 Hình 12-1: Mô tả sơ đồ khối Timer0 ............................................................................................. 80 Hình 13-1: Mô tả sơ đồ khối Timer 1 ............................................................................................ 84

Hình 13-2: Sơ đồ của khối bắt sự kiện ........................................................................................... 87

Hình 13-3: Sơ đồ của khối so sánh sự kiện .................................................................................... 87

Hình 14-1: Sơ đồ khối Timer_x (Timer 2 hoặc Timer 3) .............................................................. 90

Page 8: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 8

Hình 15-1: Sơ đồ của khối PWM_x............................................................................................... 94 Hình 15-2: Dạng sóng PWM ......................................................................................................... 96 Hình16-1: Sơ đồ khối SPI .............................................................................................................. 98 Hình16-2: Sơ đồ kết nối của SPI ................................................................................................. 102

Hình 16-3: Các chế độ truyền dữ liệu của SPI ............................................................................. 102 Hình 16-4: Dạng sóng của SPI slave (CKP = 0, CKE = 1) ........................................................ 104 Hình 16-5: Đồng bộ tín hiệu SPI SSx .......................................................................................... 105 Hình 17-1: Kết nối các thiết bị đến bus I2C ................................................................................ 115 Hình 17-2: Khung truyền với địa chỉ 7-bit ở chế độ Master truyền ............................................ 116

Hình 17-3: Khung truyền với địa chỉ 10-bit ở chế độ Master truyền .......................................... 117 Hình 17-4: Khung truyền với địa chỉ 7-bit ở chế độ Master nhận ............................................... 118 Hình 17-5: Khung truyền với địa chỉ 10-bit ở chế độ Master nhận ............................................. 120

Hình 17-6: Đồng bộ clock............................................................................................................ 121 Hình 17-7: Phân xử ...................................................................................................................... 122 Hình 17-8: Định thời của quá trình tạo sự kiện Start ................................................................... 123 Hình 17-9: Định thời của quá trình tạo sự kiện Repeat Start ....................................................... 124 Hình 17-10: Định thời của quá trình tạo sự kiện Stop ................................................................. 124

Hình 17-11: Xung độ bus khi tạo Start (1) .................................................................................. 125 Hình 17-12: Xung độ bus khi tạo Start (2) .................................................................................. 125 Hình 17-13: Xung độ bus khi tạo Repeat Start (1) ...................................................................... 126

Hình 17-14: Xung độ bus khi tạo Repeat Start (2) ...................................................................... 126 Hình 17-15: Xung độ bus khi tạo Repeat Start (3) ...................................................................... 126 Hình 17-16: Xung độ bus khi tạo Stop ........................................................................................ 126

Hình 17-17: Xung đột bus trong quá trình truyền nhận dữ liệu ................................................... 127

Hình 17-18: Địa chỉ 7-bit ............................................................................................................. 129 Hình 17-19: Định địa chỉ chế độ 10 bit ........................................................................................ 131 Hình 17-20: Dạng sóng I2C Master phát ..................................................................................... 134

Hình 17-21: Dạng sóng I2C Master nhận .................................................................................... 135 Hình 17-22: Dạng sóng I2C Slave nhận chế độ 7-bit địa chỉ ...................................................... 136

Hình 17-23: Dạng sóng I2C Slave phát chế độ 7-bit địa chỉ ....................................................... 137 Hình 17-24: Dạng sóng I2C Slave nhận chế độ 10-bit địa chỉ .................................................... 138 Hình 17-25: Dạng sóng I2C Slave phát chế độ 10-bit địa chỉ ..................................................... 139 Hình 18-1: Các thành phần chính của ngoại vi UART ................................................................ 140

Hình 18-2: Xung lấy mẫu dữ liệu và xung dịch dữ liệu tính theo hệ số N .................................. 154 Hình 18-3: Xung lấy mẫu dữ liệu và xung dịch dữ liệu với N = 0 .............................................. 154 Hình 18-4: Xung lấy mẫu dữ liệu và xung dịch dữ liệu với N = 1 .............................................. 154

Hình 18-5: Lẫy mẫu dữ liệu với N ≠ 0 ........................................................................................ 154

Hình 18-6: Lấy mẫu dữ liệu với N = 0 ........................................................................................ 155 Hình 18-7: Dịch dữ liệu ............................................................................................................... 155 Hình 18-8: Minh họa cấu trúc cơ bản của bộ truyền UART ........................................................ 156

Hình 18-9: Truyền một khung dữ liệu ......................................................................................... 158 Hình 18-10: Truyền liên tục ......................................................................................................... 158 Hình 18-11: Cấu trúc của UART nhận ........................................................................................ 159 Hình 18-12: UART tiếp nhận ...................................................................................................... 161 Hình 19-1: Sơ đồ khối ngoại vi ADC .......................................................................................... 162

Hình 19-2: Giản đồ thời gian cho hoạt động của ADC ............................................................... 167 Hình 19-3: Lần chuyển đổi đầu tiên sau khi bit ADON (ADCON1[7]) được tích cực ............... 167 Hình 19-4: Mô hình ngõ vào của ADC ........................................................................................ 169

Hình 20-1: Quá trình truy xuất flash ............................................................................................ 172 Hình21-1: Sơ đồ kết nối bộ nạp ................................................................................................... 174

Page 9: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 9

Hình 24-1: Hình chiếu đứng chip SG8V1 ................................................................................... 215 Hình 24-2: Hình chiếu cạnh chip SG8V1 .................................................................................... 215 Hình 24-3: Mặt cắt A-A ............................................................................................................... 216 Hình 24-4: Mặt cắt B-B ............................................................................................................... 216

Page 10: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 10

Mục lục bảng

Bảng 1-1: Mô tả chân ..................................................................................................................... 17 Bảng 4-1: Điều kiện reset cho các thanh ghi đặc biệt .................................................................... 30 Bảng 7-1: Các thanh ghi chức năng đặc biệt ................................................................................. 42 Bảng 10-1: Mô tả chân của một IO_PAD ...................................................................................... 63 Bảng 10-2: Mô tả chiều.................................................................................................................. 64

Bảng 10-3: Mô tả bảng nhận dữ liệu ............................................................................................. 64 Bảng 10-4: Thanh ghi DIRA.......................................................................................................... 66 Bảng 10-5: Mô tả thanh ghi PORTA ............................................................................................. 66 Bảng 10-6: Chức năng của PortB .................................................................................................. 69 Bảng 10-7: Thanh ghi DIRB .......................................................................................................... 69

Bảng10-8: Mô tả thanh ghi PORTB .............................................................................................. 70 Bảng 10-9: Chức năng của PortC .................................................................................................. 72 Bảng 10-10: Thanh ghi DIRC ........................................................................................................ 72

Bảng10-11: Chức năng PORTC .................................................................................................... 73 Bảng10-12: Chức năng của PortD ................................................................................................. 75 Bảng 10-13: Thanh ghi DIRD ........................................................................................................ 76 Bảng 10-14: Mô tả chức năng PORTD .......................................................................................... 76

Bảng 11-1 : Mô tả thanh ghi WT0CON ......................................................................................... 77 Bảng 12-1: Mô tả thanh ghi WT0CON .......................................................................................... 81

Bảng 12-2: Mô tả thanh ghi T0REG .............................................................................................. 82 Bảng 13-1: Mô tả thanh ghi T1CON ............................................................................................. 88 Bảng 13-2: Mô tả thanh ghi T1RH ................................................................................................ 89

Bảng 13-3: Mô tả thanh ghi T1RL ................................................................................................. 89

Bảng 13-4: Mô tả thanh ghi CCRH ............................................................................................... 89 Bảng 13-5: Mô tả thanh ghi CCRL ................................................................................................ 89 Bảng 14-1: Mô tả thanh ghi TxCON ............................................................................................. 92

Bảng 14-2 Mô tả thanh ghi TxRH ................................................................................................. 92 Bảng 14-3 Mô tả thanh ghi TxRL .................................................................................................. 93

Bảng 14-4 Mô tả thanh ghi TxPRH ............................................................................................... 93 Bảng 14-5 Mô tả thanh ghi TxPRL................................................................................................ 93

Bảng 15-1: Mô tả thanh ghi PWMxCON ...................................................................................... 97 Bảng 15-2: Mô tả thanh ghi PWMxRL.......................................................................................... 97 Bảng 16-1: Thanh ghi SPI.............................................................................................................. 99

Bảng16-2: Thanh ghi điều khiển SPI- SPICON ............................................................................ 99

Bảng 16-3: Thanh ghi trạng thái SPI- SPISTA ............................................................................ 100 Bảng 17-1: Mô tả thanh ghi I2CCON1 ở chế độ Master ............................................................. 106 Bảng 17-2: Mô tả thanh ghi I2CCON1 ở chế độ Slave ............................................................... 107

Bảng 19-1. Một số giá trị cấu hình tham khảo cho xung clock ngoại vi ADC ............................ 168 Bảng 22-1: Mô tả cho các trường mã lệnh ................................................................................... 176 Bảng 22-2: Tập lệnh SG8V1........................................................................................................ 178 Bảng 23-1: Thông số vật lý điện .................................................................................................. 214 Bảng 24-1: Kích thước vật lý 1 .................................................................................................... 215

Bảng 24-2: Kích thước vật lý 2 .................................................................................................... 216

Page 11: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 11

Danh Mục Thuật Ngữ và Từ Viết Tắt

Thuật ngữ hoặc ký hiệu Mô tả

RISC

Viết tắt của cụm từ “Reduced Instructions Set Computer”

Một cấu trúc hay phương pháp thiết kế vi xử lý theo hướng

“đơn giản hóa tập lệnh”.

Package Dạng đóng gói chip

LQFP

Viết tắt của cụm từ “Low-profile Quad Flat Package”

Một dạng đóng gói chip với hình dạng phẳng, dẹp, bốn cạnh

bằng nhau.

FIFO

Viết tắt của cụm từ “First In First Out”

Một dạng bộ nhớ lưu dữ liệu hoạt động theo nguyên tắc dữ liệu

được đọc ra theo đúng thứ tự dữ liệu được ghi vào.

full-duplex Truyền nhận song công. Một ngoại vi hỗ trợ “full-duplex” có

thể vừa truyền và nhận dữ liệu tại cùng một thời điểm.

Pipeline

Kỹ thuật “đường ống”

Một kỹ thuật thiết kế vi xử lý cho phép các lệnh có thể thực thi

theo kiểu gối đầu nhau nhằm tận dụng thời gian rỗi giữa các

công đoạn, qua đó làm tăng tốc độ thực hiện lệnh của vi xử lý.

MCU Viết tắt của “Microcontroller Unit”

Bộ vi điều khiển

Reset Là một thuật ngữ chỉ một tác động hay hoạt động khôi phục lại

trạng thái ổn định ban đầu (trạng thái gốc).

Clock Là xung nhịp đồng bộ

CPU

Viết tắt của cụm từ “Central Processing Unit”

Là đơn vị xử lý trung tâm thực hiện giải mã, phân tích và thực

thi các lệnh lập trình.

Flash Tên của loại bộ nhớ được sử dụng làm bộ nhớ chương trình

Stack Bộ lưu trữ địa chỉ truy cập lệnh

Watchdog Bộ định thời giám sát hoạt động của CPU để tránh trường hợp

CPU bị treo khi đang xử lý.

Wake up Là trạng thái sẵn sàng hoạt động

UART Viết tắt của cụm từ “Universal Asynchronous Receiver

Page 12: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 12

Thuật ngữ hoặc ký hiệu Mô tả

Transmitter”

Ngoại vi truyền nhận nối tiếp bất đồng bộ.

ADC Viết tắt của cụm từ “Analog Digital Conveter”

Ngoại vi chuyển đổi tín hiệu tương tự thành một giá trị số.

Counter Bộ đếm sự kiện

DIR Viết tắt của “Direction”

Chiều

GPIO Viết tắt của cụm từ “General Purpose Input/Output”

Cổng truy xuất đa chức năng

Port Cổng truy xuất

PU

Viết tắt của “Pull-Up”

Kéo lên. Một chân giao tiếp hay tín hiệu được “kéo lên” nghĩa

là chân giao tiếp hay tín hiệu đó sẽ có mức điện áp cao.

Postscaler Bộ chia tần sau

Prescaler Bộ chia tần trước

PWM Viết tắt của cụm từ “Pulse Width Modulation”

Điều chế độ rộng xung

SPCS Viết tắt của cụm từ “Special Program Chip Select”

Chân chọn lập trình

Timer Bộ định thời

Watchdog timer Bộ định thời cảnh báo

WDT Viết tắt của cụm từ “WatchDog Timer”

Bộ định thời cảnh báo

OSC Dao động

Weak pull-up Mức kéo lên yếu

SPI Viết tắt của cụm từ “Serial Peripheral Interface”

Giao tiếp ngoại vi nối tiếp

SCK Clock nối tiếp của ngoại vi SPI

SDI Viết tắt của cụm từ “Serial data input”

Ngõ vào dữ liệu nối tiếp của ngoại vi SPI

Page 13: SG8V1 Huong Dan Su Dung

Nội dung

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 13

Thuật ngữ hoặc ký hiệu Mô tả

SDO Viết tắt của cụm từ “Serial data output”

Ngõ ra dữ liệu nối tiếp của ngoại vi SPI

SSx Lựa chọn slave hoạt động của ngoại vi SPI

Master Chủ (ngoại vi điều khiển những ngoại vi tương đương khác)

Slave Tớ (ngoại vi chịu sự điều khiển từ ngoại vi tương đương khác)

R Viết tắt của từ “Read”

Chỉ khả năng có thể truy xuất đọc thông tin.

W Viết tắt của từ “Write”

Chỉ khả năng có thể tác động ghi (thay đổi) nội dung dữ liệu.

W(0) Vị trí bit chỉ được phép xóa hoặc ghi vào giá trị 0.

BS Thanh ghi Bank Select. Nó dùng để chọn lựa băng cho RAM

C, HC, Z Các bit trạng thái của ALU: Carry, Half Carry, Zero

GIE Viết tắt của cụm từ “Global Interrupt Enable”

Bit cho phép ngắt toàn cục

PC Viết tắt của cụm từ “Program counter”

Bộ đếm chương trình

PWD Viết tắt của cụm từ “Power-Down”

Bit thông báo chế độ tiết kiệm nguồn

HI Byte cao của thanh ghi kết quả phép nhân

LO Byte thấp của thanh ghi kết quả phép nhân

WDTO Viết tắt của cụm từ “Watchdog time-out”

TS Viết tắt của cụm từ “Top-of-Stack”

ACC

Viết tắt của từ Accumulator

Thanh ghi dùng để lưu trữ của kết quả trung gian sau khi xử lý

toán học và logic

Bypass Bỏ qua (lệnh tiếp theo)

Page 14: SG8V1 Huong Dan Su Dung

Giới thiệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 14

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 63 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: 0 MHz - 20 MHz

Tập lệnh 63 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 LQFP 48 chân

Page 15: SG8V1 Huong Dan Su Dung

Giới thiệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 15

Ngoại vi

Watchdog Timer: 16-bit, sử dụng xung clock hệ thống

Timer0: Timer/counter 8-bit, kết hợp với 8-bit prescaler; sử dụng xung clock hệ thống

hoặc xung clock ngoài

Timer1: Timer/counter 16-bit, kết hợp với prescaler; sử dụng xung clock hệ thống hoặc

xung clock ngoài; hỗ trợ chế độ capture/compare

Timer2: Timer/counter 10-bit, kết hợp với period register, prescaler và postscaler 10-bit;

sử dụng xung clock hệ thống

Timer3: Timer/counter 10-bit, kết hợp với period register, prescaler và postscaler 10-bit;

sử dụng xung clock hệ thống

GPIO: có 4 port GPIO, mỗi port 8-bit

PWM1: độ phân giải 10-bit

PWM2: độ phân giải 10-bit

UART1: truyền nhận full-duplex, FIFO 2 mức, có hỗ trợ chế độ truyền liên tục

UART2: truyền nhận full-duplex, FIFO 2 mức, có hỗ trợ chế độ truyền liên tục

UART3: truyền nhận full-duplex, FIFO 2 mức, có hỗ trợ chế độ truyền liên tục

SPI: truyền nhận full-duplex, hỗ trợ 2 chế độ Master và Slave

I2C: Hỗ trợ chế độ truyền Standard và Fast, chế độ Master và Slave, chế độ truyền 7-bit

địa chỉ và 10-bit địa chỉ, chế độ Multi-master, chế độ General-call

ADC: Hỗ trợ 4 ngõ vào analog; độ phân giải 8-bit; tốc độ lấy mẫu 500KSPS

Page 16: SG8V1 Huong Dan Su Dung

Giới thiệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 16

1.1. Sơ đồ chân

1

2

3

4

5

6

7

8

9

10

11

12

36

35

34

33

32

31

30

29

28

27

26

25

48 47 46 45 44 43 42 41 40 39 38 37

13 14 15 16 17 18 19 20 21 22 23 24

VREF

VIN4

VIN3

VIN2

VIN1

OSC2

OSC1

RST

PORTB7/SPDATAO

PORTB6/SPDATAI

PORTB5/SPCLK

PORTB4/T0CLK

GND

VDD2

PORTA7

PORTA6

PORTA5

PORTA4

PORTA3

PORTA2

PORTA1

PORTA0

GND

VDD1

VD

D3

GN

D

CA

P

PO

RT

D0

/IN

T0

PO

RT

D1

/IN

T1

PO

RT

D2

/IN

T2

PO

RT

D3

/IN

T3

PO

RT

D4

/SC

L

PO

RT

D5

/SD

A

PO

RT

D6

/CC

PO

RT

D7

/T1C

LK

SP

CS

PO

RT

B3

/TX

2

PO

RT

B2

/RX

2

PO

RT

B1

/TX

3

PO

RT

B0

/RX

3

PO

RT

C0

/RX

1

PO

RT

C1

/TX

1

PO

RT

C2

/PW

M1

PO

RT

C3

/PW

M2

PO

RT

C4

/SC

K

PO

RT

C5

/SD

I

PO

RT

C6

/SD

O

PO

RT

C7

/SS

SG8V1 MCU

Hình 1-1: Sơ đồ chân

Page 17: SG8V1 Huong Dan Su Dung

Giới thiệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 17

Bảng 1-1: Mô tả chân

Tên chân Loại chân Mô tả chân

VDD1 Vào Nguồn cung cấp

VDD2 Vào Nguồn cung cấp

VDD3 Vào Nguồn cung cấp

GND x 3 Vào Mass

RST

Vào Reset

OSC1 Vào Ngõ vào thạch anh

OSC2 Ra Ngõ ra thạch anh

PORTA[7:0] Vào / Ra Bidirectional IO port

PORTB[7:0] Vào / Ra Bidirectional IO port

PORTC[7:0] Vào / Ra Bidirectional IO port

PORTD[7:0] Vào / Ra Bidirectional IO port

SPCS Vào Chip select cho bộ lập trình Flash

SPCLK Vào Clock cho bộ lập trình Flash

SPDATAI Vào Dữ liệu ngõ vào cho bộ lập trình Flash

SPDATAO Ra Dữ liệu ngõ ra cho bộ lập trình Flash

T0CLK Vào Clock ngoài dùng cho Timer 0

TX1 Ra Ngõ truyền của UART1

RX1 Vào Ngõ nhận của UART1

TX2 Ra Ngõ truyền của UART2

RX2 Vào Ngõ nhận của UART2

TX3 Ra Ngõ truyền của UART3

RX3 Vào Ngõ nhận của UART3

PWM1 Ra Ngõ ra của PWM1

PWM2 Ra Ngõ ra của PWM2

SCK Vào / Ra Xung clock cho SPI.

Chế độ Master: Out / Chế độ Slave: In

SDI Vào Dữ liệu ngõ vào SPI

SDO Ra Dữ liệu ngõ ra SPI

SS Vào Tín hiệu Slave Select cho SPI

INT0 Vào Ngắt ngoài 0

INT1 Vào Ngắt ngoài 1

INT2 Vào Ngắt ngoài 2

INT3 Vào Ngắt ngoài 3

SCL Vào / Ra Xung clock nối tiếp cho I2C

SDA Vào / Ra Dữ liệu nối tiếp cho I2C

CC Vào / Ra Chân cho Capture/Compare

Chế độ Capture: In / Chế độ Compare: Out

T1CLK Vào Clock ngoài dùng cho Timer 1

VIN1 Vào Ngõ vào kênh 1 cho ADC

VIN2 Vào Ngõ vào kênh 2 cho ADC

VIN3 Vào Ngõ vào kênh 3 cho ADC

VIN4 Vào Ngõ vào kênh 4 cho ADC

VREF Vào Điện áp chuẩn cho ADC

CAP Vào Chân nối tụ điện

Page 18: SG8V1 Huong Dan Su Dung

Giới thiệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 18

1.2. Sơ đồ khối

Vi điều khiển SG8V1 bao gồm phần lõi vi xử lý 8-bit và các ngoại vi xung quanh. Các ngoại vi

bao gồm: IO Port (GPIO), Watchdog Timer (WDT), Timer0 (TMR0), ADC, Timer1 (TMR1),

Timer2 (TMR2), Timer3 (TMR3), PWM1, PWM2, SPI, I2C, UART1, UART2, UART3. Bộ nhớ

chương trình 64Kx16 được thực hiện bằng Flash. Một khối điều khiển việc lập trình cho Flash

được tích hợp bên trong.

PWM2

SG8V1

Microprocessor

CorePWM1

Serial

Flash

Programming

Controller

TMR1

TMR2

TMR0

UART1 UART2SPI

GPIO

PORTs

Flash 64kx16

SG8V1

TMR3

WDT

UART3

ADC

I2C

DC – Regulator

Hình 1-2: Sơ đồ khối của vi điều khiển SG8V1

Page 19: SG8V1 Huong Dan Su Dung

Kiến trúc pipeline

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 19

2. Kiến trúc pipeline

2.1. Các bước thực hiện lệnh

Về cơ bản, mỗi một lệnh đơn được chia ra làm 3 bước để thực hiện: FETCH, DECODE, và

EXECUTE. Mỗi bước thực hiện trong một chu kỳ xung clock. Như vậy, mỗi lệnh đơn sẽ hoàn tất

sau 3 chu kỳ xung clock.

FETCH

DECODE

EXECUTE

Nhận lệnh từ bộ

nhớ chương trình

Giải mã lệnh

Thực hiện lệnh

Chu kỳ xung clock 1

Chu kỳ xung clock 2

Chu kỳ xung clock 3

Hình 2-1: Các bước thực hiện lệnh

FETCH: Nhận lệnh từ bộ nhớ chương trình Flash.

DECODE: Giải mã lệnh vừa nhận được ở tầng FETCH.

EXECUTE: Thực hiện các công việc tính toán và ghi kết quả vào đích đến (thanh ghi, bộ nhớ dữ

liệu)

2.2. Kiến trúc pipeline 3 tầng

Kiến trúc pipeline 3 tầng được thực hiện nhằm cải thiện tốc độ hoạt động của SG8V1. Theo đó, 3

bước khác nhau của 3 lệnh liên tiếp sẽ được thực hiện đồng thời. Điều này làm tốc độ hoạt động

của SG8V1 tăng gấp 3 lần. Nghĩa là, mặc dù mỗi lệnh đơn được thực hiện trong 3 chu kỳ xung

clock, nhưng tính trung bình, thời gian để thực hiện chỉ là 1 chu kỳ xung clock. (xem Hình 2-2 và

Hình 2-3)

Page 20: SG8V1 Huong Dan Su Dung

Kiến trúc pipeline

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 20

F D E

FETCH DECODE EXECUTE F D E

FETCH DECODE EXECUTE

Chu kỳ 1 2 3 4 5 6

Lệnh 1

Lệnh 2

Hình 2-2: Hoạt động thực hiện lệnh với kiến trúc không có pipeline

F D E

F D E

F D E

Chu kỳ 1 2 3 4 5

Lệnh 1

Lệnh 2

Lệnh 3

Hình 2-3: Thực hiện lệnh với kiến trúc có pipeline

2.3. Cách tính số chu kỳ thực hiện lệnh

Trung bình các lệnh thường được thực hiện trong 1 chu kỳ xung clock, như được thể hiện ở Hình

2-4.

F D E

F D E

F D E

F D E

Lệnh 1

Chu kỳ 1 2 3 4 5 6

Lệnh 2

Lệnh 3

Lệnh 4

Hình 2-4: Thực hiện lệnh thường với kiến trúc đường ống

Page 21: SG8V1 Huong Dan Su Dung

Kiến trúc pipeline

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 21

Đối với các lệnh bypass, trình tự thực hiện lệnh sẽ được thực hiện như Hình 2-5. Theo đó, trung

bình mỗi lệnh bypass sẽ được thực hiện trong 2 chu kỳ xung clock.

F D E

F D

F D E

F D E

Chu kỳ 1 2 3 4 5 6

Lệnh 1: Lệnh Bypass

Lệnh 2: Lệnh bị bypass

Lệnh 3

Lệnh 4

Lệnh này không được thực hiện

Hình 2-5: Thực hiện lệnh bypass với kiến trúc đường ống

Đối với các lệnh rẽ nhánh đơn chu kỳ, trình tự thực hiện lệnh được thể hiện như Hình 2-6. Theo

đó, trung bình mỗi lệnh rẽ nhánh đơn chu kỳ sẽ được thực hiện trong 2 chu kỳ xung clock.

F D E

F

F D E

F D E

Lệnh 1: Lệnh rẽ nhánh

Lệnh 2

Lệnh 3: Lệnh mới ở địa chỉ nhảy tới

Chu kỳ 1 2 3 4 5 6

Lệnh này sẽ không được thực hiện

Hình 2-6: Thực hiện lệnh rẽ nhánh đơn chu kỳ với kiến trúc đường ống

Đối với lệnh rẽ nhánh 2 chu kỳ (lệnh nhảy dài), trình tự thực hiện lệnh được thể hiện như Hình

2-7. Theo đó, trung bình mỗi lệnh rẽ nhánh 2 chu kỳ sẽ được thực hiện trong 3 chu kỳ xung

clock.

Page 22: SG8V1 Huong Dan Su Dung

Kiến trúc pipeline

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 22

F D E

F

F

F D E

Lệnh 1 (chu kỳ 1): Lệnh rẽ nhánh 2 chu kỳ

Lệnh 3: Lệnh mới ở địa chỉ nhảy tới

Lệnh 4

Chu kỳ 1 2 3 4 5 6

D E

Lệnh 2

F D E

7

Lệnh này không được

thực hiện

Lệnh 1 (chu kỳ 2): Lệnh rẽ nhánh 2 chu kỳ

Hình 2-7: Thực hiện lệnh rẽ nhánh 2 chu kỳ với kiến trúc đường ống

Page 23: SG8V1 Huong Dan Su Dung

Chế độ tiết kiệm năng lượng

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 23

3. Chế độ tiết kiệm năng lượng (IDLE Mode)

3.1. Mô tả

SG8V1 cho phép người dùng quản lý xung clock cung cấp cho CPU và các ngoại vi. Mỗi thành

phần này hoạt động với một nguồn cấp clock riêng. Các nguồn clock này có thể tắt/mở bằng cách

lập trình.

SG8V1 hỗ trợ 2 chế độ:

Đang hoạt động (Run mode)

Chế độ tiết kiệm năng lượng (IDLE mode)

Ở chế độ đang hoạt động, clock cấp cho CPU và ngoại vi nhịp liên tục (kể cả trong trường hợp

ngoại vi không hoạt động). Nếu muốn tiết kiệm năng lượng khi CPU đang rảnh rỗi, người sử

dụng có thể sử dụng lệnh IDLE để đưa CPU vào chế độ IDLE. Ở chế độ này, clock cấp cho CPU

sẽ dừng lại (xem Hình 3-1). Một chú ý là trước khi thực hiện lệnh IDLE, người dùng nên xóa các

bit ON/OFF của các ngoại vi không sử dụng. Các bit này được mô tả trong Tập Thanh Ghi Có

Chức Năng Đặt Biệt (Special Function Registers).

Clock từ

thạch anh

Clock cấp

cho CPU

Vào chế cho nghỉ wake up

Clock cấp cho ngoại

vi đang tắt

Clock cấp cho ngoại

vi đang mở

Hình 3-1: Mô tả clock trong chế độ nghỉ

Sau khi đã vào chế độ tiết kiệm năng lượng, CPU có thể được đánh thức từ nhiều cách: ngắt hoặc

tràn Watchdog.

Để CPU có thể được đánh thức từ ngắt, người dùng phải cho phép các sự kiện ngắt xảy ra. Trong

quá trình CPU thức giấc, các tình huống sau có thể xảy ra:

Page 24: SG8V1 Huong Dan Su Dung

Chế độ tiết kiệm năng lượng

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 24

Nếu bit GIE/GIEH được set lên 1 (ngắt ưu tiên cao) hay cả hai bit GIE/GIEH và

PIE/GIEL được set lên 1(ngắt ưu tiên thấp), chương trình sẽ nhảy đến vec-tơ ngắt tương

ứng. Ngược lại, chương trình sẽ thực hiện tiếp tục quá trình trước đó.

PC PC+1 PC+2 PC+3 PC+4 PC+5 PC+6 PC+7PC

Vào chế độ IDLE wake up

Clock từ

thạch anh

Clock cấp

cho CPU

Clock cấp cho ngoại

vi đang tắt

Clock cấp cho ngoại

vi đang mở

Hình 3-2: Mô tả trường hợp CPU wake up và thực hiện tiếp tục quá trình trước đó

PC PC+1 PC+2 PC+3 PC+4 A A+1 A+2PC

vào chế độ DILEwake up

A: Vector ngắt

Clock từ

thạch anh

Clock cấp

cho CPU

Clock cấp cho ngoại

vi đang tắt

Clock cấp cho ngoại

vi đang mở

Hình 3-3: Mô tả trường hợp CPU wake up và vào chương trình ngắt

Việc tràn Watchdog sẽ đánh thức CPU khi nó đang ở chế độ IDLE. Tuy nhiên, người sử

dụng cần lưu ý là nếu CPU đang ở chế độ hoạt động, sự kiện tràn Watchdog sẽ làm cho

SG8V1 khởi động lại. Vì vậy, khi CPU đang hoạt động, người sử dụng nên xóa

Watchdog bằng lệnh CLRWDT trước khi bị tràn.

Page 25: SG8V1 Huong Dan Su Dung

Chế độ tiết kiệm năng lượng

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 25

3.2. Thanh ghi báo trạng thái CPU - CPUSTA

Tên Bit R/W Mô tả

SRE [7] R/W Xem 3.4.2.2 Thanh ghi báo trạng

thái CPU – CPUSTA

SOV [6] R/W(0) Xem 3.4.2.2 Thanh ghi báo trạng

thái CPU – CPUSTA

SUNF [5] R/W(0) Xem 3.4.2.2 Thanh ghi báo trạng

thái CPU – CPUSTA

Bit dự trữ [4:2] U Không thực hiện

PWD [1] R Cờ báo đã vào chế độ IDLE

0: Khi bật nguồn hoặc sau

lệnh CLRWDT

1: Khi CPU vào chế độ

IDLE

WDTO [0] R Cờ thông báo tràn Watchdog

0: Khi bật nguồn hoặc sau

lệnh CLRWDT hoặc lệnh

IDLE

1: Khi tràn Watchdog

3.3. Bộ đếm chương trình (PC)

Bộ đếm chương trình của SG8V1 là một thanh ghi 16-bit. Nó sử dụng làm địa chỉ của bộ nhớ

chương trình.

3.4. Stack

Giá trị của thanh ghi PC được xếp vào stack khi một trong các sự kiện sau được thực hiện: sau

lệnh LCALL, SCALL, PUSH và đáp ứng ngắt. Ngược lại, đối với lệnh RET, RETA, RETI và

POP giá trị của PC sẽ được lấy ra khỏi stack.

Trong SG8V1, Stack hoạt động như một RAM có 15 word (mỗi word 16-bit) với địa chỉ để truy

xuất là Stack-Pointer (SP) 4 bit. SP có thể truy xuất được bằng phần mềm. Stack chỉ có thể chứa

tối đa 15 giá trị của PC. Do đó, CPU chỉ có thể xếp PC vào Stack được nhiều nhất 15 lần. Lần

xếp thứ 16 được thực hiện chương trình có thể sẽ bị sai.

Page 26: SG8V1 Huong Dan Su Dung

Chế độ tiết kiệm năng lượng

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 26

Quá trình xếp PC vào stack được thực hiện như sau:

Tăng Stack-Pointer thêm 1

Ghi giá trị PC vào vùng nhớ của stack được trỏ bởi Stack-Pointer vừa nhận được

Quá trình lấy PC ra khỏi stack được thực hiện như sau:

Giá trị PC cần lấy chính là giá trị của vùng nhớ trong Stack được trỏ bởi Stack-Pointer

hiện tại.

Sau khi lấy xong giá trị của PC, Stack-Pointer giảm đi 1.

3.4.1. Truy xuất giá trị mới nhất của Stack (TS: Top of Stack)

TS là giá trị vùng nhớ của Stack được trỏ bởi Stack-Pointer (SP). TS có thể đọc/ghi bằng phần

mềm. TS được chia thanh 2 thanh ghi TSH (chứa byte cao của TS) và TSL (chứa byte thấp của

TS). Người dùng có thể đọc cặp thanh ghi TSH và TSL để biết được giá trị hiện tại của TS.

Khi mới khởi động, SP bằng 0. Tại vị trí này, giá trị của TS không có nghĩa (người dùng không

sử dụng giá trị này).

Chú ý:

Người sử dụng nên cấm ngắt toàn cục trong khi truy xuất stack để tránh việc tràn stack không

mong muốn.

0C10h

1111

1101

0000

1101

Con trỏ stack

SP[3:0]

0Ch 10h

TSH TSL

Thanh ghi Top of Stack

stack [15:0]

-

Hình 3-4: Stack và các thanh ghi liên quan

3.4.2. Stack Pointer (SP)

3.4.2.1. Mô tả

Stack-Pointer (SP) là thanh ghi 4 bit dùng để trỏ giá trị mới nhất của stack (Top of stack). SP có

thể đọc/ghi bằng phần mềm.

Page 27: SG8V1 Huong Dan Su Dung

Chế độ tiết kiệm năng lượng

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 27

Mỗi lần xếp PC vào stack, SP tăng thêm 1.

Mỗi lần lấy giá trị PC ra khỏi stack (POP, trở về từ chương trình ngắt hay chương trình con), SP

giảm đi 1.

Việc đọc/ghi trực tiếp TS bằng phần mềm không ảnh hưởng đến giá trị của SP.

Trong quá trình sử dụng stack, người dùng nên chú ý các điểm sau:

Khi stack đã đầy (SP = 15), nếu tiếp tục xếp PC vào stack sẽ làm tràn stack ngưỡng trên. Bit

SOV sẽ set lên 1 (bit này chỉ có thể xóa khi bật nguồn hoặc xóa bằng phần mềm).

Tương tự, khi stack đang rỗng (SP=0), việc lấy PC ra khỏi stack sẽ làm cho bit SUNF bật lên

1(bit này chỉ có thể xóa khi bật nguồn hoặc xóa bằng phần mềm).

Khi có các sự kiện trên, hai trường hợp sau xảy ra:

Bit SRE bằng 1 sẽ làm SG8V1 khởi động lại.

Bit SRE bằng 0 không làm SG8V1 khởi động lại. Tuy nhiên, giá trị của TS và SP sẽ

không thay đổi.

3.4.2.2. Thanh ghi báo trạng thái CPU – CPUSTA

Page 28: SG8V1 Huong Dan Su Dung

Chế độ tiết kiệm năng lượng

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 28

Tên Bit R/W Mô tả

SRE [7] R/W Cho phép khởi động lại CPU do

stack

0: Không cho phép khởi

động lại CPU

1: Cho phép khởi động lại

CPU

SOV [6] R/W(0) Cờ thông báo tràn stack ngưỡng

trên (Overflow)

0: không xảy ra tràn stack

ngưỡng trên, khi bật

nguồn, khi xóa bằng phần

mềm

1: xảy ra tràn stack ngưỡng

trên

SUNF [5] R/W(0) Cờ báo tràn stack ngưỡng dưới

(underflow)

0: không tràn stack

ngưỡng dưới, khi bật

nguồn, khi xóa bằng phần

mềm

1: xảy ra tràn stack ngưỡng

dưới

Bit dự trữ [4:2] U Không thực hiện

PWD [1] R Xem 3.2 Thanh ghi báo trạng thái

CPU - CPUSTA

WDTO [0] R Xem 3.2 Thanh ghi báo trạng thái

CPU - CPUSTA

Page 29: SG8V1 Huong Dan Su Dung

Reset

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 29

4. Reset của SG8V1

4.1. Tổng quan về Reset

SG8V1 sử dụng các nguồn sau đây để xử lý reset CPU, Flash và khối lập trình Flash:

1. Reset bởi người dùng (do tác động trên chân RST ).

2. Reset khi chọn lập trình Flash (do tác động trên chân SPCS).

3. Reset bởi Stack (tràn trên và tràn dưới).

4. Reset bởi Watchdog (tràn bộ đếm).

Khối RESET sẽ sử dụng tất cả các nguồn ở trên để tạo các tín hiệu reset nội thích hợp cho các

thành phần bên trong.

4.2. Reset bởi người sử dụng (chân RST )

Người sử dụng có thể reset lại SG8V1 bất cứ lúc nào thông qua chân RST . Chân này phải được

giữ mức thấp trong ít nhất trong 5 chu kỳ xung clock hệ thống để vi điều khiển được reset hoàn

toàn.

4.3. Reset khi chọn lập trình Flash (chân SPCS)

Chân SPCS được sử dụng để chọn chế độ nạp Flash hoặc chế độ hoạt động thông thường. Khi

chế độ nạp Flash được chọn, CPU sẽ không hoạt động và tất cả các thanh ghi được reset.

Chú ý:

Khối lập trình Flash luôn được reset trong chế độ hoạt động thông thường và chân SPCS giữ mức

cao.

Page 30: SG8V1 Huong Dan Su Dung

Reset

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 30

4.4. Reset bởi stack

Reset bởi stack chỉ có thể xảy ra khi bit SRE (CPUSTA [7]) tích cực. Lúc này, có hai trạng thái

làm xuất hiện reset là:

Reset sinh ra do điều kiện tràn trên: Khi Stack đầy nhưng vẫn được nạp tiếp giá trị mới.

Reset sinh ra do điều kiện tràn dưới: Khi Stack rỗng nhưng vẫn bị yêu cầu lấy giá trị ra.

4.5. Reset bởi Watchdog

Khi CPU đang hoạt động, nếu Watchdog được bật thì một tác động reset sẽ được tạo ra khi

Watchdog bị tràn bộ đếm. Trong trường hợp CPU ở trạng thái rảnh (IDLE) thì sự kiện tràn bộ

đếm Watchdog sẽ làm CPU vào trạng thái wake-up.

Chú ý:

Tín hiệu reset_chip tích cực mức thấp. Tín hiệu này được tạo ra từ bốn nguồn là reset bởi người

dùng, reset chọn bộ lập trình Flash, reset bởi Stack và reset bởi Watchdog .

Tín hiệu reset lập trình tích cực mức thấp. Tín hiệu này được tạo bởi hai nguồn là reset bởi người

dùng và chân SPCS .

Tín hiệu reset chính sẽ reset bộ lập trình Flash, các bit trạng thái CPUSTA, ngoại trừ bit SRE.

Tín hiệu này tích cực mức cao và được tạo bởi hai nguồn là reset bởi người sử dụng và reset khi

chọn bộ lập trình.

Bảng 4-1: Điều kiện reset cho các thanh ghi đặc biệt

Nguồn Bộ đếm lập trình CPUSTA

Reset chính 0000h 000---00

Reset bởi chọn bộ lập trình Flash 0000h 0xx---xx

Reset bởi Stack 0000h 0xx---xx

Reset bởi WDT 0000h 0xx---xx

Wake up bởi WDT PC+1 uuu---uu

Wake up bởi ngắt PC+1 (*) uuu---uu

(*): Khi sự kiện wake up xảy ra bởi nguồn ngắt, nếu bit GIE/GIEH (GIC [2]) được tích cực hay

cả hai bit GIE/GIEH và PIE/GIEL (GIC [1]) được tích cực, sự thực thi sẽ đến vị trí vector ngắt.

Nếu không, sự thực thi sẽ trở về quá trình trước đó.

Page 31: SG8V1 Huong Dan Su Dung

Chân tín hiệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 31

5. Kết nối các chân tín hiệu đặc biệt

5.1. Tụ nguồn, Cap, SPCS

SG8V1

C3

C2

C1

VDD1

GND

VDD2

GND

VDD3 GND CAP

C

R

Rlimit

C4

SPCS

VDD

VDD

R3

Hình 5-1. Các tụ và điện trở kết nối ở các chân

Tất cả các giá trị chỉ là gợi ý

C1 C3: 0.1µF

C4: 10µF

R3: 300Ω 360Ω

R, Rlimit, C: xem mục 5.3 Reset

Chú ý:

Tất cả các chân VDD đều phải được cấp nguồn.

Page 32: SG8V1 Huong Dan Su Dung

Chân tín hiệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 32

5.2. Mạch kết nối thạch anh

clk

XTAL

OSC1

OSC2

Rs

C1

C2 SG8V1

Cs

Oscillator

Hình 5-2. Mạch kết nối thạch anh

Gía trị tụ C1, C2 khuyến cáo sử dụng: 12pF – 27pF

Giá trị của C1 và C2 thay đổi tùy theo tụ CL của thạch anh và tụ ký sinh Cs giữa hai chân OSC1

và OSC2 sau khi thực hiện PCB. Mối liên hệ giữa C1, C2, Cs và CL theo công thức sau:

CL = C1 x C2

C1 + C2 + Cs

Ví dụ, thạch anh có CL là 15pF và tụ kí sinh Cs là 5pF thì C1 = C2 = 20pF

Điện trở Rs dùng để hạn công suất tiêu tán của thạch anh. Nếu công suất tiêu tán của thạch anh

lớn hơn giá trị của nhà sản xuất đưa ra thì cần phải có điện trở trở Rs. Ngược lại, điện trở Rs

không cần thiết.

Giá trị Rs được xác định theo công thức sau:

Rs = ½ π.F.C2 với F là tần số của thạch anh

Khuyến cáo cho PCB:

Đặt thạch anh càng gần chân của bộ dao động càng tốt

Đặt vòng bảo vệ (GND) xung quanh các chân thạch anh

Các tín hiệu khác không nên đặt song song với tín hiệu ngõ vào OSC1 của bộ dao động

Đặt vùng GND ngay bên dưới thạch anh và chân của bộ dao động

Page 33: SG8V1 Huong Dan Su Dung

Chân tín hiệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 33

OSC1

OSC2

GND

Vòng bảo vệ (GND)

Vùng GND ở mặt dưới của board

SG8V1

C1

C2

Thạch anh

Hình 5-3. Layout cho chân thạch anh

5.3. Reset

Hình 5-4 là mạch reset dùng cho người sử dụng. Tín hiệu reset ngoài trên chân RST được tạo

bởi mạch RC (xem Hình 5-4). Giá trị đề nghị của điện trở là 10 KΩ và tụ C là 1 µF.

VDD

R

C

RST

Hình 5-4. Mạch kết nối đến chân RST cơ bản

Sau khi chân RST được kéo xuống mức thấp, tín hiệu reset nội phải mất một khoảng thời gian

gọi là thời gian trễ (tdelay) trước khi nó lên lại mức cao. Giá trị tối thiểu của tdelay khoảng 2.3RC

(xem trong Hình 5-5). Nếu R = 10KΩ và C = 1µF, tdelay ≈ 2.3 ×10K×1µ = 23 ms.

Page 34: SG8V1 Huong Dan Su Dung

Chân tín hiệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 34

0.9×VDD

tdelay

/RST

reset nội

VDD

V

t (s)

t (s)

V

Thời

gian trễ

Hình 5-5: Định thời mạch reset ngoài

Trong các ứng dụng cần hạn chế nhiễu, mạch reset có thể được mắc như sau:

VDD

R

C

RST

R limit

Hình 5-6. Mạch kết nối đến chân RST hạn chế nhiễu

Trong trường hợp, ứng dụng yêu cầu tụ C phải xả nhanh khi mất nguồn cấp VDD thì mạch reset

có thể được mắc thêm diode như sau:

VDD

R

C

RST

VDD

VDD

R

C

RST

R limit

VDD

Hình 5-7. Mạch reset được mắc thêm diode

Đối với các mạch reset, giá trị điện trở R được khuyến cáo từ 10KΩ đến 40KΩ. Giá trị điện trở

Rlimit được khuyến cáo từ 470Ω đến 5KΩ. Giá trị tụ C tối thiểu là 0.1µF.

Page 35: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ chương trình

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 35

6. Tổ chức bộ nhớ chương trình

Vi điều khiển SG8V1 có bộ đếm chương trình (PC) 16-bit, nó có thể định địa chỉ đến 64Kx16 bộ

nhớ chương trình. Khi PC trỏ đến ô nhớ cuối cùng của bộ nhớ chương trình (FFFFh), nếu nó tiếp

tục tăng lên nữa thì sẽ quay trở lại địa chỉ vec-tơ ngắt (0000h). Khi PC trỏ tới những vùng địa chỉ

chưa lập trình thì mã lệnh đọc được là FFh, mã lệnh này được CPU đối xử như là một lệnh

“Không thực thi” (NOP).

Vector RESET

Vector ngắt ưu tiên cao

0000H

0008H

FFFFH

PC [15:0]

stack mức 1

stack mức 15

.

.

15 0

Vector ngắt ưu tiên thấp 0010H

CALL / RETURN

Hình 6-1: Bản đồ địa chỉ của bộ nhớ dữ liệu

6.1. Bộ đếm chương trình

Bộ đếm chương trình (PC) có độ rộng là 16-bit. Nó chính là địa chỉ dùng để đọc bộ nhớ chương

trình. Dữ liệu đọc ra từ bộ nhớ chương trình chính là mã lệnh chuẩn bị được thực thi. Bình

thường, giá trị của PC sẽ tăng lên 1 sau mỗi chu kỳ xung clock để trỏ đến đọc một mã lệnh mới.

Tuy nhiên, đối với các lệnh rẽ nhánh chương trình như: SCALL, LCALL, SJMP, LJMP, JMPA,

giá trị của PC sẽ được cập nhật theo các giá trị tính toán sau khi thực hiện các lệnh rẽ nhánh này.

Page 36: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ chương trình

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 36

6.2. Stack

Giá trị của thanh ghi PC được xếp vào Stack khi một trong các sự kiện sau được thực hiện: sau

lệnh LCALL, SCALL, PUSH và đáp ứng ngắt. Ngược lại, đối với lệnh RET, RETA, RETI và

POP giá trị của PC sẽ được lấy ra khỏi stack.

Trong SG8V1, Stack hoạt động như một RAM có 15 word (mỗi word 16-bit) với địa chỉ để truy

xuất là Stack-Pointer (SP) 4 bit. SP có thể truy xuất được bằng phần mềm. Stack chỉ có thể chứa

tối đa 15 giá trị của PC. Do đó, CPU chỉ có thể xếp PC vào Stack được nhiều nhất 15 lần. Nếu

lần xếp thứ 16 được thực hiện, Stack sẽ bị tràn.

Quá trình xếp PC vào stack được thực hiện như sau:

Tăng Stack-Pointer thêm 1

Ghi giá trị PC vào vùng nhớ của Stack được trỏ bởi Stack-Pointer vừa nhận được

Quá trình lấy PC ra khỏi stack được thực hiện như sau:

Giá trị PC cần lấy chính là giá trị của vùng nhớ trong Stack được trỏ bởi Stack-Pointer

hiện tại.

Sau khi lấy xong giá trị của PC, Stack-Pointer giảm đi 1.

6.2.1. Truy xuất giá trị mới nhất của Stack (TS: Top of Stack)

TS là giá trị vùng nhớ của Stack được trỏ bởi Stack-Pointer (SP). TS có thể đọc/ghi bằng phần

mềm. TS được chia thanh 2 thanh ghi TSH (chứa byte cao của TS) và TSL (chứa byte thấp của

TS). Người dùng có thể đọc cặp thanh ghi TSH và TSL để biết được giá trị hiện tại của TS.

Khi mới khởi động, SP bằng 0. Tại vị trí này, giá trị của TS không có nghĩa (người dùng không

sử dụng giá trị này).

Chú ý:

Người sử dụng nên cấm ngắt toàn cục trong khi truy xuất stack để tránh việc tràn stack không

mong muốn.

Page 37: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ chương trình

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 37

0C10h

1111

1101

0000

1101

Con trỏ Stack

SP[3:0]

0Ch 10h

TSH TSL

Thanh ghi Top of Stack

Stack [14:0]

-

Hình 6-2: Stack và các thanh ghi liên quan

6.2.2. Stack Pointer (SP)

6.2.2.1. Mô tả

Stack-Pointer (SP) là thanh ghi 4 bit dùng để trỏ giá trị mới nhất của stack (Top of stack). SP có

thể đọc/ghi bằng phần mềm.

Mỗi lần xếp PC vào stack, SP tăng thêm 1.

Mỗi lần lấy giá trị PC ra khỏi stack (POP, trở về từ chương trình ngắt hay chương trình con), SP

giảm đi 1.

Việc đọc/ghi trực tiếp TS bằng phần mềm không ảnh hưởng đến giá trị của SP.

Trong quá trình sử dụng stack, người dùng nên chú ý các điểm sau:

Khi stack đã đầy (SP = 15), nếu tiếp tục xếp PC vào stack sẽ làm tràn stack ngưỡng trên. Bit

SOV sẽ set lên 1 (bit này chỉ có thể xóa khi bật nguồn hoặc xóa bằng phần mềm).

Tương tự, khi stack đang rỗng (SP=0), việc lấy PC ra khỏi stack sẽ làm cho bit SUNF bật lên

1(bit này chỉ có thể xóa khi bật nguồn hoặc xóa bằng phần mềm).

Khi có các sự kiện trên, hai trường hợp sau xảy ra:

Bit SRE bằng 1 sẽ làm SG8V1 khởi động lại.

Bit SRE bằng 0 không làm SG8V1 khởi động lại. Tuy nhiên, giá trị của TS và SP sẽ

không thay đổi.

Page 38: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ dữ liệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 38

7. Tổ chức bộ nhớ dữ liệu

7.1. Bộ nhớ Flash Data Memory

SG8V1 hỗ trợ vùng nhớ flash kích thước 1536x16 bit (3KB) để lưu trữ dữ liệu. Mỗi lần truy xuất

16 bit (1 word) hoặc 1 page (64 word) bằng lệnh MRF hoặc MFR (xem mục 20. Bộ điều khiển

truy xuất Flash).

15 0

.

.

.

0x000

0x5FF

Hình 7-1: Bộ nhớ Flash Data Memory

7.2. Bộ nhớ RAM

Vi điều khiển SG8V1 có 16 Kbytes bộ nhớ dữ liệu. Trong VĐK là một khối bộ nhớ truy cập

ngẫu nhiên tĩnh (SRAM). Để truy cập một ô nhớ thì một địa chỉ 14 bit sẽ cấp đến bộ nhớ dữ liệu

và đọc về 8-bit giá trị ngõ ra. Địa chỉ truy xuất có thể theo chế độ trực tiếp hoặc gián tiếp (mục

7.2.5.3 Định địa chỉ gián tiếp qua con trỏ). Bộ nhớ được chia thành 64 băng, mỗi băng chứa 256

byte dữ liệu.

Nội dung của bộ nhớ dữ liệu bao gồm các thanh ghi chức năng đặc biệt (SFR) và các thanh ghi

mục đích chung (GPR). Các thanh ghi SFR được dùng chứa các bit điều khiển và trạng thái hoạt

động của lõi CPU và các ngoại vi. Các thanh ghi GPR thì dùng chứa dữ liệu người dùng trong

lúc các ứng dụng được thực thi. Trong bộ nhớ dữ liệu có những vùng ô nhớ không được thực

hiện phần cứng, việc đọc đến các ô nhớ này sẽ trả về giá trị 0.

Hình 7-2 là cấu trúc của bộ nhớ dữ liệu.

Page 39: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ dữ liệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 39

Các thanh ghi chức năng

cơ bản

Các thanh ghi chức năng

cơ bản

Các thanh ghi chức năng

cơ bản

Các thanh ghi chức năng

đặc biệt

5BH

00H

FFH

00H

FFH

BANK0 BANK1 BANK62 BANK63

FFH

00H

FFH

BS [5:0] = 00000 BS [5:0] = 000001 BS [5:0] = 111110 BS [5:0] = 111111

00H

Các thanh ghi chức năng

cơ bản

BSE (BANK SELECTION): đối số được lấy từ mã lệnh bit [8]

BSE= 0: truy cập đến BANK0

BSE= 1: truy cập đến đến BANK được chỉ ra bởi thanh ghi BS

Hình 7-2: Cấu trúc bộ nhớ dữ liệu

7.2.1. Thanh ghi chọn băng

Bộ nhớ dữ liệu của SG8V1 được chia thành 64 băng thuận tiện trong việc truy xuất bộ nhớ. Việc

lựa chọn băng sẽ sử dụng thanh ghi BS để trỏ đến, thanh ghi này có 6 bit (BS0 đến BS5). Các bit

này chính là các bit cao từ bit 12 đến bit 8 của địa chỉ dùng để truy cập đến bộ nhớ dữ liệu. Với

các lệnh có các bit trong mã lệnh dùng để định địa chỉ như: ADDR, CLR, INC, DEC… thì 8-bit

thấp của mã lệnh chính là 8-bit địa chỉ thấp của địa chỉ truy cập bộ nhớ dữ liệu. Địa chỉ cuối cùng

chính là ghép của 6 bit chọn băng và 8-bit từ mã lệnh tạo thành địa chỉ 14 bit. Giá trị của thanh

ghi chọn băng BS có thể ghi vào bằng lệnh IBS. Cách thực hiện ghép các bit để tạo ra địa chỉ truy

xuất bộ nhớ dữ liệu được trình bày trên Hình 7-3.

Đối với người sử dụng, trước khi truy xuất phải đảm bảo giá trị trong thanh ghi BS đã trỏ đến

đúng băng cần dùng. Trong bộ nhớ dữ liệu, có một số thanh ghi chức năng không có đầy đủ tất

cả các bit trong thanh ghi, khi ghi đến thì sẽ bỏ qua, khi đọc ra thì trả về giá trị là 0. Việc thực

hiện các phép toán với các thanh không có cũng sẽ trả về kết quả bình thường và cập nhật các

thanh ghi trạng thái hoạt động (nếu có).

Page 40: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ dữ liệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 40

Bank 0

Bộ nhớ dữ liệu

Bank 1

Bank 2

Bank 3

000h

100h

200h

300h

BS [5:0] = 000010 (chọn băng)

Instruction [7:0] = 1111_1111

Bank 63

3F00h

14 bit địa chỉ

Hình 7-3: Sử dụng thanh ghi BS để chọn băng

7.2.2. Truy cập nhanh bộ nhớ dữ liệu

Đối với các lệnh có bao gồm việc định địa chỉ thanh ghi trong mã lệnh, bit số 8 của mã lệnh (bit

bse) sẽ hỗ trợ cơ chế chuyển đổi nhanh băng cần dùng cho người lập trình. Cụ thể như sau, khi

giá trị của bit bse =0, điều này có nghĩa là lệnh sẽ truy cập đến các thanh ghi nằm trong băng 0.

Ngược lại, bse=1 thì truy cập vào các thanh ghi nằm trong băng được chọn bởi thanh ghi BS.

Với việc hỗ trợ này, người lập trình có thể chuyển đổi nhanh giữa băng 0 và các băng khác mà

không cần phải chuyển đổi giá trị thanh ghi BS cho mỗi lần truy xuất.

7.2.3. Thanh ghi mục đích chung

Chip SG8V1 có tầm địa chỉ các thanh ghi mục đích chung từ 5Bh của băng 0 cho đến địa chỉ

cuối của bộ nhớ dữ liệu là 3FFFh trong băng 63. Giá trị của các thanh ghi này không được reset

khi bật nguồn hay do các nguồn reset khác. Vì vậy để đảm bảo, người sử dụng phải luôn luôn ghi

giá trị vào trước sau đó mới sử dụng lại các thanh ghi này.

7.2.4. Thanh ghi chức năng đặc biệt

Tập thanh ghi chức năng đặc biệt (SFR) của SG8V1 bao gồm tất cả là 91 thanh ghi. Chúng nằm

từ địa chỉ 000h đến 05Ah. Các bit trong thanh ghi sử dụng cho việc điều khiển và trạng thái của

Page 41: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ dữ liệu

© 2014 ICDREC SG8V1 – Hướng dẫn sử dụng 41

CPU và các ngoại vi. Về tên, địa chỉ, chức năng của các thanh ghi xem trong Bảng 7-1. Về chi

tiết chức năng cho từng bit trong thanh ghi sẽ được trình bày trong các mục của ngoại vi tương

ứng.

Page 42: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ dữ liệu

© 2014 ICDREC SG8V1 User manual 42

Bảng 7-1: Các thanh ghi chức năng đặc biệt

Ghi chú:

u = không thay đổi, x = không xác định, - = không thực hiện, đọc ra là „0‟, q = giá trị phụ thuộc điều kiện.

Nhóm Tên thanh ghi Địa chỉ Giá trị reset Mô tả

Các thanh ghi hệ thống

IDA0 0x000 N/A Indirect Access 0

IDA1 0x001 N/A Indirect Access 1

IDAOFF0 0x002 N/A Indirect Access with Offset 0

IDAOFF1 0x003 N/A Indirect Access with Offset 1

IDAINC0 0x004 N/A Indirect Access and then Increment Data Pointer 0

IDAINC1 0x005 N/A Indirect Access and then Increment Data Pointer 1

INCIDA0 0x006 N/A Increase Data Pointer 0 and then Indirect Access 0

INCIDA1 0x007 N/A Increase Data Pointer 1 and then Indirect Access 1

IDADEC0 0x008 N/A Indirect Access and then Decrease Data Pointer 0

IDADEC1 0x009 N/A Indirect Access and then Decrease Data Pointer 1

DECIDA0 0x00A N/A Decrease Data Pointer 0 and then Indirect Access

DECIDA1 0x00B N/A Decrease Data Pointer 1 and then Indirect Access

DPH0 0x00C --uu uuuu Indirect Data Memory Address Pointer 0 High Byte

DPL0 0x00D uuuu uuuu Indirect Data Memory Address Pointer 0 Low Byte

DPH1 0x00E --uu uuuu Indirect Data Memory Address Pointer 1 High Byte

DPL1 0x00F uuuu uuuu Indirect Data Memory Address Pointer 1 Low Byte

BS 0x010 --00 0000 Bank Select Register

SP 0x011 ---- 0000 Stack Pointer Control

TSH 0x012 xxxx xxxx Top of Stack High Byte

TSL 0x013 xxxx xxxx Top of Stack Low Byte

HI 0x014 uuuu uuuu Product Register High Byte

LO 0x015 uuuu uuuu Product Register Low Byte

CF 0x016 ---- -uuu Calculation Flags

CPUSTA 0x017 0uu- --uu (*) Central Processing Unit Status

Page 43: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ dữ liệu

© 2014 ICDREC SG8V1 User manual 43

TPS 0x018 0000 0000 Table Page Select

DPOFF 0x019 uuuu uuuu Data Pointer Offset

Bộ điều khiển ngắt

GIC 0x01A ---- -000 Global Interrupt Control

INTEDG 0x01B ---- 1111 Interrupt Edge Control

IE1 0x01C 0000 0000 Interrupt Enable 1

IP1 0x01D 1111 1111 Interrupt Priority 1

IF1 0x01E xxxx 0000 Interrupt Flag 1

IE2 0x01F 0000 0000 Interrupt Enable 2

IP2 0x020 1111 1111 Interrupt Priority 2

IF2 0x021 0000 0000 Interrupt Flag 2

IE3 0x022 ---- -000 Interrupt Enable 3

IP3 0x023 ---- -111 Interrupt Priority 3

IF3 0x024 ---- -000 Interrupt Flag 3

PORTA PORTB PORTC PORTD

DIRA 0x025 0000 0000 Direction of Port A data

DIRB 0x026 0000 0000 Direction of Port B data

DIRC 0x027 0000 0000 Direction of Port C data

DIRD 0x028 0000 0000 Direction of Port D data

PORTA 0x029 xxxx xxxx Port A data

PORTB 0x02A xxxx xxxx Port B data

PORTC 0x02B xxxx xxxx Port C data

PORTD 0x02C xxxx xxxx Port D data

WATCHDOG /TIMER0

WT0CON 0x02D 0011 1111 Watchdog and Timer0 Control

T0REG 0x02E uuuu uuuu Timer0 Register

TIMER1

T1CON 0x02F 0000 0000 Timer1 Control

T1RH 0x030 uuuu uuuu Timer1 High Byte Register

T1RL 0x031 uuuu uuuu Timer1 Low Byte Register

CCRH 0x032 uuuu uuuu Capture/Compare High Byte Register

CCRL 0x033 uuuu uuuu Capture/Compare Low Byte Register

TIMER2 T2CON 0x034 0-00 0000 Timer2 Control

T2RL 0x035 0000 0000 Timer2 Register Low Byte

Page 44: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ dữ liệu

© 2014 ICDREC SG8V1 User manual 44

T2PRL 0x036 1111 1111 Timer2 Period Low Byte

T2H 0x037 --11 --00 Timer2 High Period and High Register

TIMER3

T3CON 0x038 0-00 0000 Timer3 Control

T3RL 0x039 0000 0000 Timer3 Register Low Byte

T3PRL 0x03A 1111 1111 Timer3 Period Low Byte

T3H 0x03B --11 --00 Timer3 High Period and High Register

UART1

U1STA 0x03C 0010 0000 UART1 Status Register

U1CON 0x03D 0000 0000 UART1 Control Register

U1BRL 0x03E 0000 0000 UART1 Baudrate Register Low Byte

U1TXREG 0x03F 0000 0000 UART1 Transmitter Data Register

U1RXREG 0x040 0000 0000 UART1 Receiver Data Register

UART2

U2STA 0x041 0010 0000 UART2 Status Register

U2CON 0x042 0000 0000 UART2 Control Register

U2BRL 0x043 0000 0000 UART2 Baudrate Register Low Byte

U2TXREG 0x044 0000 0000 UART2 Transmitter Data Register

U2RXREG 0x045 0000 0000 UART2 Receiver Data Register

UART3

U2STA 0x046 0010 0000 UART3 Status Register

U2CON 0x047 0000 0000 UART3 Control Register

U2BRL 0x048 0000 0000 UART3 Baudrate Register Low Byte

U2TXREG 0x049 0000 0000 UART3 Transmitter Data Register

U2RXREG 0x04A 0000 0000 UART3 Receiver Data Register

PWM1 PWM1CON 0x04B 00-- --uu PWM1 Control

PWM1RL 0x04C uuuu uuuu PWM1 Register Low Byte

PWM2 PWM2CON 0x04D 00-- --uu PWM2 Control

PWM2RL 0x04E uuuu uuuu PWM2 Register Low Byte

SPI

SPICON 0x04F 0--0 0000 SPI Control

SPISTA 0x050 ---- -000 SPI Status

SPIBUF 0x051 uuuu uuuu SPI Buffer

I2C I2CCON1 0x052 0000 0100 I2C Control 1

I2CCON2 0x053 1000 0000 I2C Control 2

Page 45: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ dữ liệu

© 2014 ICDREC SG8V1 User manual 45

I2CSTA 0x054 0000 0000 I2C Status

CNTH/ADDRH 0x055 0000 0000 I2C High Count Time Register

CNTL/ADDRL 0x056 0000 0000 I2C Low Count Time Register / I2C Slave Address

I2CBUF 0x057 uuuu uuuu I2C Buffer

ADC

ADCON1 0x058 0--- 0000 ADC Control 1 Register

ADCON2 0x059 ---- ---1 ADC Control 2 Register

ADBUF 0x05A uuuu uuuu ADC Buffer

FLASH

FLASH_CTRL 0x05B ---- -000 Flash control

FPTH 0x5C uuuu uuuu Flash high pointer

FPTL 0x5D uuuu uuuu Flash low pointer

(*) Hai bit thấp của thanh ghi này [1:0] có giá trị là 0 sau khi bật nguồn.

Page 46: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 46

7.2.5. Các chế độ định địa chỉ bộ nhớ

Bộ nhớ chương trình chỉ có thể định địa chỉ bằng nội dung thanh ghi bộ đếm chương trình (PC),

như bộ nhớ dữ liệu có thể truy cập bằng 3 cách định địa chỉ. Hầu hết các lệnh chỉ sử dụng một

kiểu định địa chỉ. Một số lệnh có thể sử dụng đến 3 kiểu định địa chỉ, nó phụ thuộc vào các toán

hạng được sử dụng. Các kiểu lệnh địa chỉ thì như sau:

Kế thừa và giá trị từ mã lệnh

Trực tiếp

Gián tiếp qua con trỏ

7.2.5.1. Kế thừa và giá trị từ mã lệnh

Trong tập lệnh của SG8V1 có một số lệnh điều khiển hoạt động của hệ thống. Các lệnh này sẽ

tác động trực tiếp đến giá trị các thanh ghi điều khiển mà không cần phải thực hiện định địa chỉ

thông qua mã lệnh chương trình. Các lệnh LCALL và LJUMP thì bao gồm luôn cả địa chỉ đích rẽ

nhánh trong mã lệnh.

7.2.5.2. Định địa chỉ trực tiếp

Trong kiểu định địa chỉ trực tiếp, địa chỉ của nguồn và đích được lấy ra từ mã lệnh. Bit cho biết

nguồn băng được lựa chọn sẽ được dùng trong kiểu định địa chỉ này. Nếu bit bse có giá trị là 1

thì nội dung của thanh ghi BS sẽ được dùng để chọn băng dữ liệu. Nếu bit bse là 0 thì băng 0 sẽ

được sử dụng.

Kết quả sau khi tính toán sẽ được lưu ngược trở lại thanh ghi. Trong các mã lệnh có ghi giá trị trở

lại thanh ghi, bit dst sẽ chọn nguồn ghi đến. Nếu dst = 1, kết quả sẽ lưu vào thanh ghi reg được sử

dụng. Nếu dst = 0, kết quả sẽ lưu lại thanh ghi ACC.

7.2.5.3. Định địa chỉ gián tiếp qua con trỏ

Ngoài phương pháp định địa chỉ trực tiếp, SG8V1 còn hỗ trợ phương pháp định địa chỉ gián tiếp

qua các con trỏ địa chỉ. Hệ thống có 2 thanh ghi con trỏ là IDA0 và IDA1, tương ứng với mỗi

con trỏ là một cặp thanh ghi DPHx và DPLx. Các thanh ghi con trỏ được đặt trong vùng các

thanh ghi chức năng đặc biệt nên việc lập trình truy xuất đến có thể thực hiện dễ dàng. Các con

trỏ rất hữu dụng trong thực hiện truy các dữ liệu có cấu trúc hoặc các mảng bộ nhớ.

Các trường hợp truy xuất địa chỉ sử dụng con trỏ sẽ có các trường hợp như sau:

Page 47: SG8V1 Huong Dan Su Dung

Tổ chức bộ nhớ dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 47

Truy cập địa chỉ con trỏ và tăng giá trị con trỏ lên 1: dùng thanh ghi INCIDAx (tăng trước

khi truy xuất) hoặc IDAINCx (tăng sau khi truy xuất).

Truy cập địa chỉ con trỏ và giảm giá trị con trỏ xuống 1: dùng thanh ghi DECIDAx (giảm

trước khi truy xuất) hoặc IDADECx (giảm sau khi truy xuất).

Truy cập địa chỉ con trỏ cộng với offset: dùng thanh ghi IDAOFFx. Thanh DPOFF chính

là offset được cộng vào các con trỏ trong trường hợp này. Nó được dùng chung cho cả 2

con trỏ IDA0 và IDA1. Thanh ghi này chứa giá trị 8-bit có dấu nghĩa là nằm trong tầm từ

-128 đến +127 tính từ vị trí của con trỏ.

Ví dụ 7-1: Xóa toàn bộ các ô nhớ trong Băng 1

IDP0 0x100 ;

NEXT CLR IDAINC0, 0 ; Xóa ô nhớ địa chỉ 100h sau đó giá trị của con trỏ

TBZ DPL0, 0 ; kiểm tra xem đã làm xong hết cho Băng1 chưa ?

SJMP NEXT ; Chưa, xóa ô tiếp theo

CONTINUE ; Tiếp tục thực hiện các chương trình sau đó

Chú ý:

Nếu người lập trình sử dụng cách định địa chỉ gián tiếp, nhưng vị trí con trỏ chỉ đến chính là địa

chỉ của các thanh ghi nội dung con trỏ DPHx hoặc DPLx thì kết quả có không đúng như mong

muốn. Trong trường hợp này, giá trị của thanh ghi DPHx hoặc DPLx sẽ nhận từ kết quả của quá

trình tính toán.

Page 48: SG8V1 Huong Dan Su Dung

Bộ nhân 8-bit

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 48

8. Bộ nhân 8-bit

Chip SG8V1 có hỗ trợ một bộ nhân 8-bit phần cứng trong khối thực thi mã lệnh ALU. Phép nhân

sử dụng là nhân không dấu. Kết quả trả về là giá trị 16-bit lưu trong cặp thanh ghi tích HI và LO.

Lệnh nhân không ảnh hưởng đến bất cứ cờ trạng thái nào của hệ thống (thanh ghi CF). Phép toán

nhân trả về dữ liệu sau một chu kỳ xung clock giúp tăng hiệu năng của hệ thống và giảm kích

thước mã lệnh chương trình khi phải dùng các giải thuật nhân bằng phần mềm.

Ví dụ 8-1 là một đoạn chương trình dùng để thực hiện nhân 2 số trong thanh ghi Reg1 và Reg2

với nhau. Lệnh LD chỉ dùng để nạp giá trị Reg1 vào thanh ghi ACC. Nếu giá trị Reg1 đã có sẵn

trong ACC thì chỉ cần lệnh nhân là đủ.

Ví dụ 8-1: nhân hai số 8-bit không dấu

LD Reg1, 1; nạp số nhân vô thanh ghi Reg1

MULR Reg2, 1; nhân giá trị của thanh ghi Reg1 với Reg2: ARG1 * ARG2 -> HI:LO

Page 49: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 49

9. Ngắt

SG8V1 có 19 nguồn ngắt:

4 ngắt ngoài

1 ngắt Timer0

1 ngắt Timer1

1 ngắt Timer2

1 ngắt Timer3

6 ngắt UART

2 ngắt I2C

1 ngắt SPI

1 ngắt Capture / Compare

1 ngắt ADC

Các ngắt này có thể cấu hình ở một trong 2 mức ưu tiên: ưu tiên cao (vector ngắt là 0008h) hoặc

thấp (vector ngắt là 0010h).

Ngắt ưu tiên cao được đáp ứng bất kỳ lúc nào, kể cả lúc chương trình đáp ứng dành cho ngắt ưu

tiên thấp đang được thực thi. Trong trường hợp này, SG8V1 sẽ tạm dừng chương trình phục vụ

ngắt ưu tiên thấp. Sau khi chương trình ngắt ưu tiên cao thực hiện xong thì chương trình phục vụ

ngắt thấp sẽ được tiếp tục.

Khi bắt đầu vào chương trình ngắt ưu tiên cao, bit cho phép ngắt toàn cục (GIE) sẽ bị xóa. Vì

vậy, trong thời gian này, tất cả các sự kiện ngắt sẽ bị bỏ qua. Các ngắt này sẽ được xem xét sau

khi chương trình đáp ứng ngắt ưu tiên cao thực hiện xong.

Khi cả hai sự kiện ngắt ưu tiên cao và thấp cùng xảy ra thì ngắt ưu tiên cao sẽ được đáp ứng

trước.

Để cho phép ngắt, trước hết người sử dụng phải set bit cho phép ngắt toàn cục GIE lên 1. Sau đó,

người sử dụng có thể set bit IPE để cho phép ngắt theo độ ưu tiên.

Nếu IPE có giá trị 0, tất cả các ngắt đều có độ ưu tiên ngang nhau và có vector ngắt là 0008h. Khi

đó, bit GIC[1] được hiểu là bit cho phép ngắt ngoại vi (PIE). Để cho phép ngắt ngoại vi, người

dùng phải set bit này lên 1 và ngược lại.

Nếu IPE có giá trị 1, bit GIC[2] sẽ được hiểu là bit cho phép ngắt ưu tiên cao (GIEH). Khi một

ngắt ưu tiên cao được đáp ứng thì bit GIE/GIEH sẽ tự động xóa bằng phần cứng. Do đó, tất cả

các ngắt sau đó sẽ được bỏ qua cho tới khi chương trình ngắt đó hoàn thành (gặp lệnh RETI). Bit

Page 50: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 50

GIC[1] sẽ là bit cho phép ngắt ưu tiên thấp. Bit này cũng tự động xóa khi một ngắt ưu tiên thấp

được đáp ứng. Khi đó, tất cả các ngắt ưu tiên thấp khác sẽ bị bỏ qua, trừ ngắt ưu tiên cao.

Khi vào chương trình ngắt, đầu tiên, người sử dụng nên sao lưu lại các thanh ghi ACC, CPUSTA

và BS vì những thanh ghi này có thể thay đổi trong quá trình thực thi lệnh. Tiếp theo, nếu có

nhiều ngắt cùng độ ưu tiên xảy ra cùng lúc, người dùng có thể kiểm tra và quyết định xem ngắt

nào cần được đáp ứng.

Trước khi thoát khỏi chương trình đáp ứng ngắt, người sử dụng cần phải làm các việc sau:

Phục hồi lại các thanh ghi ACC, CPUSTA, BS đã sao lưu trước đó

Xóa cờ ngắt của ngắt vừa được đáp ứng

Lệnh RETI dùng để thoát khỏi chương trình đáp ứng ngắt. Nếu ngắt đang được đáp ứng có độ ưu

tiên cao thì lệnh RETI sẽ làm cho bit GIE/GIEH tự động bật lên 1. Ngược lại, nếu ngắt có độ ưu

tiên thấp thì bit GIEL sẽ tụ động bật lên 1.

Sau đây là mô tả hoạt động của các thanh ghi liên quan đến việc điều khiển ngắt:

9.1. Thanh ghi quản lý ngắt toàn cục (GIC)

Tên Bit R/W Mô tả

Bit dự trữ [7:3] U Không thực hiện

GIE/GIEH [2] R/W Khi IPE =1: cho phép ngắt theo

độ ưu tiên.

GIC[2] có nghĩa là bit cho phép

ngắt có độ ưu tiên cao GIEH:

0: cấm tất cả các ngắt

1: cho phép ngắt có độ ưu

tiên cao

Khi IPE=0: không cho phép

ngắt theo độ ưu tiên (tất cả các

ngắt đều đối xử như nhau).

GIC[2] có nghĩa là bit cho phép

Page 51: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 51

Tên Bit R/W Mô tả

ngắt toàn cục GIE:

0: cấm tất cả các ngắt

1: cho phép tất cả các ngắt

PIE/GIEL [1] R/W Khi IPE =1: cho phép ngắt theo

độ ưu tiên.

GIC[1] có nghĩa là bit cho phép

ngắt có độ ưu tiên thấp GIEL:

0: cấm các ngắt có độ ưu

tiên thấp

1: cho phép các ngắt có độ

ưu tiên thấp

Khi IPE=0: không cho phép

ngắt theo độ ưu tiên (tất cả các

ngắt đều đối xử như nhau)

GIC[1] có nghĩa là bit cho phép

ngắt của ngoại vi PIE:

0: cấm ngắt của tất cả các

ngoại vi (không kể ngắt

ngoài)

1: cho phép ngắt của tất cả

các ngoại vi (không kể

ngắt ngoài)

IPE [0] R/W Bit cho phép ngắt theo độ ưu tiên

0: không cho phép ngắt

theo độ ưu tiên

1: cho phép ngắt theo độ

ưu tiên

Page 52: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 52

9.2. Thanh ghi điều khiển ngắt theo cạnh (INTEDG)

Tên Bit R/W Mô tả

Bit dự trữ [7:4] U Không thực hiện

INTEDG3 [3] R/W Bit cấu hình cạnh tích cực của

ngắt ngoài 3

1: tích cực cạnh lên

0: tích cực cạnh xuống

INTEDG2 [2] R/W Bit cấu hình cạnh tích cực của

ngắt ngoài 2

1: tích cực cạnh lên

0: tích cực cạnh xuống

INTEDG1 [1] R/W Bit cấu hình cạnh tích cực của

ngắt ngoài 1

1: tích cực cạnh lên

0: tích cực cạnh xuống

INTEDG0 [0] R/W Bit cấu hình cạnh tích cực của

ngắt ngoài 0

1: tích cực cạnh lên

0: tích cực cạnh xuống

9.3. Thanh ghi cho phép ngắt 1 (IE1)

Tên Bit R/W Mô tả

X3IE [7] R/W Bit cho phép ngắt ngoài 3

1: cho phép ngắt

0: cấm ngắt

X2IE [6] R/W Bit cho phép ngắt ngoài 2

1: cho phép ngắt

0: cấm ngắt

X1IE [5] R/W Bit cho phép ngắt ngoài 1

1: cho phép ngắt

0: cấm ngắt

X0IE [4] R/W Bit cho phép ngắt ngoài 0

1: cho phép ngắt

Page 53: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 53

Tên Bit R/W Mô tả

0: cấm ngắt

T3IE [3] R/W Bit cho phép ngắt Timer3

1: cho phép ngắt

0: cấm ngắt

T2IE [2] R/W Bit cho phép ngắt Timer2

1: cho phép ngắt

0: cấm ngắt

T1IE [1] R/W Bit cho phép ngắt Timer1

1: cho phép ngắt

0: cấm ngắt

T0IE [0] R/W Bit cho phép ngắt Timer0

1: cho phép ngắt

0: cấm ngắt

9.4. Thanh ghi độ ưu tiên ngắt 1 (IP1)

Tên Bit R/W Mô tả

X3IP [7] R/W Bit cấu hình độ ưu tiên của ngắt

ngoài 3:

1: ưu tiên cao

0: ưu tiên thấp

X2IP [6] R/W Bit cấu hình độ ưu tiên của ngắt

ngoài 2:

1: ưu tiên cao

0: ưu tiên thấp

X1IP [5] R/W Bit cấu hình độ ưu tiên của ngắt

ngoài 1:

1: ưu tiên cao

0: ưu tiên thấp

X0IP [4] R/W Bit cấu hình độ ưu tiên của ngắt

ngoài 0:

1: ưu tiên cao

0: ưu tiên thấp

Page 54: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 54

Tên Bit R/W Mô tả

T3IP [3] R/W Bit cấu hình độ ưu tiên của ngắt

Timer 3:

1: ưu tiên cao

0: ưu tiên thấp

T2IP [2] R/W Bit cấu hình độ ưu tiên của ngắt

Timer 2:

1: ưu tiên cao

0: ưu tiên thấp

T1IP [1] R/W Bit cấu hình độ ưu tiên của ngắt

Timer 1:

1: ưu tiên cao

0: ưu tiên thấp

T0IP [0] R/W Bit cấu hình độ ưu tiên của ngắt

Timer 0:

1: ưu tiên cao

0: ưu tiên thấp

9.5. Thanh ghi lưu cờ ngắt 1 (IF1)

Tên Bit R/W Mô tả

X3IF [7] R/W Cờ ngắt ngoài 3

Khi INTEDG3=1:

0: Không có cạnh lên ở

chân INT3

1: Phát hiện cạnh lên ở

chân INT3 (xóa bằng phần

mềm)

Khi INTEDG3=0:

0: Không có cạnh xuống ở

chân INT3

1: Phát hiện cạnh xuống ở

chân INT3 (xóa bằng phần

mềm)

Page 55: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 55

Tên Bit R/W Mô tả

X2IF [6] R/W Cờ ngắt ngoài 2

Khi INTEDG2=1:

0: Không có cạnh lên ở

chân INT2

1: Phát hiện cạnh lên ở

chân INT2 (xóa bằng phần

mềm)

Khi INTEDG2=0:

0: Không có cạnh xuống ở

chân INT2

1: Phát hiện cạnh xuống ở

chân INT2 (xóa bằng phần

mềm)

X1IF [5] R/W Cờ ngắt ngoài 1

Khi INTEDG1=1:

0: Không có cạnh lên ở

chân INT1

1: Phát hiện cạnh lên ở

chân INT1 (xóa bằng phần

mềm)

Khi INTEDG1=0:

0: Không có cạnh xuống ở

chân INT1

1: Phát hiện cạnh xuống ở

chân INT1 (xóa bằng phần

mềm)

X0IF [4] R/W Cờ ngắt ngoài 0

Khi INTEDG0=1:

0: Không có cạnh lên ở

chân INT0

1: Phát hiện cạnh lên ở

chân INT0 (xóa bằng phần

mềm)

Khi INTEDG0=0:

0: Không có cạnh xuống ở

chân INT0

Page 56: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 56

Tên Bit R/W Mô tả

1: Phát hiện cạnh xuống ở

chân INT0 (xóa bằng phần

mềm)

T3IF [2] R/W Cờ ngắt của Timer 3

0: Không có sự kiện tràn

Timer 3

1: Bật lên khi tràn Timer 3

(xóa bằng phần mềm)

T2IF [2] R/W Cờ ngắt của Timer 2

0: Không có sự kiện tràn

Timer 2

1: Bật lên khi tràn Timer 2

(xóa bằng phần mềm)

T1IF [1] R/W Cờ ngắt của Timer 1

0: Không có sự kiện tràn

Timer 1

1: Bật lên khi tràn Timer 1

(xóa bằng phần mềm)

T0IF [0] R/W Cờ ngắt của Timer 0

0: Không có sự kiện tràn

Timer 0

1: Bật lên khi tràn Timer 0

(xóa bằng phần mềm)

9.6. Thanh ghi cho phép ngắt 2 (IE2)

Tên Bit R/W Mô tả

CCIE [7] R/W Bit cho phép ngắt của khối chức

năng bắt/so sánh sự kiện trong

Timer1:

1: cho phép ngắt

0: cấm ngắt

SPIIE [6] R/W Bit cho phép ngắt SPI

1: cho phép ngắt

0: cấm ngắt

Page 57: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 57

Tên Bit R/W Mô tả

U3RCIE [5] R/W Bit cho phép ngắt khi UART3

nhận dữ liệu

1: cho phép ngắt

0: cấm ngắt

U3TXIE [4] R/W Bit cho phép ngắt khi UART3

phát dữ liệu

1: cho phép ngắt

0: cấm ngắt

U2RCIE [3] R/W Bit cho phép ngắt khi UART2

nhận dữ liệu

1: cho phép ngắt

0: cấm ngắt

U2TXIE [2] R/W Bit cho phép ngắt khi UART2

phát dữ liệu

1: cho phép ngắt

0: cấm ngắt

U1RCIE [1] R/W Bit cho phép ngắt khi UART1

nhận dữ liệu

1: cho phép ngắt

0: cấm ngắt

U1TXIE [0] R/W Bit cho phép ngắt khi UART1

phát dữ liệu

1: cho phép ngắt

0: cấm ngắt

9.7. Thanh ghi độ ưu tiên ngắt 2 (IP2)

Tên Bit R/W Mô tả

CCIP [7] R/W Bit cấu hình độ ưu tiên ngắt của

khối chức năng bắt/so sánh sự

kiện trong Timer1:

1: ưu tiên cao

0: ưu tiên thấp

SPIIP [6] R/W Bit cấu hình độ ưu tiên ngắt của

SPI

Page 58: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 58

Tên Bit R/W Mô tả

1: ưu tiên cao

0: ưu tiên thấp

U3RCIP [5] R/W Bit cấu hình độ ưu tiên ngắt của

UART3 khi nhận dữ liệu

1: ưu tiên cao

0: ưu tiên thấp

U3TXIP [4] R/W Bit cấu hình độ ưu tiên ngắt của

UART3 khi phát dữ liệu

1: ưu tiên cao

0: ưu tiên thấp

U2RCIP [3] R/W Bit cấu hình độ ưu tiên ngắt của

UART2 khi nhận dữ liệu

1: ưu tiên cao

0: ưu tiên thấp

U2TXIP [2] R/W Bit cấu hình độ ưu tiên ngắt của

UART2 khi phát dữ liệu

1: ưu tiên cao

0: ưu tiên thấp

U1RCIP [1] R/W Bit cấu hình độ ưu tiên ngắt của

UART1 khi nhận dữ liệu

1: ưu tiên cao

0: ưu tiên thấp

U1TXIP [0] R/W Bit cấu hình độ ưu tiên ngắt của

UART1 khi phát dữ liệu

1: ưu tiên cao

0: ưu tiên thấp

9.8. Thanh ghi lưu cờ ngắt 2 (IF2)

Tên Bit R/W Mô tả

CCIF [7] R/W Bit lưu cờ ngắt của khối chức

năng bắt/so sánh sự kiện trong

Timer1:

0: không có ngắt trong quá

trình bắt/so sánh sự kiện

Page 59: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 59

Tên Bit R/W Mô tả

1: có ngắt trong quá trình

bắt/so sánh sự kiện (phải

xóa bằng phần mềm)

SFIIF [6] R/W Bit lưu cờ ngắt của SPI

0: không có sự kiện gây

ngắt xảy ra

1: sau khi truyền/nhận

xong 1 byte dữ liệu (phải

xóa bằng phần mềm)

U3RCIF [5] R/W Bit lưu cờ ngắt của UART3 khi

nhận dữ liệu

0: FIFO nhận của UART3

rỗng

1: FIFO nhận của UART3

có dữ liệu (tự động xóa khi

FIFO nhận của UART3

rỗng)

U3TXIF [4] R/W Bit lưu cờ ngắt của UART3 khi

phát dữ liệu

0: thanh ghi phát của

UART3 chứa dữ liệu có

nghĩa

1: thanh ghi phát của

UART3 rỗng (thanh ghi

phát của UART3 chứa dữ

liệu có nghĩa)

U2RCIF [3] R Bit lưu cờ ngắt của UART2 khi

nhận dữ liệu

0: FIFO nhận của UART2

rỗng

1: FIFO nhận của UART2

có dữ liệu (tự động xóa khi

FIFO nhận của UART2

rỗng)

U2TXIF [2] R Bit lưu cờ ngắt của UART2 khi

phát dữ liệu

0: thanh ghi phát của

UART2 chứa dữ liệu có

nghĩa

1: thanh ghi phát của

UART2 rỗng (thanh ghi

Page 60: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 60

Tên Bit R/W Mô tả

phát của UART2 chứa dữ

liệu có nghĩa)

U1RCIF [1] R Bit lưu cờ ngắt của UART1 khi

nhận dữ liệu

0: FIFO nhận của UART1

rỗng

1: FIFO nhận của UART1

có dữ liệu (tự động xóa khi

FIFO nhận của UART1

rỗng)

U1TXIF [0] R Bit lưu cờ ngắt của UART1 khi

phát dữ liệu

0: thanh ghi phát của

UART1 chứa dữ liệu có

nghĩa

1: thanh ghi phát của

UART1 rỗng (thanh ghi

phát của UART1 chứa dữ

liệu có nghĩa)

9.9. Thanh ghi cho phép ngắt 3 (IE3)

Tên Bit R/W Mô tả

Bit dự trữ [7:3] U Không thực hiện

ADIE [2] R/W Bit cho phép ngắt ADC

0: Cấm ngắt

1: Cho phép ngắt

I2CBCIE [1] R/W Bit cho phép ngắt khi xung đột

bus I2C

0: Cấm ngắt

1: Cho phép ngắt

I2CIE [0] R/W Bit cho phép ngắt khi truyền/nhận

dữ liệu trên bus I2C

0: Cấm ngắt

1: Cho phép ngắt

Page 61: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 61

9.10. Thanh ghi độ ưu tiên ngắt 3 (IP3)

Tên Bit R/W Mô tả

Bit dự trữ [7:3] U Không thực hiện

ADIP [2] R/W Bit cấu hình độ ưu tiên ngắt ADC

0: ưu tiên thấp

1: ưu tiên cao

I2CBCIP [1] R/W Bit cấu hình độ ưu tiên ngắt khi

xung đột bus I2C

0: ưu tiên thấp

1: ưu tiên cao

I2CIP [0] R/W Bit cấu hình độ ưu tiên ngắt khi

truyền/nhận dữ liệu trên bus I2C

0: ưu tiên thấp

1: ưu tiên cao

9.11. Thanh ghi lưu cờ ngắt 3 (IF3)

1) Tên Bit R/W Mô tả

Bit dự trữ [7:3] U Không thực hiện

ADIF [2] R/W Bit lưu cờ khi ngắt khi chuyển đổi

ADC hoàn thành

0: không có sự kiện gây

ngắt

1: bật lên khi chuyển đổi

ADC hoàn thành

I2CBCIF [1] R/W Bit lưu cờ ngắt khi xung đột bus

I2C

0: không có xung đột bus

1: có xung đột bus

Page 62: SG8V1 Huong Dan Su Dung

Ngắt

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 62

1) Tên Bit R/W Mô tả

I2CIF [0] R/W Bit lưu cờ ngắt khi truyền/nhận dữ

liệu trên bus I2C

Chế độ Master:

0: không có sự kiện gây

ngắt

1: Sau khi bit start hoặc bit

stop được tạo ra; hoặc sau

khi nhận một byte dữ liệu;

hoặc (và) nhận hay truyền

xong một ACK (phải xóa

bằng phần mềm)

Chế độ Slave:

0: không có sự kiện gây

ngắt

1: sau khi nhận được một

ACK; sau khi phát hiện

được một bit start hoặc

stop (nếu được cho phép)

(phải xóa bằng phần mềm)

Page 63: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 63

10. Cổng truy xuất dữ liệu (General Purpose Input/Output -

GPIO)

Chip SG8V1 có tất cả 4 nhóm GPIO, mỗi nhóm là 8 cổng truy xuất (port). Một số port được kết

hợp với những chức năng đặc trưng của các ngoại vi. Bình thường, các port có nhiệm vụ truy

xuất dữ liệu vào/ra, khi một ngoại vi có sử dụng port được sử dụng, thì những port này sẽ không

dùng được ở trạng thái truy xuất thông thường mà dành riêng cho chức năng của ngoại vi đó. Tất

cả các port được pull-up với điện trở 75 KΩ (trừ SDA và SCL của I2C) và một mạch Schmitt

Trigger cho ngõ vào.

IO_PAD được sử dụng cho các port là một bộ đệm hai chiều với mạch CMOS Schmitt tại ngõ

vào có dòng hoạt động là 10mA và cổng đệm 3 trạng thái ngõ ra tại vị trí O. Chi tiết của một cell

IO_PAD như sau:

P

I

O

DIR

PU

Vcc

Hình 10-1: Cell chuẩn của IO_PAD

Bảng 10-1: Mô tả chân của một IO_PAD

Chân Mô tả

P PAD

PU Weak pull-up

DIR Điều khiển chiều

O Dữ liệu ra PAD

I Dữ liệu lấy từ PAD

Hình trên là mô tả của hầu hết các GPIO trong thiết kế SG8V1. Dữ liệu ra được cho phép hay

không bằng bit định chiều DIR. Do đó DIR cũng chính là bit cho phép dữ liệu của Port truyền ra

ngoài. Và dữ liệu vào luôn được lấy từ Port bất chấp giá trị của bit DIR nên khi Port được cấu

hình là một ngõ ra, thì lệnh đọc Port chính là đọc thanh ghi dữ liệu ra (đọc ngược lại hay đọc

vòng) mà không phải là dữ liệu từ bên ngoài. Người sử dụng cần phải cẩn thận trong các trường

hợp dùng ngắt ngoài hay đọc ngược lại từ Port.

Page 64: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 64

Ngõ vào PU được gán cứng cho mỗi chân khác nhau. Hầu hết các chân đều là weak pull-up bằng

cách kết nối PU với mức điện áp cao qua một transistor PMOS. Những chân đặc biệt sau không

kết nối ngõ vào PU dạng weak pull-up:

Chân lựa chọn lập trình Flash (Serial program chip select - SPCS), chân SPCS cần kết nối

dạng weak pull-down.

PortD[5] (SDA) và PortD[4] ( SCL) cho chức năng I2C: các chân này không cần kết nối

ngõ vào PU. Vì thế nếu sử dụng chức năng I2C, cần phải có một số điện trở ngoài kéo lên

nguồn ở những chân này.

Bảng 10-2: Mô tả chiều

Ngõ vào Ngõ ra

DIR PU O P

1 x 0 0

1 x 1 1

0 0 x x

0 1 x RH

Bảng 10-3: Mô tả bảng nhận dữ liệu

Ngõ vào Ngõ ra

PU P I

x 0 0

x 1 1

1 RH 1

Mỗi Port có 3 thanh ghi với những chức năng như sau:

Thanh ghi DIR: thanh ghi lập trình chiều truyền của Port.

Thanh ghi PORTIN: thanh ghi dữ liệu chiều vào của Port, dùng khi đọc từ Port. Đây là

thanh ghi chỉ đọc.

Thanh ghi PORTOUT: thanh ghi dữ liệu ra của Port, dùng khi ghi dữ liệu ra Port. Đây là

thanh ghi chỉ ghi.

Page 65: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 65

D Q

Q D

IO Pin

DIR latch

Data bus

Write to port /WE

D Q

/WEWrite to DIR

Portin

Input

buffer

Portout

Hình 10-2: Mô tả một kết nối Port cơ bản

Hai thanh ghi PORTOUT và PORTIN có chung địa chỉ đích, PORTOUT là thanh ghi chỉ ghi và

thanh ghi PORTIN là thanh ghi chỉ đọc. Khi ghi dữ liệu xuống Port, dữ liệu được chốt tại

PORTOUT, nếu Port được cấu hình là ngõ ra thì PORTOUT được kết nối trực tiếp với PAD. Dữ

liệu tại PAD (có thể là từ bên ngoài nếu Port được cấu hình là ngõ vào hay chính là PORTOUT

nếu Port được cấu hình là ngõ ra) sẽ được lấy trực tiếp vào PORTIN, khi người sử dụng đọc Port

chính là đọc thanh ghi PORTIN.

Ở mức ứng dụng, thanh ghi dữ liệu Port được gọi chung là PORTA, PORTB…Đây là thanh ghi

cho phép đọc và ghi và là tổ hợp chức năng của PORTOUT và PORTIN.

Khi các Port được chia sẻ chức năng với các ngoại vi, nếu ngoại vi tích cực chức năng có sử

dụng Port thì các thanh ghi PORTOUT, PORTIN hay một trong hai sẽ bị cách ly và dành chức

năng truy xuất cho ngoại vi cho đến khi ngoại vi dừng truy xuất.

Mức điện áp cao tại tất cả các GPIO là 3.3V.

10.1. GPIO PortA

PortA 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. Tất cả các chân PortA được pull-up.

Khi bit DIRA = 0 thì PortA là ngõ vào. Khi bit DIRA = 1 thì PortA là ngõ ra. PortA có 2 thanh

ghi lưu dữ liệu: một thanh lưu dữ liệu đưa ra PortA do CPU ghi vào (DATAOUTA), một thanh

ghi nhận dữ liệu từ PortA (DATAINA).

Page 66: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 66

PORTA

Portout

D Q

Q D

Input

buffer

DIR latch

/WE

D Q

/WE

Portin

Data bus

Write to port

Write to DIR

Hình 10-3: IO PortA

Bảng 10-4: Thanh ghi DIRA

Tên Bit R/W Mô tả

DIRA [7:0] R/W

Thanh ghi xác định chiều dữ liệu của PortA. Mỗi bit trong thanh

ghi DIR tương ứng với một chân trong PortA.

0: DATAINA = PortA

1: PortA = DATAOUTA.

Bảng 10-5: Mô tả thanh ghi PORTA

Tên Bit R/W Mô tả

PORTA[7:0] [7:0]

R

Khi CPU đọc tại địa chỉ PORTA, dữ liệu gửi về là từ thanh ghi

DATAINA. Mỗi bit trong thanh ghi DATAINA tương ứng với một

chân trong PortA.

W

Khi CPU ghi vào tại địa chỉ PORTA, dữ liệu được ghi vào thanh

ghi DATAOUTA. Mỗi bit trong thanh ghi DATAOUTA tương ứng

với một chân trong PortA khi DIRA = 1.

10.2. GPIO PortB

PortB 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. Tất cả các chân PortB được pull-up.

Khi bit DIRB = 0 thì PortB là ngõ vào. Khi bit DIRB = 1 thì PortB là ngõ ra. PortB có 2 thanh

ghi lưu dữ liệu: một thanh ghi lưu dữ liệu đưa ra PortB do CPU ghi vào (DATAOUTB), một

thanh ghi nhận dữ liệu từ PortB (DATAINB).

Bên cạnh chức năng GPIO, PortB còn được sử dụng cho các chức năng khác như bộ nạp chương

trình vào FLASH, UART2, Timer0.

Nếu Timer0 được sử dụng clock ngoài cho bộ đếm thì PortB[4] được cấu hình là ngõ vào.

Page 67: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 67

Nếu UART3 được sử dụng thì PortB[0] được cấu hình là ngõ vào và PortB[1] được cấu hình là

ngõ ra.

Nếu UART2 được sử dụng thì PortB[2] được cấu hình là ngõ vào và PortB[3] được cấu hình là

ngõ ra.

Khi nạp FLASH (SPCS=1) thì PortB[6 :5] được cấu hình là ngõ vào và PortB[7] được cấu hình

là ngõ ra. Ở chế độ này thì phần cứng đã tự động cấu hình PortB[7 :5].

Page 68: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 68

PORTB <4>/T1CLK

Timer0 external

clock

D Q

Q D

DIR latch

/WE

D Q

/WE

Portout

Portin

Input

buffer

Data bus

Write to port

Write to DIR

Hình 10-4: PortB[4] - dùng chung với Timer0

PORTB <0>/RX3

Q D

PORTB <1>/TX3

DIR latch

0

1TX3

U3ON

D Q

Q D

DIR latch

/WE

D Q

/WE

RX3

D Q

/WE

D Q

/WE

Data bus

Write to port

Write to DIR

Portout

Portin

Input

buffer

Data bus

Write to port

Write to DIR

Portout

Portin

Input

buffer

Hình 10-5: IO PortB[0:1] - dùng chung với UART3

PORTB <2>/RX2

Q D

PORTB <3>/TX2

DIR latch

0

1TX2

U2ON

D Q

Q D

DIR latch

/WE

D Q

/WE

RX2

D Q

/WE

D Q

/WE

Data bus

Write to port

Write to DIR

Portout

Portin

Input

buffer

Data bus

Write to port

Write to DIR

Portout

Portin

Input

buffer

Hình 10-6: IO PortB[2:3] - dùng chung với UART2

Page 69: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 69

Q D

PORTB <5>/spclk

PORTB<6>spdatai

EEPROM input

Q D

PORTB <7>/spdatao

DIR latch

0

1EEPROM output

spsc

D Q

/WE

D Q

/WE

D Q

/WE

D Q

/WE

Data bus

Write to port

Write to DIR

Input

buffer

Portin

PortoutData bus

Write to port

Write to DIR

DIR latch

Portout

Portin

Input

buffer

spcsspcs

Hình 10-7: IO PortB[5:7] - dùng chung với bộ lập trình FLASH

Bảng 10-6: Chức năng của PortB

Tên chân Bit DIR I/O Mô tả

PORTB[0]/RX3 0 I Dữ liệu vào /ngõ vào nối tiếp của UART3

1 O Dữ liệu ra

PORTB[1]/TX3 0 I Dữ liệu vào

1 O Dữ liệu ra /ngõ ra nối tiếp của UART3

PORTB[2]/RX2 0 I Dữ liệu vào /ngõ vào nối tiếp của UART2

1 O Dữ liệu ra

PORTB[3]/TX2 0 I Dữ liệu vào

1 O Dữ liệu ra /ngõ ra nối tiếp của UART2

PORTB[4]/T0CLK 0 I Dữ liệu vào /clock ngoài của Timer0

1 O Dữ liệu ra

PORTB[5]/SPCLK 0 I Dữ liệu vào /clock nối tiếp của bộ nạp FLASH

1 O Data output

PORTB[6]/SPDATAI 0 I

Dữ liệu vào / dữ liệu vào nối tiếp của bộ nạp

FLASH

1 O Dữ liệu ra

PORTB[7]/SPDATAO 0 I Dữ liệu vào

1 O Dữ liệu ra / dữ liệu ra nối tiếp của bộ nạp FLASH

Bảng 10-7: Thanh ghi DIRB

Tên Bit R/W Mô tả

DIRB [7:0] R/W

Thanh ghi xác định chiều dữ liệu của PortB. Mỗi bit trong thanh

ghi DIRB tương ứng với một chân trong PortB.

0: DATAINB = PortB

1: PortB = DATAOUTB.

Page 70: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 70

Bảng10-8: Mô tả thanh ghi PORTB

Tên Bit R/W Mô tả

PORTB [7:0]

R

Khi CPU đọc tại địa chỉ PORTB, dữ liệu gửi về là từ thanh ghi

DATAINB. Mỗi bit trong thanh ghi DATAINB tương ứng với một chân

trong PortB.

W

Khi CPU ghi vào tại địa chỉ PORTB, dữ liệu được ghi vào thanh ghi

DATAOUTB. Mỗi bit trong hanh ghi DATAOUTB tương ứng với một

chân trong PortB khi DIRB = 1.

Ngõ ra Port[3] còn phụ thuộc vào bit U2ON trong thanh ghi U2STA (xem phần 18.2.1 Thanh

ghi trạng thái của ngoại vi UART thứ x (UxSTA)).

Ngõ ra Port[1] còn phụ thuộc vào bit U3ON trong thanh ghi U3STA (xem phần 18.2.1 Thanh

ghi trạng thái của ngoại vi UART thứ x (UxSTA)).

10.3. GPIO PortC

PortC 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.

Tất cả các chân PortC được pull-up.

Khi bit DIRC = 0 thì PortC là ngõ vào. Khi bit DIRC = 1 thì PortC là ngõ ra. PortC có 2 thanh

ghi lưu dữ liệu: một thanh lưu dữ liệu đưa ra PortC do CPU ghi vào (DATAOUTC), một thanh

ghi nhận dữ liệu từ PortC vào (DATAINC).

Bên cạnh chức năng GPIO, PortC còn được sử dụng cho các chức năng khác như UART1, PWM,

SPI.

Nếu UART1 được sử dụng thì PortC[0] được cấu hình là ngõ vào và PortC[1] được cấu hình là

ngõ ra.

Nếu PWM được sử dụng thì PortC[2] và PortC[3] được cấu hình là ngõ ra.

Nếu SPI được sử dụng:

Chế độ master: PortC[5] được cấu hình là ngõ vào và PortC[4] và PortC[6] được

cấu hình là ngõ ra.

Chế độ slave: PortC[4], PortC[5] và PortC[7] được cấu hình là ngõ vào và

PortC[6] được cấu hình là ngõ ra.

Page 71: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 71

PORTC <0>/RX1

Q D

PORTC <1>/TX1

DIR latch

0

1TX1

U1ON

D Q

Q D

DIR latch

/WE

D Q

/WE

RX1

D Q

/WE

D Q

/WE

Data bus

Write to port

Write to DIR

Portout

Portin

Input

buffer

Data bus

Write to port

Write to DIR

Portout

Portin

Input

buffer

Hình10-8: IO PortC[0:1] - dùng chung với UART1

Q D

PORTC <2>/PWM1

PORTC <3>/PWM2

DIR latch

0

1PWM output

PWMxON

D Q

/WE

D Q

/WE

Data bus

Write to port

Write to DIR

Portout

Portin

Input

buffer

Hình10-9: IO PortC[2:3] - dùng chung với PWM

Q D

PORTC <4>/SCK

DIR latch

0

1SCK output

SPION

Q D

PORTC <5>/SDI

DIR latch

SDISCK input

D Q

/WE

D Q

/WE

D Q

/WE

D Q

/WE

Data bus

Write to port

Write to DIR

Input

buffer

Portout

Portin

Data bus

Write to port

Write to DIR

Portout

Portin

Input

buffer

Hình10-10: IO PortC[4:5] - dùng chung với SPI

Page 72: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 72

Q D

DIR latch

0

1SDO

SPION

PORTC <6>/SDO

Q D

PORTC <7>/SSx

Data latch

DIR latch

SSx

D Q

/WE

D Q

/WE

D Q

/WE

D Q

/WE

Data bus

Write to port

Write to DIR

Input

buffer

Data bus

Write to port

Write to DIR

Portout

Portin

Input

buffer

Hình10-11: IO PortC[6:7] - dùng chung với SPI

Bảng 10-9: Chức năng của PortC

Tên chân Bit DIR I/O Mô tả

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 10-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.

Page 73: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 73

Bảng10-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 18.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

15.5.1 PWMxCON)

Ngõ ra PortC[3] còn phụ thuộc vào bit PWM2ON trong thanh ghi PWM2CON (xem phần

15.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 16.2.1 Thanh ghi điều khiển SPI - SPICON)

10.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.

Page 74: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 74

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 <0>/INT0

PORTD <1>/INT1

PORTD <2>/INT2

PORTD <3>/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 10-12: IO PortD[0:3] - dùng chung với ngắt ngoài

Q D

PORTD <4>/SCL

DIR latch

0

10

I2CON

0

1Clock output

PORTD <5>/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 10-13: IO PortD[4:5] - dùng chung với I2C

Page 75: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 75

Q D

PORTD<6>/CC

DIR latch

0

1Output compare

T1ON

Input capture

CCEN

D Q

D Q

/WE

Data bus

Write to port

Write to DIR

Portin

Portout

Input

buffer

Hình 10-14: IO PortD[6] - dùng chung với Capture/Compare

Q D

PORTD <7>/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 10-15: IO PortD[7] - dùng chung với Timer1

Bảng10-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

Page 76: SG8V1 Huong Dan Su Dung

Cổng truy xuất dữ liệu

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 76

Bảng 10-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 10-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

17.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

14.5.1 TxCON ).

Page 77: SG8V1 Huong Dan Su Dung

Watchdog timer

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 77

11. Watchdog Timer

Watchdog Timer là một bộ đếm liên tục 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 bằng cách xóa bit WDTON.

Timer 0 và Watchdog Timer có một bộ đếm 8-bit dùng chung gọi là bộ đếm chia sẻ. Khi bộ đếm

chia sẻ 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

:65536Fosc

WDTON 0

1

From Timer0

clock sourcePostscaler

1:2 to 1:256

PS2:PS0

1

0

PSS

PSS

Watchdog

timeout

(reset)/RST

CLRWDT

PSS

(reset)

Hình 11-1 : Mô tả khối Watchdog Timer

Chú ý:

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.

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 11-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ả 12.4.1 WT0CON (Timer 0)

T0CKE [5] R/W Xem mô tả 12.4.1 WT0CON (Timer 0)

T0CKS [4] R/W Xem mô tả 12.4.1 WT0CON (Timer 0)

Page 78: SG8V1 Huong Dan Su Dung

Watchdog timer

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 78

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.

Page 79: SG8V1 Huong Dan Su Dung

Timer0

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 79

12. 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.

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 được.

Cho phép chọn xung clock nội hay từ bên ngoài.

Chọn cạnh đồng bộ khi dùng xung clock ngoài.

12.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

bộ đếm chia sẻ không được gán cho Timer 0) hay mỗi cạnh lên của xung clock tạo ra từ bộ đếm

chia sẻ (trong trường hợp dùng nguồn clock là clock thạch anh và bộ đếm chia sẻ được 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.

Page 80: SG8V1 Huong Dan Su Dung

Timer0

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 80

Synchronize

external clock

and edge detect

T0CKE

Fosc 0

1Programmable

Prescaler

T0CKS

3

PS[2:0]

1

0

PSS

T0REG Set T0IF

Portb[4]/T0CLK

T0ON

Hình 12-1: Mô tả sơ đồ khối Timer0

12.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.

12.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.

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

Page 81: SG8V1 Huong Dan Su Dung

Timer0

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 81

+ Chọn gán cho Timer 0 (PSS = 0), lập trình prescaler cho Timer 0.

12.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.

12.4.1. WT0CON

Bảng 12-1: Mô tả thanh ghi WT0CON

Tên bit R/W Mô tả

WDTON [7] R/W Xem mô tả 11 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

Page 82: SG8V1 Huong Dan Su Dung

Timer0

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 82

12.4.2. T0REG

Bảng 12-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 9.3, 9.4 và 9.5 để biết thêm chi tiết về các bit T0IE, T0IP và T0IF.

Xem phần 10.2 để biết thêm chi tiết về thanh ghi chọn chiều của PortB.

Page 83: SG8V1 Huong Dan Su Dung

Timer1

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 83

13. 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).

13.1. Chức năng của Timer 1

13.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.

Page 84: SG8V1 Huong Dan Su Dung

Timer1

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 84

Synchronize

external clock

and edge detect

Portd[7]/T1CLK

Fosc 0

1

T1CKS

Prescaler

2

T1PRES1:T1PRES0

ST1RH T1RL

T1ON

Set T1IF

Hình 13-1: Mô tả sơ đồ khối Timer 1

13.1.2. Các chế độ của Timer1

13.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.

13.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ử dụng 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.

13.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.

Page 85: SG8V1 Huong Dan Su Dung

Timer1

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 85

13.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.

13.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:

Page 86: SG8V1 Huong Dan Su Dung

Timer1

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 86

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.

13.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).

Page 87: SG8V1 Huong Dan Su Dung

Timer1

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 87

Fall and rise

edge detect

prescaler

CCMOD[2:0]

CCEN

(Capture

Enable)

CCRH CCRL

T1RH T1RL

Set CCIF

PORTD[6]/CC

Hình 13-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.

13.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 13-3: Sơ đồ của khối so sánh sự kiện

13.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.

Page 88: SG8V1 Huong Dan Su Dung

Timer1

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 88

13.3.1. T1CON

Bảng 13-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

Page 89: SG8V1 Huong Dan Su Dung

Timer1

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 89

13.3.2. T1RH

Bảng 13-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.

13.3.3. T1RL

Bảng 13-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.

13.3.4. CCRH

Bảng 13-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.

13.3.5. CCRL

Bảng 13-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 9.3, 9.4 và 9.5 để biết thêm chi tiết về các bit T1IE, T1IP và T1IF.

Xem phần 9.6, 9.7 và 9.8 để biết thêm chi tiết về các bit CCIE, CCIP và CCIF

Xem phần 10.4 để biết thêm chi tiết về các bit cấu hình chiều của PortD

Page 90: SG8V1 Huong Dan Su Dung

Timer2 và Timer3

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 90

14. Timer 2 và Timer 3 (Timer_x)

14.1. Tổng quan Timer_x Do Timer 2 và Timer 3 được thiết kế giống nhau, do đó chúng sẽ được mô tả chung và được gọi

là Timer_x (x là 2 hoặc 3)

Timer_x là bộ định thời/đếm sự kiện 10-bit hỗ trợ bộ chia tần trước (prescaler) và bộ chia tần sau

(postscaler). Timer_x còn được dùng để tạo ra chu kỳ tần số của bộ tạo xung PWM (kết hợp với

khối tạo xung PWM). Thanh ghi bộ đếm của Timer_x cho phép đọc/ghi và bị xóa khi reset.

Timer_x hỗ trợ những tính năng sau:

Thanh ghi bộ đếm 10-bit (TxRH:Tx2RL) và thanh ghi đo chu kỳ thời gian 10-bit

(TxPRH:TxPRL).

Cho phép đọc/ghi các thanh ghi.

Hỗ trợ bộ chia tần trước với tỉ số chia 1:1, 1:4, 1:16 và 1:64

Hỗ trợ bộ chia tần sau với tỉ số chia từ 1:1 đến 1:16

Hỗ trợ ngắt

Kết hợp sử dụng với SPI như một bộ tạo xung dịch.

Khối Timer_x được điều khiển thông qua thanh ghi T2CON.

Prescaler1:4; 1:16; 1:64

Fosc

T2ON

ST2RH T2RL

T2PRH T2PRLPostscaler1:1,...1:16

T2PRES1:T2PRES0

T2POS3:T2POS0

(match)

(reset)

Set T2IF

Timer2 outputComparator

Hình 14-1: Sơ đồ khối Timer_x (Timer 2 hoặc Timer 3)

14.2. Hoạt động của Timer_x

Ở chế độ bình thường, bộ đếm Timer_x sẽ tăng tại mỗi cạnh lên xung clock hệ thống hoặc ngõ ra

khối chia tần trước trong trường hợp tỉ số chia tần trước khác 1:1). Tỉ số chia tần trước được chọn

thông qua các bit TxPRES[1:0]. Giá trị thanh ghi bộ đếm Timer_x TxRH:TxRL sẽ được so sánh

với giá trị của thanh ghi TxPRH:TxPRL tại mỗi chu kỳ xung clock hệ thống. Ngay khi hai giá trị

này bằng nhau, bộ so sánh sẽ phát tín hiệu báo bằng nhau. Tín hiệu bằng nhau này được dùng để

tạo chu kỳ xung PWM, hỗ trợ khối SPI, đồng thời dùng để reset giá tri bộ đếm TxRH:TxRL về

000h tại chu kỳ xung clock ngay sau đó và tích cực bộ chia tần ngõ ra.

Page 91: SG8V1 Huong Dan Su Dung

Timer2 và Timer3

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 91

Khi có tín hiệu reset, cặp thanh ghi TxRH:TxRL sẽ reset về 000h, trong khi cặp thanh ghi

TxPRH:TxPRL sẽ quay về giá trị 3FFh. Cả bộ chia tần trước và bộ chia tần sau đều bị reset trong

các trường hợp sau:

Lệnh ghi vào thanh ghi TxRL.

Bất kỳ tín hiệu reset nào (reset hệ thống, Watchdog timeout…)

Thanh ghi bộ đếm Timer_x không bị xóa khi xóa bit T2CON.

14.3. Ngắt Timer_x

Ngõ ra Timer_x (tạo ra khi giá trị TxRH:TxRL bằng với TxPRH:TxPRL) cung cấp tín hiệu đếm

lên cho bộ chia tần sau. Khi giá trị bộ đếm bộ chia tần sau bằng với giá trị cấu hình (bit

TxPOS[3:0]) thì ngắt xảy ra và cập nhật tại bit cờ ngắt TxIF. Ngắt này sẽ phát tới CPU nếu bit

cho phép ngắt TxIE bằng 1.

Ngõ ra so sánh của Timer_x (ứng với tần số so sánh) được dùng như chu kỳ của xung PWM tạo

ra từ bộ tạo xung PWM. Ngoài ra Timer_x còn được dùng như bộ tạo xung dịch cho khối SPI.

14.4. Đọc/ghi 10-bit trong Timer_x.

Timer_x hỗ trợ đọc ghi 10-bit giá trị tại 1 thời điểm đối với thanh ghi bộ đếm (TxRH:TxRL). Khi

lệnh đọc thanh ghi TxRL xảy ra, giá trị của TxRH đồng thời cập nhật vào một bộ đệm 2 bit ngay

lập tức. Do đó TxRH luôn nhận được giá trị bộ đếm cao tại ngay thời điểm đọc TxRL (khi đọc

TxRH sẽ đọc giá trị thanh ghi bộ đệm phụ). Ngược lại, quá trình ghi vào TxRH sẽ ghi giá trị

muốn ghi vào bộ đệm, sau đó lệnh ghi vào TxRL đồ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 TxRH sẽ cập nhật hoặc lấy

sai.

Chú ý:

1. Nếu người sử dụng muốn ghi 10-bit giá trị vào TxRH:TxRL thì phải tuân theo các bước

sau:

1. Ghi 2 bit vào TxRH trước

2. Sau đó tiếp tục ghi 8-bit vào TxRL

2. Nếu người sử dụng muốn đọc 10-bit giá trị của TxRH:TxRL thì phải tuân theo các bước

sau:

1. Đọc 8-bit giá trị từ TxRL trước

2. Sau đó đọc 2 bit giá trị từ TxRH

Page 92: SG8V1 Huong Dan Su Dung

Timer2 và Timer3

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 92

3. Do việc ghi vào TxRH 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 TxRH không gây reset bộ prescaler. Chỉ có quá trình ghi vào TxRL

với gây reset prescaler.

14.5. Thanh ghi

Thanh ghi bộ đếm Timer_x là cặp hai thanh ghi bộ đếm cao 2 bit TxRH và thanh ghi bộ đếm

thấp 8-bit TxRL. Hai thanh ghi này có thể đọc và ghi. Thanh ghi bộ đếm Timer_x sẽ tăng từ giá

trị lập trình đến giá trị so sánh và reset về 000h và tiếp tục quá trình đến giá trị so sánh. Ngắt

Timer_x khi được phép sẽ phát ngắt tại ngõ ra bộ chia tần sau.

14.5.1. TxCON

Bảng 14-1: Mô tả thanh ghi TxCON

Tên bit R/W Mô tả

TxON [7] R/W Bit tắt/mở Timer_x

0: tắt/cấm Timer_x

1: mở/cho phép Timer_x

Dự trữ [6] - Bit dự trữ

TxPRES [5:4] R/W Tỉ số chia tần trước.

00: tỉ lệ là 1:1

01: tỉ lệ là 1:4

10: tỉ lệ là 1:16

11: tỉ lệ là 1:64

TxPOS [3:0] Tỉ số chia tần sau

0000: tỉ lệ là 1:1

0001: tỉ lệ là 1:2

…..

1111: tỉ lệ là 1:16

14.5.2. TxRH

Bảng 14-2 Mô tả thanh ghi TxRH

Tên bit R/W Mô tả

TxRH [1:0] R/W Đây là thanh ghi lưu giá trị bộ đếm cao của Timer_x. Thanh ghi

này là một bộ đệm 2 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 TxRL và sẽ

lưu giá trị mà CPU muốn ghi vào bộ đếm cao. Xem thêm phần

“Đọc và ghi 10-bit thanh ghi bộ đếm Timer_x” để biết thêm thông

tin về thanh ghi này.

Page 93: SG8V1 Huong Dan Su Dung

Timer2 và Timer3

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 93

14.5.3. TxRL

Bảng 14-3 Mô tả thanh ghi TxRL

Tên bit R/W Mô tả

TxRL [7:0] R/W Đây là 8-bit thanh ghi bộ đếm thấp của Timer_x. Thanh ghi này

kết hợp với thanh ghi bộ đếm cao thành bộ đếm 10-bit.

14.5.4. TxPRH

Bảng 14-4 Mô tả thanh ghi TxPRH

Tên bit R/W Mô tả

TxPRH [7:0] R/W Đây là thanh ghi lưu 2 bit giá trị so sánh dùng để so sánh với 2 bit

TxRH của bộ đếm Timer_x.

14.5.5. TxPRL

Bảng 14-5 Mô tả thanh ghi TxPRL

Tên bit R/W Mô tả

TxPRL [7:0] R/W Đây là thanh ghi lưu 8 giá trị so sánh dùng để so sánh với 8-bit

TxRL của bộ đếm Timer_x.

Chú ý:

Xem phần 9.3, 9.4 và 9.5 để biết thêm chi tiết về các bit TxIE, TxIP và TxIF.

Page 94: SG8V1 Huong Dan Su Dung

Bộ tạo xung PWM

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 94

15. Bộ tạo xung PWM (The Pulse Width Modulation)

15.1. Tổng quan PWM_x Chip SG8V1 được thiết kế với hai bộ tạo xung băm PWM: PWM 1 và PWM 2. Tài liệu này mô

tả chung cho hai bộ tạo xung và gọi là PWM_x (x=1, 2).

Bộ tạo xung PWM_x được sử dụng để tạo dạng xung băm dùng cho nhiều ứng dung như điều

khiển động cơ, quản lý công suất…Khối PWM_x được dùng song song với Timer_x, người sử

dụng có thể lựa chọn kết nối với Timer 2 hoặc Timer 3.

Dạng sóng PWM ngõ ra có chu kỳ hoạt động chính là chu kỳ so sánh của Timer_x và chu kỳ

nhiệm vụ ứng với thời gian mà ngõ ra ở mức cao.

PWM_x có hai thanh ghi bộ so sánh 10-bit tạo chu kỳ nhiệm vụ: 8-bit thấp PWMxRL và hai bit

cao PWMxRH. Cả hai thanh ghi này đều cho phép đọc và ghi.

Chú ý:

Khi khối PWM_x không hoạt động (PWMxON = 0) thì ngõ ra bộ tạo xung mặc định có giá trị 0.

TxRH TxRL

Timer_x output

SPWM1RH SPWM1RL

PWM1RH PWM1RL

(reset)

(update)

Output drive

DIRC[2]

PORTC[2]/PWM1

Note: x = 2 or x = 3

comparator

From PWM1CON[1:0]

Hình 15-1: Sơ đồ của khối PWM_x

15.2. Chu kỳ xung PWM_x

Chu kỳ xung PWM_x được đặc trưng bởi giá trị lưu trong cặp thanh ghi so sánh TxPRH:TxPRL

của Timer_x. Chu kỳ xung PWM_x có thể được tính theo công thức sau:

Công thức 15-1: Công thức tính chu kỳ PWM_x

PWM_x period (s) = [(TxPRH:TxPRL) + 1] * TOSC * (giá trị bộ chia tần trước Timer_x)

Page 95: SG8V1 Huong Dan Su Dung

Bộ tạo xung PWM

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 95

Tần số xung băm được định nghĩa bằng 1/[PWM_x period]. Khi giá trị thanh ghi bộ đếm

Timer_x TxRH:TxRL bằng với thanh ghi chu kỳ so sánh TxPRH:TxPRL thì các sự kiện sau sẽ

xảy ra tại chu kỳ xung clock kế tiếp:

Thanh ghi bộ đếm Timer_x TxRH:TxRL bị xóa về 000h.

Giá trị chu kỳ nhiệm vụ PWM_x được chốt từ cặp thanh ghi PWMxRH:PWMxRL vào

thanh ghi ảnh của chúng SPWMxRH:SPWMxRL là thanh ghi dùng để so sánh.

Ngõ ra bộ tạo xung PWM_x được đặt lên cao (trừ trường hợp chu kỳ nhiệm vụ bằng 0).

Chú ý:

Bộ chia tần sau Timer_x không được sử dụng để tạo ra dạng xung PWM.

15.3. Chu kỳ nhiệm vụ

Chu kỳ nhiệm vụ PWM_x được đặc trưng bằng giá trị cặp thanh ghi PWMxRH:PWMxRL,

PWMxRL chứa 8 bit thấp và PWMxRH chứa 2 bit cao tạo thành 10 bit so sánh tạo chu kỳ nhiệm

vụ. Công thức sau mô tả cách tính chu kỳ nhiệm vụ:

Công thức 15-2: Công thức tính chu kỳ nhiệm vụ PWM_x:

PWM_x duty cycle (s) = (PWMxRH:PWMxRL) * Tosc * (giá trị bộ chia tần trước

Timer_x)

PWM1RH:PWM1RL có thể ghi bất cứ thời điểm nào, nhưng giá trị đó chỉ được cập nhật vào bộ

so sánh tại thời điểm ngõ ra Timer_x tích cực (xong một chu kỳ PWM_x).

Khi giá trị cặp thanh ghi PWMxRH:PWMxRL bằng giá trị bộ đếm Timer_x TxRH:TxRL, ngõ ra

PWM_x sẽ bị xóa về. Tỉ số PWM_X lớn nhất (Max resolution) được mô tả bằng công thức sau:

Công thức 15-3: Công thức tính “Max resolution”

Max Resolution = log (Fosc/Fpwm) / log 2

Chú ý:

Nếu chu kỳ nhiệm vụ lớn hơn chu kỳ xung PWM_x thì ngõ ra PWM_x luôn giữ mức cao.

Page 96: SG8V1 Huong Dan Su Dung

Bộ tạo xung PWM

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 96

Period cycle Period cycle Period cycle Period cycle

Duty cycle(DC)DCDC

Timer register = Period register

Timer register = PWM1RH:PWM1RL

Cập nhật giá trị mới

Giá trị bộ đếm Timer

Dạng sóng PWM

DC = 0%

Hình 15-2: Dạng sóng PWM

15.4. Cấu hình hoạt động cho khối PWM_x

Khi sử dụng chức năng tạo xung, người sử dụng nên tuân theo các bước sau:

Cấu hình chu kỳ xung PWM bằng cách ghi vào thanh ghi TxPRH:TxPRL.

Cấu hình chu kỳ nhiệm vụ bằng cách ghi vào thanh ghi PWMxRH:PWMxRL.

Cấu hình PortC[2] hoặc PortC[3] là một ngõ ra bằng cách đặt bit DIRC[2] hoặc bit

DIRC[3] lên mức cao. Người sử dụng nên xóa PORTC[2] hoặc PORTC[3] (trong thanh

ghi PORTC) để hệ thống hoạt động tốt hơn (xem chú ý sau).

Cài đặt cho Timer_x: xác định tỉ lệ chia tần trước, bật Timer_x (TxON = 1).

Cho phép khối PWM_x hoạt động (PWMxON = 1).

Chú ý:

Khi khối PWM_x hoạt động (PWMxON = 1) và khối PWM_x được cấu hình sử dụng cho một

ứng dụng nào đó (ví dụ điều khiển động cơ điện) thì PortC[2] hoặc PortC[3] được sử dụng làm

ngõ ra bộ tạo xung. Bình thường khi khối PWM_x bị tắt và PortC[2] hoặc PortC[3] được cấu

hình thành ngõ ra thì ngõ ra lúc này chính là giá trị bit [2] hoặc [3] của thanh ghi PORTC. Khi

khối PWM_x tắt từ trạng thái đang hoạt động, Port chức năng tương ứng được chuyển nhiệm vụ

và ngõ ra lúc này sẽ giữ “0” hoặc “1” tùy giá trị thanh ghi PORTC. Nếu lúc đó mạch ngoài chưa

ngắt chức năng điều xung thì sẽ nhận được tín hiệu điều xung nhỏ nhất (= 0) hoặc lớn nhất (= 1)

bất chấp khối PWM_x đã tắt.

Khi cả hai khối PWM 1 và PWM 2 cùng sử dụng một nguồn Timer, chúng sẽ có chu kỳ xung

PWM, tần số cập nhật giống nhau nhưng chu kỳ nhiệm vụ có thể khác nhau.

Page 97: SG8V1 Huong Dan Su Dung

Bộ tạo xung PWM

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 97

15.5. Thanh ghi

Khối PWM_x được điều khiển thông qua thanh ghi PWMxCON register. PWM_x có hai cặp

thanh ghi 10-bit: PWMxRH:PWMxRL và SPWMxRH:SPWMxRL, một dùng để chứa giá trị so

sánh của chu kỳ tiếp theo so sánh và một là thanh ghi so sánh.

15.5.1. PWMxCON

Bảng 15-1: Mô tả thanh ghi PWMxCON

Tên bit R/W Mô tả

PWMxON [7] R/W Bit tắt/mở chức năng PWM

0: tắt/cấm PWM_x

1: mở/cho phép PWM_x

PWMxST [6] R/W Bit chọn nguồn Timer

0: nguồn Timer là Timer 2

1: nguồn Timer là Timer 3

Dự trữ [5:2] - Bit dự trữ

PWMxRH [1:0]] R/W Thanh ghi chứa 2 bit cao của bộ so sánh tạo chu kỳ nhiệm vụ. Hai

bit này kết hợp với 8-bit PWMxRL tạo thành 10-bit so sánh với

TxRH:TxRL.

15.5.2. PWMxRL

Bảng 15-2: Mô tả thanh ghi PWMxRL

Tên bit R/W Mô tả

PWMxRL [7:0] R/W Thanh ghi chứa 8-bit thấp của bộ so sánh tạo chu kỳ nhiệm vụ.

Tám bit này kết hợp với 2 bit PWMxRH tạo thành 10-bit so sánh

với TxRH:TxRL.

Chú ý:

Xem phần 10.3 để biết thêm chi tiết về các bit cấu hình chiều của PortC

Page 98: SG8V1 Huong Dan Su Dung

SPI

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 98

16. Serial Peripheral Interface (SPI)

16.1. Giới thiệu SPI

SPI là một khối truyền/nhận đồng bộ nối tiếp. Khối SPI hoạt động với chế độ master hoặc slave.

Ở chế độ slave, khối SPI có thể giao tiếp với nhiều master.

Giao tiếp SPI được sử dụng khá rộng rãi trong cuộc sống như: dùng để đọc ghi bộ nhớ

EEPROM-SPI, điều khiển màn hình LCD, đọc dữ liệu từ các chip đo nhiệt độ chuyên dụng….

SPISR

SPIBUF

PortC[5] /

SDI

PortC[6] /

SDO

prescale

4, 16, 64

Fsoc

TMR2 / 2

clock select

SCK_O

SCK_I

protocol controller

SPIMS

PortC[4] /

SCK

PortC[7] /

SSx

Shift clock

SPISTASPICON

internal data bus

MODE[1:0]

Hình16-1: Sơ đồ khối SPI

Như mô tả hình trên, khối SPI có một bộ đệm 8-bit (SPIBUF) và một thanh ghi dịch (SPISR).

Khi bắt đầu quá trình truyền dữ liệu, thanh ghi SPISR sẽ cập nhật dữ liệu từ thanh ghi SPIBUF.

Khi có clock thì thanh ghi SPISR sẽ nhận dữ liệu từ SDI và phát ra ở SDO. Sau khi nhận và phát

xong 1 byte thì dữ liệu từ SPISR sẽ được đưa đến SPIBUF và bit SPIBF sẽ lên 1.

Giao tiếp của khối SPI gồm có các tín hiệu sau:

Ngõ ra nối tiếp (SDO) – PortC[6] /SDO

Ngõ vào nối tiếp (SDI) – PortC[5] /SDI

Clock nối tiếp (SCK) – PortC[4] /SCK

Trong chế độ slave có thể sử dụng thêm chân:

Page 99: SG8V1 Huong Dan Su Dung

SPI

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 99

Lựa chọn SPI slave (SSx) – PortC[7] /SSx

16.2. Các thanh ghi của SPI SPI có 3 thanh ghi. Chúng được sử dụng chung cho cả chế độ master và slave.

Bảng 16-1: Thanh ghi SPI

Tên thanh ghi Địa chỉ Mô tả

SPICON 0x04F Thanh ghi điều khiển

SPISTA 0x050 Thanh ghi trạng thái

SPIBUF 0x051 Thanh ghi đệm

Thanh ghi SPICON và SPISTA là thanh ghi điều khiển và thanh ghi trạng thái của SPI. Trong

thanh ghi SPISTA có bit BF chỉ được đọc, các bit còn lại có thể đọc và ghi.

Trong quá trình nhận dữ liệu, 2 thanh ghi SPIBUF và SPISR tạo thành bộ đệm 2 thanh ghi. Sau

khi nhận xong 1 byte thì dữ liệu sẽ được đưa đến SPIBUF. Trong khi SPIBUF đang chờ CPU

đọc dữ liệu thì SPISR có thể đang nhận byte thứ 2. Nếu SPISR nhận xong byte thứ 2 và giá trị

trong SPIBUF vẫn chưa được đọc thì giá trị SPISR bị mất đi và cờ tràn bật lên (SPIOV = 1).

Sau khi nhận xong 1 byte thì cờ ngắt SPIIF bật lên để yêu cầu CPU đọc dữ liệu từ thanh ghi

SPIBUF.

16.2.1. Thanh ghi điều khiển SPI - SPICON

Bảng16-2: Thanh ghi điều khiển SPI- SPICON

Tên Bit R/W Mô tả

SPION [7] R/W Bit bật/tắt SPI

0: Khối SPI không được cho phép hoạt động.

1: Khối SPI được cho phép hoạt động.

Dự trữ [6:4] R Không sử dụng

Giá trị đọc ra là 0

CKP [4] R/W Trạng thái nghỉ của SCK

0: Trạng thái nghỉ của SCK là ở mức thấp

1: Trạng thái nghỉ của SCK là ở mức cao

CKE [3] R/W Cạnh của SCK sử dụng để nhận dữ liệu

Page 100: SG8V1 Huong Dan Su Dung

SPI

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 100

Tên Bit R/W Mô tả

0: Nhận dữ liệu ở cạnh thứ hai

1: Nhận dữ liệu ở cạnh đầu tiên

SPIMS [2] R/W Chế độ master hay slave

0: Chế độ master

1: Chế độ slave

MODE [1:0] R/W Chế độ hoạt động của SPI.

Chế độ slave, cho phép cấu hình chế độ sử dụng SSx

00: Chân SSx được sử dụng như là tín hiệu cho phép SPI

01: SPI hoạt động không cần tín hiệu SSx

Chế độ master, hai bit này sử dụng để cấu hình tần số SCK cho SPI

00: SCK = Fosc/4

01: SCK = Fosc/16

10: SCK = Fosc/64

11: SCK = tmr2/2

Chú ý:

SPICON phải được cấu hình trước khi bật bit SPION = 1.

Khi SPI trong chế độ slave và sử dụng chân SSx, khi SSx =1 thì quá trình truyền dữ liệu của

SPI sẽ bị reset.

16.2.2. Thanh ghi trạng thái - SPISTA

Bảng 16-3: Thanh ghi trạng thái SPI- SPISTA

Tên Bit R/W Mô tả

Dự trữ [7:3] R Không sử dụng

Giá trị đọc ra là 0

SPIOV [2] R/W Bit tràn bộ đệm, chỉ sử dụng trong chế độ slave

0: Không bị tràn bộ đệm

1: Bị tràn bộ đệm. Khi SPI nhận xong 1 byte dữ liệu mà byte

Page 101: SG8V1 Huong Dan Su Dung

SPI

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 101

Tên Bit R/W Mô tả

trước đó trong SPIBUF vẫn chưa được đọc, thì giá trị SPISR

bị mất đi và bit SPIOV bật lên 1.

Ghi vào giá trị 0 để xóa bit này

SPIWCOL [1] R/W Xung đột dữ liệu trong quá trình phát.

0: Không bị xung đột

1: Bị xung đột, khi ghi dữ liệu vào thanh ghi SPIBUF để

phát ra bên ngoài, Nếu quá trình ghi xảy ra khi SPI đang

truyền dữ liệu trước đó thì bit SPIWCOL sẽ bật lên 1. Dữ

liệu trong SPIBUF sẽ bị SPISR ghi đè lên khi truyền xong 1

byte. Nên ghi dữ liệu vào SPIBUF khi mới chuẩn bị truyền

hoặc kết thúc byte truyền trước đó (SPIBF = 1).

Ghi vào giá trị 0 để xóa bit này

SPIBF [0] R Bit trạng thái của thanh ghi SPIBUF

0: Chưa nhận xong 1 byte

1: Nhận xong 1 byte

Bit này được xóa khi đọc thanh ghi SPIBUF

Chú ý:

Khi xung đột dữ liệu xảy ra thì dữ liệu phát đi có thể bị sai.

16.3. Hoạt động của SPI

Khi sử dụng ngoại vi SPI, người sử dụng cần chú ý đến các điểm như sau khi cấu hình:

SCK: Nếu ở chế độ master thì SCK là ngõ ra (SPIMS = 0) Nếu ở chế độ slave thì SCK

là ngõ vào (SPIMS = 1).

CKP: Trạng thái nghỉ của SCK

CKE: Cạnh nhận dữ liệu

MODE : Nếu ở chế độ master thì MODE sử dụng để cấu hình tần số SCK. Nếu ở chế độ

slave thì MODE sử dụng để cấu hình chế độ SSx.

Page 102: SG8V1 Huong Dan Su Dung

SPI

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 102

SPISR

Truyền dữ liệu của SPI

SPISR

SPIBUF SBIBUF

MASTER

CONTROL

SLAVE

CONTROL

SDI

SDI

SDO

SDO

SCK

SSx

MASTER SLAVE

SCK

GPIO

Hình16-2: Sơ đồ kết nối của SPI

Các trường hợp truyền nhận dữ liệu:

Master gửi dữ liệu thật – Slave gửi dữ liệu thật

Master gửi dữ liệu thật – Slave gửi dữ liệu giả

Master gửi dữ liệu giả – Slave gửi dữ liệu thật

Dữ liệu thật là dữ liệu muốn truyền. Dữ liệu giả là dữ liệu không được quan tâm.

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0SDI/SDO

SCK

(CKP=0, CKE=0)

SCK

(CKP=0, CKE=1)

SCK

(CKP=1, CKE=1)

SPIIF

SSx

SCK

(CKP=1, CKE=0)

Hình 16-3: Các chế độ truyền dữ liệu của SPI

Chú ý:

Nếu ngắt SPI được cho phép (SPIIE=1) thì cờ ngắt sẽ xảy ra khi SPI phát/nhận xong 8-bit.

Page 103: SG8V1 Huong Dan Su Dung

SPI

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 103

16.4. Các bước cấu hình SPI

16.4.1. Cấu hình SPI ở chế độ master

1. Cấu hình thanh ghi SPICON.

Chế độ master – SPIMS (SPICON [2] ) = 0.

Chế độ SCK – SPICKP: SPICKE (SPICON [4:3]).

Tốc độ truyền – SPIMODE [1:0] (SPICON [1:0]).

2. Cấu hình ngắt và độ ưu tiên ngắt.

SPIIE (IE2 [6]), cho phép cờ ngắt SPIIF.

Cấu hình SPIIP (IP2 [6]) để chọn mức ưu tiên ngắt.

3. Cấu hình các chân giao tiếp

PortC[5] /SDI là ngõ vào

PortC[6] /SDO và PortC[4] /SCK là ngõ ra.

4. Bật SPION.

SPION (SPICON [7]) = 1.

5. Sử dụng một chân GPIO và kéo xuống zero để cho phép SPI slave.

6. Ghi dữ liệu muốn gửi vào SPIBUF

7. Kiểm tra bit trạng thái SPIBF

SPIBUF = 0: Chưa truyền xong 1 byte

SPIBUF = 1: Truyền xong 1 byte

8. Khi SPIBUF = 1, đọc thanh ghi SPIBUF để xóa bit SPIBUF.

9. Quay lại bước 6 để tiếp tục quá trình truyền nhận.

Chú ý:

Chỉ ghi dữ liệu vào SPIBUF khi mà slave đã sẵn sàng nhận dữ liệu.

16.4.2. Cấu hình SPI ở chế độ slave

1. Cấu hình thanh ghi SPICON.

Chế độ slave – SPIMS (SPICON [2] ) = 1.

Chế độ SCK – SPICKP: SPICKE (SPICON [4:3]).

Chế độ điều khiển SSx – SPIMODE [1:0] (SPICON [1:0]).

Page 104: SG8V1 Huong Dan Su Dung

SPI

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 104

2. Cấu hình ngắt và độ ưu tiên ngắt.

SPIIE (IE2 [6] = 1), cho phép cờ ngắt SPIIF.

Cấu hình SPIIP (IP2 [6]) để chọn mức ưu tiên ngắt.

3. Cấu hình các chân giao tiếp

PortC[5] /SDI và PortC[4] /SCK là ngõ vào

PortC[7] /SSx là ngõ vào nếu sử dụng chân lựa chọn slave

PortC[6] /SDO là ngõ ra

4. Bật SPION.

SPION (SPICON [7]) = 1.

5. Ghi dữ liệu muốn gửi vào SPIBUF

6. Kiểm tra bit trạng thái SPIBF

SPIBUF = 0: Chưa truyền xong 1 byte

SPIBUF = 1: Truyền xong 1 byte

7. Khi SPIBUF = 1, đọc thanh ghi SPIBUF để xóa bit SPIBUF.

8. Quay lại bước 5 để tiếp tục quá trình phát và nhận. Nếu chỉ có quá trình nhận thì quay lại

bước thứ 6.

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0SDI/

SDO

SCK

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

byte 1 byte 2TDC

Hình 16-4: Dạng sóng của SPI slave (CKP = 0, CKE = 1)

Chú ý:

Tần số SCK nhỏ hơn một nửa của clock hệ thống (SCK < FOSC / 2).

TDC lớn hơn 4 lần chu kỳ clock hệ thống. Nếu tần số SCK nhỏ hơn 4 lần clock hệ thống

(SCK < FOSC / 4) thì TDC không cần quan tâm.

Khi sử dụng SSx và SSx bị kéo lên cao khi đang truyền một byte, thì dữ liệu đó sẽ bị mất đi và

không làm thay đổi các bit trạng thái của SPI

Page 105: SG8V1 Huong Dan Su Dung

SPI

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 105

bit 7 bit 6 bit 5SDI/SDO

SCK

(CKP=0, CKE=0)

SCK

(CKP=0, CKE=1)

SCK

(CKP=1, CKE=1)

SPIIF

SSx

SCK

(CKP=1, CKE=0)

bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0

Hình 16-5: Đồng bộ tín hiệu SPI SSx

Chú ý:

Trong quá trình truyền nhận dữ liệu không được thay đổi chế độ hoạt động (ghi dữ liệu vào thanh

ghi SPICON khi SPI đang truyền nhận dữ liệu).

Page 106: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 106

17. Inter-Integrated Circuit (I2C)

Ngoại vi I2C hỗ trợ đầy đủ các chức năng của chế độ Master và Slave của chuẩn bus I2C. Nó có

thể cấu hình hoạt động với các chức năng sau:

Master và có ngắt có start và stop bit

Master không có ngắt start và stop bit

Slave 10-bit địa chỉ và có ngắt có start và stop bit

Slave 7-bit địa chỉ và có ngắt có start và stop bit

Slave 10-bit địa chỉ không có ngắt có start và stop bit

Slave 7-bit địa chỉ và không có ngắt có start và stop bit

Khối I2C có thể hoạt động ở 2 chế độ tốc độ:

Standard mode (100kb/s): tần số xung clock tối thiểu là 1 MHz

Fast mode (400kb/s): tần số xung clock tối thiểu là 4 MHz

Hai chân tín hiệu sử dụng cho I2C:

SCL

SDA

17.1. Thanh ghi của I2C

Ngoại vi I2C có 6 thanh ghi tất cả. Chúng được dùng chung cho cả Master và Slave

17.1.1. I2CCON1

17.1.1.1. Chế độ Master

Bảng 17-1: Mô tả thanh ghi I2CCON1 ở chế độ Master

Tên Bit R/W Mô tả

I2CON [7] R/W Dùng để tắt/mở I2C (sử dụng

chung cho Master và Slave)

0: Tắt I2C

1: Mở I2C

CBI [6:4] R/W Bit cấu hình thời gian kiểm tra

Page 107: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 107

Tên Bit R/W Mô tả

IDLE (xem 17.3.5 Định thời của

sự kiện Start)

Không sử dụng [3]

I2CMS [2] R/W Lựa chọn chế độ hoạt động của

I2C:

1: Master

0: Slave

ISSE [1] R/W Bit cho phép tạo ngắt khi tạo sự

kiện Start, Repeat Start, Stop:

1: cho phép

0: không cho phép

Không sử dụng [0]

17.1.1.2. Chế độ Slave

Bảng 17-2: Mô tả thanh ghi I2CCON1 ở chế độ Slave

Tên Bit R/W Mô tả

I2CON [7] R/W

Tắt/bật khối I2C (dùng chung cho Master và Slave)

0: tắt khối I2C

1: bật khối I2C

Không sử dụng [6:4] R Dùng cho chế độ Master

GCEN [3] R/W

Cho phép nhận general call

0: bỏ qua general call

1: nhận general call

I2CMS [2] R/W

Chế độ của khối I2C là Master hay Slave.

0: I2C slave

1: I2C master

ISSE [1] R/W

Cho phép ngắt với bit start và stop

0: không tạo ra ngắt

1: có tạo ra ngắt

AMOD [0] R/W Lựa chọn độ dài địa chỉ của Slave

0 = chế độ 7-bit địa chỉ

Page 108: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 108

Tên Bit R/W Mô tả

1 = chế độ 10-bit địa chỉ

17.1.2. I2CCON2

17.1.2.1. Chế độ Master

Tên Bit R/W Mô tả

Không sử dụng [7]

ACKRX [6] R/W Bit ACK/NAK nhận được từ slave

0: ACK

1: NAK

ACKTX [5] ACK/NAK cần truyền đến slave

0: ACK

1: NAK

ACKEN [4] Bit cho phép truyền ACK/NAK

đến slave

1: cho phép

0: không cho phép

RCEN [3] R/W Bit cho phép nhận dữ liệu

1: cho phép

0: không cho phép

PEN [2] R/W Bit cho phép tạo sự kiện Stop:

1: cho phép

0: không cho phép

RSEN [1] R/W Bit cho phép tạo sự kiện Repeat

Start:

1: cho phép

0: không cho phép

SEN [0] R/W Bit cho phép tạo sự kiện Repeat

Start:

1: cho phép

0: không cho phép

Page 109: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 109

17.1.2.2. Chế độ Slave

Tên Bit R/W Mô tả

CKS [7] R/W

Kéo dài tín hiệu SCL (chỉ chế độ Slave) (xem mục 17.5

Kéo dài xung clock)

0: Giữ SCL mức thấp (kéo dài SCL), dùng để

đảm bảo thời gian cài đặt dữ liệu

1: Thả nổi tín hiệu SCL

Không sử dụng [6] R Dùng cho chế độ Master

MSK [5:2] R/W

mặt nạ cho địa chỉ của Slave

0: không che các bit tương ứng trong thanh ghi

CNTL/ADDRL

1: che các bit tương ứng trong thanh ghi

CNTL/ADDRL

MSK [1] R/W

bit mặt nạ trọng số thấp nhất

Trong chế độ 7-bit địa chỉ:

0: không che bit địa chỉ 1 CNTL/ADDRL[1]

1: che bit địa chỉ 1 CNTL/ADDRL[1]

Trong chế độ 10-bit địa chỉ:

0: không che bit địa chỉ 0 và 1

CNTL/ADDRL[1:0]

1: che bit địa chỉ 0 và 1 CNTL/ADDRL[1:0]

SEN [0] R/W

cho phép kéo dài đường tín hiệu clock SCL

0: không cho phép

1: cho phép kéo dài xung clock SCL

17.1.3. I2CSTA

17.1.3.1. Chế độ Master

Tên Bit R/W Mô tả

Page 110: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 110

Tên Bit R/W Mô tả

Không sử dụng [7]

P [6] R Bit cho biết quá trình tạo sự kiện

Stop hoàn thành. Tự động xóa khi

tắt I2C.

0: không tạo sự kiện Stop

1: hoàn thành sự kiện Stop

S [5] R Bit cho biết quá trình tạo sự kiện

Start hoặc Repeat Start hoàn thành.

Tự động xóa khi tắt I2C.

0: không tạo sự kiện Start

hoặc Repeat Start

1: hoàn thành sự kiện Start

hoặc Repeat Start

R/ W [4] R Bit cho biết có phải I2C đang trong

quá trình nhận hay không. Tự động

xóa khi tắt I2C.

0: không ở quá trình nhận

1: đang ở quá trình nhận

Bít dự trữ [3] R

I2COV [2] R/W Bit báo tràn bộ đệm. Tự động xóa

khi tắt I2C.

0: không tràn bộ đệm

1: tràn bộ đệm

Chú ý:

Chế độ truyền: không sử dụng

Chế độ nhận: Trước đó I2C đã

nhận 1 byte dữ liệu nhưng chưa

được đọc ra. Nếu I2C tiếp tục nhận

thêm 1 byte dữ liệu nữa, bộ đệm sẽ

bị tràn. Điều này sẽ làm cho bit

Page 111: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 111

Tên Bit R/W Mô tả

I2COV bật lên 1 và giá trị bộ đệm

I2CBUF sẽ được giữ nguyên.

I2CWCOL [1] R/W Bit báo xung đột khi ghi vào bộ

đệm. Tự động xóa khi tắt I2C.

0: không xảy ra xung đột

1: có xảy ra xung đột

I2CBF [0] R Bit báo bộ đệm đang chứa dữ liệu

có nghĩa. Tự động xóa khi tắt I2C.

0: dữ liệu trong bộ đệm

không có nghĩa

1: dữ liệu trong bộ đệm có

nghĩa

17.1.3.2. Chế độ Slave

Tên Bit R/W Mô tả

AD / [7] R

Cho bit là nhận dữ liệu / địa chỉ

0: cho biết byte gửi hoặc nhận cuối là địa chỉ

1: cho biết byte gửi hoặc nhận cuối là dữ liệu

P [6] R

Bit Stop

0: bit Stop không nhận cuối cùng

1: bit Stop được nhận cuối cùng

S [5] R

Bit Start

0: bit Start không nhận cuối cùng

1: bit Start được nhận cuối cùng

WR / [4] R/W

Cho biết chiều nhận là đọc/ghi

0: ghi

1:đọc

Bit dữ trữ [3] Không thực hiện

Đọc ra bằng 0

Page 112: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 112

Tên Bit R/W Mô tả

I2COV [2] R/W

Bộ đệm của I2C bị tràn

0: bộ đệm không tràn

1: một byte mới vừa nhận trong khi bộ đệm đã

đầy (giữ nguyên dữ liệu cũ)

I2CWCOL [1]

Ghi đến bộ đệm I2C bị xung đột

0 = không xung đột

1 = thanh ghi I2CBUF được ghi vào trong khi nó

đang phát nội dung trước đó đi (phải được xóa

bởi người sử dụng)

I2CBF [0]

Cờ bào đầy cho bộ đệm I2C

0: bộ đệm không đầy

1: khi nhận một byte và ghi tới bộ đệm (khối I2C

bật) thì bit này được gán lên 1. Bit này tự động

bị xóa khi phát xong một byte dữ liệu hoặc thực

hiện đọc đến thanh ghi bộ đệm (ICBUF).

17.1.4. CNTH/ADDRH và CNTL/ADDRL

Những thanh ghi này dùng chung cho chế độ Master và Slave

17.1.4.1. Chế độ Master

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CNTH/ADDRH

bit 7 bit 0

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R/W-0

CNTL/ADDRL

bit 7 bit 0

Tên Bit R/W Mô tả

CNTH [7:0] R/W Giá trị dùng để cấu hình thời gian

xung SCL ở mức cao

Tên Bit R/W Mô tả

Page 113: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 113

Tên Bit R/W Mô tả

CNTL [7:0] R/W Giá trị dùng để cấu hình thời gian

xung SCL ở mức thấp

Người sử dụng ghi giá trị mong muốn vào hai thanh ghi này để cấu hình tốc độ Baud của I2C.

Chế độ Standard: (100Kb/s)

a. Thời gian tối thiểu xung SCL ở mức thấp = 4.7 us

b. Thời gian tối thiểu xung SCL ở mức cao = 4.0 us

Do đó, Giá trị nhỏ nhất của CNTL = 4.7us *(tần số xung clock)Mhz

Giá trị nhỏ nhất của CNTH = 4.0us * (tần số xung clock)Mhz

Ví dụ, tần số xung clock = 10 Mhz

Giá trị nhỏ nhất của CNTL = 4.7 * 10 = 47

Giá trị nhỏ nhất của CNTH = 4.0 * 10 = 40

Chế độ Fast: (400Kb/s)

c. Thời gian tối thiểu xung SCL ở mức thấp = 1.3 us

d. Thời gian tối thiểu xung SCL ở mức cao = 0.6 us

Do đó, Giá trị nhỏ nhất của CNTL = 1.3us *( tần số xung clock)Mhz

Giá trị nhỏ nhất của CNTH = 0.6us * (tần số xung clock)Mhz

Ví dụ, tần số xung clock = 10 Mhz

Giá trị nhỏ nhất của CNTL = 1.3 * 10 = 13

Giá trị nhỏ nhất của CNTH = 0.6 * 10 = 6

17.1.4.2. Chế độ Slave

Thanh ghi ADDRH là byte địa chỉ cao của slave I2C. Nó được dùng trong chế độ 10-bit địa chỉ.

Trong chế độ 7-bit địa chỉ thanh ghi này không cần quan tâm.

Thanh ghi ADDRL là byte địa chỉ thấp của slave I2C. Nội dung của nó được so sánh với byte địa

chỉ thấp nhận được từ master I2C.

17.1.5. I2CBUF

Tên Bit R/W Mô tả

I2CBUF [7:0] R/W Dùng chung cho cả Master và Slave

Địa chỉ / dữ liệu nhận/phát

Page 114: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 114

Khi phát dữ liệu, người sử dụng phải ghi địa chỉ hoặc dữ liệu cần phát đến bus I2C. Sau khi ghi

đến thanh ghi I2CBUF (chỉ khi khối I2C bật), bộ đệm xem như đã đầy và bit I2CBF được gán lên

1.

Khi nhận dữ liệu, các bit dữ liệu trên đường tín hiệu SDA sẽ được dịch vào thanh ghi dịch theo

đúng trình tự. Đến khi việc nhận hoàn tất, dữ liệu từ thanh ghi dịch sẽ được cập nhật vào thanh

ghi I2CBUF. Tại thời điểm này, thanh ghi I2CBUF đang chứa một byte dữ liệu hợp và bit I2CBF

được gán lên 1. Một yêu cầu đọc đến thanh ghi I2CBUF sẽ xóa cờ I2CBF. Người sử dụng phải

đọc thanh ghi I2CBUF khi nó đầy, nếu không lần nhận byte dữ liệu tiếp sẽ gây ra tràn (cờ I2COV

được gán lên 1). Trong trường hợp này, dữ liệu nhận từ lần trước sẽ bị mất.

17.2. Hoạt động

Khối I2C được bật bằng cách gán bit I2CON lên 1 (I2CCON1[7]), và người sử dụng sẽ lập trình

giá trị thanh ghi I2CCON1 để cấu hình khối I2C:

Master và có ngắt có start và stop bit

Master không có ngắt start và stop bit

Slave 10-bit địa chỉ và có ngắt có start và stop bit

Slave 7-bit địa chỉ và có ngắt có start và stop bit

Slave 10-bit địa chỉ không có ngắt có start và stop bit

Slave 7-bit địa chỉ và không có ngắt có start và stop bit

Khi khối I2C được bật, các chân tín hiệu PORT4 và PORT5 sẽ được sử dụng là 2 chân SCL và

SDA của chuẩn bus I2C. Để đảm bảo khối hoạt động đúng, điện trở kéo lên phải được gắn vào

các chân SCL và SDA ở bên ngoài chip.

Page 115: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 115

SDA

SCL

Rp Rp điện trở kéo lên

+VDD

SCLK

SCLK1

OUT

SCLK

IN

DATA

DATA1

OUT

DATA

IN

SCLK

SCLK1

OUT

SCLK

IN

DATA

DATA1

OUT

DATA

IN

THIẾT BỊ 1 THIẾT BỊ 2

Hình 17-1: Kết nối các thiết bị đến bus I2C

17.3. Chế độ Master

Người dùng có thể cấu hình I2C ở chế độ Master bằng cách set các bit I2CON, I2CMS trong

thanh ghi I2CCON lên 1. Ngoài ra, người dùng còn có thể set hoặc xóa bit ISSE (I2CCON1[1])

để cho phép hoặc cấm ngắt khi tạo ra các bit start/restart và stop. Các sự kiện gây ra ngắt I2CIF

(IF2[3]) trong chế độ Master như sau:

Sự kiện Start (nếu cho phép)

Sự kiện Stop (nếu cho phép)

Sự kiện Repeat Start (nếu cho phép)

Khi truyền: sau khi nhận xong ACK/NAK

Khi nhận: sau khi nhận xong một byte dữ liệu

Trong chế độ Master, I2C có hai loại hoạt động là Master truyền và Master nhận:

17.3.1. Master Truyền

a) Truyền theo kiểu địa chỉ 7-bit

Page 116: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 116

truyền từ master

truyền từ slave

S SLAVE ADDR R/W

‗0‘-write

ACK DATA

7 bits

(n bytes + ack)

ACK/

NACKSLAVE ADDR

Sr ACK DATA

(n bytes + ack)

ACK/

NACK

P

LSBMSB

R/W

‗0‘-write

Hình 17-2: Khung truyền với địa chỉ 7-bit ở chế độ Master truyền

Để cấu hình I2C hoạt động ở chế độ Master truyền với địa chỉ 7-bit, người sử dụng nên làm theo

các bước sau:

1. Tắt ngoại vi I2C bằng cách xóa bit I2CON

2. Cấu hình tốc độ Baud bằng cách ghi giá trị mong muốn vào các thanh CNTH/ADDRH và

CNTL/ADDRL (xem 17.1.4 CNTH/ADDRH và CNTL/ADDRL).

3. Gán bit I2CMS lên 1 chọn chế độ I2C master

4. Cho phép I2C hoạt động bằng cách gán bit I2CON (bước 3 và 4 có thể thực hiện cùng lúc)

5. Gán bit SEN để tạo sự kiện Start

6. Người sử dụng ghi byte địa chỉ đầu tiên của I2C Slave cần truyền vào các bit cao và giá trị

1‟b0 vào bit thấp nhất của thanh ghi I2CBUF.

Sau khi thực hiện xong bước 6, bit I2CBF sẽ bật lên. Giá trị vừa ghi vào thanh ghi I2CBUF sẽ

được truyền lên bus thông qua chân SDA. Khi toàn bộ 8 bit này được truyền xong, cờ I2CBF sẽ

tự động xóa bằng phần cứng. Tiếp theo I2C sẽ nhận ACK từ slave và lưu vào bit ACKRX

(I2CCON2[6]).

7. Khi I2C nhận xong ACK, cờ ngắt I2CIF sẽ bật lên. Người sử dụng phải nạp dữ liệu 8-bit vào

thanh ghi I2CBUF để truyền cho slave.

Sau khi toàn bộ dữ liệu trong thanh ghi I2CBUF được truyền lên bus, bit I2CBF sẽ tự động xóa.

Và, I2C sẽ nhận ACK/NAK từ slave và lưu vào bit ACKRX (I2CCON2[6]).

8. Sau khi nhận xong ACK/NACK, cờ ngắt I2CIF sẽ bật lên 1. Người sử dụng có thể kiểm tra

xem bit vừa nhận là ACK (0) hay NAK (1) để lựa quyết định sẽ làm gì tiếp theo.

Nếu nhận được ACK, người sử dụng có thể thực hiện 1 trong 3 việc sau:

Tiếp tục quá trình truyền bằng cách ghi dữ liệu vào thanh ghi I2CBUF

Khởi động lại quá trình truyền bằng cách gán bit RSEN lên 1.

Kết thúc quá trình truyền bằng cách gán bit PEN lên 1.

Nếu nhận được NAK, người sử dụng có thể thực hiện 1 trong 2 việc sau:

Khởi động lại quá trình truyền bằng cách gán bit RSEN lên 1.

Kết thúc quá trình truyền bằng cách gán bit PEN lên 1.

Page 117: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 117

Khi sự kiện Repeat Start xảy ra, bit S (I2CSTA[5]) sẽ bật lên 1, và quá trình truyền mới sẽ bắt

đầu. Quá trình mới này, có thể theo kiểu địa chỉ 7-bit hay 10-bit đều được.

Khi sự kiện Stop xảy ra, bit P (I2CSTA[6]). Cờ ngắt I2CIF sẽ bật lên 1 nếu được cho phép.

b) Truyền theo kiểu địa chỉ 10-bit

truyền từ master

truyền từ slave

S1st BYTE SLAVE

ADDRR/W

‗0‘-write

ACK 2nd BYTE SLAVE ADDR ACK DATAACK/

NACK

DATA

(n bytes + ack)

ACK/

NACK

P

1 1 1 1 0 X X 0

Sr1st BYTE SLAVE

ADDR

1 1 1 1 0 X X

ACK

(n bytes + ack)

R/W

‗0‘-write

2nd BYTE SLAVE ADDR ACK

Hình 17-3: Khung truyền với địa chỉ 10-bit ở chế độ Master truyền

Để cấu hình I2C hoạt động ở chế độ Master truyền với địa chỉ 10-bit, người sử dụng nên làm

theo các bước sau:

1. Tắt ngoại vi I2C bằng cách xóa bit I2CON

2. Cấu hình tốc độ Baud bằng cách ghi giá trị mong muốn vào các thanh CNTH/ADDRH và

CNTL/ADDRL (xem 17.1.4 CNTH/ADDRH và CNTL/ADDRL).

3. Gán bit I2CMS lên 1 chọn chế độ I2C master

4. Cho phép I2C hoạt động bằng cách gán bit I2CON (bước 3 và 4 có thể thực hiện cùng lúc)

5. Gán bit SEN để tạo sự kiện Start

6. Người sử dụng ghi byte địa chỉ đầu tiên của I2C Slave cần truyền vào các bit cao và giá trị

1‟b0 vào bit thấp nhất của thanh ghi I2CBUF.

Sau khi thực hiện xong bước 6, bit I2CBF sẽ bật lên. Giá trị vừa ghi vào thanh ghi I2CBUF sẽ

được truyền lên bus thông qua chân SDA. Khi toàn bộ 8 bit này được truyền xong, cờ I2CBF sẽ

tự động xóa bằng phần cứng. Tiếp theo I2C sẽ nhận ACK từ slave và lưu vào bit ACKRX

(I2CCON2[6]).

7. Khi I2C nhận xong ACK, cờ ngắt I2CIF sẽ bật lên. Người sử dụng phải nạp 8 bit địa chỉ thứ

còn lại vào thanh ghi I2CBUF để truyền cho slave.

Sau khi toàn bộ địa chỉ trong thanh ghi I2CBUF được truyền lên bus, bit I2CBF sẽ tự động xóa.

Và, I2C sẽ nhận ACK từ slave và lưu vào bit ACKRX (I2CCON2[6]).

8. Khi I2C nhận xong ACK, cờ ngắt I2CIF sẽ bật lên. Người sử dụng nạp dữ liệu 8-bit vào

thanh ghi I2CBUF để truyền cho slave.

Page 118: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 118

Sau khi toàn bộ dữ liệu trong thanh ghi I2CBUF được truyền lên bus, bit I2CBF sẽ tự động xóa.

Và, I2C sẽ nhận ACK/NAK từ slave và lưu vào bit ACKRX (I2CCON2[6]).

9. Sau khi nhận xong ACK/NACK, cờ ngắt I2CIF sẽ bật lên 1. Người sử dụng có thể kiểm tra

xem bit vừa nhận là ACK (0) hay NAK (1) để lựa quyết định sẽ làm gì tiếp theo.

Nếu nhận được ACK, người sử dụng có thể thực hiện 1 trong 3 việc sau:

Tiếp tục quá trình truyền bằng cách ghi dữ liệu vào thanh ghi I2CBUF

Khởi động lại quá trình truyền bằng cách gán bit RSEN lên 1.

Kết thúc quá trình truyền bằng cách gán bit PEN lên 1.

Nếu nhận được NAK, người sử dụng có thể thực hiện 1 trong 2 việc sau:

Khởi động lại quá trình truyền bằng cách gán bit RSEN lên 1.

Kết thúc quá trình truyền bằng cách gán bit PEN lên 1.

Khi sự kiện Repeat Start xảy ra, bit S (I2CSTA[5]) sẽ bật lên 1, và quá trình truyền mới sẽ bắt

đầu. Quá trình mới này, có thể theo kiểu địa chỉ 7-bit hay 10-bit đều được.

Khi sự kiện Stop xảy ra, bit P (I2CSTA[6]). Cờ ngắt I2CIF sẽ bật lên 1 nếu được cho phép.

17.3.2. Master Nhận

a) Nhận theo kiểu địa chỉ 7-bit

S SLAVE ADDR R/W

‗1‘- read

ACK DATA

7 bits

(n bytes + ack)

ACK/

NACKSLAVE ADDR

Sr ACK DATA

(n bytes + ack)

ACK/

NACK

P

LSBMSB

R/W

‗1‘-readtruyền từ master

truyền từ slave

Hình 17-4: Khung truyền với địa chỉ 7-bit ở chế độ Master nhận

Để cấu hình I2C hoạt động ở chế độ Master nhận với địa chỉ 7-bit, người sử dụng nên làm theo

các bước sau:

1. Tắt ngoại vi I2C bằng cách xóa bit I2CON

2. Cấu hình tốc độ Baud bằng cách ghi giá trị mong muốn vào các thanh CNTH/ADDRH và

CNTL/ADDRL (xem 17.1.4 CNTH/ADDRH và CNTL/ADDRL)

3. Gán bit I2CMS lên 1 chọn chế độ I2C master

4. Cho phép I2C hoạt động bằng cách gán bit I2CON (bước 3 và 4 có thể thực hiện cùng lúc)

5. Gán bit SEN để tạo sự kiện Start

6. Người sử dụng ghi byte địa chỉ đầu tiên của I2C Slave cần truyền vào các bit cao và giá trị

1‟b1 vào bit thấp nhất của thanh ghi I2CBUF.

Page 119: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 119

Sau khi thực hiện xong bước 6, bit I2CBF sẽ bật lên. Giá trị vừa ghi vào thanh ghi I2CBUF sẽ

được truyền lên bus thông qua chân SDA. Khi toàn bộ 8 bit này được truyền xong, cờ I2CBF sẽ

tự động xóa bằng phần cứng. Tiếp theo I2C sẽ nhận ACK từ slave và lưu vào bit ACKRX

(I2CCON2[6]). Khi ACK đã nhận xong, cờ ngắt I2CIF sẽ bật lên và bước tiếp theo phải được

thực hiện. Nếu không nhận được ACK, người sử dụng có thể khởi động lại hoặc kết thúc quá

trình.

7. Gán bit RCEN bit (I2CCON2[3]) lên 1 để cho phép I2C nhận dữ liệu từ Slave (bước này có

thể thực hiện ngay sau bước 5 mà không cần đợi cờ I2CIF).

Khi 8-bit dữ liệu nhận từ slave đã có trong thanh ghi I2CBUF, cờ I2CBF tự động bật lên 1. Ngay

lúc này, cờ I2CIF cũng tự động bật lên và bit RCEN tự động bị xóa bằng phần cứng.

8. Khi cờ I2CIF bật lên, người sử dụng đọc thanh ghi I2CBUF để có được dữ liệu mong muốn.

Việc đọc này sẽ làm cho bit I2CBF xóa về 0.

9. Người sử dụng có thể gán hoặc xóa bit ACKTX để lựa chọn NAK hay là ACK sẽ được

truyền đi ở bước tiếp theo. Nếu bit ACKTX bằng 0, ACK sẽ được truyền đi. Ngược lại, I2C

sẽ truyền NAK.

10. Sau đó, người sử dụng gán bit ACKEN lên 1 để cho phép ACK/NAK đã lựa chọn ở bước 9

có thể truyền lên bus.

11. Tiếp theo, người sử dụng có thể thực hiện một trong các bước sau:

Nếu ACK được truyền đi, bước 7, 8, 9, 10, 11 có thể được thực hiện lại để tiếp tục quá trinh

nhận.

Nếu NAK được truyền đi, người sử dụng có thể làm những việc sau:

Khởi động lại quá trình bằng cách gán bit RSEN lên 1

Kết thúc quá trình truyền bằng cách gán bit PEN lên 1.

Khi sự kiện Repeat Start xảy ra, bit S (I2CSTA[5]) sẽ bật lên 1, và quá trình truyền mới

sẽ bắt đầu. Quá trình mới này, có thể theo kiểu địa chỉ 7-bit hay 10-bit đều được.

Khi sự kiện Stop xảy ra, bit P (I2CSTA[6]). Cờ ngắt I2CIF sẽ bật lên 1 nếu được cho

phép.

b) Nhận theo kiểu địa chỉ 10-bit

Page 120: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 120

truyền từ master

truyền từ slave

S1st BYTE SLAVE

ADDRR/W ACK 2nd BYTE SLAVE ADDR ACK DATA

ACK/

NACKP

1 1 1 1 0 X X ‗0‘

Sr1st BYTE SLAVE

ADDR

1 1 1 1 0 X X

ACK

(n bytes + ack)

R/W

‗1‘-read

‗1‘

‗0‘-write

Hình 17-5: Khung truyền với địa chỉ 10-bit ở chế độ Master nhận

Để cấu hình I2C hoạt động ở chế độ Master truyền với địa chỉ 10-bit, người sử dụng nên làm

theo các bước sau:

1. Tắt ngoại vi I2C bằng cách xóa bit I2CON

2. Cấu hình tốc độ Baud bằng cách ghi giá trị mong muốn vào các thanh CNTH/ADDRH và

CNTL/ADDRL (xem 17.1.4 CNTH/ADDRH và CNTL/ADDRL).

3. Gán bit I2CMS lên 1 chọn chế độ I2C master

4. Cho phép I2C hoạt động bằng cách gán bit I2CON (bước 3 và 4 có thể thực hiện cùng lúc)

5. Gán bit SEN để tạo sự kiện Start

6. Người sử dụng ghi byte địa chỉ đầu tiên của I2C Slave cần truyền vào các bit cao và giá trị

1‟b0 vào bit thấp nhất của thanh ghi I2CBUF.

Sau khi thực hiện xong bước 6, bit I2CBF sẽ bật lên. Giá trị vừa ghi vào thanh ghi I2CBUF sẽ

được truyền lên bus thông qua chân SDA. Khi toàn bộ 8 bit này được truyền xong, cờ I2CBF sẽ

tự động xóa bằng phần cứng. Tiếp theo I2C sẽ nhận ACK từ slave và lưu vào bit ACKRX

(I2CCON2[6]).

7. Khi I2C nhận xong ACK, cờ ngắt I2CIF sẽ bật lên. Người sử dụng phải nạp 8 bit địa chỉ thứ

còn lại vào thanh ghi I2CBUF để truyền cho slave.

Sau khi toàn bộ địa chỉ trong thanh ghi I2CBUF được truyền lên bus, bit I2CBF sẽ tự động xóa.

Và, I2C sẽ nhận ACK từ slave và lưu vào bit ACKRX (I2CCON2[6]).

8. Sau khi đã nhận xong ACK, người sử dụng gán bit RSEN lên 1 để tạo sự kiện Repeat Start.

9. Đến khi cờ I2CIF bật lên, người sử dụng ghi byte địa chỉ đầu tiên của slave vào các bit cao và

giá trị 1 vào bit thấp nhất của thanh ghi I2CBUF.

Sau khi thực hiện xong bước 9, bit I2CBF sẽ bật lên. Giá trị vừa ghi vào thanh ghi I2CBUF sẽ

được truyền lên bus thông qua chân SDA. Khi toàn bộ 8 bit này được truyền xong, cờ I2CBF sẽ

tự động xóa bằng phần cứng. Tiếp theo, I2C sẽ nhận ACK từ slave và lưu vào bit ACKRX

(I2CCON2[6]).

10. Sau khi ACK đã nhận xong, cờ I2CIF bật lên, người sử dụng gán bit RCEN (I2CCON2[3])

để cho phép I2C nhận dữ liệu từ Slave.

Khi 8-bit dữ liệu nhận từ slave đã có trong thanh ghi I2CBUF, cờ I2CBF tự động bật lên 1. Ngay

lúc này, cờ I2CIF cũng tự động bật lên và bit RCEN tự động bị xóa bằng phần cứng.

Page 121: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 121

11. Khi cờ I2CIF bật lên, người sử dụng đọc thanh ghi I2CBUF để có được dữ liệu mong muốn.

Việc đọc này sẽ làm cho bit I2CBF xóa về 0.

12. Người sử dụng có thể gán hoặc xóa bit ACKTX để lựa chọn NAK hay là ACK sẽ được

truyền đi ở bước tiếp theo. Nếu bit ACKTX bằng 0, ACK sẽ được truyền đi. Ngược lại, I2C

sẽ truyền NAK.

13. Sau đó, người sử dụng gán bit ACKEN lên 1 để cho phép ACK/NAK đã lựa chọn ở bước 12

có thể truyền lên bus

14. Tiếp theo, người sử dụng có thể thực hiện một trong các bước sau:

Nếu ACK được truyền đi, bước 10, 11, 12, 13, 14 có thể được thực hiện lại để tiếp tục quá

trinh nhận.

Nếu NAK được truyền đi, người sử dụng có thể làm những việc sau:

Khởi động lại quá trình bằng cách gán bit RSEN lên 1

Kết thúc quá trình truyền bằng cách gán bit PEN lên 1.

Khi sự kiện Repeat Start xảy ra, bit S (I2CSTA[5]) sẽ bật lên 1, và quá trình truyền mới sẽ bắt

đầu. Quá trình mới này, có thể theo kiểu địa chỉ 7-bit hay 10-bit đều được.

Khi sự kiện Stop xảy ra, bit P (I2CSTA[6]). Cờ ngắt I2CIF sẽ bật lên 1 nếu được cho phép.

17.3.3. Đồng bộ clock

Mỗi master đều tạo một clock trên chân SCL riêng. Mặt khác, đường dữ liệu SDA chỉ có nghĩa

khi đường SCL ở mức cao. Do đó, đường clock cần phải được đồng bộ với nhau. Việc đồng bộ

clock thực hiện bằng cách wired-AND các đường SCL với nhau (xem Hình 17-6).

Hình 17-6: Đồng bộ clock

17.3.4. Phân xử

Một master chỉ có thể thực hiện quá trình truyền nhận khi bus rảnh. Tuy nhiên, hai hay nhiều

master có thể thực hiện sự kiện start cùng lúc. Khi đó, quá trình phân xử sẽ xảy ra trên đường

Page 122: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 122

SDA trong lúc đường SCL ở mức cao. Tại thời điểm đó, nếu có một master truyền bit 1 và một

master khác truyền bit 0 thì master nào truyền bit 1 sẽ bị mất phân xử. Master nào bị mất phân xử

sẽ về trạng thái IDLE.

Hình 17-7: Phân xử

17.3.5. Định thời của sự kiện Start

Để tạo sự kiện Start, người sử dụng phải gán bit cho phép Start (SEN) lên 1. Khi cả hai SCL và

SDA cùng ở mức cao trong khoảng thời gian bằng N lần thời gian SCL ở mức thấp (L: low

period), sự kiện Start sẽ được thực hiện. Trong SG8V1, giá trị N có thể được cấu hình thông qua

các bit CBI[2:0] trong thanh I2CCON1.

CBI[2:0] N

0 1

1 2

2 4

3 6

4 8

5 10

6 12

7 14

Chú thích:

- Các bit này chỉ sử dụng trong hệ thống có nhiều master. Vì khi I2C bắt đầu hoạt động,

người sử dụng không biết được có một master nào khác đang truy xuất bus không.

Người sử dụng dùng các bit này để kéo dài thời gian kiểm tra IDLE trước khi thực

hiện sự kiện Start.

- Nếu hệ thống chỉ có một master, giá trị này nên là 0.

Page 123: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 123

Khi sự kiện Start được tạo xong, bit S sẽ bật lên 1 và bit SEN tự động xóa về 0. Việc ghi vào

thanh ghi I2CBUF sẽ làm cho cờ I2CBF bật lên. Khi đó, quá trình truyền sẽ bắt đầu.

Chú ý:

Để đảm bảo I2CBF bằng 0, người sử dụng nên xóa bit này trước khi tạo sự kiện Start. Nếu

không, sau khi quá trình Start hoàn thành, nội dung thanh ghi I2CBUF sẽ được truyền lên bus.

Khi đó, người sử dụng phải đảm bảo chắc rằng đây chính là nội dung cần truyền.

H

SCL

SDA

N*L

SDA=1

SCL=1

SEN=1L/2

H

1st bit

L

2nd bit

H : High period

L : Low period

S set bằng phần cưng

SEN xóa bằng phần cưng

I2CIF bật lên 1 nếu cho phép

Hình 17-8: Định thời của quá trình tạo sự kiện Start

17.3.6. Định thời của sự kiện Repeat Start

Để tạo sự kiện Repeat Start, người sử dụng phải gán bit RSEN lên 1. Sau khi hoàn thành, bit S sẽ

bật lên 1 và bit RSEN tự động xóa về 0. Tại thời điểm này, cờ I2CIF cũng sẽ bật lên nếu cho

phép.

Chú ý:

Trong hệ thống có nhiều master, nếu muốn tạo sự kiện Repeat Start, người sử dụng không

được ghi dữ liệu mới vào thanh ghi I2CBUF. Vì một dữ liệu có nghĩa tồn tại trong thanh ghi

này sẽ làm cho quá trình truyền tiếp tục diễn ra. Điều nay làm cho việc tạo Repeat Start

không thể thực hiện được.

Để đảm bảo I2CBF bằng 0, người sử dụng nên xóa bit này trước khi tạo sự kiện Repeat Start.

Nếu không, sau khi quá trình Repeat Start hoàn thành, nội dung thanh ghi I2CBUF sẽ được

truyền lên bus. Khi đó, người sử dụng phải đảm bảo chắc rằng đây chính là nội dung cần

truyền.

Page 124: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 124

H : High period

L : Low period

H

SDA

L

SCL=0

RSEN=1L/2

H

1st bit

L

2nd bit

L

SCL

S set bằng phần cưng

RSEN xóa bằng phần cưng

I2CIF bật lên 1 nếu cho phép

Hình 17-9: Định thời của quá trình tạo sự kiện Repeat Start

17.3.7. Định thời của sự kiện Stop

Để tạo sự kiện Stop, người sử dụng phải gán bit PEN lên 1. Sau khi hoàn thành, bit P sẽ bật lên 1

và bit PEN tự động xóa về 0. Tại thời điểm này, cờ I2CIF cũng sẽ bật lên. Sau khi tạo xong Stop,

bus sẽ vào trạng thái IDLE.

PEN=1

SDA

SCL

L H

P set bằng phần cưng

PEN xóa bằng phần cưng

I2CIF bật lên 1 nếu cho phép

Hình 17-10: Định thời của quá trình tạo sự kiện Stop

17.3.8. Xung đột bus

Khi xảy ra sự kiện xung đột bus. Cờ báo lỗi xung đột I2CBCIF sẽ bật lên 1.

a) Xung đột bus khi tạo Start

Trường hợp1: Thời gian SCL được giữ ở mức cao ít hơn thời gian qui định.

Page 125: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 125

H

SCL

SDA

1.5L

SDA=1

SCL=1

SEN=1

t<HH : High period

L : Low period

I2CBCIF bật lên 1……..

Hình 17-11: Xung độ bus khi tạo Start (1)

Trường hợp 2:

H

SCL

SDA

1.5L

SDA=1

SCL=1

SEN=1

H : High period

L : Low period

I2CBCIF bật lên 1

Hình 17-12: Xung độ bus khi tạo Start (2)

b) Xung đột bus khi tạo Repeat Start

Trường hợp 1:

SDA

SCL

I2CBCIF bật lên 1

L L H

H : High period

L : Low period

Page 126: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 126

Hình 17-13: Xung độ bus khi tạo Repeat Start (1)

Trường hợp 2:

SDA

SCL

I2CBCIF bật lên 1

L L H

H : High period

L : Low period

Hình 17-14: Xung độ bus khi tạo Repeat Start (2)

Trường hợp 3:

SDA

SCL

I2CBCIF bật lên 1

L L H

H : High period

L : Low period

Hình 17-15: Xung độ bus khi tạo Repeat Start (3)

c) Xung độ bus khi tạo Stop

PEN=1

SDA

SCL

L H

I2CBCIF bật lên 1

Hình 17-16: Xung độ bus khi tạo Stop

Page 127: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 127

d) Xung đột bus trong quá trình truyền nhận dữ liệu

Dữ liệu thay đổi khi SCL đang ở mức cao

SDA

SCL

Cờ I2CBCIF bật lên 1

Hình 17-17: Xung đột bus trong quá trình truyền nhận dữ liệu

Page 128: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 128

17.4. Chế độ Slave

17.4.1. Định địa chỉ Slave

ĐỊA CHỈ SLAVE Bit 0 DIỄN TẢ

0000 000 0 Địa chỉ General call

0000 000 1 Dự trữ cho chuẩn bus khác

0000 001 X Dự trữ cho chuẩn bus khác

0000 010 X Dự trữ cho chuẩn bus khác

0000 011 X Dự trữ cho mục đích sau này

0000 1XX X Dự trữ cho chuẩn bus khác

1111 1XX X Dự trữ cho mục đích sau này

1111 0XX X Định địa chỉ Slave 10-bit

Người sử dụng không cấu hình các địa chỉ dự trữ trong bảng trên cho địa chỉ Slave. Các địa chỉ

này được dùng cho các mục đích riêng trong chuẩn bus I2C.

17.4.2. Mặt nạ địa chỉ

Khi một bit địa chỉ bị mặt nạ, slave I2C sẽ nhận từ 2 địa chỉ bất chấp giá trị của bit bị mặt nạ là

„0‟ hay „1‟. Người sử dụng có thể cấu hình để mặt nạ hơn 1 bit để nhận từ nhiều địa chỉ hơn, giá

trị tối đa là 31 địa chỉ trong chế độ 7-bit địa chỉ và 63 địa chỉ trong chế độ 10-bit địa chỉ (xem Ví

dụ 17-1).

Slave I2C đối như nhau trong các trường hợp địa có hoặc không có mặt nạ. Trong trường hợp

này, người sử dụng phải kiểm tra nội dung của thanh ghi I2CBUF để biết được chính xác địa chỉ

nào đã nhận được.

Trong chế độ 7-bit, các bit mặt MSK[5:1] tương ứng với các bit trong thanh ghi CNTL/ADDRL.

Nếu tất cả các bit mặt đều được gán lên 1, địa chỉ nhận được từ master I2C chỉ bằng giá trị với 2

bit địa chỉ CNTL/ADDRL[7:6] thì tín hiệu báo đúng địa chỉ Slave sẽ được tạo ra.

Trong chế độ 10-bit địa chỉ, các bit mặt nạ MSK[5:2] tương ứng với các bit trong thanh ghi

CNTL/ADDRL. Bit MSK[1] sẽ mặt nạ cho cùng lúc cả 2 bit thấp của địa chỉ CNTL/ADDRL

[1:0]. Chú ý rằng, trong chế độ 10-bit, 2 bit cao của địa chỉ là 2 bit CNTH/ADDRH[1:0], nhưng

các bit mặt nạ địa chỉ không tác động các bit này, chúng chỉ tác động đến các bit địa chỉ thấp của

thanh ghi CNTL/ADDRL.

Chú ý

MSK[1] mặt nạ 2 bit địa chỉ thấp trong chế độ 10-bit địa chỉ.

Page 129: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 129

Hai bit địa chỉ cao không bị tác động bởi các bit mặt nạ địa chỉ.

Ví dụ 17-1: Mặt nạ địa chỉ

Địa chỉ 7-bit:

CNTL/ADDRL[6:0] = A0h (1010000) (CNTL/ADDRL[0] xem như là có giá trị „0‟)

MSK[5:1] = 00111

Các địa chỉ có thể nhận được: A0h, A2h, A4h, A6h, A8h, AAh, ACh và AEh.

Địa chỉ 10-bit:

CNTL/ADDRL[7:0] = A0h (10100000) (2 bit địa chỉ được bỏ qua vì chúng không bị tác

động bởi các bit mặt nạ)

MSK[5:1] = 00111

Các địa chỉ có thể nhận được: A0h, A1h, A2h, A3h, A4h, A5h, A6h, A7h, A8h, A9h, AAh,

ABh, ACh, ADh, AEh and AFh.

17.4.3. Địa chỉ 7-bit

S SLAVE ADDR R/W

‗1‘- read

ACK DATA

7 bits

(n bytes + ack)

ACK/

NACKSLAVE ADDR

Sr ACK DATA

(n bytes + ack)

ACK/

NACK

P

MSBLSB

R/W

‗0‘-writecủa master

của slave

Hình 17-18: Địa chỉ 7-bit

17.4.3.1. Slave nhận chế độ 7-bit địa chỉ

Người sử dụng có thể cấu hình khối I2C hoạt động như một bộ nhận chế độ 7-bit địa chỉ thông

qua các bước sau:

1. Tắt khối I2C bằng cách ghi 0 tới bit I2CON

2. Xóa bit I2CMS để cấu hình khối như là Slave

3. Xóa bit AMOD = 0 để chọn chế độ 7-bit địa chỉ (ISSE = 1 để cho phép phát ngắt đối với các

bit Start hoặc Stop)

4. Ghi địa chỉ Slave tới thanh ghi CNTL/ADDRL

5. Gán bit I2CON =1 để bật khối I2C

Sau bước 5, Slave sẽ đợi Start bit để bắt đầu. Sau Start bit thì 8-bit địa chỉ sẽ được dịch vào từ

Master. Nếu địa chỉ này trùng với địa chỉ Slave trong thanh ghi ADDRL, Slave sẽ trả về ACK tự

Page 130: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 130

động tại cạnh xuống thứ 8 để thông báo với Master rằng Slave đã được định địa chỉ. Đối với

Slave nhận, sau bước này thì bit I2CBF sẽ được gán lên 1.

Thêm vào đó, tại cạnh xuống thứ 9, bit I2CIF sẽ được gán lên 1. Đồng thời, nếu bit SEN = 1, bit

CKS sẽ tự động được xóa bởi phần cứng, đường tín hiệu SCL sẽ bị kéo xuống mức thấp (kéo dài

clock). Người sử dụng phải gán bit CKS = 1 lại trong chương trình ngắt để tiếp tục quá trình

truyền.

6. Sau khi byte dữ liệu đã nhận xong, người sử dụng phải đọc nội dung của thanh ghi I2CBUF

để xóa bit cờ I2CBF. Nếu không, khi byte tiếp theo được nhận, cờ tràn I2COV sẽ bật lên và

quá trình truyền sẽ bị kết thúc.

Sau bước này, ACK sẽ được tự động gửi đến Master. Sau đó, Slave I2C sẽ tiếp tục nhận một byte

dữ liệu mới. Nếu bit I2COV = 1, một NACK sẽ được gửi, Slave sẽ trở về trạng thái và chờ nhận

bit Stop từ Master.

17.4.3.2. Slave phát chế độ 7-bit địa chỉ

Người sử dụng có thể cấu hình khối I2C hoạt động như là một Slave phát chế độ 7-bit địa chỉ

thông qua các bước sau:

Các bước cấu hình từ 1 → 5 thì tương tự như là Slave nhận chế độ 7-bit địa chỉ.

Trong chế độ Slave phát 7-bit địa chỉ, sau bước 5, Slave sẽ đáp ứng tương tự như là Slave nhận.

Tuy nhiên, các điểm khác so với Slave nhận là:

Bit I2CBF không được gán 1

Bit CKS luôn luôn được xóa bởi phần cứng (không cần SEN=1 như Slave nhận), tín hiệu

SCL sẽ bị kéo xuống mức thấp (kéo dài clock). Người sử dụng phải luôn luôn gán CKS lên 1

trong chương trình ngắt để tiếp tục lần truyền hiện tại.

6. Một byte được ghi đến thanh ghi ICBUF để phát dữ liệu, mỗi bit sẽ được dịch ra ngoài thông

qua chân tín hiệu SDA. Người sử dụng phải gán bit CKS lên 1, điều này sẽ làm cho chân

SCL được thả nổi để có thể tạo ra xung clock, Slave khi nhận được xung clock từ Master sẽ

tiếp tục làm việc. Nếu VĐK không thể phục vụ việc ghi dữ liệu liên tục đến thì Slave sẽ bị

nằm trong trạng thái chờ được cung cấp dữ liệu.

Page 131: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 131

Sau bước 6, nếu Slave nhận ACK, nó sẽ tiếp tục dịch 8-bit dữ liệu trên bus I2C. Ngược lại,

nếu nhận một NACK, Slave sẽ đi vào trạng thái IDLE sau khi phát hiện được điều kiện Stop

trong trường hợp này.

17.4.4. Chế độ 10-bit địa chỉ

from master

from slave

S1st BYTE SLAVE

ADDRR/W

‗0‘-write

ACK 2nd BYTE SLAVE ADDR ACK DATAACK/

NACK

DATA

(n bytes + ack)

ACK/

NACK

P

1 1 1 1 0 X X 0

Sr1st BYTE SLAVE

ADDR

1 1 1 1 0 X X

ACK

(n bytes + ack)

R/W

‗1‘-read

Hình 17-19: Định địa chỉ chế độ 10 bit

17.4.4.1. Slave nhận chế độ 10-bit địa chỉ

Người sử dụng có thể cấu hình khối I2C làm việc như 1 Slave nhận 10-bit địa chỉ qua thông qua

các bước sau:

1. Tắt khối I2C bằng cách ghi 0 tới bit I2CON

2. Xóa bit I2CMS để cấu hình khối như là Slave

3. Gán bit AMOD = 1 để chọn chế độ 10-bit địa chỉ (ISSE = 1 để cho phép phát ngắt đối với các

bit Start hoặc Stop)

4. Ghi các bit cao của địa chỉ Slave vào thanh ghi CNTH/ADDRH

5. Ghi địa các bit thấp của địa chỉ Slave vào thanh ghi CNTL/ADDRL

6. Gán bit I2CON để bật khối I2C

7. Nhận byte cao và thấp của địa chỉ từ Master và nhận biết chiều truyền dữ liệu là 0 (bit 1 của

địa chỉ cao). Nếu địa chỉ đúng, các bit BF và IF được gán lên 1, thanh ghi I2CBUF được cập

nhật với giá trị của địa chỉ byte thấp.

Tương tự như chế độc Slave nhận 7-bit địa chỉ, nếu SEN bit được gán lên 1, bit CKS sẽ tự động

xóa bởi phần cứng, tín hiệu SCL sẽ bị giữ mức thấp (kéo dài xung clock). Người sử dụng phải

gán CKS trong chương trình phục vụ ngắt để tiếp tục lần truyền hiện tại.

Page 132: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 132

8. Tại thời điểm này, trạng thái là nhận dữ liệu. Người sử dụng phải đọc thanh ghi I2CBUF để

xóa cờ đầy I2CBF sau khi Slave đã nhận xong 1 byte dữ liệu đầy đủ.

17.4.4.2. Slave phát chế độ 10-bit địa chỉ

Người sử dụng có thể cấu hình khối I2C hoạt động như Slave phát chế độ 10-bit địa chỉ bằng các

bước sau:

Các bước 1 → 7 thì giống như khi cấu hình Slave nhận chế độ 10-bit địa chỉ.

8. Bước này sẽ nhận điều kiện Repeated Start và byte địa chỉ từ Master và nhận biết chiều

truyền là 1 (bit thứ [1] = 1). Nếu địa chỉ trùng, cờ I2CIF sẽ được gán lên 1, nội dung của

thanh ghi I2CBUF sẽ được cập nhật với byte địa chỉ thấp.

Tương tự như Slave phát chế độ 7-bit địa chỉ:

Cờ I2CBF không được gán lên

Bit CKS thì luôn luôn được xóa bởi phần cứng, đường tín hiệu SCL sẽ bị kéo xuống mức

thấp (kéo dài xung clock). Người sử dụng phải luôn luôn gán CKS lên lại trong chương

trình ngắt tiếp tục truyền dữ liệu.

9. Trong chương trình ngắt, người sử dụng ghi tới thanh ghi I2CBUF để truyền dữ liệu đến

Master và xóa cờ I2CIF.

10. Sau khi phát xong byte dữ liệu, cờ I2CIF sẽ được gán 1, luồng chương trình sẽ tiếp tục lặp lại

việc phát dữ liệu cho đến khi phát hiện được điều kiện Stop từ Master.

17.5. Kéo dài xung clock

Trong chế độ Slave phát, tại cạnh xuống thứ 9 của xung clock SCL, bit CKS trong thanh ghi

I2CCON2 luôn luôn bị xóa để kéo tín hiệu SCL tại ngõ ra xuống mức thấp. Người sử dụng phải

gán bit này lên 1 lại trong chương trình ngắt trước khi có thể nhận được một dữ liệu mới.

Việc giữ chân tín hiệu SCL mức thấp sẽ giúp cho hệ thống có đủ thời gian để vào chương trình

phục vụ ngắt và đọc nội dung của thanh ghi I2CBUF trước khi Master bắt đầu một quá trình

truyền một dữ liệu khác.

Trong chế độ Slave nhận, nếu bit SEN trong thanh ghi I2CCON2 là 1, bit CKS sẽ bị xóa tại cạnh

xuống xung clock thứ 9 một cách tự động. Ngược lại, Slave tiếp tục nhận byte dữ liệu mới từ

Master (không có kéo SCL xuống mức thấp).

Page 133: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 133

17.6. Địa chỉ General Call

Khối Slave I2C có thể đáp ứng tới địa chỉ General Call (tất cả các bit địa chỉ = 0) khi bit GCEN

trong thanh ghi I2CCON1 = 1. Nếu địa đúng là địa chỉ General Call, thanh ghi dịch sẽ truyền các

bit nhận được đến thanh ghi I2CBUF, vờ I2CBF (bit thứ [8]) sẽ được gán lên 1 và tại cạnh xuống

xung clock thứ 9 (sau bit ACK) cờ ngắt I2CIF sẽ được gán lên 1.

Nếu bit GCEN được gán lên 1 trong chế độ 10-bit địa chỉ, thì khi nhận được địa chỉ General Call,

byte địa chỉ thấp sẽ không cần thiết nữa, sau khi nhận địa chỉ thì Slave sẽ chuyển sang

truyền/nhận byte dữ liệu đầu tiên.

Đối với địa chỉ General Call thì chế độ 7-bit hay 10-bit địa chỉ thì hoạt động giống nhau.

17.7. Dạng sóng

Page 134: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 134

17.7.1. Dạng sóng I2C Master phát (chế độ 7-bit hoặc 10-bit địa chỉ)

SC

L1

23

45

67

89

12

34

56

78

9

SD

A

ghi SE

N=

1

I2CIF

SE

N=

0,

S=

1ghi địa chỉ S

lave tới I2C

BU

F

I2CB

F

cờ I2C

IF xóa bở

i phần mềm

A7

A6

A5

A4

A3

A2

A1

R/W

=0

AC

K from

Slave

chân SC

L kéo xuống thấp trong khi CP

U

đáp ứng cho ngắt I2C

IF

địa chỉ Slave

Dữ

liệu hoặc byte địa chỉ 2 của chế độ 10 bit

cờ I2C

IF xóa bở

i phần mềm

ghi I2CB

UF

here

D7

D6

D5

D4

D3

D2

D1

D0

NA

CK

ghi PE

N=

1A

CK

RX

is cleared

cờ I2C

IF xóa bở

i

phần mềm

PE

N=

0,

S=

0,P=

1

SE

NS

PE

NP

Hình 17-20: Dạng sóng I2C Master phát

Page 135: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 135

17.7.2. Dạng sóng I2C Master nhận (chế độ 7-bit địa chỉ)

SC

L1

23

45

67

89

12

34

56

78

9

SD

A

gh

i SE

N=

1

I2C

IF

SE

N=

0,

S=

1g

hi đ

ịa ch

ỉ Sla

ve tớ

i I2C

BU

F

I2C

BF

cờ I2

CIF

xóa

bở

i ph

ần

mề

m

R/W

=1

AC

K từ

Sla

ve

châ

n S

CL

kéo

xuố

ng

thấ

p tro

ng

khi C

PU

đá

p ứ

ng

cho

ng

ắt I2

CIF

Địa

chỉ S

lave

dữ

liệu

nh

ận

từ S

lave

cờ I2

CIF

xóa

bở

i ph

ần

mề

m

D7

D6

D5

D4

D3

D2

D1

D0

AC

K/

NA

CK

gh

i PE

N=

1 n

ếu

ng

ườ

i dù

ng

mu

ốn

ng

ừn

g tru

yền

dữ

liệu

AC

KR

X b

ị xóa

Cờ

I2C

IF xó

a b

ởi p

hầ

n m

ềm

PE

N=

0,

S=

0,P

=1

SE

N

S

PE

N

P

gh

i RC

EN

=1

gh

i xác n

hậ

n đ

ến

AC

KT

X (A

CK

chỉ là

ví dụ

),

sau

đó

gh

i AC

KE

N=

1

cờ I2

CB

F đ

ượ

c gá

n kh

i

mộ

t byte

nh

ận

xon

g

cờ I2

CB

F b

ị xóa

khi

đọ

c tha

nh

gh

i I2C

BU

F

kéo

châ

n S

CL

mứ

c thấ

p

A7

A6

A5

A4

A3

A2

A1

Hình 17-21: Dạng sóng I2C Master nhận

Page 136: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 136

17.7.3. Dạng sóng I2C Slave nhận chế độ 7-bit địa chỉ

SC

L1

23

45

67

89

12

34

56

78

SD

A

I2C

IF

I2C

BF

A7

A6

A5

A4

A3

A2

A1

R/W

=0 ph

át A

CK

tới

ma

ster

Nh

ận

địa

chỉ

dữ

liệu

nh

ận

từ m

aste

r

cờ I2

CIF

xóa

bở

i ph

ần

mề

m

D7

D6

D5

D4

D3

D2

D1

D0

I2C

OV

tha

nh

gh

i I2C

BU

F đ

ượ

c

đọ

c

12

34

56

78

dữ

liệu

nh

ận

từ m

aste

r

D7

D6

D5

D4

D3

D2

D1

D0

99

ph

át A

CK

tới

ma

ster

ph

át N

AC

K tớ

i

ma

ster

PS

(CK

S d

oe

s no

t clea

r to ‗1

‘ wh

en

SE

N =

0)

Hình 17-22: Dạng sóng I2C Slave nhận chế độ 7-bit địa chỉ

Page 137: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 137

17.7.4. Dạng sóng I2C Slave phát chế độ 7-bit địa chỉ

SC

L1

23

45

67

89

12

34

56

78

SD

A

I2C

IF

I2C

BF

Nh

ận

địa

chỉ

dữ

liệu

ph

át đ

ến

ma

ster

I2C

IF đ

ượ

c xóa

bở

i ph

ần

mề

m

I2C

OV

tha

nh

gh

i I2C

BU

F đ

ượ

c gh

i bở

i

ph

ần

mề

m

CK

S

dữ

liệu

ph

át đ

ến

ma

ster

9

AC

K từ

ma

ster

NA

CK

từ m

aste

r

SE

N

Sch

ân

SC

L ké

o xu

ốn

g th

ấp

tron

g kh

i

CP

U đ

áp

ứn

g ch

o n

gắ

t I2C

IF

I2C

IF đ

ượ

c xóa

bở

i ph

ần

mề

m

tha

nh

gh

i I2C

BU

F đ

ượ

c gh

i bở

i

ph

ần

mề

m

CK

S đ

ượ

c gá

n b

ởi p

hầ

n m

ềm

CK

S đ

ượ

c gá

n b

ởi p

hầ

n m

ềm

A7

A6

A5

A4

A3

A2

A1

ph

át A

CK

tới

ma

ster

R/W

=1

12

34

56

78

9P

D7

D6

D5

D4

D3

D2

D1

D0

D7

D6

D5

D4

D3

D2

D1

D0

(SE

N b

it do

esn

‘t care

in S

lave

-tran

smitte

r mo

de

)

Hình 17-23: Dạng sóng I2C Slave phát chế độ 7-bit địa chỉ

Page 138: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 138

17.7.5. Dạng sóng I2C Slave nhận chế độ 10-bit địa chỉ

SC

L1

23

45

67

89

12

34

56

78

SD

A

I2C

IF

I2C

BF

11

11

0A

9A

8R

/W=

0

ph

át A

CK

tới

ma

ster

Nh

ận

byte

địa

chỉ đ

ầu

cờ I2

CIF

xóa

bở

i ph

ần

mề

m

CK

S

9

ph

át A

CK

tới

ma

ster

S

I2C

OV

Nh

ận

byte

địa

chỉ th

ứ h

ai

A7

A6

A5

A4

A3

A2

A1

A0

SC

Lg

iữ m

ức th

ấp

khi b

it SE

N =

1

12

34

56

78

dữ

liệu

nh

ận

từ m

aste

r

cờ I2

CIF

xóa

bở

i ph

ần

mề

m

D7

D6

D5

D4

D3

D2

D1

D0

tha

nh

gh

i I2C

BU

F đ

ượ

c đọ

c

12

34

56

78

dữ

liệu

nh

ận

từ m

aste

r

D7

D6

D5

D4

D3

D2

D1

D0

99

ph

át A

CK

tới

ma

ster

Np

t AC

K tớ

i

ma

ster

P

SC

Lg

iữ m

ức th

ấp

khi b

it SE

N =

1

CK

S đ

ượ

c gá

n b

ởi p

hầ

n m

ềm

CK

S đ

ượ

c xóa

tự đ

ộn

g tro

ng

ph

ần

cứn

g

CK

S đ

ượ

c gá

n b

ởi p

hầ

n m

ềm

CK

S đ

ượ

c xóa

tự đ

ộn

g tro

ng

ph

ần

cứn

g

Hình 17-24: Dạng sóng I2C Slave nhận chế độ 10-bit địa chỉ

Page 139: SG8V1 Huong Dan Su Dung

I2C

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 139

17.7.6. Dạng sóng I2C Slave phát chế độ 10-bit địa chỉ

SC

L1

23

45

67

89

12

34

56

78

SD

A

I2C

IF

I2C

BF

11

11

0A

9A

8R

/W=

0 ph

át A

CK

tới

ma

ster

Nh

ận

byte

địa

chỉ đ

ầu

Nh

ận

byte

địa

chỉ th

ứ h

ai

A7

A6

A5

A4

A3

A2

A1

A0

CK

S

12

34

56

78

11

11

0A

9A

8

99

ph

át A

CK

tới

ma

ster

ph

át A

CK

tới m

aste

r

S

cờ I2

CIF

xóa

bở

i ph

ần

mề

m

R/W

=1

Đọ

c tha

nh

gh

i I2C

BU

F đ

ể xó

a cờ

I2C

BF

12

34

56

78

dữ

liệu

ph

át đ

ến

ma

ster

D7

D6

D5

D4

D3

D2

D1

D0

9

NA

CK

từ m

aste

r

P

I2C

IF đ

ượ

c xóa

bở

i ph

ần

mề

m

tha

nh

gh

i I2C

BU

F đ

ượ

c gh

i bở

i ph

ần

mề

m

SC

L h

eld

low

un

til CK

S is cle

are

d

CK

S đ

ượ

c gá

n b

ởi p

hầ

n m

ềm

CK

S đ

ượ

c xóa

tự đ

ộn

g tro

ng

ph

ần

cứn

g

Nh

ận

byte

địa

chỉ đ

ầu

Sr

Hình 17-25: Dạng sóng I2C Slave phát chế độ 10-bit địa chỉ

Page 140: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 140

18. Ngoại vi UART

18.1. Tổng quan về ngoại vi UART

SG8V1 có ba ngoại vi UART cho các ứng dụng truyền nhận dữ liệu song công nối tiếp bất đồng

bộ. Cả ba ngoại vi UART đều có cấu trúc, cách cấu hình và hoạt động tương tự nhau. Chúng chỉ

khác nhau về địa chỉ các thanh ghi sử dụng và vị trí các chân tín hiệu trên chip.

Một khung dữ liệu được truyền/nhận bao gồm 10 hoặc 11 bit:

1 bit Start báo bắt đầu khung truyền

8-bit dữ liệu

1 bit Parity để kiểm tra lỗi dữ liệu nếu có

1 bit Stop báo kết thúc khung truyền

Chú ý:

Việc tính toán bit kiểm tra Parity không được hỗ trợ bởi phần cứng nhưng người sử dụng có thể

thiết lập bằng phần mềm trong quá trình sử dụng.

ba thành phần chính của ngoại vi UART là:

Bộ tạo tốc độ Baud (tốc độ truyền dữ liệu)

Bộ truyền bất đồng bộ

Bộ nhận bất đồng bộ

Bộ truyền

Bộ nhận

Bộ tạo tốc độ

Baud - BRG

tx

rx

Giao tiếp nội

Hình 18-1: Các thành phần chính của ngoại vi UART

18.2. Các thanh ghi liên quan đến ngoại vi UART

Mỗi UART có 5 thanh ghi riêng biệt là:

Page 141: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 141

UxSTA: Thanh ghi trạng thái của ngoại vi UART thứ x

UxCON: Thanh ghi cấu hình hoạt động của ngoại vi UART thứ x

UxBRL: Thanh ghi thiết lập tốc độ Baud của ngoại vi UART thứ x

UxTXREG: Thanh ghi lưu dữ liệu truyền của ngoại vi UART thứ x

UxRXREG: Thanh ghi lưu dữ liệu nhận của ngoại vi UART thứ x

(với x là 1, 2 hoặc 3)

cùng với 3 thanh ghi ngắt dùng chung là

IE2: Thanh ghi cho phép các ngắt

IP2: Thanh ghi thiết lập ưu tiên ngắt

IF2: Thanh ghi trạng thái ngắt

18.2.1. Thanh ghi trạng thái của ngoại vi UART thứ x (UxSTA)

Tên Bit R/W Mô tả

UxON [7] R/W Bit bật/tắt UART thứ x

0 : Ngoại vi UART bị tắt

và không thể hoạt động

1 : Ngoại vi UART được

phép hoạt động.

Bit dự trữ [6] R Không sử dụng

Giá trị đọc ra là 0

UxTXEMP [5] R Bit báo trạng thái rỗng của bộ đệm

truyền

0 : Bộ truyền đang hoạt

động và thanh ghi lưu dữ

liệu truyền đang có dữ liệu

1 : Thanh ghi lưu dữ liệu

truyền đang rỗng và có thể

ghi dữ liệu mới

Bit dự trữ [4] R Không sử dụng

Giá trị đọc ra là 0

Page 142: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 142

Tên Bit R/W Mô tả

UxTX9D [3] R/W Bit dữ liệu truyền thứ 9

Đây chính là Parity bit

RXFE [2] R Bit báo lỗi khung dữ liệu nhận

0 : Khung hiện tại không

bị lỗi

1 : Khung hiện tại bị lỗi.

Chú ý: Giá trị bit này có thể bị

thay đổi khi đọc thanh ghi

UxRXREG hoặc ngoại vi UART

nhận một khung dữ liệu mới.

RXOV [1] R Bit báo lỗi tràn bộ đệm nhận

0 : Không có lỗi tràn bộ

đệm nhận

1 : Lỗi tràn bộ đệm nhận

(có thể xóa bằng cách xóa

bit RXEN hoặc bit UxON)

UxRX9D [0] R Bit dữ liệu thứ 9 của khung dữ

liệu nhận hiện tại

Đấy chính là Parity bit.

18.2.2. Thanh ghi điều khiển của UART thứ x

Tên Bit R/W Mô tả

UxTXEN [7] R/W Bit cho phép bộ truyền hoạt động

0 : Tắt bộ truyền UART

1 : Bật bộ truyền UART

UxTX9EN [6] R/W Bit cho phép truyền khung dữ liệu

Page 143: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 143

Tên Bit R/W Mô tả

9 bit (8-bit dữ liệu và 1 bit parity)

0 : Tắt chế độ truyền

khung dữ liệu 9 bit

1 : Bật chế độ truyền

khung dữ liệu 9 bit

UxRXEN [5] R/W Bit cho phép bộ nhận hoạt động

0 : Tắt bộ nhận UART

1 : Bật bộ nhận UART

UxRX9EN [4] R/W Bit cho phép nhận khung dữ liệu 9

bit (8-bit dữ liệu và 1 bit parity)

0 : Tắt chế độ nhận khung

dữ liệu 9 bit

1 : Bật chế độ nhận khung

dữ liệu 9 bit

UxBRH [3:0] R/W Các bit cao của giá trị thiết lập tốc

độ Baud.

Chú ý: Giá trị để tính tốc độ Baud

được lưu trong 12 bit bao gồm 4

bit UxBRH và 8-bit trong thanh

ghi UxBRL

18.2.3. Thanh ghi tốc độ baud của UART thứ x (UxBRL)

Tên Bit R/W Mô tả

UxBRL [7:0] R/W Các bit thấp của giá trị thiết lập

tốc độ Baud.

Chú ý: Giá trị để tính tốc độ Baud

được lưu trong 12 bit bao gồm 4

bit UxBRH và 8-bit trong thanh

ghi UxBRL

Page 144: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 144

18.2.4. Thanh ghi lưu dữ liệu truyền của UART thứ x (UxTXREG)

Tên Bit R/W Mô tả

UxTXREG [7:0] R/W 8-bit dữ liệu của khung truyền

18.2.5. Thanh ghi lưu dữ liệu nhận của UART thứ x (UxRXREG)

Tên Bit R/W Mô tả

UxRXREG [7:0] R/W 8-bit dữ liệu của khung nhận

18.2.6. Thanh ghi cho phép ngắt thứ 2 (IE2)

Tên Bit R/W Mô tả

CCIE [7] R/W Dùng cho ngoại vi Timer1

SPIIE [6] R/W Dùng cho ngoại vi SPI

U3RCIE [5] R/W Bit cho phép ngắt nhận trên

UART 3

0 : Không cho phép ngắt

nhận trên UART 3

1 : cho phép ngắt nhận trên

UART 3

U3TXIE [4] R/W Bit cho phép ngắt truyền trên

UART 3

0 : Không cho phép ngắt

truyền trên UART 3

1 : Cho phép ngắt truyền

trên UART 3

Page 145: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 145

Tên Bit R/W Mô tả

U2RCIE [3] R/W Bit cho phép ngắt nhận trên

UART 2

0 : Không cho phép ngắt

nhận trên UART 2

1 : cho phép ngắt nhận trên

UART 2

U2TXIE [2] R/W Bit cho phép ngắt truyền trên

UART 2

0 : Không cho phép ngắt

truyền trên UART 2

1 : Cho phép ngắt truyền

trên UART 2

U1RCIE [1] R/W Bit cho phép ngắt nhận trên

UART 1

0 : Không cho phép ngắt

nhận trên UART 1

1 : cho phép ngắt nhận trên

UART 1

U1TXIE [0] R/W Bit cho phép ngắt truyền trên

UART 1

0 : Không cho phép ngắt

truyền trên UART 1

1 : Cho phép ngắt truyền

trên UART 1

18.2.7. Thanh ghi thiết lập ưu tiên ngắt thứ 2 (IP2)

Tên Bit R/W Mô tả

CCIP [7] R/W Dùng cho ngoại vi Timer1

SPIIP [6] R/W Dùng cho ngoại vi SPI

Page 146: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 146

Tên Bit R/W Mô tả

U3RCIP [5] R/W Bit thiết lập độ ưu tiên ngắt nhận

trên UART 3

0 : Độ ưu tiên thấp

1 : Độ ưu tiên cao

U3TXIP [4] R/W Bit thiết lập độ ưu tiên ngắt truyền

trên UART 3

0 : Độ ưu tiên thấp

1 : Độ ưu tiên cao

U2RCIP [3] R/W Bit thiết lập độ ưu tiên ngắt nhận

trên UART 2

0 : Độ ưu tiên thấp

1 : Độ ưu tiên cao

U2TXIP [2] R/W Bit thiết lập độ ưu tiên ngắt truyền

trên UART 2

0 : Độ ưu tiên thấp

1 : Độ ưu tiên cao

U1RCIP [1] R/W Bit thiết lập độ ưu tiên ngắt nhận

trên UART 1

0 : Độ ưu tiên thấp

1 : Độ ưu tiên cao

U1TXIP [0] R/W Bit thiết lập độ ưu tiên ngắt truyền

trên UART 1

0 : Độ ưu tiên thấp

1 : Độ ưu tiên cao

18.2.8. Thanh ghi trạng thái ngắt thứ 2 (IF2)

Page 147: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 147

Tên Bit R/W Mô tả

CCIF [7] R Dùng cho ngoại vi Timer1

SPIIF [6] R Dùng cho ngoại vi SPI

U3RCIF [5] R Bit lưu cờ ngắt của UART3 khi

nhận dữ liệu

0: FIFO nhận của UART3

rỗng

1: FIFO nhận của UART3

có dữ liệu (tự động xóa

khi FIFO nhận của

UART3 rỗng)

U3TXIF [4] R Bit báo trạng thái ngắt truyền

UART 3

0 : Không có ngắt

1 : Có ngắt đang xảy ra

U2RCIF [3] R Bit lưu cờ ngắt của UART2 khi

nhận dữ liệu

0: FIFO nhận của UART2

rỗng

1: FIFO nhận của UART2

có dữ liệu (tự động xóa

khi FIFO nhận của

UART2 rỗng)

U2TXIF [2] R Bit báo trạng thái ngắt truyền

UART 2

0 : Không có ngắt

1 : Có ngắt đang xảy ra

Page 148: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 148

Tên Bit R/W Mô tả

U1RCIF [1] R Bit lưu cờ ngắt của UART1 khi

nhận dữ liệu

0: FIFO nhận của UART1

rỗng

1: FIFO nhận của UART1

có dữ liệu (tự động xóa

khi FIFO nhận của

UART1 rỗng)

U1TXIF [0] R Bit báo trạng thái ngắt truyền

UART 1

0 : Không có ngắt

1 : Có ngắt đang xảy ra

18.2.9. Thanh ghi cấu hình chiều dữ liệu cho Port C (DIRC)

Tên Bit R/W Mô tả

DIRC [7:2] R/W Sử dụng cho các chức năng và

ngoại vi khác

DIRC [1] R/W Cấu hình chiều dữ liệu cho

PORTC[1]

0 : Ngõ vào dữ liệu thông

thường

1 : Ngõ ra dữ liệu hoặc

đường truyền dữ liệu nối

tiếp của UART 1

DIRC [0] R/W Cấu hình chiều dữ liệu cho

PORTC[0]

0 : Ngõ vào dữ liệu thông

thường hoặc đường nhận

dữ liệu nối tiếp của UART

Page 149: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 149

Tên Bit R/W Mô tả

1

1 : Ngõ ra dữ liệu thông

thường

18.2.10. Thanh ghi cấu hình chiều dữ liệu cho Port B (DIRB)

Tên Bit R/W Mô tả

DIRB [7:4] R/W Sử dụng cho các chức năng

xuất/nhập dữ liệu và ngoại vi khác

DIRB [3] R/W Cấu hình chiều dữ liệu cho

PORTB[3]

0 : Ngõ vào dữ liệu thông

thường

1 : Ngõ ra dữ liệu hoặc

đường truyền dữ liệu nối

tiếp của UART 2

DIRB [2] R/W Cấu hình chiều dữ liệu cho

PORTB[2]

0 : Ngõ vào dữ liệu thông

thường hoặc đường nhận

dữ liệu nối tiếp của UART

2

1 : Ngõ ra dữ liệu thông

thường

DIRB [1] R/W Cấu hình chiều dữ liệu cho

PORTB[1]

0 : Ngõ vào dữ liệu thông

thường

1 : Ngõ ra dữ liệu hoặc

đường truyền dữ liệu nối

tiếp của UART 3

DIRB [0] R/W Cấu hình chiều dữ liệu cho

Page 150: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 150

Tên Bit R/W Mô tả

PORTB[0]

0 : Ngõ vào dữ liệu thông

thường hoặc đường nhận

dữ liệu nối tiếp của UART

3

1 : Ngõ ra dữ liệu thông

thường

18.3. Bộ tạo tốc độ Baud (BRG)

Mỗi UART có một bộ tạo tốc độ Baud riêng. Mỗi bộ tạo tốc độ Baud sử dụng 12 bit (4 bit cuối

của thanh ghi UxCON và 8-bit của thanh ghi UxBRL) để thiết lập tốc độ Baud cho việc truyền và

nhận dữ liệu.

Chú ý:

BRG sử dụng 4 bit của thanh ghi UxCON và 8 của thanh ghi UxBRL.

Page 151: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 151

18.3.1. Tính toán tốc độ Baud

18.3.1.1. Công thức tính

Tốc độ Baud được tính theo công thức sau:

)1(16

N

ff OSC

baud

Trong đó:

baudf : Tần số tốc độ Baud

OSCf : Tần số xung clock hệ thống

N: Giá trị được thiết lập trong 4 bit cuối trong thanh ghi UxCON (4 last bits) và thanh ghi

UxBRL

Với mỗi tốc độ Baud yêu cầu, chúng ta sẽ tính được một giá trị N tương ứng từ công thức trên

nhưng giá trị N này thường là số lẻ nên ta phải làm tròn đến giá trị gần nhất có thể để nạp vào 4

bit cuối thanh ghi UxCON và thanh ghi UxBRL. Như vậy, tốc độ Baud thực tế và tốc độ Baud

mong muốn có một sai số nhất định. Sai số này sẽ tạo nên tỷ lệ lỗi khi truyền bằng giao thức

UART. Để tính tỷ lệ lỗi, chúng ta sử dụng công thức sau:

Error = (Tốc độ Baud thực tế - Tốc độ Baud mong muốn)/Tốc độ Baud mong muốn

18.3.1.2. Ví dụ về tính tốc độ Baud

Giả sử rằng chip sử dụng tần số OSCf = 14 MHz; Tốc độ Baud mong muốn là 2400 bps.

Hệ số N tính trên lý thuyết:

583.3631162400

140000001

16

RateBaudDesired

fN OSC

Chọn giá trị nguyên gần nhất:

364int egerN

Giá trị nạp vào các bit UxBRH và UxBRL:

UxBRH = XXXX 0001 (Chỉ sử dụng 4 bit cuối của thanh ghi UxCON)

Page 152: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 152

UxBRL = 0110 1100

Tốc độ Baud trên thực tế là:

2397)1364(16

14000000

)1(16 int

eger

OSCactual

N

ff

Tỷ lệ lỗi là:

%125.02400

|24002397|

Error

Tốc độ

baud

mong

muốn

Fosc = 4 MHz Fosc = 6 MHz Fosc = 8 MHz Fosc = 10 MHz

Tốc độ

thực tế Error

N

Tốc độ

thực tế Error

N

Tốc độ

thực tế Error

N

Tốc độ

thực tế Error

N

(Kbps) (Kbps) (%) (Kbps) (%) (Kbps) (%) (Kbps) (%)

0,30 0,30 0,00 832 0,30 0,00 1249 0,30 0 1666 0,3 0 2082

0,60 0,60 0,00 416 0,60 0,00 624 0,60 0 832 0,6 0 1041

1,20 1,20 0,00 207 1,20 0,00 312 1,20 0 416 1,2 0 520

2,40 2,40 0,00 103 2,40 0,00 155 2,40 0 207 2,4 0 259

4,80 4,81 0,21 51 4,81 0,21 77 4,81 0,21 103 4,81 0,21 129

9,60 9,62 0,21 25 9,62 0,21 38 9,62 0,21 51 9,62 0,21 64

14,40 14,71 2,15 16 14,42 0,14 25 14,29 0,76 34 14,53 0,9 42

19,20 19,23 0,16 12 18,75 2,34 19 19,23 0,16 25 18,94 1,35 32

28,80 27,78 3,54 8 28,85 0,17 12 29,41 2,12 16 28,41 1,35 21

38,40 35,71 7,01 6 37,50 2,34 9 38,46 0,16 12 39,06 1,72 15

56,00 62,50 11,61 3 53,57 4,34 6 55,56 0,79 8 56,82 1,46 10

57,60 62,50 8,51 3 53,57 7,00 6 55,56 3,54 8 56,82 1,35 10

115,20 125,00 8,51 1 125,00 8,51 2 125,00 8,51 3 125 8,51 4

128,00 125,00 2,34 1 125,00 2,34 2 125,00 2,34 3 125 2,34 4

Tốc độ baud mong muốn Fosc = 12 MHz Fosc = 12.288 MHz

Tốc độ thực tế Error N

Tốc độ thực tế Error N

(Kbps) (Kbps) (%) (Kbps) (%)

0,30 0,30 0,00 2499 0,30 0,00 2559

0,60 0,60 0,00 1249 0,60 0,00 1279

1,20 1,20 0,00 624 1,20 0,00 639

2,40 2,40 0,00 312 2,40 0,00 319

4,80 4,81 0,21 155 4,80 0,00 159

9,60 9,62 0,21 77 9,60 0,00 79

14,40 14,42 0,14 51 14,49 0,62 52

19,20 19,23 0,16 38 19,20 0,00 39

28,80 28,85 0,17 25 28,44 1,25 26

38,40 37,50 2,34 19 38,40 0,00 19

56,00 57,69 3,02 12 54,86 2,04 13

57,60 57,69 0,16 12 59,08 2,57 12

115,20 107,14 7,00 6 109,71 4,77 6

128,00 125,00 2,34 5 128,00 0,00 5

Page 153: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 153

Tốc độ baud mong

muốn

Fosc = 13.56 MHz Fosc = 14 MHz Fosc = 14.318 MHz

Tốc độ thực

tế Error

N

Tốc độ thực

tế Error

N

Tốc độ thực

tế Error

N

(Kbps) (Kbps) (%) (Kbps) (%) (Kbps) (%)

0,30 0,30 0,00 2824 0,30 0,00 2916 0,30 0,00 2982

0,60 0,60 0,00 1412 0,60 0,00 1457 0,60 0,00 1490

1,20 1,20 0,00 705 1,20 0,00 728 1,20 0,00 745

2,40 2,40 0,00 352 2,40 0,00 364 2,40 0,00 372

4,80 4,79 0,21 176 4,81 0,21 181 4,81 0,21 185

9,60 9,63 0,31 87 9,62 0,21 90 9,62 0,21 92

14,40 14,36 0,28 58 14,34 0,42 60 14,43 0,21 61

19,20 19,26 0,31 43 19,02 0,94 45 19,04 0,83 46

28,80 29,22 1,46 28 29,17 1,28 29 28,87 0,24 30

38,40 38,52 0,31 21 38,04 0,94 22 38,91 1,33 22

56,00 56,50 0,89 14 54,69 2,34 15 55,93 0,13 15

57,60 56,50 1,91 14 58,33 1,27 14 55,93 2,90 15

115,20 121,07 5,10 6 109,38 5,05 7 111,86 2,90 7

128,00 121,07 5,41 6 125,00 2,34 6 127,84 0,12 6

Tốc độ

baud

mong

muốn

Fosc = 16 MHz Fosc = 18 MHz Fosc = 18.432 MHz Fosc = 20 MHz

Tốc độ

thực tế Error

N

Tốc độ

thực tế Error

N

Tốc độ

thực tế Error

N

Tốc độ

thực tế Error

N

(Kbps) (Kbps) (%) (Kbps) (%) (Kbps) (%) (Kbps) (%)

0,30 0,30 0,00 3332 0,30 0,00 3749 0,30 0 3839 - - -

0,60 0,60 0,00 1666 0,60 0,00 1874 0,60 0 1919 0,6 0 2082

1,20 1,20 0,00 832 1,20 0,00 937 1,20 0 959 1,2 0 1041

2,40 2,40 0,00 416 2,40 0,00 468 2,40 0 479 2,4 0 520

4,80 4,81 0,21 207 4,81 0,21 233 4,80 0 239 4,81 0,21 259

9,60 9,62 0,21 103 9,62 0,21 116 9,60 0 119 9,62 0,21 129

14,40 14,49 0,62 68 14,42 0,14 77 14,40 0 79 14,37 0,21 86

19,20 19,23 0,16 51 19,07 0,68 58 19,20 0 59 19,23 0,16 64

28,80 28,57 0,80 34 28,85 0,17 38 28,80 0 39 29,07 0,94 42

38,40 38,46 0,16 25 38,79 1,02 28 38,40 0 29 37,88 1,35 32

56,00 55,56 0,79 17 56,25 0,45 19 54,86 2,04 20 56,82 1,46 21

57,60 58,82 2,12 16 56,25 2,34 19 57,60 0 19 56,82 1,35 21

115,20 111,11 3,55 8 112,50 2,34 9 115,20 0 9 113,64 1,35 10

128,00 125,00 2,34 7 125,00 2,34 8 128,00 0 8 125 2,34 9

18.3.2. Xung lấy mẫu và xung dịch dữ liệu bên trong UART

BRG sẽ tạo ra xung dịch dữ liệu và xung lấy mẫu thích hợp dựa trên giá trị được thiết lập trong

các bit UxBRH và UxBRL. Hình 18-2 sẽ cho thấy sự khác biệt giữa xung lấy mẫu và xung dịch

dữ liệu trong mỗi UART

Page 154: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 154

Fosc

Xung truyền

(xung dịch dữ liệu)

N + 1 chu

kỳ

Xung nhận

(Xung lấy mẫu dữ liệu)

16 chu kỳ của xung lấy mẫu

16x(N + 1) chu kỳ

Hình 18-2: Xung lấy mẫu dữ liệu và xung dịch dữ liệu tính theo hệ số N

Một số trường hợp đặc biệt được minh họa trong các hình sau đây:

16 cycles

Fosc

Reception clock

(Sampling clock)

Transmission clock

(Shifting clock)

Hình 18-3: Xung lấy mẫu dữ liệu và xung dịch dữ liệu với N = 0

16 sampling clock‘s cycles

Fosc

Reception clock

(Sampling clock)

Transmission clock

(Shifting clock)

Hình 18-4: Xung lấy mẫu dữ liệu và xung dịch dữ liệu với N = 1

18.3.3. Lấy mẫu dữ liệu

UART lấy mẫu dữ liệu tại cạnh lên thứ 8 của xung lấy mẫu, xem Hình 18-5. Đặc biệt, khi cả hai

giá trị UxBRH và UxBRL bằng “0”, xung lấy mẫu luôn là “1” và dữ liệu sẽ lấy mẫu tại cạnh lên

thứ 8 tính theo xung clock hệ thống, xem Hình 18-6.

Xung clock nhận

(Xung clock lấy mẫu)

Dữ liệu ngõ vào

bit start 8 8 8

Start bitBit 0 Bit 1

bit start bit start

Hình 18-5: Lẫy mẫu dữ liệu với N ≠ 0

Page 155: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 155

Dữ liệu nhận

Xung clock hệ thống

(Fosc)

Xung clock nhận

(Xung clock lấy mẫu)

8

Điểm lấy mẫu

16 chu kỳ xung clock hệ thống

Hình 18-6: Lấy mẫu dữ liệu với N = 0

18.3.4. Dịch dữ liệu

UART phát dữ liệu theo cạnh lên của xung dịch dữ liệu.

Xung truyền

(Xung dịch dữ liệu)

Start bitDữ liệu truyền Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Bit 8 (If any) Stop Bit

Parity Bit

Hình 18-7: Dịch dữ liệu

18.4. Bộ truyền UART

18.4.1. Cấu trúc bộ truyền UART

Các thành phần cơ bản của bộ truyền UART như sau:

Bit UxON (UxSTA [7]) dùng để cấu hình các chân PORTC [1]/TX1, PORTC [0]/RX1;

PORTB [3]/TX2, PORTB [2]/RX2 và PORTB [1]/TX3, PORTB [0]/RX3 cho ngoại vi

UART. Các bit DIRC [1], DIRC [0] và DIRB [3], DIRB [2] sử dụng đề xác định chiều dữ

liệu cho các chân của UART 1 và UART 2. UART 3 có hai chân độc lập nên không có bit

cấu hình chiều dữ liệu.

Sau khi UxON (UxSTA [7]) được thiết lập mức cao, thiết lập bit UxTXEN (UxCON [7])

để cho phép bộ truyền có thể hoạt động.

Thanh ghi dữ liệu truyền (UxTXREG) sử dụng để lưu dữ liệu muốn truyền. Thanh ghi

này có một bit cho biết trạng thái rỗng của thanh ghi. Khi bộ truyền đang hoạt động

(UxON = UxTXEN = 1), nếu ngắt được sử dụng, việc ghi vào thanh ghi UxTXREG sẽ

xóa cờ ngắt UxTXIF và cờ ngắt này sẽ tích cực mức cao khi dữ liệu trong thanh ghi

UxTXREG được truyền đi.

Để sử dụng ngắt truyền, bit UxTXIE phải được thiết lập mức cao. Bit UxTXIP sử dụng để

chọn mức ưu tiên của ngắt.

Page 156: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 156

Thanh ghi dịch (TSRx) lấy dữ liệu truyền từ thanh ghi UxTXREG để dịch nối tiếp từng

bit dữ liệu ra ngoài. Thanh ghi dịch TSRx có một bit báo trạng thái hoạt động là

UxTXEMP để cho biết khi nào trong thanh ghi có dữ liệu.

Xung clock dịch dữ liệu được tạo từ bộ BRG để điều khiển tốc độ bit.

Hai bit UxTX9EN và UxTX9D sử dụng để thiết lập việc truyền bit kiểm tra Parity.

Chú ý:

Để kiểm tra giá trị truyền gần nhất, người sử dụng có thể đọc giá trị thanh ghi UxTXREG.

Cờ ngắt UxTXIF luôn bằng 0 khi một trong hai bit UxON và UxTXEN bằng 0. Khi cả hai bit

UxON và UxTXEN bằng 1, Cờ ngắt UxTXIF sẽ được thiết lập ngay. Giá trị reset của cờ UxTXIF

là 0.

Thanh ghi dịch TSRx là thanh ghi nội và người sử dụng không thể truy xuất trực tiếp thanh

ghi này.

UxTXREG

Start bit8 data bitParity bit

(UxSTA [4]) UxTX9D

(UxCON [6]) UxTX9EN

PORTC [1]/TX1

hoặc

PORTB [3]/TX2

hoặc

PORTB [1]/TX3

UxON

(UxSTA [7])

BRG

Xung clock

dịch dữ liệu

UxTXEN

(UxCON [7])

UxTXEMP

(UxSTA [5])

Bit trạng

thái

UxTXIE

(IE2 [0] or IE2 [2])

Ngắt

truyền

Bộ cấu hình

chân giao tiếp

Bộ ưu tiên

ngắt

UxTXIP

(IP2 [0] or IP2 [2])

Bit chỉ đọc

Thanh ghi dịch

UxTXEN

(UxCON [7])

UxTXIF

(IF2 [0] or IF2[2])

Bộ giám sát hoạt

động truyền dữ liệu

Hình 18-8: Minh họa cấu trúc cơ bản của bộ truyền UART

18.4.2. Cấu hình sử dụng bộ truyền của ngoại vi UART

Các bước thiết lập bộ truyền ngoại vi UART được liệt kê sau đây:

1. Bật ngoại vi UARTx:

Thiết lập bit UxON (UxSTA [7]) lên mức cao, mức 1.

2. Xác định chiều dữ liệu cho các chân truyền của ngoại vi UART (bước này chỉ dành cho ngoại

vi UART1 và UART2):

Thiết lập bit DIRC [1] để cấu hình chân PORTC [1]/TX1 là ngõ ra.

Thiết lập bit DIRB [3] để cấu hình chân PORTB [3]/TX2 là ngõ ra.

Page 157: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 157

Thiết lập bit DIRB [1] để cấu hình chân PORTB [1]/TX3 là ngõ ra.

3. Cấu hình tốc độ Baud:

Dựa trên tốc độ Baud mong muốn để ghi giá trị thích hợp cho các bit UxBRH (UxCON

[3:0]) và UxBRL. Việc tính toán tốc độ Baud xem ở mục18.3.1.

4. Cho phép ngắt truyền (nếu muốn sử dụng ngắt):

Thiết lập bit cho phép ngắt UxTXIE

o UART 1 là bit U1TXIE (IE2 [0])

o UART 2 là bit U2TXIE (IE2 [2])

o UART 3 là bit U3TXIE (IE2 [4])

Thiết lập mức ưu tiên cho ngắt thông qua bit UxTXIP

o UART 1 là bit U1TXIP (IP2 [0])

o UART 2 là bit U2TXIP (IP2 [2])

o UART 3 là bit U3TXIP (IP2 [4])

5. Cho phép bộ truyền hoạt động

Sau khi cấu hình các thông số hoạt động thì bit UxTXEN (UxCON [7]) cần được tích cực

để cho phép bộ truyền có thể hoạt động.

6. Chọn chế độ truyền

Thiết lập bit UxTX9EN (UxCON [6]) nếu muốn truyền khung dữ liệu 9 bit (8-bit dữ liệu

và 1 bit Parity).

7. Truyền dữ liệu:

Ghi giá trị bit thứ 9 (bit kiểm tra Parity) của khung dữ liệu muốn truyền vào UxTX9D

(UxSTA [4]) nếu chế độ truyền 9 bit được cho phép ở bước 6.

Ghi dữ liệu muốn truyền vào thanh ghi UxTXREG.

Nếu muốn truyền nhiều khung dữ liệu thì phải sử dụng ngắt hoặc giám sát cờ ngắt và các bit

trạng thái như bước sau:

8. Kiểm tra cờ ngắt UxTXIF:

Giám sát cờ ngắt để đảm bảo rằng thanh ghi dữ liệu UxTXREG rỗng.

Nếu thanh ghi UxTXREG rỗng thì thực hiện lại bước thứ 7.

Chú ý:

Nếu TX1, TX2 hay TX3 được kết nối đến các linh kiện khác, phải thiết lập PORTC [1],

PORTB [3] hoặc PORTB [1] trước khi UARTx được bật.

Nếu sử dụng ngắt, bit UxTXIE phải được thiết lập trước khi bit UxTXEN tích cực.

Page 158: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 158

Nếu truyền ở chế độ 9 bit, bit thứ 9 phải được ghi trước khi ghi 8-bit dữ liệu vào thanh ghi

UxTXREG.

Bit UxTXIF phải được kiểm tra để đảm bảo thanh ghi UxTXREG rỗng trước khi ghi dữ liệu

truyền mới. Nếu không, dữ liệu chưa được truyền trong thanh ghi UxTXREG sẽ bị ghi đè bởi

dữ liệu mới.

Xung clock truyền

(Xung clock dịch dữ liệu)

Start bitDữ liệu truyền

Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Bit 8 (nếu có) Stop Bit

Parity Bit

Ghi vào thanh ghi

dữ liệu truyền

Cờ ngắt UxTXIF

Bit trạng thái TXEMP

2 chu kỳ xung

clock hệ thống

Hình 18-9: Truyền một khung dữ liệu

Start bit Bit 0 Bit 1 Bit 2 Bit 3 Bit 4 Bit 5 Bit 6 Bit 7 Bit 8 (nếu có) Stop Bit

Parity Bit

2 chu kỳ xung

clock hệ thống

Start bit Bit 0 Bit 1

Nếu ghi vào thanh ghi truyền trong khoảng thời

gian này thì Dữ liệu 2 sẽ bị ghi đè bởi giá trị mới

Dữ liệu 1 Dữ liệu 2 Dữ liệu 3

Xung clock truyền

(Xung clock dịch dữ liệu)

Dữ liệu truyền

Ghi vào thanh ghi

dữ liệu truyền

Cờ ngắt UxTXIF

Bit trạng thái TXEMP

Hình 18-10: Truyền liên tục

18.5. Bộ nhận UART

18.5.1. Cấu trúc bộ nhận UART

Các thành phần cơ bản của bộ nhận UART như sau:

Bit UxON (UxSTA [7]) dùng để cấu hình các chân giao tiếp của ngoại vi UART như

PORTC [1]/TX1, PORTC [0]/RX1; PORTB [3]/TX2, PORT [2]/RX2 và PORTB

[1]/TX3, PORTB [0]/RX3.

Sau khi bit UxON (UxSTA [7]) được thiết lập mức cao (mức 1), Bit UxRXEN (UxCON

[5]) được thiết lập để cho phép bộ nhận có thể hoạt động.

Bộ lấy mẫu thực hiện lấy mẫu dữ liệu trên chân RXx với tốc độ lẫy mẫu được tính bởi bộ

BRG.

Thanh ghi dịch lưu dữ liệu tạm thời trong quá trinh lấy mẫu.

Page 159: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 159

FIFO hai tầng. Sau khi một khung dữ liệu được nhận đầy đủ thì dữ liệu sẽ được chuyển

vào FIFO và bit UxRCIF được thiết lập mức cao. Tín hiệu ngắt sẽ tích cực nêu UxRCIE

(IE2 [1], IE2 [3] hay IE[5]) được thiết lập mức 1.

Thanh ghi dữ liệu nhận (UxRXREG) được kết nối trực tiếp đến hai tầng FIFO.

Chú ý:

Thanh ghi dịch là thanh ghi nội và không thể truy xuất trực tiếp.

Cờ UxRCIF chỉ bằng 0 khi FIFO không chứa bất kỳ dữ liệu nào.

Start bit8 data bitParity bit

PORTC [0]/RX1

or

PORTB [2]/RX2

or

PORTB [0]/RX3

UxON

(UxSTA [7])

UxRXEN

(UxCON [5])

Cấu hình chân

giao tiếpBộ lấy mẫu

BRG

Xung clock lấy

mẫu dữ liệu

Stop bit

8 bit dữ liệuUxRX9D

(UxSTA [0])

UxRXFE

(UxSTA [2])

Kiểm tra

lỗi

Thanh ghi dịch

UxRX9EN

(UxCON [4])

Tín hiệu ngắt

U1RCIE (IE2 [1])

U2RCIE (IE2 [3])

Bit trạng

thái

UxRXEN

(UxCON [5])

UxRCIF

Bộ ưu tiên

ngắt

U1RCIP (IP2 [1])

U2RCIP (IP2 [3])

UxRXOV

(UxSAT [1])

FIFO

Bit chỉ đọc

UxRXREG

Hình 18-11: Cấu trúc của UART nhận

18.5.2. Cấu hình sử dụng bộ nhận của ngoại vi UART

Các bước thiết lập bộ nhận ngoại vi UART được liệt kê sau đây:

1. Bật ngoại vi UARTx:

Thiết lập bit UxON (UxSTA [7]) lên mức cao, mức 1.

2. Xác định chiều dữ liệu cho các chân RXx (chỉ dành cho UART1 và UART2):

Xóa bit DIRC [0] để cấu hình chân PORTC [0]/RX1 là ngõ vào.

Xóa bit DIRB [2] để cấu hình chân PORTB [2]/RX2 là ngõ vào.

Xóa bit DIRB [0] để cấu hình chân PORTB [0]/RX3 là ngõ vào.

3. Cấu hình tốc độ Baud:

Page 160: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 160

Dựa trên tốc độ Baud mong muốn để ghi giá trị thích hợp cho các bit UxBRH (UxCON

[3:0]) và UxBRL. Việc tính toán tốc độ Baud xem ở mục18.3.1.

4. Cho phép ngắt nhận nếu muốn sử dụng ngắt:

Thiết lập các bit UxRCIE (IE2[1], IE2[3] hay IE[5]) để bật/tắt ngắt.

Thiết lập độ ưu tiên ngắt thông qua các bit UxRCIP (IP2[1], IP2[3] hay IP[5]).

5. Cho phép bộ nhận hoạt động:

Thiết lập bit UxRXEN (UxCON [5]) để cho phép bộ nhận sẵn sàng hoạt động.

6. Chọn chế độ nhận khung dữ liệu 9 bit:

Thiết lập bit UxRX9EN (UxCON [4]) để chọn chế độ nhận 9 bit.

7. Nhận dữ liệu:

Kiểm tra cờ UxRCIF. Nếu cờ UxRCIF bằng 1 thì trong FIFO đang có dữ liệu, dữ liệu sẽ

được đọc theo thứ tự sau:

o Đọc thanh ghi UxSTA để lấy giá trị bit thứ 9 và xác định các lỗi như lỗi khung

hay lỗi tràn (overrun).

o Đọc thanh ghi dữ liệu UxRXREG để lấy 8-bit dữ liệu.

Chú ý:

Nếu thanh ghi UxRXREG được đọc trước khi đọc thanh ghi UxSTA thì giá trị của bit thông

báo lỗi khung và bit thứ 9 của khung dữ liệu được đọc sẽ bị mất.

Khi các khung dữ liệu được nhận liên tục.

18.5.2.1. Các cờ lỗi

Bộ nhận UART có hai cờ báo lỗi là cờ lỗi khung truyền UxRXFE và cờ lỗi tràn UxRXOV.

Cờ UxRXFE chỉ ra lỗi bit stop của khung truyền. Lỗi bit stop xảy ra khi bộ nhận lấy mẫu

được giá trị 0 thay vì 1 ở vị trí stop bit. Giá trị bit UxRXFE chỉ được cập nhật khi đọc

thanh ghi UxRXREG.

Cờ UxRXOV chỉ ra có ít nhất một khung dữ liệu bị mất trong quá trình nhận. Khi FIFO

nhận đã đầy mà bộ nhận vẫn tiếp tục nhận được khung dữ liệu mới trước khi thanh ghi

UxRXREG được đọc thì cờ UXRXOV được tích cực. Cờ này chỉ bị xóa khi xóa bit

UxRXEN (UxCON [5]).

Chú ý:

Cờ UxRXOV không thể bị xóa trực tiếp.

Page 161: SG8V1 Huong Dan Su Dung

UART

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 161

Sta

rt

bit

Dữ

liệ

u đ

ượ

c n

hậ

nB

it 0

Bit 1

Bit 2

Bit 3

Bit 4

Bit 5

Bit 6

Bit 7

Bit 8

Sto

p

Bit

Nh

ận

ho

àn

th

iện

mộ

t kh

un

g d

ữ liệ

u

Cờ

RX

OV

Sta

rt

bit

Bit 0

Bit 1

Bit 2

Bit 3

Bit 4

Bit 5

Bit 6

Bit 7

Bit 8

Sto

p

Bit

Pa

rity

Bit

(nế

u c

ó)

Sta

rt

bit

Bit 0

Bit 1

Bit 2

Bit 3

Bit 4

Bit 5

Bit 6

Bit 7

Bit 8

Đọ

c th

an

h g

hi

UR

XR

EG

Sta

rt

bit

Bit 0

RX

EN

Cờ

UR

CIF

Pa

rity

Bit

(nế

u c

ó)

Pa

rity

Bit

(nế

u c

ó)

Sto

p

Bit

Hình 18-12: UART tiếp nhận

Page 162: SG8V1 Huong Dan Su Dung

ADC

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 162

19. Ngoại vi ADC

Ngoại vi ADC thực hiện chuyển đổi tín hiệu tương tự thành tín hiệu số 8-bit. Ngoại vi có bốn

ngõ vào. Ngõ vào của điện áp tham khảo mức thấp sẽ luôn bằng 0. Ngõ vào dành cho điện áp

tham khảo mức cao sẽ hiệu chỉnh theo giá trị điện áp của chân VREF.

Ba thanh ghi liên quan đến ngoại vi ADC gồm:

Thanh ghi ADCON1 sử dụng để bặt/tắt ngoại vi ADC, lựa chọn kênh và thiết lập tần số

hoạt động của ADC.

Thanh ghi ADCON2 chứa một bit cho phép khởi động ADC và báo trạng thái hiện tại của

ADC.

Thanh ghi ADBUFF lưu giá trị của ADC sau khi chuyển đổi.

19.1. Cấu trúc cơ bản của ADC

Bộ chuyển đổi

ADC

Vref+

Vref-

VREF

Bộ tạo xung nhịp

cho ADC

Xung nhịp cấp

cho ADC

ADCK1 ADCK0

OSC1ADON

VAin

VIN1

VIN2

VIN3

VIN4

Điện áp ngõ vào

ADCH1

ADCH0

Hình 19-1: Sơ đồ khối ngoại vi ADC

Page 163: SG8V1 Huong Dan Su Dung

ADC

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 163

Ngoại vi ADC có ba phần chính như sau.

Bộ tạo xung nhịp cho ADC: Tạo xung nhịp hoạt động cho ADC từ xung nhịp hệ thống.

Bộ chọn kênh ngõ vào

Bộ chuyển đổi ADC thực hiện chuyển đổi ngõ vào tương tự thành kết quả số 8-bit.

19.2. Các thanh ghi liên quan đến hoạt động của ADC

19.2.1. Thanh ghi điều khiển thứ 1 của ADC (ADCON1)

Tên Bit R/W Mô tả

ADON [7] R/W Bit bật/tắt ADC

0 : Bộ chuyển đổi ADC bị

tắt và không được cấp

xung nhịp hoạt động.

1 : Bộ chuyển đổi ADC

sẵn sàng hoạt động

Bit dự trữ [6:4] R Không sử dụng

Giá trị đọc ra là 0

ADCK [3:2] R/W Bit chọn tần số clock cấp cho bộ

ADC hoạt động

00 : Tần số xung clock cấp

cho ADC bằng tần số xung

clock hệ thống (fosc)

01 : Tần số xung clock cấp

cho ADC bằng một nửa

tần số xung clock hệ thống

(fosc/2)

10 : Tần số xung clock cấp

cho ADC bằng một nửa

tần số xung clock hệ thống

(fosc/4)

11 : Giá trị này không

được phép sử dụng

ADCH [1:0] R/W Bit chọn kênh ngõ vào cho ADC

00 : Kênh 0 (VIN1)

Page 164: SG8V1 Huong Dan Su Dung

ADC

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 164

Tên Bit R/W Mô tả

01 : Kênh 1 (VIN2)

10 : Kênh 2 (VIN3)

11 : Kênh 3 (VIN4)

19.2.2. Thanh ghi điều khiển thứ 2 của ADC (ADCON2)

Tên Bit R/W Mô tả

Bit dự trữ [7:1] R Không sử dụng

Giá trị đọc ra là 0

START/BUSY [0] R/W Bit khởi động ADC và báo trạng

thái ADC. Xóa bit này xuống 0 để

khởi động một quá trình chuyển

đổi của ADC.

0 : Bộ ADC đang bận,

nghĩa là bộ ADC đang

trong quá trình thực hiện

một chuyển đổi.

1 : Bộ ADC sẵn sàng để

thực hiện một chuyển đổi

tín hiệu tương tự ở ngõ vào

thành một giá trị số 8-bit.

19.2.3. Thanh ghi lưu dữ liệu ADC (ADBUF)

Tên Bit R/W Mô tả

ADBUF [7:0] R Giá trị 8-bit của ADC sau mỗi lần

thực hiện chuyển đổi.

Page 165: SG8V1 Huong Dan Su Dung

ADC

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 165

19.2.4. Thanh ghi cho phép ngắt số 3 (IE3)

Tên Bit R/W Mô tả

Bit dự trữ [7:3] R Không sử dụng

Giá trị đọc ra là 0

ADIE [2] R/W Bit cho phép ngắt ADC

0 : Không cho phép tạo

ngắt khi ADC hoạt động

1 : Cho phép tạo ngắt khi

ADC hoạt động

I2CBCIE [1] R/W Bit dành cho ngoại vi I2C

I2CIE [0] R/W Bit dành cho ngoại vi I2C

19.2.5. Thanh ghi ưu tiên ngắt số 3 (IP3)

Tên Bit R/W Mô tả

Bit dự trữ [7:3] R Không sử dụng

Giá trị đọc ra là 0

ADIP [2] R/W Bit xác lập ưu tiên ngắt cho ngoại

vi ADC

I2CBCIP [1] R/W Bit dành cho ngoại vi I2C

I2CIP [0] R/W Bit dành cho ngoại vi I2C

19.2.6. Thanh ghi trạng thái ngắt số 3 (IF3)

Tên Bit R/W Mô tả

Bit dự trữ [7:3] R Không sử dụng

Page 166: SG8V1 Huong Dan Su Dung

ADC

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 166

Tên Bit R/W Mô tả

Giá trị đọc ra là 0

ADIF [2] R Bit báo trạng thái ngắt của ngoại

vi ADC

I2CBCIF [1] R Bit dành cho ngoại vi I2C

I2CIF [0] R Bit dành cho ngoại vi I2C

19.3. Hoạt động của ngoại vi ADC

Thứ tự cấu hình và hoạt động cơ bản của ADC như sau:

1. Cấu hình ngoại vi ADC

Thiết lập xung clock cho ADC hoạt động thông quan các bit ADCK, là bit thứ 4 và thứ 3

của thanh ghi ADCON1. Xung clock cấp cho ADC được tính dựa trên xung clock hệ

thống.

Chọn kênh ngõ vào cho ADC thông qua các bit ADCH, là bít thứ 2 và thứ 1 của thanh ghi

ADCON1.

Bật ngoại vi ADC thông qua bit ADON, là bit thứ 7 của thanh ghi ADCON1.

2. Cấu hình sử dụng ngắt cho ngoại vi ADC (đây là bước không bắt buộc)

Xóa bit ngắt ADIF, là bit thứ 2 của thanh ghi IF3.

Thiết lập bit cho phép ngắt ADIE, là bit thứ 2 của thanh ghi IE3.

Thiết lập bit ưu tiên ngắt ADIP, là bit thứ 2 của thanh ghi IP3.

3. Khởi động một quá trình chuyển đổi

Xóa bit START/BUSY, là bit thứ 0 của thanh ghi ADCON2.

4. Kiểm tra trạng thái hoạt động của ADC

Giám sát bit START/BUSY, là bit thứ 0 của thanh ghi ADCON2. Khi giá trị bit này là 1

thì ADC đã thực hiện xong quá trình chuyển đổi.

Chờ ngắt ADC.

5. Đọc thanh ghi dữ liệu ADBUFF và xóa cờ ngắt ADIF (nếu có sử dụng)

6. Thực hiện lần chuyển đổi tiếp theo

Nếu cần cấu hình lại thì quay lại bước thứ 1.

Page 167: SG8V1 Huong Dan Su Dung

ADC

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 167

Nếu không cần cấu hình lại thì lặp lại từ bước thứ 3.

Xung clock cấp

cho bộ chuyển

đổi AD

START/BUSY

(ADCON2[0])

ADIF

(IF3[2] – nếu sử

dụng)

ADON

(ADCON1[7])

―1‖

Xóa ngắt

ADC đang bận

Quá trinh chuyển

đổi hoàn tất

Tín hiệu bị xóa bởi

người dùng lập trình

Hình 19-2: Giản đồ thời gian cho hoạt động của ADC

Chú ý:

1. Sau khi bit ADON được thiết lập, phải chờ ít nhất 2 chu kỳ clock ADC trước khi xóa bit

START/BUSY (ADCON2[0]) để bắt đầu lần chuyển đổi đầu tiên, (xem 19.2.2 Thanh ghi điều

khiển thứ 2 của ADC (ADCON2)).

2. Quá trình chuyển đổi sẽ được bắt đầu lại nếu xóa bit START/BUSY trong khi ADC đang bận

(START/BUSY đang bằng 0).

fosc

2 Tadc

1 Tadc

ADC Clock

START/BUSY

(ADCON2[0])

ADON

(ADCON1[7])

Sau khi bit ADON tích cực, lần

hoạt động đầu tiên phải chờ ít

nhất sau 2 chu kỳ xung clock ADC

Hình 19-3: Lần chuyển đổi đầu tiên sau khi bit ADON (ADCON1[7]) được tích cực

19.4. Các chú ý khi sử dụng ngoại vi ADC

19.4.1. Nguồn xung clock cấp cho ngoại vi ADC

Tần số xung clock cấp cho ngoại vi ADC hoạt động được cấu hình thông qua các bit ADCK

(ADCON1[4:3]). Ở đây, ngoại vi ADC được hỗ trợ ba mức cấu hình là:

Fosc: Tần số clock cấp cho ADC bằng tần số clock hệ thống

Fosc/2: Tần số clock cấp cho ADC bằng một nửa tần số clock hệ thống

Fosc/4: Tần số clock cấp cho ADC bằng một phần bốn tần số clock hệ thống

Page 168: SG8V1 Huong Dan Su Dung

ADC

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 168

Để bộ chuyển đổi ADC hoạt động chính xác thì tần số xung clock cấp cho bộ chuyển đổi ADC

phải nhỏ hơn hoặc bằng 4MHz.

Bảng 19-1. Một số giá trị cấu hình tham khảo cho xung clock ngoại vi ADC

Tần số xung clock hệ thống ADCK[1:0] Tần số xung clock ADC

4MHz 00

01

10

FADC = Fosc = 4 MHz

FADC = Fosc/2 = 2 MHz

FADC = Fosc/4 = 1 MHz

5MHz 01

10

FADC = Fosc/2 = 2.5 MHz

FADC = Fosc/4 = 1.25 MHz

10 MHz 10 FADC = Fosc/4 = 2.5 MHz

12 MHz 10 FADC = Fosc/4 = 3 MHz

13MHz 10 FADC = Fosc/4 = 3.25 MHz

Chú ý:

Nếu cả hai bit ADCK được thiết lập là 1 thì tần số xung nhịp cấp cho ADC là Fosc/4.

19.4.2. Các yêu cầu về thông số và kết nối

Ngoại vi ADC trong vi điều khiển SG8V1 có các thông số cần chú ý như sau:

Sử dụng nguồn cấp đơn VDD = 3.3V ±10%

Độ phân giải 8-bit

Sai số khoảng ±1LSB

Tần số hoạt động lớn nhất 4MHz

Thời gian chuyển đổi lớn nhất là 2.25uS và nhỏ nhất 2uS

Sử dùng điền áp chuẩn VREF ngoài có giá trị lớn nhất bằng VDD

Ngõ vào VIN1 VIN2 VIN3 VIN4 đơn với dãy điện áp có thể được lấy mẫu từ 0 tới VREF

Tần số tín hiệu ngõ vào lớn nhất 10Khz và với điện trở nguồn lớn nhất Rs = 2KΩ

Không cần thời gian chờ khi chuyển đổi giữa các kênh

Page 169: SG8V1 Huong Dan Su Dung

ADC

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 169

Công thức chuyển đổi của ADC là:

256Dout vin

Vref

Mô hình ngõ vào kết nối đến các chân VIN1, VIN2, VIN3 hoặc VIN4 như sau:

AVDD

Rs

AGND

Chold = 5.32pF

D1

D2

Sampling

Switch

Cin =

2.15pFvin

PIN

Hình 19-4: Mô hình ngõ vào của ADC

Page 170: SG8V1 Huong Dan Su Dung

Bộ nhớ chương trình Flash

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 170

20. Bộ điều khiển truy xuất Flash

SG8V1 hỗ trợ chức năng truy xuất bộ nhớ chương trình trong khi chip đang hoạt động. Để thực

hiện chức năng này, trước hết người sử dụng phải bật bit FAEN lên 1 để cho phép bộ điều khiển

truy xuất flash hoạt động. Sau đó, lệnh MRF hoặc MFR dùng chuyển dữ liệu từ RAM sang Flash

và ngược lại. Mỗi lần thực hiện xong các lệnh này thì bit FAEN sẽ tự động xóa. Do đó, để thực

hiện lại các lệnh này, người sử dụng phải bật bit FAEN lên lần nữa.

20.1. Thanh ghi điều khiển truy xuất Flash

Tên Bit R/W Mô tả

Bit dự trữ [7:3] R Không sử dụng

Giá trị đọc ra là 0

FDM [2] R/W Flash Data Memory Access: Bit

lựa chọn truy xuất flash data

memory hay flash program

memory:

0: Truy xuất flash program

memory

1: truy xuất flash data

memory

PAGE [1] R/W Bit lựa chọn truy xuất flash mỗi

lần 1 word (16 bit) hay 1 trang (64

lệnh):

0: Truy xuất 1 word

1: truy xuất 1 trang

FAEN [0] R/W Flash Access Enable: Bit cho phép

bộ điều khiển truy xuất flash hoạt

động. Bit này chỉ được phép set

lên „1‟ và tự động xóa bằng phần

cứng.

0 : Không cho phép

1 : Cho phép

Page 171: SG8V1 Huong Dan Su Dung

Bộ nhớ chương trình Flash

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 171

Tên Bit R/W Mô tả

20.1.1. Thanh ghi trọng số cao của Flash Pointer (FPTH)

Tên Bit R/W Mô tả

FPTH [7:0] R/W Thanh ghi trọng số cao của Flash

Pointer

20.1.2. Thanh ghi trọng số thấp của Flash Pointer (FPTH)

Tên Bit R/W Mô tả

FPTL [7:0] R/W Thanh ghi trọng số thấp của Flash

Pointer

20.2. Hoạt động của bộ điều khiển truy xuất flash

20.2.1. Truy xuất Flash Program Memory

20.2.1.1. Truy xuất Flash Program Memory theo trang

Muốn truy xuất Flash Program Memory theo trang, ngưởi sử dụng phải thực hiện như sau:

1. Xóa bit FDM về 0, Set bit PAGE và FAEN trong thanh ghi FLASH_CTRL lên 1

2. Sử dụng lệnh MFR để chuyển dữ liệu từ flash sang RAM hoặc MRF để chuyển dữ liệu từ

RAM sang flash.

Trong đó,

- Địa chỉ đầu tiên của flash được xác định bởi thanh ghi FPTH (địa chỉ cao) và thanh ghi

FPTL (địa chỉ thấp). Khi truy xuất byte địa chỉ flash phải là địa chỉ đầu trang (6 bit thấp của địa

chỉ flash phải bằng 0). Nếu người sử dụng lập trình 6 bit thấp của địa chỉ flash khác 0, bộ điều

khiển flash sẽ tự động bỏ qua. Khi đó chương trình hệ thống có thể hoạt động sai.

- Giá trị của các bit „bse‟ và „rrrrrrrr‟ trong lệnh MRF và MFR dùng xác định địa chỉ đầu của

vùng RAM. Nếu „bse‟ = 0, một địa chỉ được xác định bằng 00rrrrrrrrb. Ngược lại, địa chỉ này

được xác định bằng thanh ghi BS và 8 bit rrrrrrrr. Giá trị này tạm gọi là “địa chỉ được gán trong

lệnh”. SG8V1 sử dụng “địa chỉ được gán trong lệnh” để quyết định địa chỉ đầu thực sự của vùng

RAM cần sử dụng. Có 2 cách định địa chỉ: trực tiếp và gián tiếp.

Page 172: SG8V1 Huong Dan Su Dung

Bộ nhớ chương trình Flash

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 172

Định địa chỉ trực tiếp: “địa chỉ được gán trong lệnh” không trỏ đến các thanh ghi IDA0,

IDA1, IDAOFF0, IDAOFF1, IDAINC0, IDAINC1, INCIDA0, INCIDA1, IDADEC0,

IDADEC1, DECIDA0 hay DECIDA1. Khi đó, địa chỉ này cũng chính là địa chỉ đầu của

vùng RAM cần sử dụng. Địa chỉ này nên lớn hơn 0x5D, nếu không chương trình có thể

bị sai ngoài ý muốn.

Định địa chỉ gián tiếp: “địa chỉ được gán trong lệnh” trỏ đến một trong các thanh ghi

IDA0, IDA1, IDAOFF0, IDAOFF1, IDAINC0, IDAINC1, INCIDA0, INCIDA1,

IDADEC0, IDADEC1, DECIDA0 hay DECIDA1. Khi đó, địa chỉ đầu của vùng RAM

cần sử dụng được xác định tùy thuộc vào “địa chỉ được gán trong lệnh” trỏ đến thanh ghi

nào trong các thanh ghi trên (xem 7.2.5.3 Định địa chỉ gián tiếp qua con trỏ). Lưu ý, địa

chỉ vùng RAM thực sự được sử dụng phải lớn hơn 0x5D, nếu không chương trình có thể

bị sai ngoài ý muốn.

FPTH

FPTL

(high)

(low)

Flash controller

FLASH

RAM

BS/0

rrrr_rrrr

(high)

(low)

15 8 7 0

7 00x0000

0x3FFF

0x0000

0xFFFF

Low byteHigh byte

Low byte

High byte

A

A

A+1

B

B

B+1

RAM address

Truy xuất trực tiếp (Direct Access)

Truy xuất gián tiếp (Indirect Access)

DPH0, DPL0

DPH1, DPL1

(+offset (nếu có))

Hình 20-1: Quá trình truy xuất flash

20.2.1.2. Truy xuất Flash Program Memory theo từng word

Muốn truy xuất Flash Program Memory theo trang, ngưởi sử dụng phải thực hiện như sau:

1. Xóa bit FDM và PAGE về 0, set bit FAEN lên 1

2. Sử dụng lệnh MFR để chuyển dữ liệu từ flash sang RAM hoặc MRF để chuyển dữ liệu từ

RAM sang flash.

Trong đó,

Page 173: SG8V1 Huong Dan Su Dung

Bộ nhớ chương trình Flash

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 173

- Địa chỉ đầu tiên của flash được xác định bởi thanh ghi FPTH (địa chỉ cao) và FPTL (địa chỉ

thấp). Trong trường hợp này, địa chỉ flash là tùy ý.

- Địa chỉ đầu của RAM cần sử dụng được xác định tương tự như truy xuất theo trang.

20.2.2. Truy xuất Flash Data Memory

Quá trình truy xuất Flash Data Memory tương tự như truy xuất Flash Program Memory. Tuy

nhiên, một số điểm cần lưu ý như sau:

1. Bit FDM phải set lên 1 thay vì xóa về 0

2. Địa chỉ truy xuất Flash Data Memory chỉ sử dụng 11 bit thấp. Do đó, 7 bit trọng số cao của

thanh ghi FPTH sẽ không được sử dụng trong trường hợp này (người dùng nên xóa chúng về

0).

3. Flash Data Memory có tầm địa chỉ từ 0x000 đến 0x5FF. Nếu địa chỉ truy xuất Flash Data

Memory vượt quá địa chỉ cho phép (tức từ 0x600 đến 7FF) thì SG8V1 sẽ thực hiện truy xuất

(đọc/ghi) vào vùng Flash Data Memory có địa chỉ tương ứng từ 0x000 đến 0x1FF. Do đó,

người dùng nên tránh trường hợp này để không bị mất dữ liệu ngoài ý muốn.

Page 174: SG8V1 Huong Dan Su Dung

Bộ nhớ chương trình Flash

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 174

21. Bộ nhớ chương trình FLASH

SG8V1 có một bộ nhớ chương trình FLASH bên trong chip. Chương trình cho SG8V1 sẽ được

nạp qua cổng nối tiếp gần giống với chuẩn SPI. Sử dụng 4 đường kết nối.

Ngõ ra nối tiếp (SPDATAO) – PortB[7] /SDO

Ngõ vào nối tiếp (SPDATAI) – PortB[6] /SDI

Clock nối tiếp (SPCLK) – PortB[5] /SCK

Lựa chọn chế độ nạp chương trình (SPCS)

o SPCS = 1: chế độ nạp chương trình

o SPCS = 0: chế độ hoạt động bình thường

Bộ nhớ chương trình của SG8V1 là 64Kx16, có hỗ trợ chế độ bảo vệ chương trình bên trong

FLASH. Khi chương trình được nạp vào trong SG8V1 cùng với chế độ bảo vệ thì chương trình

đó sẽ không được phép đọc ra trở lại. Khi chương trình đã được bảo vệ thì bộ nhớ FLASH phải

được xóa toàn bộ trước lúc nạp chương trình mới vào FLASH.

R

C

/RST

SPCLK

SPDATAO

SPDATAI

SPCS

VDD = 3.3 v

GND

OSC1

spcs

portb[7]

portb[6]

portb[5]

VDD = 3.3 vSG8V1ADAPTER

USB

UART

Chương trình

trên máy tính

PC

R

VDD

GND

Hình21-1: Sơ đồ kết nối bộ nạp

21.1. Phân vùng FLASH

FLASH có 2 vùng:

Vùng chứa chương trình: 64Kx16.

Vùng chứa thông tin người sử dụng: 2Kx16.

Vùng thông tin người sử dụng, adapter có thể đọc bình thường kể cả trong chế độ bảo vệ.

Page 175: SG8V1 Huong Dan Su Dung

Bộ nhớ chương trình Flash

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 175

Mô tả cấu hình hoạt động của SG8V1:

/RST: SPCS: 0x: SG8V1 bị reset.

10: Chế độ hoạt động bình thường.

11: Chế độ nạp chương trình

Bên trong SG8V1 còn có một ô nhớ chứa ID của SG8V1. Giá trị của ID là 0xCC01

21.2. Chế độ bảo vệ chương trình

Adapter có thể gửi lệnh để yêu cầu bảo vệ chương trình trong FLASH.

Trong chế độ bảo vệ chương trình, adapter không thể đọc chương trình từ FLASH, mà chỉ có thể

đọc dữ liệu từ vùng chứa thông tin. Để nạp lại chương trình thì adapter phải gửi lệnh để yêu cầu

xóa toàn bộ FLASH. Sau khi xóa toàn bộ FLASH thì dữ liệu trong các ô nhớ FLASH là 0xFFFF.

Page 176: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 176

22. Tập lệnh

22.1. Giới thiệu

Tập lệnh của SG8V1 có tất cả 63 mã lệnh. Hầu hết các lệnh có chiều dài là 1 word (16-bit), và

hai lệnh có chiều dài 2 word. Các lệnh tùy theo chức năng và loại lệnh sẽ được chia thành các

nhóm sau:

Số học: thực hiện các phép toán trên các toán hạng

Logic: thực hiện các phép toán logic trên toán hạng

Nhảy: rẽ nhánh luồng chương trình

Điều khiển: thay đổi các bit trạng thái của hệ thống

Sao chép dữ liệu: đọc/ghi dữ liệu với SRAM.

Tất cả các mã lệnh 1 có chiều dài 1 word được thực thi trong 1 chu kỳ, ngoại trừ các lệnh có kèm

theo điều kiện. Khi đó, tùy theo điều kiện sẽ tính toán được chính xác giá trị của bộ đếm chương

trình (PC). Trong trường hợp này, lệnh có điều kiện có thể phải mất 2 chu kỳ để hoàn tất.

Các lệnh có chiều dài 2 word sẽ thực thi trong 2 chu kỳ. Vì vậy, đối với nguồn xung clock tần số

1 MHz, các lệnh bình thường sẽ thực thi trong 1 μs. Nếu điều kiện đúng, hoặc PC thay đổi như là

kết quả của lệnh thì nó được thực hiện trong 2 chu kỳ, 2 μs.

Đối với các lệnh rẽ nhánh có chiều dài 2 word thì phải mất đến 3 chu kỳ, 3 μs, để thực hiện. Tất

các ví dụ mẫu đều sử dụng giá thập lục phân (HEX) để diễn tả.

Bảng tóm tắt chức năng các lệnh trong Bảng 22-2, nó liệt kế hết các lệnh có thể nhận biết được

bởi trình biên dịch SG8V1.

Bảng 22-1: Mô tả cho các trường mã lệnh

Trường Mô tả

bse Chọn lựa băng được chọn là băng 0 hay nội dung thanh ghi BS

bit Vị trí của bit trong thanh ghi 8-bit

dst

Bit chọn đích để ghi vào

dst = 0: lưu vào thanh ghi ACC

dst = 1: ghi vào thanh ghi trỏ bởi reg

dest Đích ghi vào, nó là thanh ghi ACC hoặc một thanh ghi chức năng

reg 8-bit vị trí thanh ghi cần truy xuất (00h tới FFh)

imm Giá trị hằng số trong mã lệnh (có thể là 8 hoặc 15 bit)

target16 Địa chỉ chương trình 16 bit (địa chỉ nhãn)

off8/off11

Địa chỉ tương đối (số bù 2) cho các lệnh nhảy tương đố hoặc địa chỉ trực

Page 177: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 177

tiếp cho các lệnh Call/Branch và Return.

u Không sử dụng hoặc không thay đổi

x Giá trị không cần quan tâm. Mã bit tự tạo ra là giá trị 0.

(reg) Nội dung của reg

[reg][n] Sử dụng bit n của thanh ghi reg

= Gán giá trị

[ ] Trường bit trong thanh ghi

|| Ghép chuỗi các bit

Page 178: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 178

22.2. Thanh ghi cờ phép toán

Tên Bit R/W Mô tả

Không sử dụng [7:3] R

Z [2] R/W Cờ không

0: kết quả không bằng 0

1: kết quả bằng 0

HC [1] R/W Cờ nhớ một nửa (Half-Carry)

0: không có chuyển số nhớ từ số thấp qua số cao

1: có chuyển số nhớ từ số thấp qua số cao

C [0] R/W Cờ nhớ/Cờ mượn (Carry / Borrow)

0: không có cờ nhớ tại ngõ ra

1: có cờ nhớ tại ngõ ra

22.3. Tóm tắt tập lệnh

Bảng 22-2 liệt kê tất cả các lệnh của VĐK SG8V1

Bảng 22-2: Tập lệnh SG8V1

Tên Đối số Chức năng Cờ ảnh hưởng

Nhóm số học

ADDI imm ACC = (ACC) + imm C, HC, Z

ADDR reg, dst, bse dest = (ACC) + (reg) C, HC, Z

ADDRC reg, dst, bse dest = (ACC) + (reg) + C C, HC, Z

DEC reg, dst, bse dest = (reg) - 1 C, HC, Z

INC reg, dst, bse dest = (reg) + 1 C, HC, Z

MULI imm HI:LO = (ACC) x imm không

MULR reg, bse HI:LO = (ACC) x (reg) không

SUBAR reg, dst, bse dest = (ACC) - (reg) C, HC, Z

SUBARC reg, dst, bse dest = (ACC) - (reg) - C C, HC, Z

SUBI imm ACC = imm - (ACC) C, HC, Z

SUBRA reg, dst, bse dest = (reg) - (ACC) C, HC, Z

SUBRAC reg, dst, bse dest = (reg) - (ACC) - C C, HC, Z

Nhóm lo-gic

ANDI imm ACC = (ACC) AND imm Z

ANDR reg, dst, bse dest = (ACC) AND (reg) Z

BCLR reg, bit, bse R[bit] = 0 không

BSET reg, bit, bse R[bit] = 1 không

CLR reg, bse R = 00h Z

CPL reg, dst, bse dest = NOT (reg) Z

Page 179: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 179

DA

HC_tmp || ACC[3:0] = ([ACC[3:0] > 9] hoặc [HC = 1]) ? (ACC [3:0]) + 6 : ACC [3:0]) ACC [7:4] = ([ACC [7:4] > 9] hoặc [C = 1]) ? (ACC [7:4]) + 6 + HC_tmp; C = 1 : (ACC [7:4]) + HC_tmp

C

NOP không làm gì cả không

ORI imm ACC = (ACC) OR imm Z

ORR reg, dst, bse dest = (ACC) OR (reg) Z

RL reg, dst, bse dest[7:0] = R[6:0] || R[7] Z

RLC reg, dst, bse C || dest[7:0] = R[7:0] || C C, Z

RR reg, dst, bse dest[7:0] = R[0] || R[7:1] Z

RRC reg, dst, bse C || dest[7:0] = R[0] || C || R[7:1] C, Z

SET reg, bse R = FFh không

XCHD reg, dst, bse dest [7:0] = R[3:0] || R[7:4] không

XORI imm ACC = (ACC) XOR imm Z

XORR reg, dst, bse dest = (ACC) XOR (reg) Z

MFR reg, bse reg = (Flash_mem[FPTH*256 + FPTL]) không

MRF reg, bse Flash_mem[FPTH*256 + FPTL] = (reg) không

Nhóm rẽ nhánh chương trình

BRC n C=1; PC = (PC) + 1 + off8 không

BRNC n C=0; PC = (PC) + 1 + off8 không

BRNZ n Z=0; PC = (PC) + 1 + off8 không

BRZ n Z=1; PC = (PC) + 1 + off8 không

BTBC reg, bit, bse R[bit] = 0; bỏ qua lệnh tiếp theo không

BTBS reg, bit, bse R[bit] = 1; bỏ qua lệnh tiếp theo không

DBNZ reg, dst, bse dest = (reg) - 1 IF dest ≠ 0; bỏ qua lệnh tiếp theo

không

DBZ reg, dst, bse dest = (reg) - 1 IF dest = 0; bỏ qua lệnh tiếp theo

không

IBNZ reg, dst, bse dest = (reg) + 1 IF dest ≠ 0; bỏ qua lệnh tiếp theo

không

IBZ reg, dst, bse dest = (reg) + 1 IF dest = 0; bỏ qua lệnh tiếp theo

không

JMPA PC = (PC) + 1 + (TPS,ACC) không

RET PC = (TS), giảm con trỏ Stack không

RETA imm PC = (TS), giảm con trỏ Stack ACC = imm

không

RETI PC = (TS), giảm con trỏ Stack GIE/GIEH = 1 hoặc PIE/GIEL = 1

không

SCALL n PC = (PC) + 1 + off11 TS = (PC) + 1, tăng con trỏ Stack

không

SJMP n PC = (PC) + 1+ off11 không

TBZ IF (reg) = 0, bỏ qua lệnh tiếp theo

không

LCALL target16 PC = target16, tăng con trỏ Stack

không TS = (PC) + 2

LJMP target16 PC = target16 không

Nhóm điều khiển hệ thống

IDLE

00h → WDT postscaler, 0 → WDT prescaler, 0 → WDTO, 1 → PWD

WDTO, PWD

Page 180: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 180

RST

00h → WDT postscaler, 0 → WDT prescaler, 0 → WDTO, 0 → PWD

WDTO, PWD

CLRWDT

000h → WDT, 000h → WDT postscaler, 0→ WDTO, 0→ PWD

WDTO, PWD

PUSH TS = (PC) + 1, tăng con trỏ Stack không

POP Xóa (TS), giảm con trỏ Stack không

Nhóm sao chép dữ liệu

IDP0 imm DPH0 = imm[13:8]

không DPL0 = imm[7:0]

IDP1 imm DPH1 = imm[13:8]

không DPL1 = imm[7:0]

IBS imm BS = imm[5:0] không

IACC imm ACC = imm không

IDPOFF imm DPOFF = imm không

LD reg, bse ACC = (reg) Z

ST reg, bse R = (ACC) không

Page 181: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 181

22.4. Hoạt động của lệnh

Giải thích các giá trị giới hạn cho các đối số:

0 ≤ reg ≤ 255

0 ≤ imm ≤ 255

-128 ≤ Off8 ≤ 127

-1024 ≤ Off11 ≤ 1023

0 ≤ target16 ≤ 65535

0 ≤ dst ≤ 1

0 ≤ bse ≤ 1

0 ≤ bit ≤ 7

Các chú ý đối với tập lệnh:

Đối với những lệnh có bit dst trong mã lệnh (bit thứ [9]), thì nếu dst = 0, kết quả sẽ lưu lại trong

thanh ghi ACC. Nếu dst = 1 thì kết quả sẽ lưu lại trong thanh ghi reg.

Đối với những lệnh có bit bse trong mã lệnh (bit thứ [8]), nếu bit bse = 0, thì băng bộ nhớ 0 sẽ

được chọn. Nếu bse = 1 thì băng bộ nhớ được chọn sẽ phụ thuộc giá trị của thanh ghi BS.

Thứ tự trình bày diễn tả chi tiết cho lệnh

VD: Lệnh ADDI

ADDI - ADD constant to ACC (Tên lệnh)

ADDI imm (cú pháp lập trình)

ACC = (ACC) + imm (chức năng lệnh)

Cộng nội dung của thanh ghi tích lũy ACC với giá trị tức thời trong mã lệnh. Kết quả lưu trong

thanh ghi ACC. (mô tả hoạt động lệnh)

Các bit cờ ảnh hưởng: C, HC, Z (các cờ trạng thái bị tác động)

ADDI 0x15; Trước lệnh: ACC = 10h (ví dụ mẫu) Sau lệnh: ACC = 25h

Page 182: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 182

ADDI - ADD constant to ACC

ADDI imm

ACC = (ACC) + imm

Cộng nội dung của thanh ghi tích lũy ACC với giá trị tức thời trong mã lệnh. Kết quả lưu trong

thanh ghi ACC.

Các bit cờ ảnh hưởng: C, HC, Z

ADDI 0x15; Trước lệnh: ACC = 10h Sau lệnh: ACC = 25h

ADDR - ADD ACC to reg

ADDR reg, dst, bse

Cộng nội dung của thanh ghi tích lũy ACC với nội dung thanh ghi reg. Vị trí lưu kết quả phụ

thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

dest = (ACC) + (reg)

Các bit cờ ảnh hưởng: C, HC, Z

ADDR REG, 0, 0 Trước lệnh: ACC = 17h, REG = 0C2h Sau lệnh: ACC = 0D9h, REG= 0C2h

Page 183: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 183

ADDRC - ADD ACC and Carry bit to reg ADDRC reg, dst, bse

dest = (ACC) + (reg) + C

Cộng nội dung của thanh ghi tích lũy ACC với nội dung thanh ghi reg và cờ nhớ. Vị trí lưu kết

quả phụ thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: C, HC, Z

ADDRC REG, 0, 0 Trước lệnh: Carry bit = 1, REG = 02h, ACC = 4Dh Sau lệnh: Carry bit = 0, REG = 02h, ACC = 50h

ANDI - AND constant to ACC ANDI imm

ACC = (ACC) AND imm

Nội dung của thanh ghi tích lũy ACC được AND với giá trị tức thời trong mã lệnh. Kết quả lưu

trong thanh ghi ACC.

Các bit cờ ảnh hưởng: Z

ANDI 0x5F Trước lệnh: ACC = A3h Sau lệnh: ACC = 03h

Page 184: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 184

ANDR - AND ACC to reg ANDR reg, dst, bse

dest = (ACC) AND (reg)

Nội dung của thanh ghi tích lũy ACC được AND nội dung thanh ghi reg. Vị trí lưu kết quả phụ

thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: Z

ANDR REG, 0, 0 Trước lệnh: ACC = 17h, REG = C2h Sau lệnh: ACC = 02h, REG = C2h

BCLR - Bit Clear reg BCLR reg, bit, bse

R[bit] = 0

Tong thanh ghi reg, tại vị trí bit, giá trị sẽ bị xóa 0. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: không có

BCLR REG, 6, 0 Trước lệnh: REG = C7h Sau lệnh: REG = 87h

Page 185: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 185

BRC - Branch if Carry BRC off8

IF C=1 then

PC = (PC) + 1 + off8

Else

PC = (PC) + 1

Nếu cờ nhớ C = 1 thì chương trình sẽ rẽ nhánh đến địa chỉ đích mới. Giá trị off8 là số có dấu

dạng bù 2. Lệnh này là một lệnh 2 chu kỳ.

Các bit cờ ảnh hưởng: không có

BRC 5 Trước lệnh: PC = địa chỉ lệnh BRC Sau lệnh: Nếu Carry = 1; PC = address (HERE + 6) Nếu Carry = 0; PC = address (HERE + 1)

BRNC - Branch if Not Carry BRNC off8

IF C=0 then

PC = (PC) + 1 + off8

Else

PC = (PC) + 1

Nếu cờ nhớ C = 0 thì chương trình sẽ rẽ nhánh đến địa chỉ đích mới. Giá trị off8 là số có dấu

dạng bù 2. Lệnh này là một lệnh 2 chu kỳ.

Các bit cờ ảnh hưởng: không có

BRNC off8 Trước lệnh: PC = địa chỉ lệnh BRNC Sau lệnh: Nếu Carry = 0; PC = PC + 1 + off8 Nếu Carry = 1; PC = PC + 1

Page 186: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 186

BRNZ - Branch if Not Zero BRNZ off8 IF Z=0 then

PC = (PC) + 1 + off8

Else

PC = (PC) + 1

Nếu cờ không Z = 0 thì chương trình sẽ rẽ nhánh đến địa chỉ đích mới. Giá trị off8 là số có dấu

dạng bù 2. Lệnh này là một lệnh 2 chu kỳ.

Các bit cờ ảnh hưởng: không có

BRNZ off8 Trước lệnh: PC = địa chỉ lệnh BRNZ Sau lệnh: Nếu Zero = 0; PC = PC + 1 Nếu Zero = 1; PC = PC + 1 + off8

BRZ - Branch if Zero BRZ off8 IF Z=1 then

PC = (PC) + 1 + off8

Else

PC = (PC) + 1

Nếu cờ không Z = 1 thì chương trình sẽ rẽ nhánh đến địa chỉ đích mới. Giá trị off8 là số có dấu

dạng bù 2. Lệnh này là một lệnh 2 chu kỳ.

Các bit cờ ảnh hưởng: không có

BRZ off8 Trước lệnh: PC = địa chỉ lệnh BRZ Sau lệnh: Nếu Zero = 1; PC = PC + 1 Nếu Zero = 0; PC = PC + 1 + off8

Page 187: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 187

BSET - Bit Set reg BSET reg, bit, bse

R[bit] = 1

Tong thanh ghi reg, tại vị trí bit, giá trị sẽ được gán lên 1. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: không có

BSET REG, 7, 1 Trước lệnh: REG = 0Ah Sau lệnh: REG = 8Ah

BTBC - Bit Test reg, Bypass if Clear BTBC reg, bit, bse

IF (R[bit] = 0) bỏ qua lệnh tiếp theo

Tong thanh ghi reg, tại vị trí bit, nếu giá trị của bit này bằng 0 thì lệnh tiếp theo sẽ không được

thực thi. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: không có

BTBC FLAG, 1, 0 Trước lệnh: PC = địa chỉ của BTBC Sau lệnh: Nếu FLAG[1] = 0; PC = PC + 2 Nếu FLAG[1] = 1; PC = PC + 1

Page 188: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 188

BTBS - Bit Test reg, Bypass if Set BTBS reg, bit, bse

IF (R[bit] = 1) bỏ qua lệnh tiếp theo

Tong thanh ghi reg, tại vị trí bit, nếu giá trị của bit này bằng 1 thì lệnh tiếp theo sẽ không được

thực thi. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: không có

BTBS FLAG, 1, 0 Trước lệnh: PC = địa chỉ của BTBS Sau lệnh: Nếu FLAG[1] = 1; PC = PC + 2 Nếu FLAG[1] = 0; PC = PC + 1

CLR - Clear reg CLR reg, bse

reg = 0

Xóa nội dung của thanh ghi reg về 0. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: Z

CLR REG,1 Trước lệnh: REG = 7Fh, Z = ? Sau lệnh: REG = 00h, Z = 1

Page 189: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 189

CLRWDT - Clear Watchdog Timer CLRWDT

WDT postscaler = 000h

WDT prescaler = 000h

WDTO = 0

PWD = 0

Xóa nội dung của bộ đếm Watchdog về 0.

Các bit cờ ảnh hưởng: WDTO, PWD CLRWDT Trước lệnh: WDT Counter = ? Sau lệnh: WDT Counter = 00h, WDT Postscaler = 0, WDTO = 0, PWD = 0

CPL - Complement reg CPL reg, dst, bse

dest = NOT (reg)

Lấy bù 1 của nội dung thanh ghi reg. Vị trí lưu kết quả phụ thuộc vào giá trị bit dst. Băng được

lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: Z

CPL REG, 0, 0 Trước lệnh: REG = 00h Sau lệnh: REG = 00h, ACC = FFh

Page 190: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 190

DA - Decimal Adjust ACC Register

DA HC_tmp || ACC[3:0] = ([ACC[3:0] > 9] hoặc [HC = 1]) ?(ACC [3:0])

+ 6 : ACC [3:0])

ACC [7:4] = ([ACC [7:4] > 9] hoặc [C = 1]) ? (ACC [7:4]) + 6 +

HC_tmp; C = 1 : (ACC [7:4]) + HC_tmp

Sau khi thực hiện các phép toán trên các số BCD, lệnh này chỉnh sửa giá trị trong thanh ghi ACC

cho đúng với BCD. Kết quả được lưu lại thanh ghi ACC.

Các bit cờ ảnh hưởng: C

DA Trước lệnh: ACC = B3h, C = 0, HC = 0 Sau lệnh: ACC = 13h, C = 1, HC = 0

DBNZ - Decrement reg, Bypass if not Zero

DBNZ reg, dst, bse

dest = (reg)- 1

IF (dest ≠ 0) bỏ qua lệnh tiếp theo

Giảm nội dung thanh ghi reg đi 1 đơn vị. Nếu kết quả sau khi giảm khác 0 thì bỏ qua lệnh tiếp

theo. Vị trí lưu kết quả phụ thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Chú ý:

Lệnh sẽ tốn 3 chu kỳ để thực hiện nếu lệnh theo sau lệnh này là lệnh 2 chy kỳ.

Các bit cờ ảnh hưởng: không có

DBNZ TEMP, 1, 0 Trước lệnh: TEMP = ? Sau lệnh: TEMP = TEMP – 1 If TEMP = 0 PC = (PC) + 1 If TEMP ≠ 0; PC = (PC) + 2

Page 191: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 191

DBZ - Decrement reg, Bypass if Zero DBZ reg, dst, bse

dest = (reg)- 1

IF (dest = 0) bỏ qua lệnh tiếp theo

Giảm nội dung thanh ghi reg đi 1 đơn vị. Nếu kết quả sau khi giảm bằng 0 thì bỏ qua lệnh tiếp

theo. Vị trí lưu kết quả phụ thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Chú ý:

Lệnh sẽ tốn 3 chu kỳ để thực hiện nếu lệnh theo sau lệnh này là lệnh 2 chy kỳ.

Các bit cờ ảnh hưởng: không có

DBZ TEMP, 1, 0 Trước lệnh: TEMP = ? Sau lệnh: TEMP = TEMP – 1 If TEMP ≠ 0 PC = (PC) + 1 If TEMP = 0; PC = (PC) + 2

DEC - Decrement reg

DEC reg, dst, bse

dest = (reg)- 1

Giảm nội dung thanh ghi reg đi 1 đơn vị. Vị trí lưu kết quả phụ thuộc vào giá trị bit dst. Băng

được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: C, HC, Z

DEC CNT, 1, 0 Trước lệnh: CNT = 01h, Z = 0 Sau lệnh: CNT = 00h, Z = 1

Page 192: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 192

IACC - Immediate value to ACC

IACC imm

ACC = imm

Nạp nội dung 8-bit cho thanh ghi ACC. Kết quả lưu vào thanh ghi ACC.

Các bit cờ ảnh hưởng: không có

IACC 0x3C Trước lệnh: ACC = ? Sau lệnh: ACC = 3Ch

IBZ - Increment reg, Bypass if not Zero IBNZ reg, dst, bse

dest = (reg)+ 1

IF (dest ≠ 0) bỏ qua lệnh tiếp theo

Tăng nội dung thanh ghi reg lên 1 đơn vị. Nếu kết quả sau khi tăng khác 0 thì bỏ qua lệnh tiếp

theo. Vị trí lưu kết quả phụ thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Chú ý:

Lệnh sẽ tốn 3 chu kỳ để thực hiện nếu lệnh theo sau lệnh này là lệnh 2 chy kỳ.

Các bit cờ ảnh hưởng: không có

IBNZ REG, 1, 0 Trước lệnh: PC = địa chỉ lệnh IBNZ Sau lệnh: If REG ≠ 0; PC = (PC) + 2 If REG = 0; PC = (PC) + 1

Page 193: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 193

IBS - Immediate value to Bank Select

IBS imm

BS = imm

Nạp nội dung 6 bit cho thanh ghi chọn băng BS. Kết quả lưu vào thanh ghi BS.

Các bit cờ ảnh hưởng: không có

IBS 0x01 Trước lệnh: BS = ? Sau lệnh: BS = 01h

Page 194: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 194

IBZ - Increment reg, Bypass if Zero IBZ reg, dst, bse

dest = (reg)+ 1

IF (dest = 0) bỏ qua lệnh tiếp theo

Tăng nội dung thanh ghi reg lên 1 đơn vị. Nếu kết quả sau khi tăng bằng 0 thì bỏ qua lệnh tiếp

theo. Vị trí lưu kết quả phụ thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Chú ý:

Lệnh sẽ tốn 3 chu kỳ để thực hiện nếu lệnh theo sau lệnh này là lệnh 2 chy kỳ.

Các bit cờ ảnh hưởng: không có

IBZ REG, 1, 0 Trước lệnh: PC = địa chỉ lệnh IBZ Sau lệnh: If REG =0; PC = (PC) + 2 If REG ≠ 0; PC = (PC) + 1

IDLE - Enter Idle Mode IDLE

WDT postscaler = 000h

WDT prescaler = 000h

WDTO = 0

PWD = 1

Đưa thiết bị về chế độ tiết kiệm năng lượng. Trong trạng thái này thì các ngoại vi không bắt buộc

phải chạy sẽ được tắt xung clock (chi tiết xem mục Chế độ tiết kiệm năng lượng (IDLE Mode)).

Các bit cờ ảnh hưởng: không có

IDLE Trước lệnh: WDTO = ?, PWD = ? Sau lệnh: WDTO = 0 *, PWD = 1 * Nếu thiết bị đánh thức bởi Watchdog thì bit này sẽ được gán lên 1.

Page 195: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 195

IDP0 - Immediate value to Data Pointer 0

IDP0 imm

DPH0 = imm[13:8]

DPL0 = imm[7:0]

Nạp nội dung 14 bit cho cặp thanh ghi DPH0 và DPL0 của con trỏ số 0.

Các bit cờ ảnh hưởng: không có

IDP0 0x100 Trước lệnh: DPH0 = ?, DPL0 = ? Sau lệnh: DPH0 = 01h, DPL0 = 00h

IDP1 - Immediate value to Data Pointer 1

IDP1 imm

DPH1 = imm[13:8]

DPL1 = imm[7:0]

Nạp nội dung 14 bit cho cặp thanh ghi DPH1 và DPL1 của con trỏ số 1.

Các bit cờ ảnh hưởng: không có

IDP1 0x234 Trước lệnh: DPH1 = ?, DPL1 = ? Sau lệnh: DPH1 = 02h, DPL1 = 34h

Page 196: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 196

IDPOFF - Immediate value to Data Pointer Offset

IDPOFF imm

IDPOFF 0xA1

Nạp nội dung 8-bit cho thanh ghi DPOFF. Kết quả lưu vào thanh ghi DPOFF.

Các bit cờ ảnh hưởng: không có

IDPOFF 0xA1 Trước lệnh: DPOFF = ? Sau lệnh: DPOFF = A1h

INC - Increment reg INC reg, dst, bse

dest = (reg)+ 1

Tăng nội dung thanh ghi reg lên 1 đơn vị. Vị trí lưu kết quả phụ thuộc vào giá trị bit dst. Băng

được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: C, HC, Z

INC COUNT, 1, 0 Trước lệnh: COUNT = FFh, Z = 0, C = ?, HC= ? Sau lệnh: COUNT = 00h, Z = 1, C = 1, HC = 1

Page 197: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 197

JMPA - Jump with ACC JMPA

PC = (PC) + 1 + (TPS,ACC)

Nhảy đến địa chỉ bất cứ vị trí nào trong bộ nhớ chương trình. Nội dung của PC + 1 được cộng với

nội dung cặp thanh ghi TPS và ACC. Trong đó, TPS là các bit cao, còn ACC là các bit thấp.

Chú ý:

Nếu nội dung của thanh ghi TPS hoặc ACC thay đổi thì phải trễ sau 1 chu kỳ mới được phép

thực hiện lệnh JMPA.

Các bit cờ ảnh hưởng: không có

JMPA Trước lệnh: PC = địa chỉ lệnh JMPA, ACC = 08h, TPS = 00h Sau lệnh: PC = (PC) + 9, ACC = 08h, TPS = 00h

LCALL - Long Subroutine Call LCALL target16

PC = target16

TS = (PC) + 2

Gọi chương trình con tại bất cứ vị trí nào trong bộ nhớ chương trình. Trước khi nhảy đến chương

trình con thì địa chỉ (PC) + 2 sẽ được lưu lại trong Stack. Sau đó chương trình sẽ tiếp tục tại vị trí

của chương trình con.

Các bit cờ ảnh hưởng: không có

LCALL target16 Trước lệnh: PC = địa chỉ lệnh LCALL Sau lệnh: PC = target16

Page 198: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 198

LD - Load reg to ACC

LD reg, bse

ACC = (reg)

Nạp thanh ghi tích lũy ACC giá trị của thanh ghi reg.

Các bit cờ ảnh hưởng: Z

LD REG, 0 Trước lệnh: ACC = ?, REG = 00h Sau lệnh: ACC = 00h, REG = 00h, Z = 1

LJMP - Long Jump LJMP target16

PC = target16

Nhảy đến vị trí bất kỳ trong bộ nhớ chương trình. Sau đó chương trình sẽ tiếp tục tại vị trí của

nhảy đến.

Các bit cờ ảnh hưởng: không có

LJMP target16 Trước lệnh: PC = địa chỉ lệnh LJMP Sau lệnh: PC = target16

Page 199: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 199

MFR – Move from Flash to Register MFR reg, bse, imm

reg = Flash_memory[TPS*256 + imm]

Thực hiện chuyển dữ liệu từ bộ nhớ chương trình Flash sang bộ nhớ dữ liệu SRAM. Địa chỉ đọc

bộ nhớ Flash có 8 bit cao là thanh ghi TPS và 8 bit thấp là nội dung của trường imm trong mã

lệnh. Địa chỉ thanh ghi là giá trị của trường reg kết hợp với thanh ghi BS.

Các bit cờ ảnh hưởng: không có

MFR 0x6C, 0, 0x10 Trước lệnh: reg 0x6C = ?, TPS = 1, Flash_memory[0x266] = AAh Sau lệnh: reg 0x6C = AAh, TPS = 1, Flash_memory[0x266] = AAh

MFR 0x60, 0, 0x50 Trước lệnh: reg 0x60 = ?, TPS = 0, Flash_memory[0x50] = 1Fh Sau lệnh: reg 0x60 = 1Fh, TPS = 0, Flash_memory[0x50] = 1Fh

MRF – Move from Register to Flash MRF reg, bse, imm

Flash_memory[FPTH*256 + FPTL] = reg

Thực hiện chuyển giá trị từ bộ nhớ dữ liệu sang bộ nhớ chương trình Flash. Địa chỉ ghi bộ nhớ

Flash có 8 bit cao là thanh ghi TPS và 8 bit thấp là nội dung của trường imm trong mã lệnh. Địa

chỉ thanh ghi là giá trị của trường reg kết hợp với thanh ghi BS.

Các bit cờ ảnh hưởng: không có

MRF 0x6C, 0 Trước lệnh: FPTH = 1, FPTL = 0x10, Flash_memory[0x266] = ?, reg 0x6C = 55h, Sau lệnh: FPTH = 1, FPTL = 0x10, Flash_memory[0x266] = 55h, reg 0x6C = 55h,

MRF 0x60, 0 Trước lệnh: FPTH = 0, FPTL = 0x50, Flash_memory[0x50] = ?, reg 0x60 = CCh Sau lệnh: FPTH = 0, FPTL = 0x50, Flash_memory[0x50] = CCh, reg 0x60 = CCh

Page 200: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 200

MULI - Multiply Constant with ACC MULI imm

HI:LO = (ACC) x imm

Thực hiện phép toán nhân không dấu giữa thanh ghi tích lũy ACC và giá trị tức thời trong mã

lệnh. Kết quả phép nhân được lưu vào cặp thanh ghi HI:LO. Với HI là phần 8-bit cao của tích và

LO là phần 8-bit thấp của tích.

Các bit cờ ảnh hưởng: không có

MULI 0x3C Trước lệnh: ACC = A8h, HI = ?, LO = ? Sau lệnh: ACC = A8h, HI = 27h, LO = 60h

MULI - Multiply Constant with ACC MULI imm

HI:LO = (ACC) x imm

Thực hiện phép toán nhân không dấu giữa thanh ghi tích lũy ACC và giá trị tức thời trong mã

lệnh. Kết quả phép nhân được lưu vào cặp thanh ghi HI:LO. Với HI là phần 8-bit cao của tích và

LO là phần 8-bit thấp của tích.

Các bit cờ ảnh hưởng: không có

MULI 0x3C Trước lệnh: ACC = A8h, HI = ?, LO = ? Sau lệnh: ACC = A8h, HI = 27h, LO = 60h

Page 201: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 201

MULR - Multiply reg with ACC MULR reg, bse

HI:LO = (ACC) x (reg)

Thực hiện phép toán nhân không dấu giữa thanh ghi tích lũy ACC và thanh ghi reg. Kết quả phép

nhân được lưu vào cặp thanh ghi HI:LO. Với HI là phần 8-bit cao của tích và LO là phần 8-bit

thấp của tích.

Các bit cờ ảnh hưởng: không có

MULR REG, 1 Trước lệnh: ACC = C4h, REG = D1h, HI =?, LO = ? Sau lệnh: ACC = C4h, REG = D1h, HI = A0h, LO = 04h

NOP - No Operation NOP

Không làm gì cả

Lệnh này không thực hiện bất cứ thay đổi nào trong trạng thái hệ thống. Sau lệnh này chỉ tăng giá

trị của PC lên thôi.

Các bit cờ ảnh hưởng: không có

NOP Sau lệnh: không thay đổi trạng thái

Page 202: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 202

ORI - OR Constant with ACC ORI imm

ACC = (ACC) OR imm

Thực hiện OR nội dung của thanh ghi tích lũy ACC với giá trị tức thời trong mã lệnh.

Các bit cờ ảnh hưởng: Z

ORI 0x35 Trước lệnh: ACC = 9Ah Sau lệnh: BFh

ORR - OR ACC with reg ORR reg, dst, bse

dest = (ACC) OR (reg)

Thực hiện OR nội dung của thanh ghi tích lũy ACC với nội dung của thanh ghi reg. Vị trí lưu kết

quả phụ thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: Z

ORR REG, 0, 1 Trước lệnh: REG = 13h, ACC = 91h Sau lệnh: REG = 13h, ACC = 93h

POP - Pop Top of Return Stack POP

Xóa (TS), giảm con trỏ Stack

Lấy một mục ra khỏi Stack đồng thời giảm giá trị của con trỏ đọc Stack đi 1 đơn vị.

Các bit cờ ảnh hưởng: không có

POP Trước lệnh: TS = 31A2h, Stack [SP – 1] = 4332h Sau lệnh: TS = 4332h, PC = PC + 1

Page 203: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 203

PUSH - Push Top of Return Stack PUSH

TS = (PC) + 1, tăng con trỏ Stack

Đẩy giá trị của (PC) + 1 vào Stack đồng thời tăng giá trị của con trỏ lên 1 đơn vị.

Các bit cờ ảnh hưởng: không có

PUSH Trước lệnh: TS = 345Ah, PC = 0124h Sau lệnh: PC = 0125h, TS = 0125h, Stack [SP – 1]= 345Ah

RET - Return from Subroutine RET

PC = (TS)

Trở về từ chương trình con, địa chỉ PC được cập nhật với giá trị nhận được từ Stack.

Các bit cờ ảnh hưởng: không có

RET Trước lệnh: PC = ?, TS = 345Ah Sau lệnh: PC = 345Ah

RETA - Return Immediate value to ACC RETA k0

PC = (TS)

ACC = k0

Trở về từ chương trình con, địa chỉ PC được cập nhật với giá trị nhận được từ Stack. ACC được

cập nhật với giá trị tức thời của lệnh RETA

Các bit cờ ảnh hưởng: không có

RETA k0 Trước lệnh: PC = ?, TS = 345Ah, ACC = ? Sau lệnh: PC = 345Ah, ACC = k0

Page 204: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 204

RETI - Return from Interrupt RETI

PC = (TS)

GIE/GIEH = 1 hoặc PIE/GIEL = 1

Trở về từ chương trình xử lý ngắt, Stack được đọc ra và giảm địa chỉ con trỏ Stack. Giá trị đọc từ

Stack sẽ được cập nhật cho thanh ghi bộ đếm chương trình PC.

Các bit cờ ảnh hưởng: không có

RETI Trước lệnh: PC = địa chỉ lệnh RETI Sau lệnh: PC = (TS), GIE/GIEH hoặc PIE/GIEL = 1

RL - Rotate Left reg (no carry) RL reg, dst, bse

dest[7:0] = R[6:0] || R[7]

Nội dung của thanh ghi reg được xoay trái 1 bit. Vị trí lưu kết quả phụ thuộc vào giá trị bit dst.

Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: Z

RL REG, 1, 0 Trước lệnh: REG = 1010 1011 Sau lệnh: REG = 0101 0111

Page 205: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 205

RLC - Rotate Left reg through Carry RLC reg, dst, bse

C || dest[7:0] = R[7:0] || C

Nội dung của thanh ghi reg được xoay trái 1 bit qua cờ nhớ C. Vị trí lưu kết quả phụ thuộc vào

giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: Z, C

RLC REG, 0, 0 Trước lệnh: REG = 1110 0110, ACC = ?, C = 0 Sau lệnh: REG = 1110 0110, ACC = 1100 1100, C = 1

RR - Rotate Right reg (no carry) RR reg, dst, bse

dest[7:0] = R[0] || R[7:1]

Nội dung của thanh ghi reg được xoay phải 1 bit. Vị trí lưu kết quả phụ thuộc vào giá trị bit dst.

Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: Z

RR REG, 0, 0 Trước lệnh: ACC = ?, REG = 1101 0111 Sau lệnh: ACC = 1110 1011, REG = 1101 0111

Page 206: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 206

RRC - Rotate Right reg through Carry RRC reg, dst, bse

C || dest[7:0] = R[0] || C || R[7:1]

Nội dung của thanh ghi reg được xoay phải 1 bit qua cờ nhớ C. Vị trí lưu kết quả phụ thuộc vào

giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: Z, C

RRC REG, 0, 0 Trước lệnh: REG = 1110 0110, C = 0, ACC = ? Sau lệnh: REG = 1110 0110, ACC = 0111 0011, C = 0

RST – Soft Reset RST PC =0, WDTO = 0, PWD = 0

Reset hệ thống lại trạng thái ban đầu. Sauk hi lệnh này thực hiện xong, các thanh ghi hệ thống sẽ

trở về trạng thái như khi hệ thống vừa được khởi động.

Các bit cờ ảnh hưởng: WDTO, PWD, DC, C, Z

RST Trước lệnh: PC = ?, WDTO = ?, PWD = ? Sau lệnh: PC = 0, WDTO = 0, PWD = 0

Page 207: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 207

SCALL - Short Subroutine Call SCALL off11

PC = (PC) + 1 + off11

TS = (PC) + 1

Gọi chương trình con trong tầm 1KB trước và sau vị trí PC hiện của chương trình. Lệnh này chỉ

hỗ trợ gọi các chương trình con gần với vị trí của PC hiện tại. Giá trị off11 là số có dấu. Ưu điểm

của lệnh này là chỉ mất 2 chu kỳ để thực hiện.

Các bit cờ ảnh hưởng: không có

SCALL off11 Trước lệnh: PC = địa chỉ lệnh SCALL, TS = ? Sau lệnh: PC = PC + 1 + off11, TS = địa chỉ SCALL + 1

SET - Set reg SET reg, bse

R = FFh

Gán tất cả các bit của thanh ghi reg lên 1, hay nói cách khác là gán FFh cho thanh ghi reg. Băng

được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: không có

SET REG, 1 Trước lệnh: REG = ? Sau lệnh: REG = FFh

Page 208: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 208

SJMP - Short Jump SJMP off11

PC = (PC) + 1 + off11

TS = (PC) + 1

Nhảy đến vị trí khác trong đoạn ngắn tầm 1KB. Lệnh này chỉ hỗ trợ rẽ nhánh chương trình đến vị

trí gần giá trị PC hiện tại. Giá trị off11 là số có dấu. Ưu điểm của lệnh này là chỉ mất 2 chu kỳ để

thực hiện.

Các bit cờ ảnh hưởng: không có

SJMP off11 Tước lệnh: PC = địa chỉ lệnh SJMP Sau lệnh: PC = PC + 1 + off11

ST - Store ACC to reg ST reg, bse

R = (ACC)

Ghi giá trị của thanh ghi ACC vào thanh ghi reg. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: không có

ST REG, 0 Trước lệnh: REG = ?, ACC = 1Ah Sau lệnh: REG = 1Ah, ACC = 1Ah

Page 209: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 209

SUBAR - Subtract reg from ACC SUBAR reg, dst, bse

dest = (ACC) - (reg)

Thực hiện phép toán trừ của thanh ghi tích lũy ACC với thanh ghi reg. Vị trí lưu kết quả phụ

thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: C, HC, Z

SUBAR REG, 0, 0 Trước lệnh: REG = 0Ah, ACC = 1Ah Sau lệnh: REG = 0Ah, ACC = 10h

SUBARC - Subtract reg from ACC with Carry SUBARC reg, dst, bse

dest = (ACC) - (reg) - C

Thực hiện phép toán trừ của thanh ghi tích lũy ACC với thanh ghi reg và cờ nhớ C. Vị trí lưu kết

quả phụ thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: C, HC, Z

SUBARC REG, 1, 0 Trước lệnh: REG = 3, ACC = 2, C = 1 Sau lệnh: REG = FE, ACC = 2, C = 1, Z = 0

Page 210: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 210

SUBI - Subtract ACC from Constant SUBI imm

dest = imm - (ACC)

Thực hiện phép toán trừ của thanh ghi tích lũy ACC với thanh ghi reg và cờ nhớ C. Vị trí lưu kết

quả phụ thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: C, HC, Z

SUBI 0x02 Trước lệnh: ACC = 01h, C = ? Sau lệnh: ACC = 01h, C = 0, Z = 0

SUBRA - Subtract ACC from reg SUBRA reg, dst, bse

dest = (reg) - (ACC)

Thực hiện phép toán trừ của thanh ghi reg với thanh ghi tích lũy ACC. Vị trí lưu kết quả phụ

thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: C, HC, Z

SUBRA REG, 1, 0 Trước lệnh: REG = 3, ACC = 2, C = ? Sau lệnh: REG = 1, ACC = 2, C = 0, Z = 0

Page 211: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 211

SUBRAC - Subtract ACC from r with Carry SUBRAC reg, dst, bse

dest = (reg) - (ACC) - C

Thực hiện phép toán trừ của thanh ghi reg với thanh ghi tích lũy ACC và cờ nhớ C. Vị trí lưu kết

quả phụ thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: C, HC, Z

SUBRAC REG, 1, 0 Trước lệnh: REG = 19h (0001 1001), ACC = 0Dh (0000 1101), C = 0, Z = ? Sau lệnh: REG = 0Ch (0000 1011), W = 0Dh (0000 1101), C = 0, Z = 0

TBZ - Test reg, Bypass if 0 TBZ reg, bse

IF (reg = 0) bỏ qua lệnh tiếp theo

Kiểm tra giá trị của thanh ghi reg, nếu giá trị bằng 0 thì bỏ qua lệnh tiếp theo.

Chú ý:

Lệnh sẽ tốn 3 chu kỳ để thực hiện nếu lệnh theo sau lệnh này là lệnh 2 chu kỳ.

Các bit cờ ảnh hưởng: không có

TBZ REG, 1 Trước lệnh: PC = địa chỉ lệnh TBZ Sau lệnh: If REG =0; PC = (PC) + 2 If REG ≠ 0; PC = (PC) + 1

Page 212: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 212

XCHD - Exchange Digit XCHD reg, dst, bse

dest = (reg) - (ACC) - C

Thực hiện phép toán trừ của thanh ghi reg với thanh ghi tích lũy ACC và cờ nhớ C. Vị trí lưu kết

quả phụ thuộc vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: không có

XCHD REG, 1, 0 Trước lệnh: REG = 53h Sau lệnh: REG = 35h

XORI - Exclusive OR Constant with ACC XORI imm

ACC = (ACC) XOR imm

Thực hiện phép XOR của thanh ghi tích lũy ACC với giá trị tức thời trong mã lệnh. Vịt rí lưu kết

quả là thanh ghi ACC.

Các bit cờ ảnh hưởng: Z

XORI 0xAF Trước lệnh: ACC = B5h Sau lệnh: ACC = 1Ah

Page 213: SG8V1 Huong Dan Su Dung

Tập lệnh

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 213

XORR - Exclusive OR reg with ACC XORR reg, dst, bse

dest = (ACC) XOR (reg)

Thực hiện phép XOR của thanh ghi tích lũy ACC với thanh ghi reg. Vị trí lưu kết quả phụ thuộc

vào giá trị bit dst. Băng được lựa chọn phụ thuộc bit bse.

Các bit cờ ảnh hưởng: Z

XORR REG, 1, 0 Trước lệnh: REG = 53h, ACC = B5h Sau lệnh: REG = E6h, ACC = B5h

Page 214: SG8V1 Huong Dan Su Dung

Đặc tính vẫn vật lý điện

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 214

23. Đặc tính vật lý điện Điện áp hoạt động: 3.0V ~ 3.6V

Nhiệt độ hoạt động: ‒40°C ~ 85°C

Dòng một chiều vào tối đa: 30mA

Dòng một chiều ra tối đa: 30mA

Bảng 23-1: Thông số vật lý điện

Ký hiệu Mô tả Điều kiện Thấp Thường Cao Đơn vị

VIL Mức thấp

điện áp vào

VCC=3.3v - - 0.8 V

VIH Mức cao

điện áp vào

VCC=3.3v 2.0 - - V

VOL Mức thấp

điện áp ra

|IOL| = 2mA

~ 10mA

VCC = 3.3V

- - 0.4 V

VOH Mức cao

điện áp ra

|IOH| = 2mA

~ 10mA

VCC = 3.3V

2.4 - - V

RPU Điện trở

kéo lên các

chân I/O

40 75 190 kΩ

Prun Công suất

tiêu thụ ở

chế độ Run

20 Mhz - 38.3 - mW

Psleep Công suất

tiêu thụ ở

chế độ

sleep

20 Mhz - 3.5 - mW

Page 215: SG8V1 Huong Dan Su Dung

Thông tin package

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 215

24. Thông tin package

D

D1

PIN 1

IDENTIFIER

1 12

13

24

36 25

48

37

4

EE1

1

2

12

AA

Hình 24-1: Hình chiếu đứng chip SG8V1

A A2

A16

e

b

SEATING PLANECCccc

Hình 24-2: Hình chiếu cạnh chip SG8V1

Bảng 24-1: Kích thước vật lý 1

Ký hiệu Kích thước (mm)

Kích thước (inch)

Nhỏ Thường Lớn Nhỏ Thường Lớn

A —— —— 1.60 —— —— 0.063

A1 0.05 —— 0.15 0.002 —— 0.006

A2 1.35 1.40 1.45 0.053 0.055 0.057

b 0.17 0.22 0.27 0.007 0.009 0.011

D 9.00 BSC 0.354 BSC

D1 7.00 BSC 0.276 BSC

E 9.00 BSC 0.354 BSC

E1 7.00 BSC 0.276 BSC

e

0.05 BSC 0.020 BSC

ccc 0.08 0.003

Page 216: SG8V1 Huong Dan Su Dung

Thông tin package

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 216

ϴ2

ϴ1

R1

R2

ϴ

ϴ3

L1

L

S.25

GAGE PLANE

B

B

Hình 24-3: Mặt cắt A-A

b 5 3

b1 5

c1

5

c5

BASE

METAL

WITH PLATING

Hình 24-4: Mặt cắt B-B

Bảng 24-2: Kích thước vật lý 2

Ký hiệu Kích thước (mm)

Kích thước (inch)

Nhỏ Thường Lớn Nhỏ Thường Lớn

b 0.17 0.22 0.27 0.007 0.009 0.011

b1 0.17 0.20 0.23 0.007 0.008 0.009

c 0.09 —— 0.20 0.004 —— 0.008

c1 0.09 —— 0.16 0.004 —— 0.006

L 0.45 0.60 0.75 0.018 0.024 0.030

L1 1.00 REF 0.039 REF

R1 0.08 —— —— 0.003 —— ——

R2 0.08 —— 0.20 0.003 —— 0.008

S 0.20 —— —— 0.008 —— ——

ϴ 0o 3.5o 7

o 0o 3.5

o 7

o

ϴ1 0o —— —— 0o

—— ——

ϴ2 12o TYP 12

o TYP

ϴ3 12o TYP 12

o TYP

Page 217: SG8V1 Huong Dan Su Dung

Thông tin package

© 2014 ICDREC SG8V1 - Hướng dẫn sử dụng 217

Chú ý:

1 Được xác định tại bề mặt đặt chip. C

2 Kích thước D1 và E1 không bao gồm sự nhô ra từ chân chip. D1 và E1 là kích thước lớn nhất

của thân chip đã bao gồm sai số kỹ thuật trong sản xuất chip.

3 Kích thước b là không bao gồm sự nhô ra của chân chip. Phần nhô ra này không thể được đặt

trên bán kính nhỏ hơn của chân chip.

4 Hình dạng chính xác của mỗi góc là tối ưu.

5 Những kích thước này áp dụng cho phần mặt phẳng của chì giữa 0.10mm và 0.25mm từ đầu

mút chì.

6 A1 được định nghĩa là khoảng cách từ bề mặt đặt chip đến điểm thấp nhất của thân chip.

7. Đơn vị sử dụng: MILLIMETER

8. Tài liệu tham khảo: JEDEC MS-026

9. Đặc tính lớp C: ccc