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
100 trang |
Chia sẻ: chaien | Lượt xem: 1428 | Lượt tải: 0
Bạn đang xem trước 20 trang tài liệu Bài giảng Ngoại vi Inter-Integrated Circuit, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
hỉ 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.
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ục17.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])
UART
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 148
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ú ý:
1. Nếu TX1 hay TX2 được kết nối đến các linh kiện khác, phải thiết lập PORTC [1] và PORTB
[3] trước khi UARTx được bật.
2. 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.
3. 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.
4. 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 bit
Dữ 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 17-9: Truyền một khung dư liệu
UART
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 149
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 17-10: Truyền liên tục
17.5. Bộ nhận UART
17.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à TX3, 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.
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ú ý:
1. Thanh ghi dịch là thanh ghi nội và không thể truy xuất trực tiếp.
2. Cờ UxRCIF chỉ bằng 0 khi FIFO không chứa bất kỳ dữ liệu nào.
UART
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 150
Start bit8 data bitParity bit
PORTC [0]/RX1
or
PORTB [2]/RX2
or
RX3
UxON
(UxSTA [7])
UxRXEN
(UxCON [5])
Cấu hình chân
giao tiếp
Bộ lấy mẫu
BRG
Xung clock lấy
mẫu dữ liệu
Stop bit
8 bit dữ liệu
UxRX9D
(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 17-11: Cấu trúc của UART nhận
17.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.
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ục17.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:
UART
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 151
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.
17.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ú ý:
1. Cờ UxRXOV không thể bị xóa trực tiếp.
UART
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 152
S
ta
rt
b
it
D
ữ
l
iệ
u
đ
ư
ợ
c
n
h
ậ
n
B
it
0
B
it
1
B
it
2
B
it
3
B
it
4
B
it
5
B
it
6
B
it
7
B
it
8
S
to
p
B
it
N
h
ậ
n
h
o
à
n
t
h
iệ
n
m
ộ
t
k
h
u
n
g
d
ữ
l
iệ
u
C
ờ
R
X
O
V
S
ta
rt
b
it
B
it
0
B
it
1
B
it
2
B
it
3
B
it
4
B
it
5
B
it
6
B
it
7
B
it
8
S
to
p
B
it
P
a
ri
ty
B
it
(n
ế
u
c
ó
)
S
ta
rt
b
it
B
it
0
B
it
1
B
it
2
B
it
3
B
it
4
B
it
5
B
it
6
B
it
7
B
it
8
Đ
ọ
c
t
h
a
n
h
g
h
i
U
R
X
R
E
G
S
ta
rt
b
it
B
it
0
R
X
E
N
C
ờ
U
R
C
IF
P
a
ri
ty
B
it
(n
ế
u
c
ó
)
P
a
ri
ty
B
it
(n
ế
u
c
ó
)
S
to
p
B
it
Hình 17-12: UART tiếp nhận
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 153
18. 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.
18.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
OSC1
ADON
VAin
VIN1
VIN2
VIN3
VIN4
Điện áp ngõ vào
ADCH1
ADCH0
Hình 18-1: Sơ đồ khối ngoại vi ADC
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 154
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.
18.2. Các thanh ghi liên quan đến hoạt động của ADC
18.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)
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 155
Tên Bit R/W Mô tả
01 : Kênh 1 (VIN2)
10 : Kênh 2 (VIN3)
11 : Kênh 3 (VIN4)
18.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
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.
18.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.
18.2.4. Thanh ghi cho phép ngắt số 3 (IE3)
Tên Bit R/W Mô tả
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 156
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
18.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
18.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
Giá trị đọc ra là 0
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 157
Tên Bit R/W Mô tả
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
18.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.
Nếu không cần cấu hình lại thì lặp lại từ bước thứ 3.
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 158
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 18-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 18.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 18-3: Lần chuyển đổi đầu tiên sau khi bit ADON (ADCON1[7]) được tích cực
18.4. Các chú ý khi sử dụng ngoại vi ADC
18.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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 159
Để 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 18-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.
18.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Ω
Công thức chuyển đổi của ADC là:
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 160
256
Dout 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.15pF
vin
PIN
Hình 18-4: Mô hình ngõ vào của ADC
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 161
19. Tập lệnh
19.1. Giới thiệu
Tập lệnh của SG8V1 có tất cả 60 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 19-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 19-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)
label Tên nhãn chương trình
Off
18/28 Địa chỉ tương đối (số bù 2) cho các lệnh nhảy tương đố hoặc địa chỉ trực
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 162
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 163
19.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
19.3. Tóm tắt tập lệnh
Bảng 19-2 liệt kê tất cả các lệnh của VĐK SG8V1
Bảng 19-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 = (ACC) - imm 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
DA
HC_tmp || ACC[3:0] = ([ACC[3:0] > 9] và [HC = 1])
?(ACC [3:0]) + 6 : ACC [3:0])
ACC [7:4] = ([ACC [7:4] > 9] và [C = 1]) ? (ACC
[7:4]) + 6 + HC_tmp; C = 1 : (ACC [7:4]) + HC_tmp
C
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 164
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
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) không
RETA imm
PC = (TS)
ACC = imm
không
RETI
PC = (TS)
GIE/GIEH = 1 hoặc PIE/GIEL = 1
không
SCALL n
PC = (PC) + 1 + off11
TS = (PC) + 1
không
SJMP n PC = (PC) + 1+ off11 không
TBZ IF (reg) = 0, bỏ qua lệnh tiếp theo
không
LCALL imm
PC = imm
không
TS = (PC) + 2
LJMP imm PC = imm không
Nhóm điều khiển hệ thống
IDLE
00h → WDT postscaler,
0 → WDT prescaler,
0 → WDTO,
1 → 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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 165
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 166
19.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 ≤ 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 d trong mã lệnh (bit thứ [9]), thì nếu d = 0, kết quả sẽ lưu lại trong
thanh ghi ACC. Nếu d = 1 thì kết quả sẽ lưu lại trong thanh ghi reg.
Đối với những lệnh có bit e trong mã lệnh (bit thứ [8]), nếu bit e = 0, thì băng bộ nhớ 0 sẽ được
chọn. Nếu e = 1 thì băng bộ nhớ được chọn sẽ phụ thuộc giá trị của thanh ghi BS.
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 167
ADDI - ADD constant to ACC
ADDI imm
OPCODE imm (constant)
15 7 08
OPCODE = 0000_1111
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
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0010_01
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 168
ADDRC - ADD ACC and Carry bit to reg
ADDRC reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0010_00
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
OPCODE imm (constant)
15 7 08
OPCODE = 0000_1011
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 169
ANDR - AND ACC to reg
ANDR reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
\
OPCODE = 0001_01
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
OPCODE bit bse reg
15 11 9 8 7 012
OPCODE = 1001
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 170
BRC - Branch if Carry
BRC off8
OPCODE off8
15 7 08
OPCODE = 1110_0010
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
OPCODE off8
15 7 08
OPCODE = 1110_0011
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 TARGET Trước lệnh: PC = địa chỉ lệnh BRNC
Sau lệnh: Nếu Carry = 0; PC = address (TARGET)
Nếu Carry = 1; PC = address (TARGET)
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 171
BRNZ - Branch if Not Zero
BRNZ off8
OPCODE off8
15 7 08
OPCODE = 1110_0001
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 TARGET Trước lệnh: PC = địa chỉ lệnh BRNZ
Sau lệnh: Nếu Zero = 0; PC = address (TARGET)
Nếu Zero = 1; PC = address (TARGET)
BRZ - Branch if Zero
BRZ off8
OPCODE off8
15 7 08
OPCODE = 1110_0000
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 TARGET Trước lệnh: PC = địa chỉ lệnh BRZ
Sau lệnh: Nếu Zero = 1; PC = address (TARGET)
Nếu Zero = 0; PC = address (TARGET)
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 172
BSET - Bit Set reg
BSET reg, bit, bse
OPCODE bit bse reg
15 11 9 8 7 012
OPCODE = 1000
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
OPCODE bit bse reg
15 11 9 8 7 012
OPCODE = 1011
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 173
BTBS - Bit Test reg, Bypass if Set
BTBS reg, bit, bse
OPCODE bit bse reg
15 11 9 8 7 012
OPCODE = 1010
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
OPCODE bse reg
15 9 8 7 0
OPCODE = 0110_101
IF (reg > ACC) bỏ qua lệnh tiếp theo
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 174
CLRWDT - Clear Watchdog Timer
CLRWDT
OPCODE
15 0
OPCODE = 0000_0000_0000_0100
WDT postscaler = 000h
WDT prescaler = 000h
WDTO = 0
PWD = 1
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
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0001_11
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 175
DA - Decimal Adjust ACC Register
DA
OPCODE
15 0
OPCODE = 0000_0000_0000_0111
HC_tmp || ACC[3:0] = ([ACC[3:0] > 9] và [HC = 1]) ?(ACC [3:0]) +
6 : ACC [3:0])
ACC [7:4] = ([ACC [7:4] > 9] và [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 0
DBNZ reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0100_11
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 176
DBZ - Decrement reg, Bypass if 0
DBZ reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0010_11
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
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0000_01
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 177
IACC - Immediate value to ACC
IACC imm
OPCODE imm (constant)
15 7 08
OPCODE = 0000_1110
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 0
IBNZ reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0100_10
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 178
IBS - Immediate value to Bank Select
IBS imm
OPCODE imm (constant)
15 7 08
00
6 5
OPCODE = 0000_0001
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 179
IBZ - Increment reg, Bypass if 0
IBZ reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0011_11
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
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0011_11
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.
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 180
IDP0 - Immediate value to Data Pointer 0
IDP0 imm
OPCODE1 imm [13:8] (constant)
15 9 010
0
8 7
OPCODE1 = 1101_00
OPCODE2 imm [7:0]
15 11 012
0
6 5
OPCODE2 = 0111
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
OPCODE1 imm [13:8] (constant)
15 9 010
0
8 7
OPCODE1 = 1101_01
OPCODE2 imm [7:0]
15 11 012
0
6 5
OPCODE2 = 0111
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 181
IDPOFF - Immediate value to Data Pointer Offset
IDPOFF imm
OPCODE imm (constant)
15 7 08
OPCODE = 1110_0111
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
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0010_10
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 182
JMPA - Jump with ACC
JMPA
OPCODE 0
15 7 08
OPCODE = 1110_0110
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 imm
OPCODE imm [7:0]
15 7 08
OPCODE1 = 1110_0101
OPCODE2 imm [7:0]
15 8 012
0
711
OPCODE2 = 0111
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 FUNCTION Trước lệnh: PC = địa chỉ lệnh LCALL
Sau lệnh: PC = địa chỉ của FUCNTION
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 183
Ld - Load reg to ACC
LD reg, bse
OPCODE 0 bse reg
15 10 9 8 7 0
OPCODE = 0101_00
PC = target16
TS = (PC) + 2
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 = 55h
Sau lệnh: ACC = 00h, REG = 00h, Z = 1
LJMP - Long Jump
LJMP imm
OPCODE imm [7:0]
15 7 08
OPCODE1 = 1110_0100
OPCODE2 imm [7:0]
15 8 012
0
711
OPCODE2 = 0111
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 THERE Trước lệnh: PC = địa chỉ lệnh LJMP
Sau lệnh: PC = địa chỉ của THERE
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 184
MULI - Multiply Constant with ACC
MULI imm
OPCODE imm (constant)
15 7 08
OPCODE = 0000_1101
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
MULR - Multiply reg with ACC
MULR reg, bse
OPCODE bse reg
15 9 8 7 0
OPCODE = 0000_001
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 185
NOP - No Operation
NOP
OPCODE
15 0
OPCODE = 0000_0000_0000_0000
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
ORI - OR Constant with ACC
ORI imm
OPCODE imm (constant)
15 7 08
OPCODE = 0000_1001
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 186
ORR - OR ACC with reg
ORR reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0001_00
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
OPCODE
15 0
OPCODE = 0000_0000_0000_0110
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 (thấp hơn 1 mức) = 4332h
SJMP NEW Sau lệnh: TS = 4332h, PC = địa chỉ của NEW
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 187
PUSH - Push Top of Return Stack
PUSH
OPCODE
15 0
OPCODE = 0000_0000_0000_0101
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 = 0126h, TS = 0126h, Stack (thấp hơn 1 mức) = 345Ah
RET - Return from Subroutine
RET
OPCODE
15 0
OPCODE = 0000_0000_0000_0010
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ó
RETA k0 Trước lệnh: ACC = ?
Sau lệnh: ACC = k0
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 188
RETI - Return from Interrupt
RETI
OPCODE
15 0
OPCODE = 0000_0000_0001_0000
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, PIE/GIEL = 1
RL - Rotate Left reg (no carry)
RL reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0100_01
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 189
RLC - Rotate Left reg through Carry
RLC reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0011_01
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
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0100_00
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 190
RRC - Rotate Right reg through Carry
RRC reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0011_00
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
SCALL - Short Subroutine Call
SCALL off11
OPCODE off11
15 10 011
OPCODE = 1110_1
PC = (PC) + 1 + off11
TS = (PC) + 1
Gọi chương trình con đoạn ngắn trong tầm 1KB. 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 FUNCTION Trước lệnh: PC = địa chỉ lệnh SCALL, TS = ?
Sau lệnh: PC = địa chỉ của FUNCTION, TS = địa chỉ SCALL + 1
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 191
SET - Set reg
SET reg, bse
OPCODE bse reg
15 9 8 7 0
OPCODE = 0110_100
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
SJMP - Short Jump
SJMP off11
OPCODE off11
15 10 011
OPCODE = 1101_1
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 0xB1 Sau lệnh: PC = địa chỉ lệnh SJMP + B2h
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 192
ST - Store ACC to reg
ST reg, bse
OPCODE 0 bse reg
15 10 9 8 7 0
OPCODE = 0110_11
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
SUBAR - Subtract reg from ACC
SUBAR reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 1100_00
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 193
SUBARC - Subtract reg from ACC with Carry
SUBARC reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0101_01
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
SUBI - Subtract ACC from Constant
SUBI imm
OPCODE imm (constant)
15 7 08
OPCODE = 0000_1000
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
SUBI 0x02 Trước lệnh: ACC = 01h, C = ?
Sau lệnh: ACC = 01h, C = 0, Z = 0
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 194
SUBRA - Subtract ACC from reg
SUBRA reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0101_11
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
SUBRAC - Subtract ACC from r with Carry
SUBRAC reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0101_10
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 195
TBZ - Test reg, Bypass if 0
TBZ reg, bse
OPCODE bse reg
15 9 8 7 0
OPCODE = 0110_011
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
XCHD - Exchange Digit
XCHD reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0011_10
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
Tập lệnh
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 196
XORI - Exclusive OR Constant with ACC
XORI imm
OPCODE imm (constant)
15 7 08
OPCODE = 0000_1010
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
XORR - Exclusive OR reg with ACC
XORR reg, dst, bse
OPCODE dst bse reg
15 10 9 8 7 0
OPCODE = 0001_10
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
Bộ nhớ chương trình Flash
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 197
20. 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ình20-1: Sơ đồ kết nối bộ nạp
20.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ệ.
Bộ nhớ chương trình Flash
© 2012 ICDREC SG8V1 - Hướng dẫn sử dụng 198
Mô tả cấu hình hoạt động của SG8V1:
/RST: SPCS pin: 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
20.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.
Các file đính kèm theo tài liệu này:
- 7p2_3948.pdf