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 1Trang 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 2Nộ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 3Nộ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 4Nộ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 5Nộ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 6Nộ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 7Nộ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 8Nộ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 9Nộ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 10Nộ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 11Nộ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 12Giớ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 13Giớ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 14portd[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 15Giớ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 16Giớ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 17DECODE
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)
Trang 18Kiế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 19Lệ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 21Chế độ 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 22Chế độ 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 23Chế độ 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 24Chế độ 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 25Chế độ 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 26Chế độ 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 27Reset
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 28Reset
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 29reset nội
VDD V
t (s)
t (s)
V
Thời gian trễ
Hình 4-2: Mạch reset ngoài
Trang 30Tổ 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 31Tổ 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 32Mỗ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 33Tổ 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 34Tổ 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 35Tổ 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 36Tổ 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 37Tổ 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 38Tổ 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 40Tổ 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: