1. Trang chủ
  2. » Giáo án - Bài giảng

Ebook hướng dẫn sử dụng vi điều khiển 8 bit SG8V1 phần 1

98 334 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 98
Dung lượng 1,62 MB

Nội dung

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.. Flash Tên của loại bộ nhớ

Trang 1

Trang chủ: www.icdrec.edu.vn

E-mail: info@icdrec.edu.vn

Điện thoại: (84-8).37242171 - (84-8).37242172

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

VI ĐIỀU KHIỂN 8-bit

SG8V1

Trang 2

Nội dung

Nội dung

Nội dung 2

Mục lục hình 6

Mục lục bảng 8

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

1 Giới thiệu 12

1.1 Sơ đồ chân 14

1.2 Sơ đồ khối 16

2 Kiến trúc pipeline 17

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

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

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

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

3.1 Mô tả 21

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

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

3.4 Stack 23

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

3.4.2 Stack Pointer (SP) 24

4 Reset của SG8V1 27

4.1 Tổng quan về Reset 27

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

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

4.4 Reset bởi stack 28

4.5 Reset bởi Watchdog 28

4.6 Định thời Reset 28

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

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

5.2 Stack 31

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

5.2.2 Stack Pointer (SP) 32

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

6.1 Thanh ghi chọn băng 33

6.2 Truy cập nhanh bộ nhớ dữ liệu 34

6.3 Thanh ghi mục đích chung 35

6.4 Thanh ghi chức năng đặc biệt 35

6.5 Các chế độ định địa chỉ bộ nhớ 40

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

6.5.2 Định địa chỉ trực tiếp 40

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

7 Bộ nhân 8-bit 42

8 Ngắt 43

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

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

8.3 Thanh ghi cho phép ngắt 1 (IE1) 46

8.4 Thanh ghi độ ưu tiên ngắt 1 (IP1) 47

8.5 Thanh ghi lưu cờ ngắt 1 (IF1) 48

Trang 3

Nội dung

8.6 Thanh ghi cho phép ngắt 2 (IE2) 50

8.7 Thanh ghi độ ưu tiên ngắt 2 (IP2) 51

8.8 Thanh ghi lưu cờ ngắt 2 (IF2) 52

8.9 Thanh ghi cho phép ngắt 3 (IE3) 54

8.10 Thanh ghi độ ưu tiên ngắt 3 (IP3) 55

8.11 Thanh ghi lưu cờ ngắt 3 (IF3) 55

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

9.1 GPIO PortA 59

9.2 GPIO PortB 60

9.3 GPIO PortC 63

9.4 GPIO PortD 66

10 Watchdog Timer 70

11 Timer 0 72

11.1 Mô tả Timer 0 72

11.2 Ngắt Timer0 73

11.3 Bộ chia tần trước 73

11.4 Thanh ghi 74

11.4.1 WT0CON 74

11.4.2 T0REG 75

12 Timer 1 76

12.1 Chức năng của Timer 1 76

12.1.1 Tổng quan chức năng định thời của Timer 1 76

12.1.2 Các chế độ của Timer1 77

12.1.3 Đọc và ghi 16-bit thanh ghi bộ đếm Timer1 78

12.2 Khối bắt và so sánh sự kiện 78

12.2.1 Chế độ bắt sự kiện 79

12.2.2 Chế độ so sánh sự kiện 80

12.3 Thanh ghi 80

12.3.1 T1CON 81

12.3.2 T1RH 82

12.3.3 T1RL 82

12.3.4 CCRH 82

12.3.5 CCRL 82

13 Timer 2 và Timer 3 (Timer_x) 83

13.1 Tổng quan Timer_x 83

13.2 Hoạt động của Timer_x 83

13.3 Ngắt Timer_x 84

13.4 Đọc/ghi 10-bit trong Timer_x 84

13.5 Thanh ghi 85

13.5.1 TxCON 85

13.5.2 TxRH 85

13.5.3 TxRL 86

13.5.4 TxPRH 86

13.5.5 TxPRL 86

14 Bộ tạo xung PWM (The Pulse Width Modulation) 87

14.1 Tổng quan PWM_x 87

14.2 Chu kỳ xung PWM_x 87

14.3 Chu kỳ nhiệm vụ 88

14.4 Cấu hình hoạt động cho khối PWM_x 89

14.5 Thanh ghi 90

Trang 4

Nội dung

14.5.1 PWMxCON 90

14.5.2 PWMxRL 90

15 Serial Peripheral Interface (SPI) 91

15.1 Giới thiệu SPI 91

15.2 Các thanh ghi của SPI 92

15.2.1 Thanh ghi điều khiển SPI - SPICON 92

15.2.2 Thanh ghi trạng thái - SPISTA 93

15.3 Hoạt động của SPI 94

15.4 Các bước lập trình SPI 96

15.4.1 Lập trình SPI ở chế độ master 96

15.4.2 Lập trình SPI ở chế độ slave 97

16 Inter-Integrated Circuit (I2C) 99

16.1 Thanh ghi của I2C 99

16.1.1 I2CCON1 99

16.1.2 I2CCON2 101

16.1.3 I2CSTA 103

16.1.4 CNTH/ADDRH và CNTL/ADDRL 105

16.1.5 I2CBUF 106

16.2 Hoạt động 107

16.3 Chế độ Master 108

16.3.1 Master Truyền 108

16.3.2 Master Nhận 111

16.3.3 Đồng bộ clock 114

16.3.4 Phân xử 114

16.3.5 Định thời của sự kiện Start 115

16.3.6 Định thời của sự kiện Repeat Start 116

16.3.7 Định thời của sự kiện Stop 117

16.3.8 Xung đột bus 117

16.4 Chế độ Slave 121

16.4.1 Định địa chỉ Slave 121

16.4.2 Mặt nạ địa chỉ 121

16.4.3 Địa chỉ 7-bit 122

16.4.4 Chế độ 10-bit địa chỉ 124

16.5 Kéo dài xung clock 125

16.6 Địa chỉ General Call 126

16.7 Dạng sóng 126

16.7.1 Dạng sóng I2C Master phát (chế độ 7-bit hoặc 10-bit địa chỉ) 127

16.7.2 Dạng sóng I2C Master nhận (chế độ 7-bit địa chỉ) 128

16.7.3 Dạng sóng I2C Slave nhận chế độ 7-bit địa chỉ 129

16.7.4 Dạng sóng I2C Slave phát chế độ 7-bit địa chỉ 130

16.7.5 Dạng sóng I2C Slave nhận chế độ 10-bit địa chỉ 131

16.7.6 Dạng sóng I2C Slave phát chế độ 10-bit địa chỉ 132

17 Ngoại vi UART 133

17.1 Tổng quan về ngoại vi UART 133

17.2 Các thanh ghi liên quan đến ngoại vi UART 133

17.2.1 Thanh ghi trạng thái của ngoại vi UART thứ x (UxSTA) 134

17.2.2 Thanh ghi điều khiển của UART thứ x 135

17.2.3 Thanh ghi tốc độ baud của UART thứ x (UxBRL) 136

17.2.4 Thanh ghi lưu dữ liệu truyền của UART thứ x (UxTXREG) 137

17.2.5 Thanh ghi lưu dữ liệu nhận của UART thứ x (UxRXREG) 137

Trang 5

Nội dung

17.2.6 Thanh ghi cho phép ngắt thứ 2 (IE2) 137

17.2.7 Thanh ghi thiết lập ưu tiên ngắt thứ 2 (IP2) 138

17.2.8 Thanh ghi trạng thái ngắt thứ 2 (IF2) 139

17.2.9 Thanh ghi cấu hình chiều dữ liệu cho Port C (DIRC) 141

