Professional Documents
Culture Documents
1
- Chuyển chế độ dao động khi hoạt động với nguồn năng lượng thấp
- Chế độ ngủ tiếp kiệm năng lượng
- Hoạt động nguồn dải rộng (2.3VDC đến 5.5VDC)
- Dải hoạt động với nhiệt độ môi trường công nghiệp (đến 85ºC) và đặc biệt (đến
125ºC).
- Reset khi bật nguồn (POR)
- Bộ định thời bật nguồn (PWRT) và bộ định thời bắt đầu dao động (OST)
- Reset khi nguồn không ổn định (BOR) với chế độ điều khiển mềm.
- Bộ định thời WatchDog với dòng nhỏ dao động bên trong.
- Bộ xóa dồn kênh với điện trở treo các chân đầu vào.
- Bảo vệ khóa chương trình nguồn.
- Khối Flash/EEPROM độ bền cao: 100.00 lần ghi vào Flash và 1.000.000 lần
ghi vào bộ nhớ EEPROM. Thời gian lưu trữ trong Flash và EEPROM là 40
năm.
- Đọc và ghi bộ nhớ chương trình thời gian thực.
- Mạch gỡ rối trong Chip.
2
- Bộ định thời tăng cường Timer1: Độ phân dải 16bit với hệ số chia tần số có thể
lập trình:
+ Chế độ cổng vào từ bên ngoài
+Có bộ tự dao động bên trong tần số 32Khz chuyên dụng năng lượng thấp
- Bộ định thời 8 bit Timer2.
- Khối PWM, so sánh, lưu giá trị đếm tăng cường (khối ECCP):
+ Bộ lưu giá trị đếm 16bit với độ phân dải max đạt 12.5ns
+Bộ so sánh độ phân dải max 200ns.
+10 bit PWM với số kênh có thể là :1,2,4. Cho phép lập trình giá trị “Dead
Time”, tần số đạt max 20KHz.
+ Bộ điều khiển đầu ra PWM đồng bộ
- Khối PWM, so sánh, lưu giá trị đếm (CCP)
+Bộ lưu giá trị đếm 16 bit với độ phân dải 12.5ns
+Bộ so sánh 16 bit có đô phân dải Max 200ns
+Bộ PWM 10 bit với tần số max 20KHz.
- Khối truyền thông nối tiếp không đồng bộ USART tăng cường:
+Hỗ trợ giao thức RS 485, RS 232 và LIN 2.0
+ Tự động nhận dạng tốc độ truyền
+Tự khởi động khi dùng bit Start
- Bộ hỗ trợ nạp trình trên mạch (ICSP) có 2 chân
- Khối truyền thông nối tiếp đồng bộ (MSSP) hỗ trợ SPI 3 dây (cả 4 chế độ) và
I2C. Chế độ Chủ/tớ (Master/Slave) với địa chỉ I2C lựa chọn.
- Bộ nhớ chương trình (Flash): dung lượng 56KB
- Bộ nhớ dữ liệu SRAM : 4K Byte
EEPROM: 256 Byte
Mức độ tiêu thụ điện năng:
Dòng điện ở chế độ chờ (Standby) 50nA khi dùng nguồn 2.0VDC
Dòng điện khi hoạt động: 11µA khi hoạt động ở tần số 32KHx và nguồn 2.0V
Dòng điện khi hoạt động: 200µA khi hoạt động ở tần số 4MHx và nguồn 2.0V
Dòng điện của WatchDor Timer: 1µA khi dùng nguồn 2.0V
2. Các mạch điều khiển cơ bản
2.1 Mạch xung nhịp:
Với vi xử lý hiện đại mạch xung nhịp của CPU thường lấy từ 3 nguồn:
+ Bộ tạo dao động sử dụng thạch anh bên ngoài, phụ thuộc vào loại thạch anh sử dụng
sẽ tạo ra tần số dao động có độ chính xác phù hợp. Sai số của tần số dao động tính
3
theo đơn vị ppm là số xung sai lệch trên 1 triệu xung phát ra. Ví dụ thạch anh có độ
sai lệch 20ppm có nghĩa là trong 1 triệu xung mạch dao động tạo ra cho phép sai lệch
không quá 20 xung. Có nhiều vi xử lý cho phép 2 nguồn dao động thạch anh độc lập
(nguồn dao động tốc độ cao, ví dụ 20MHz dùng cho CPU thực hiện lệnh tốc độ cao và
32,678 KHz dùng cho đồng hồ thời gian thực hoặc chế độ tiết kiệm năng lượng của
CPU.
+ Bộ tạo dao động dùng mạch RC bên trong vi xử lý. Với mục đích giảm số
lượng lệnh hiện bên ngoài chip, có thể dùng mạch dao động được thiết kế bên trong
chip, việc này cho phép giảm giá thành và tăng tính ổn định của hệ thống (không phải
lo ngại thạch anh bên ngoài hỏng hoặc mạch bên ngoài bị tác động nhiều). Người sử
dụng có thể cài đạt được tần số dao động xung nhịp theo ý muốn trong giải mà nhà
sản xuất quy định, ví dụ trong khoảng từ 32 KHz đến 8 MHz. Tuy nhiên giải pháp này
có nhược điểm là độ chính xác dao động không cao, để nâng cao độ chính xác nhà sản
xuất cho phép hiệu chuẩn tần số dao động, nhưng thông thường sai số tốt nhất đạt
khoảng 0,2%.
- Thời gian khởi động bộ tạo dao động : Khi mới được cấp nguồn, bộ tạo dao
động được kích hoạt nhưng ở giai đoạn đầu tần số dao động chưa ổn định có thể ảnh
hưởng đến sự hoạt động của vi xử lý. Do đó nhà sản xuất đưa ra 1 cơ chế tạo ra 1
khoảng thời gian trước để chắc chắn tần số dao động đã ổn định sau đó mới cấp xung
cho hệ thống. Cơ chế này gọi là bộ định thời gian khởi động tạo dao động (OST-
Oscillator Start-up), thời gian này có thể thay đổi bởi người lập trình để phù hợp với
từng bài toán ứng dụng.
- Chế độ kiểm soát hoạt động của bộ tạo dao động : Do tính chất quan trọng cảu
xung nhịp cấp cho vi xử lý, cần có bộ kiểm soát chất lượng của xung nhịp. Trong
trường hợp phát hiện ra sự bất thường sẽ tự động chuyển sang sử dụng bộ tạo dao
động bên trong, đồng thời báo cho phần mềm lập trình thông qua thanh ghi cờ. Nhờ
đó người lập trình có thể đưa thuật toán khởi động lại bộ tạo dao động ngoài và
chuyển người cấp xung từ dao động bên trong sang dao động bên ngoài đã được khắc
phục.
4
Clock Monitor
Latch
External
S Q
Clock
LFINTOSC
÷ 64 R Q
31 kHz 488Hz
(~32 s)
Bộ nhận xung nhịp từ ngoài. Vi xử lý có thể nhận xung nhịp từ một mạch tạo xung
khác từ bên ngoài
2.2 Mạch reset vi xử lý
Khi hoạt động vi xử lý có thể bị reset trong các trường hợp sau
+ Khi bật nguồn (Power-on Reset)
+ Nguồn cấp mất ổn định (Brown-Out Reset)
+ Chân Reset bên ngoài (MCLR Reset)
+ Watch Dog Timer Reset (WDT)
+ Lệnh Reset bằng phần mềm
+ Tràn ngăn xếp (Stack Overflow)
+ Tràn bộ đệm ngăn xếp (Stack Underflow)
+ Chế độ nạp chương trình cho chip vi xử lý.
5
ICSP™ ProgrammingMode
RESETInstruction
VPP/MCLR MCLRE
Sleep
WDT
Time-out WDT Device
Window
Violation
Power-on
BORActive
VDD
R
Brown-out Power-up
Reset Timer
PWRTE
LPBOR
Mạch Reset khi bật nguồn (POR) khi bật nguồn, điện áp cấp cho vi xử lý tăng
từ 0 đến điện áp định mức. Mạch POR sẽ giữ vi xử lý ở trạng thái Reset cho đến khi
điện áp nguồn tăng vượt quá 1 giá trị thiết kế trước, ngoài ra tín hiệu Reset được kéo
dài 1 khoảng thời gian đủ để vi xử lý Reset 1 cách chắc chắn nhờ bộ định thời bật
nguồn (Power-up Timer).
Mạch Reset khi nguồn cấp không ổn định. (BOR). Nguòn cấp đóng vai trò quan
trọng tới sự hoạt động ổn định của vi xử lý, trong các vi xư rlý hiện đại có cơ chế
kiểm soát điện áp nguồn khi hệ thống đang hoạt động. Trong trường hợp phát hiện sự
bất thường (điện áp nguồn nhỏ hơn một điện áp đặt trước VBOR ) có thể báo cho phần
mềm lập trình và bắt đầu tiến trình Reset vi xử lý. Khối BOR có 4 chế độ hoạt động:
+ BOR luôn được kích hoạt
+ BOR không hoạt động khi ở chế độ ngủ (Cleep)
+BOR được điều khiển bằng phần mềm
+BOR luôn không hoạt động
Để đảm bảo vi xử lý không bị Reset nhầm, điện áp nguồn trước khi đưa vào bộ
xử lý BOR được lọc chống nhiễu. Đồng thời giá trị điện áp ngưỡng cũng có thể
cài đặt bởi người lập trình.
6
VDD
VBOR
Internal
Reset TPWRT(1)
VDD
VBOR
Internal
Reset
VDD
VBOR
Internal
< TPWRT
Reset TPWRT(1)
TPWRT(1)
7
+ Tràn bộ đệm ngăn xếp: Khi năng xếp đã trống (đã lấy hết địa chỉ chương trình từ
ngăn xếp) mà tiếp tục dùng lệnh POP.
- Reset ở chế độ nạp chương trình vào Chip: Khi sử dụng bộ nạp trình cho Chip, vi xử
lý được Reset để chuyển sang chế độ nạp trình.
8
đến 17Fh ở Bank 2 và từ 1F0 đến 1FFh ở Bank 3. Con trỏ được địa chỉ hóa ở vùng
70h đến 7Fh ở Bank 0. Tất cả các vùng RAM khác là không dùng tại mỗi Bank và khi
đọc sẽ có giá trị 0.
Thanh ghi BSR dùng để lựa chọn Bank làm việc Mỗi thanh ghi dùng chung được
truy nhập trực tiếp hoặc gián tiếp thông qua thanh ghi lựa chọn dữ liệu (FSR)
Các thanh ghi hàm chức năng đặc biệt:
Đây là các thanh ghi được sử dụng bới CPU và các hàm ngoại vi để điều khiển sự
hoạt động của vi xử lý. Các thanh ghi này là RAM tĩnh.
Các thanh ghi đặc biệt có thể phân loại thành nhóm như sau: Thanh ghi phục vụ
CPU và thanh ghi phục vụ khối ngoại vi.
Thanh ghi trạng thái (STATUS Register)
Thanh ghi trạng thái bao gồm:
- Trạng thái tính toán của khối ALU
- Trạng thái Reset
- Lựa chọn Bank cho bộ nhớ dữ liệu (GPR và SFR)
Khi một lệnh thực hiện có thể làm thanh đổi giá trị các bit trong thanh ghi trạng
thái, giả sử một lệnh làm thai đổi trạng thái các bit Z, C, hoặc DC trong thanh ghi
này thì việc ghi vào bit đó bị cấm. Các bit này có giá trị 1 hoặc 0 là do tác động của
mạch logic bên trong vi xử lý.
Ngoài ra các bit TO và 𝐏𝐃 là các bit chỉ đọc.
Ví dụ lệnh CLRF STATUS sẽ xóa 3 bit cao và Set bit Z. Kết quả thanh ghi
STATUS là 000uu1uu (ở đây u nghĩa là không thay đổi)
9
1= Xuất hiện khi tràn 4 bit thấp
0= Không tràn
Bit 0 C Bit tràn (Khi thực hiện phép toán cộng và trừ)
1= Xuất hiện khi tràn ở bit cao thấp
0= Không tràn
10
110= HFINT1 sử dụng tần số bên trong HFINTOSC (1 Mhz)
101= LFINT sử dụng tần số bên trong LFINTOSC
100= SOSC sử dụng tần số bên trong SOSC
010= EXTHx sử dụng tần số bên ngoài EXTOSC với hệ số nhân tần 4 lần (4xPLL),
cài đật EXTOSC thông qua việc cài đặt các bit ở thành ghi FEXTOSC
001= HFINTPLL sử dụng tần số bên trong HFINTOSC với bộ nhân tần 2 lần
(2xPLL), khi OSCFRQ=16Mhz và CDIV=1:1 (FOSC=32Mhz)
000=HFINT32 sử dụng tần số bên trong HFINTOSC OSCFRQ=32Mhz và CDIV=1:1
(FOSC=32Mhz).
Bit 2-0 FEXTOSC <2:0> các bit lựa chọn chế độ dao động bên ngoài
111=ECH xung nhịp bên ngoài ECH (tần số cao)
110=ECM xung nhịp bên ngoài ECM (tần số trung bình)
101=ECL xung nhịp bên ngoài ECL (tần số thấp)
100=OFF xung nhịp bên ngoài không sử dụng (chận RA7 có thể dùng làm cổng
vào/ra thông thường.
011= Dự phòng
010= HS Dao động thạch anh HS( tần số cao)
001= XT Dao động thạch anh XT( tần số trung bình)
000= LP Dao động thạch anh LP( tần số thấp)
CONFIG 2 Các bit cài đặt chế độ giám sát hoạt động vi xử lý
Bit 13 DEBUG Bit cho phép chế độ gỡ rối
Với chế độ này từ phần mềm lập trình (hệ phát triển) có thể kiểm soát hoạt
động của vi xử lý từ máy tính lập trình (dừng chương trình- xem các vùng nhớ - kiểm
soạt hoạt động của các câu lệnh…)
1=OFF Không cho phép gỡ rối (các chân giao tiếp phục vụ gỡ rối ICSPCLK và
ICSPDAT có thể dùng làm các chân vào/ra thông thường)
0=ON Cho phép chế độ gỡ rối.
Bit 12 STVREN Bit cho phép Reset khi tràn Stack
1=ON Khi tràn Stack vi xử lý sẽ Reset
0=OFF Khi tràn Stack vi xử lý không bị Reset
Bit 11 PPS1WAY Bit cho phép cài đặt PPSLOCKED 1 hay nhiều lần
PPS là một kỹ thuật cho phép nối các đầu ra hoặc đầu vào của các khối phần chức
chức năng bên trong Chip (như Timer, UART, SPI, ADC …) với các chân bên ngoài
của vi điều khiển.
11
1=ON: Bit PPSLOCKED có thể thay đổi trạng thái chỉ 1 lần
0=OFF Bit PPSLOCKED có thể thay đổi trạng thái nhiều lần
Bit 10: ZCDDIS Bit cấm kiểm tra trạng thái ZCD (Zero – Cross Detect)
ZCD là một kỹ thuật cho phép phát hiện tín hiệu khi qua điểm 0 (điểm đất nguồn), kỹ
thuật này hay dùng trong các bài toán cần đồng bộ pha của tín hiệu.
1=ON ZCD bị cấp
0=OFF ZCD luôn hoạt động
Bit 9: BORV bit lựa chọn điện áp BOR (Brown-out Reset)
BOR là một kỹ thuật kiểm tra điện áp nguồn cấp khi vi xử lý hoạt động (xem thêm ở
phần BOR)
1=LOW Lựa chọn mức điện áp thấp (1.9V)
0 =HIGT Lựa chọn mức điện áp cao (2.7V)
Bit 8: khong sử dụng
Bit 7-6 BOREN<1:0> Các Bit cho phép vi điều khiển Reset khi nguồn cấp mất ổn
định
11= ON Cho phép luôn Reset
10= Sleep Cho phép Reset khi vi điều khiển hoạt động ở chế độ bình thường, không
cho phép ở chế độ Sleep.
01= SBOREN Cho phép Reset nhưng phụ thuộc vào Bit SBSREN (bit này nằm trong
thanh ghi chức năng đặc biệt: có thể thay đổi giá trị khi chương trình đang hoạt động,
tuy nhiên sẽ xóa giá trị khi mất nguồn cấp)
00= OFF Không cho phép Reset.
Bit 1: PWRTE Bit cho phép bộ định thời trễ khi cấp nguồn hoạt động (Power–Up
Timer)
Kỹ thuật này cho phép tạo một khoảng thời gian trễ để bộ tạo dao động và các khối
phần cứng khác hoạt động ổ định trước khi cấp xung nhịp cho vi xử lý.
1=OFF: PWRT bị cấm
0=ON: PWRT cho chép hoạt động.
Bit 0: MCLRE bit cho chép chân MCLR hoạt động
1=ON MCLR chân dùng để Reset Chip
0=OFF MCLR dùng làm chân vao/ra thông thường
14
Bộ nhớ chương trình được mô tả ở hình dưới, trong đó Vector Reset ở địa chỉ 0000h
và Vector ngắt ở địa chỉ 0004h.
PC<14:0>
CALL, CALLW
RETURN,RETLW
15
Stack Level 0
Interrupt,
Stack Level 1
Stack Level 15
Reset Vector
0000h
Interrupt Vector
0004h
0005h
07FFh
0800h
0FFFh
Page 0 1000h
On-chip
Program
17FFh
Memory
3FFFh
4000h
7FFFh
Các thanh ghi dùng chung (Core Registers) ảnh hướng đến các hoạt động cơ
bản nhất của vi xử lý bao gồm:
- INDF0, INDF1: Quy định cách thức địa chỉ hóa khi truy nhập vùng nhớ -
phương pháp gián tiếp (indirect Addressing)
- PCL: Bộ đếm chương trình (byte thấp)
- STATUS: Thanh ghi trang thai hoạt động vi xử lý
Bit 4 : TO Bit Time-out
1= Sau khi bật nguồn, lệnh CLRWDT hoặc SLEEP
0= WatchDog Timer bị tràn
15
Ví dụ chương trình cài đặt các Bit cấu hình. (Chip PIC 16F877A)
Có 2 địa chỉ trả về trong bảng Vector ngắt, trong trường hợp này chia thành địa
chỉ có mức ưu tiên thấp và địa chỉ có mức ưu tiên cao. Khi cài đặt ngắt cần khai báo
mức độ ưu tiên của từng đòi hỏi ngắt. Khi hàm ngắt có mức độ ưu tiên thấp đang hoạt
động cho phép được gọi hàm ngắt cơ mức độ ưu tiên cao hơn. Trong từng hàm ngắt để
xác định đòi hỏi ngắt nào đang được kích hoạt cần kiểm tra cờ ngắt tương ứng.
Ví dụ với họ vi điều khiển Microchip PC18F: địa chỉ Vector ngắt ưu tiên cao ở
0008h và địa chỉ ở mức ưu tiên thấp ở 0018h
Mỗi một đòi hỏi ngắt sẽ có một hàm ngắt tương ứng để xử lý
18
hỏi ngắt (cờ ngắt dựng lên 1) và có sự cho phép ngắt đó hoạt động thì quá trình ngắt
diễn ra như sau:
1. Dừng thực hiện câu lệnh hiện tại
2. Giá trị bộ đếm chương trình được cấp vào ngăn xếp.
3. Giá trị các thanh ghi quan trọng (WREG, STATUS, BSR, FSR, PCLATH)
được tự động lưu vào vùng nhớ đặt biệt (Shadow Registers).
4. Bộ đếm chương trình được nạp địa chỉ trong bảng Vector ngắt (tuy vào từng đòi
hỏi ngắt sẽ có giá trị tương ứng trong bảng Vector ngắt)
Quá trình trên phần cứng của vi xử lý thực hiện 1 cách tự động.
Phần mềm của người lập trình cần thực hiện các bước:
5. Tại địa chỉ trong bảng Vector ngắt thực hiện câu lệnh gọi hàm ngắt tương ứng
6. Trong hàm ngắt cần kiểm tra cờ ngắt, xóa cờ ngắt trước khi thoát khỏi hàm ngắt
(nếu không hàm ngắt sẽ tự động gọi lại), dựng lại bit cho phép ngắt (nếu bit này
bị xóa bởi phần cứng)
7. Trong hàm ngắt thực hiện các câu lệnh đáp ứng đòi hỏ ngắt.
8. Khi gắp lệnh RETI (thoát khỏi hàm ngắt), trả lại quyền điều khiển cho phần
cứng.
Tiếp theo phần cứng vi xử lý sẽ thực hiện:
9. Nạp giá trị từ ngăn xếp (giá trị địa chỉ của chương trình chính đang thực hiện
trước đó) vào bộ đếm chương trình PC.
10.Khôi phục lại dữ liệu cho các thanh ghi quan trong được lưu trữ trước đó, nhờ
đó chương trình tiếp tục thực hiện đoạn lệnh trước khi xuất hiện ngắt.
19
OSC1
Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4 Q1 Q2 Q3 Q4
Interrupt
Interrupt
Interrupt
GIE
PC-1 PC FSR ADDR PC+1 PC+2 0004h 0005h
Execute 3 Cycle Instruction atPC INST(PC) NOP NOP NOP Inst(0004h) Inst(0005h)
Interrupt
GIE
PC-1 PC FSR ADDR PC+1 PC+2 0004h 0005h
Ví dụ các thanh ghi điều khiển ngắt của họ vi điều khiển PIC16F
PIE0 –Thanh ghi cho phép ngắt khối phần cứng ghép nối 0
Bit 7-6 Không sử dụng
Bit 5 TMR0IE Bit cho phép ngắt Timer0 tràn
20
1=Cho phép ngắt TMR0
0=Không cho phép ngắt TMR0
Bit 4 IOCIE Bit cho phép ngắt thay đổi trạng thái cổng vào
1= Cho phép ngắt IOC ( interrupt – on – change)
0=Không cho phép ngắt IOC
Bit 3-1 Không sử dụng
Bit 0 INTIE Bit cho phép ngắt ngoài
1=Cho phép ngắt INT
0=Không cho phép ngắt INT
PIE1 Thanh ghi cho phép ngắt khối phần cứng ghép nối 1
Bit 7 OSFIE Bit cho phép ngắt khi phát hiện lỗi xung nhịp
1=Cho phép ngắt OSF
0=Không cho phép ngắt OSF
Bit 6 CSWIE Bit cho phép ngắt khi chuyển xung nhịp thành công
1=Cho phép ngắt CSW
0=Không cho phép ngắt CSW
Ngắt này xuất hiện trong trường hợp vi xử lý kiểm tra có sự bất bình thường của
xung nhịp từ bộ tạo dao động, sau đó nó sẽ tự động chuyển sang sử dụng bộ tạo
dao động bên trong với tần số thấp hơn, kích hoạt lại bộ tạo dao động bên ngoài và
chuyển thành công sang bộ dao động bên ngoài mà không có lỗi.
PIE1: Thanh ghi trạng thái ngắt khối phần cứng ghép nối 1
PIR0: Thanh ghi trạng thái ngắt khối phần cứng ghép nối 0
PIR1: Thanh ghi trạng thái ngắt khối phần cứng ghép nối 1
Bộ WDT sử dụng nguồn xung nhịp độc lập với nguồn dao động cấp xung nhịp cho
CPU, ở đây có thể sử dụng nguồn dao đông bên trong LFINTOSC 31Khz hoặc
MFINTOSC/16 (31.25Khz). Việc lựa chọn này phụ thuộc vào giá trị cài đặt trong biến
WDTCCS <2:0> hoặc WDTCS<2:0>
23
Các chế độ hoạt động của WDT
Khối WDT có 4 chế độ hoạt động phụ thuộc vào sự cài đặt trong biến WDTE<1:0>:
17.WDT luôn hoạt động: Khi các bit WDTE trong phần cấu hình (Config) có giá
trị “11”. Lúc này WDT hoạt động cả ở chế độ “Sleep”
18.WDT ngừng hoạt động ở chế độ “Sleep”: Khi các bit WDTE trong phần cấu
hình (Config) có giá trị “10”. Lúc này WDT hoạt động ngoại trừ ở chế độ
Sleep.
19.WDT được điều khiển bằng phần mềm: Khi các bit WDTE trong phần cấu
hình (Config) có giá trị “01”. Lúc này WDT được điều khiển bởi bit SEN trong
thanh ghi WDTCON0.
20.WDT không hoạt động. Khi các bit WDTE trong phần cấu hình (Config) có giá
trị “00”.
24
Các thanh ghi điều khiển WDT
WDTCON0: Thanh ghi điều khiển WDT 0
bit7-6 Không sử dụng
bit0 SEN:Bit cho phép/ cấm WDT hoạt động bằng phần mềm
Nếu WDTE<1:0> =1x:
Bit này bị bỏ qua
25
Nếu WDTE<1:0> =01:
1 = WDT hoạt động
0 = WDT bị cấm
Nếu WDTE<1:0> =00:
Bit này bị bỏ qua
bit6-4 WDTCS<2:0>: Các bit lựa chọn nguồn dao động WDT
WDTPSL: WDT Thanh ghi byte thấp lựa chọn hệ số chỉa WDT (Chỉ đọc)
26
bit7-0 PSCNT<7:0>: Thanh ghi byte thấp lựa chọn hệ số chỉa WDT
WDTPSH: WDT Thanh ghi byte cao lựa chọn hệ số chỉa WDT (Chỉ đọc)
bit7-0 PSCNT<15:8>: Thanh ghi byte thấp lựa chọn hệ số chỉa WDT
27
- Cổng vào tương tự (Analog Input): Cổng này thường được kết nối với khối phần
cứng ADC hoặc khối so sánh tương tự bên trong Chip vi điều khiển.
- Cổng ra tương tự (Analog Output): Cổng này được kết nối với khối phần cứng
DAC.
- Cổng vào/ra truyền thông: Các cổng này được kết nối với khối phần cứng truyền
thông bên trong Chip như UART, SPI, I2C, USB…
- Cổng vào/ra điều khiển truy nhập bộ nhớ ngoài gồm các đường BUS địa chỉ, dữ
liệu và điều khiển.
Với cách phân loại khác ta có thể chia các chân vào/ra của vi điều khiển thành 2
dạng:
- Phần mềm điều khiển trực tiếp: tức là có thể dùng các câu lệnh truy nhập trực tiếp
các cổng vào/ra. Đặc điểm là tần số của xung tín hiệu thấp (<1Khz) và phụ thuộc vào
tốc độ thực hiện lệnh.
- Phần mềm điều khiển gián tiếp: tức là điều khiển thông qua các khối phần cứng
bên trong Chip (khối PWM, Counter, ADC, UART, SPT, ngắt ngoài …). Đặc điểm là
tần số làm việc cao và chỉ phụ thuộc vào các khối phần cứng. Phần mềm khổng thể
điều khiển mức logic ra của các cổng này, tuy nhên có thể đọc mức logic vào.
Để tiết kiệm, các chân vào/ra của vi điều khiển được thiết kế đa chức năng. Vi dụ 1
chân tại những thời điểm khác nhau vừa là cổng vào, cổng ra, cổng truyền thông, ngắt
ngoài và cổng tín hiệu tương tự. Việc cài đặt chức năng các chân này thông qua các
thanh ghi.
Ví dụ với PORTA của vi điều khiển PIC16F18877 có các thanh ghi điều khiển sự
hoạt động của các cổng vào/ra như sau:
- Thanh ghi PORTA: Giá trị của nó thể hiện mức logic các bit cổng này.
- Thanh ghi LATA (chốt giá trị ra): Điều khiển giá trị mức logic ra, việc chốt dữ
liệu ra có thể sử dụng ở dạng đọc – thay đổi – ghi.
Ví dụ thực hiện lệnh: LATA=LATA&0xF0;
- Thanh ghi TRISA (điều khiển chiều của dữ liệu): sẽ quyết định cổng này là
cổng đầu vào (đặt giá trị 1) hay cổng ra (đặt giá trị 0)
- Thanh ghi ANSELA: Cài đặt cổng Analog, khi 1 bit ANSEL có giá trị 1
(cổng này thành cổng vào Analog) thì bộ đệm đầu vào số bị tách ra, tuy nhên chức
năng cổng ra số vẫn có thể tiếp tục được sử dụng (phụ thuộc vào thanh ghi
TRISA).
28
Đọc LATx
TRISx
D Q
Ghi LATx
Ghi PORTx
CK VDD
Data Register
Data Bus
I/O pin
Đọc PORTx
VSS
kỳAN
Đến khối Analog
- Thanh ghi WPUA: treo điện trở đầu vào, khi bit này ơt mức 1 thf đầu vào
được thiết kế có 1 điện trở treo lên dương nguồn (đảm bảo mức 1 khi đầu vào
này không nối với thiết bị bên ngoài khác). Còn khi bằng 0 thì không có điện
trở treo ở đầu vào này.
- Thanh ghi INLVLA: thay đổi ngưỡng điện áp đầu vào tương thích với dạng
TTL (Tranzitor-tranzitor logic) hay ST (Schmitt Trigger CMOS). Lưu ý chỉ sử
dụng thanh ghi này ở chế độ điều khiển trực tiếp bằng phần mềm. Khi giá trị
thanh ghi này ở mức 1 thì cổng đầu ra ở dạng ST, còn nếu bit này bị xóa thì có
dạng là TTL.
- Thanh ghi SLRCONA: cài đặt tần số hoạt động của cổng, khi ở mức 1 thì
cổng ra bị hạn chế tần số, còn ở mức 0 thì không bị giới hạn (tần số max phụ
thuộc vào công bố của nhà sản xuất Chip)
- Thanh ghi ODCONA: cài đặt cổng ra dạng Open- drain. Khi 1 bit của thanh
ghi ODCONA có giá trị 1 thì cổng đầu ra tương ứng trở thành dạng Open-Drain
(chỉ cho phép nhận dòng), còn khi bit này bị xóa thì cổng đầu ra ở dạng đẩy kéo
(Push-Pull) tiêu chuẩn và cho phép nhận dòng và bơm dòng.
Chương trình ví dụ sử dụng cổng A2 đến A5 là các cổng vào (Input), và công E2 là
cổng ra:
#include <xc.h>
#define Input 1
#define Out 0
#define kb0 PORTAbits.RA2
29
#define kb1 PORTAbits.RA3
#define kb2 PORTAbits.RA4
#define kb3 PORTAbits.RA5
Tris_kb0=Input ;
Tris_kb1=Input;
Tris_kb2=Input;
Tris_kb3=Input;
Tris_Led=Out;
while(1)
{
if(kb0)
pre_kb0=1;
if(pre_kb0&&!kb0)
{
Led=0;
pre_kb0=0;
num=0;
}
if(kb1)
pre_kb1=1;
if(pre_kb1&&!kb1)
{
pre_kb1=0;
30
Led=1;
}
} //while
} //main
10
11
RD0/PSP0
9
20 RD1
RD1/PSP1
RN1 RD2/PSP2
21 RD2
22 RD3
4.7k RD3/PSP3
27 RD4
RD4/PSP4
RD5
1
2
3
4
5
6
7
8
28
RD5/PSP5
29 RD6
1 RD6/PSP6
30 RD7
2 RD7/PSP7
3 VCC
PIC16F877A
4
RESET
KB0
UP
KB1
DOWN
KB2
MODE
KB3
31