17.2.10 Thanh ghi cấu hình chiều dữ liệu cho Port B (DIRB) 141

17.3 Bộ tạo tốc độ Baud (BRG) 142

17.3.1 Tính toán tốc độ Baud 143

17.3.2 Xung lấy mẫu và xung dịch dữ liệu bên trong UART 144

17.3.3 Lấy mẫu dữ liệu 145

17.3.4 Dịch dữ liệu 145

17.4 Bộ truyền UART 146

17.4.1 Cấu trúc bộ truyền UART 146

17.4.2 Cấu hình sử dụng bộ truyền của ngoại vi UART 147

17.5 Bộ nhận UART 149

17.5.1 Cấu trúc bộ nhận UART 149

17.5.2 Cấu hình sử dụng bộ nhận của ngoại vi UART 150

18 Ngoại vi ADC 153

18.1 Cấu trúc cơ bản của ADC 153

18.2 Các thanh ghi liên quan đến hoạt động của ADC 154

18.2.1 Thanh ghi điều khiển thứ 1 của ADC (ADCON1) 154

18.2.2 Thanh ghi điều khiển thứ 2 của ADC (ADCON2) 155

18.2.3 Thanh ghi lưu dữ liệu ADC (ADBUF) 155

18.2.4 Thanh ghi cho phép ngắt số 3 (IE3) 155

18.2.5 Thanh ghi ưu tiên ngắt số 3 (IP3) 156

18.2.6 Thanh ghi trạng thái ngắt số 3 (IF3) 156

18.3 Hoạt động của ngoại vi ADC 157

18.4 Các chú ý khi sử dụng ngoại vi ADC 158

18.4.1 Nguồn xung clock cấp cho ngoại vi ADC 158

18.4.2 Các yêu cầu về thông số và kết nối 159

19 Tập lệnh 161

19.1 Giới thiệu 161

19.2 Thanh ghi cờ phép toán 163

19.3 Tóm tắt tập lệnh 163

19.4 Hoạt động của lệnh 166

20 Bộ nhớ chương trình FLASH 197

20.1 Phân vùng FLASH 197

20.2 Chế độ bảo vệ chương trình 198

Trang 6

Nội dung

Mục lục hình

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

Hình 1-2: Sơ đồ khối của SG8V1 16

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

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

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

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

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

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

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

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

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 đó 22

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

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

Hình 4-1: Mạch kết nối đến chân RST 27

Hình 4-2: Mạch reset ngoài 29

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

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

Hình 6-1: Cấu trúc bộ nhớ dữ liệu 33

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

Hình 9-1: Cell chuẩn của IO_PAD 57

Hình 9-2: Mô tả một kết nối Port cơ bản 59

Hình9-3: IO PortA 60

Hình9-4: IO PortB[0:1] và PortB[4] - dùng chung với Timer0 61

Hình9-5: IO PortB[2:3] - dùng chung với UART 61

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

Hình9-7: IO PortC[0:1] - dùng chung với UART1 64

Hình9-8: IO PortC[2:3] - dùng chung với PWM 64

Hình9-9: IO PortC[4:5] - dùng chung với SPI 64

Hình9-10: IO PortC[6:7] - dùng chung với SPI 65

Hình 9-11: IO PortD[0:3] - dùng chung với ngắt ngoài 67

Hình 9-12: IO PortD[4:5] - dùng chung với I2C 67

Hình 9-13: IO PortD[6] - dùng chung với Capture/Compare 68

Hình 9-14: IO PortD[7] - dùng chung với Timer1 68

Hình 10-1 : Mô tả khối Watchdog Timer 70

Hình 11-1: Mô tả sơ đồ khối Timer0 73

Hình 12-1: Mô tả sơ đồ khối Timer 1 77

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

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

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

Hình 14-1: Sơ đồ của khối PWM_x 87

Hình 14-2: Dạng sóng PWM 89

Hình15-1: Sơ đồ khối SPI 91

Hình15-2: Sơ đồ kết nối của SPI 95

Hình 15-3: các chế độ truyền dữ liệu của SPI 95

Hình 15-4: dạng sóng của SPI slave (CKP = 0, CKE = 1) 98

Hình 15-5: đồng bộ tín hiệu SPI SSx 98

Hình 16-1: Kết nối các thiết bị đến bus I2C 108

Trang 7

Nội dung

Hình 16-2: Khung truyền với địa chỉ 7-bit ở chế độ Master truyền 109

Hình 16-3: Khung truyền với địa chỉ 10-bit ở chế độ Master truyền 110

Hình 16-4: Khung truyền với địa chỉ 7-bit ở chế độ Master nhận 111

Hình 16-5: Khung truyền với địa chỉ 10-bit ở chế độ Master nhận 113

Hình 16-6: Đồng bộ clock 114

Hình 16-7: Phân xử 115

Hình 16-8: Định thời của quá trình tạo sự kiện Start 116

Hình 16-9: Định thời của quá trình tạo sự kiện Repeat Start 117

Hình 16-10: Định thời của quá trình tạo sự kiện Stop 117

Hình 16-11: Xung độ bus khi tạo Start (1) 118

Hình 16-12: Xung độ bus khi tạo Start (2) 118

Hình 16-13: Xung độ bus khi tạo Repeat Start (1) 119

Hình 16-14: Xung độ bus khi tạo Repeat Start (2) 119

Hình 16-15: Xung độ bus khi tạo Repeat Start (3) 119

Hình 16-16: Xung độ bus khi tạo Stop 119

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

Hình 16-18: Địa chỉ 7-bit 122

Hình 16-19: Định địa chỉ chế độ 10 bit 124

Hình 16-20: Dạng sóng I2C Master phát 127

Hình 16-21: Dạng sóng I2C Master nhận 128

Hình 16-22: Dạng sóng I2C Slave nhận chế độ 7-bit địa chỉ 129

Hình 16-23: Dạng sóng I2C Slave phát chế độ 7-bit địa chỉ 130

Hình 16-24: Dạng sóng I2C Slave nhận chế độ 10-bit địa chỉ 131

Hình 16-25: Dạng sóng I2C Slave phát chế độ 10-bit địa chỉ 132

Hình 17-1: Các thành phần chính của ngoại vi UART 133

Hình 17-2: Xung lấy mẫu dữ liệu và xung dịch dữ liệu tính theo hệ số N 144

Hình 17-3: Xung lấy mẫu dữ liệu và xung dịch dữ liệu với N = 0 144

Hình 17-4: Xung lấy mẫu dữ liệu và xung dịch dữ liệu với N = 1 145

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

Hình 17-6: Lấy mẫu dữ liệu với N = 0 145

Hình 17-7: Dịch dữ liệu 146

Hình 17-8: Minh họa cấu trúc cơ bản của bộ truyền UART 147

Hình 17-9: Truyền một khung dư liệu 148

Hình 17-10: Truyền liên tục 149

Hình 17-11: Cấu trúc của UART nhận 150

Hình 17-12: UART tiếp nhận 152

Hình 18-1: Sơ đồ khối ngoại vi ADC 153

Hình 18-2: Giản đồ thời gian cho hoạt động của ADC 158

Hình 18-3: Lần chuyển đổi đầu tiên sau khi bit ADON (ADCON1[7]) được tích cực 158

Hình 18-4: Mô hình ngõ vào của ADC 160

Hình20-1: Sơ đồ kết nối bộ nạp 197

Trang 8

Nội dung

Mục lục bảng

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

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

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

Bảng 9-1: Mô tả chân của một IO_PAD 57

Bảng 9-2: Mô tả chiều 58

Bảng 9-3: Mô tả bảng nhận dữ liệu 58

Bảng 9-4: Thanh ghi DIRA 60

Bảng 9-5: Mô tả thanh ghi PORTA 60

Bảng 9-6: Chức năng của PortB 62

Bảng 9-7: Thanh ghi DIRB 62

Bảng9-8: Mô tả thanh ghi PORTB 63

Bảng 9-9: Chức năng của PortC 65

Bảng 9-10: Thanh ghi DIRC 65

Bảng9-11: Chức năng PORTC 66

Bảng9-12: Chức năng của PortD 68

Bảng 9-13: Thanh ghi DIRD 69

Bảng 9-14: Mô tả chức năng PORTD 69

Bảng 10-1 : Mô tả thanh ghi WT0CON 70

Bảng 11-1: Mô tả thanh ghi WT0CON 74

Bảng 11-2: Mô tả thanh ghi T0REG 75

Bảng 12-1: Mô tả thanh ghi T1CON 81

Bảng 12-2: Mô tả thanh ghi T1RH 82

Bảng 12-3: Mô tả thanh ghi T1RL 82

Bảng 12-4: Mô tả thanh ghi CCRH 82

Bảng 12-5: Mô tả thanh ghi CCRL 82

Bảng 13-1: Mô tả thanh ghi TxCON 85

Bảng 13-2 Mô tả thanh ghi TxRH 85

Bảng 13-3 Mô tả thanh ghi TxRL 86

Bảng 13-4 Mô tả thanh ghi TxPRH 86

Bảng 13-5 Mô tả thanh ghi TxPRL 86

Bảng 14-1: Mô tả thanh ghi PWMxCON 90

Bảng 14-2: Mô tả thanh ghi PWMxRL 90

Bảng 15-1: Thanh ghi SPI 92

Bảng15-2: Thanh ghi điều khiển SPI- SPICON 92

Bảng 15-3: Thanh ghi trạng thái SPI- SPISTA 93

Bảng 16-1: Mô tả thanh ghi I2CCON1 ở chế độ Master 99

Bảng 16-2: Mô tả thanh ghi I2CCON1 ở chế độ Slave 100

Bảng 18-1 Một số giá trị cấu hình tham khảo cho xung clock ngoại vi ADC 159

Bảng 19-1: Mô tả cho các trường mã lệnh 161

Bảng 19-2: Tập lệnh SG8V1 163

Trang 9

Nội dung

Danh Mục Thuật Ngữ và Từ Viết Tắ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”

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 đầunhau 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)

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

Trang 10

Nội dung

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ố

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

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

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

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ệunối tiếp của ngoại vi SPI

Trang 11

Nội dung

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)

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

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

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)

Trang 12

Giới thiệu

1 Giới thiệu

SG8V1 là một vi điều khiển RISC 8-bit đa dụng, sử dụng cho nhiều mục đích khác nhau Tập lệnh gồm 60 lệnh, độ rộng mỗi từ lệnh 16-bit Bộ nhớ chương trình 64Kx16 và bộ nhớ dữ liệu 16KB Có 91 thanh ghi có chức năng đặc biệt SG8V1 được tích hợp rất nhiều ngoại vi như Watchdog Timer, Timer/Counter, PWM, UART, I2C, SPI,… SG8V1 có thể được sử dụng để làm

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

 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

Trang 13

Giới thiệu

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

Trang 14

portd[6] / CC portd[7] / T1CLK

portd[2] / INT2 portd[1] / INT1 portd[0] / INT0

portc[7] / SS portc[6] / SDO portc[5] / SDI portc[4] / SCK

portd[5] / SDA

portc[0] / RX1 portc[1] / TX1 OSC2

ADC TX3

RX3 UART3

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

Trang 15

Giới thiệu

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

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

VDD x 2 input Nguồn cung cấp

GND x 2 Input Mass

OSC1 input Ngõ vào thạch anh

OSC2 output Ngõ ra thạch anh

Porta [7:0] In / out Bidirectional IO port

Portb[7:0] In / out Bidirectional IO port

Portc[7:0] In / out Bidirectional IO port

Portd[7:0] In / out Bidirectional IO port

spcs Input Chip select cho bộ lập trình Flash

spclk Input Clock cho bộ lập trình Flash

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

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

T0CLK Input Clock ngoài dùng cho Timer 0

TX1 Output Ngõ truyền của UART1

RX1 Input Ngõ nhận của UART1

TX2 Output Ngõ truyền của UART2

RX2 Input Ngõ nhận của UART2

TX3 Output Ngõ truyền của UART3

RX3 Input Ngõ nhận của UART3

PWM1 Output Ngõ ra của PWM1

PWM2 Output Ngõ ra của PWM2

SCK In / Out Xung clock cho SPI

Chế độ Master: out / Chế độ Slave: in SDI Input Dữ liệu ngõ vào SPI

SDO Output Dữ liệu ngõ ra SPI

SS Input Tín hiệu Slave Select cho SPI

INT0 Input Ngắt ngoài 0

INT1 Input Ngắt ngoài 1

INT2 Input Ngắt ngoài 2

INT3 Input Ngắt ngoài 3

SCL In / Out Xung clock nối tiếp cho I2C

SDA In / Out Dữ liệu nối tiếp cho I2C

CC In / Out Chân cho Capture/Compare

Chế độ Capture: input Chế độ Compare: output T1CLK Input Clock ngoài dùng cho Timer 1

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

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

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

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

VREF Input Điện áp chuẩn cho ADC

CAP Input Chân nối tụ điện

Trang 16

Giới thiệu

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 module điều khiển việc lập trình cho Flash được tích hợp bên trong

PWM2

Microprocessor Core SG8V1

UART1 UART2

SPI

GPIO PORTs

Flash 64kx16

SG8V1

TMR3 WDT

Trang 17

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

Hình 2-3)

Trang 18

Kiến trúc pipeline

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

Trang 19

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

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

Trang 21

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

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:

Trang 22

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

 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 đó

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

Trang 23

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

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

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

0: Khi bật nguồn hoặc sau lệnh CLRWDT

1: Khi CPU vào chế độ IDLE

0: Khi bật nguồn hoặc sau lệnh CLRWDT hoặc lệnh IDLE

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

Trang 24

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

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

Trang 25

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

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

Trang 26

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

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

CPU - CPUSTA

CPU - CPUSTA

Trang 27

Reset

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

VDDR

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

Trang 28

Reset

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

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

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

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 đó

4.6 Định thời Reset

Tín hiệu reset ngoài trên chân RST được tạo bởi mạch RC (xem Hình 4-1) 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

Trang 29

reset nội

VDD V

t (s)

t (s)

V

Thời gian trễ

Hình 4-2: Mạch reset ngoài

Trang 30

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

5 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 64-Kbyte

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 VXL đố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

Trang 31

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

5.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

5.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

Trang 32

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

Trang 33

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

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

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

6.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 VXL 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 6-1 là cấu trúc của bộ nhớ dữ liệu

Các thanh ghi chức nă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

Trang 34

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

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ác 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 6-2

Đố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ó)

14 bit địa chỉ

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

6.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

Trang 35

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

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

6.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

6.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 VXL 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 6-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

Trang 36

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

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

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

TPS 0x018 0000 0000 Table Page Select DPOFF 0x019 uuuu uuuu Data Pointer Offset

Bộ điều khiển GIC 0x01A -000 Global Interrupt Control

Trang 37

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

ngắt 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

PORTB 0x02A xxxx xxxx Port B data PORTC 0x02B xxxx xxxx Port C data PORTD 0x02C xxxx xxxx Port D data

TIMER2

T2CON 0x034 0-00 0000 Timer2 Control T2RL 0x035 0000 0000 Timer2 Register Low Byte 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

Trang 38

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

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

Trang 39

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

Trang 40

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

6.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:

6.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

6.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:

Ngày đăng: 02/08/2017, 21:45

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w