PIC18F4550 là một vi xử lý cơ bản đa chức năng và rẻ. Nó là sản phẩm của họ vi xử lý PIC thông dụng của công ty Microchip của Mỹ có trụ sở đặt tại Chandler, Arizona (Mỹ).
Vi điều khiển PIC18F67J60 là một vi điều khiển thuộc dòng vi điều khiển PIC19F97J60, do đó nó có các đặc trƣng chung của họ vi điều khiển này.
- Sử dụng thạch anh 25MHz cho ứng dụng Ethernet. - Bộ nhớ chƣơng trình 128Kbyte ( 65532 lệnh). - Bộ nhớ dữ liệu 3808 byte.
- Có 39 chân I/O thuộc các port A,B,C,D,E,F,G. - Có 5 bộ Timer:
Timer0: vận hành nhƣ là 1 bộ định thời 8 bit hoặc 16 bit, 1 bộ đếm. Timer1: vận hành nhƣ là 1 bộ định thời 8 bit, 1 bộ đếm.
Timer2: vận hành nhƣ là 1 bộ định thời 8 bit, 1 bộ đếm. Timer3: vận hành nhƣ là 1 bộ định thời 16 bít, 1 bộ đếm. Timer4: vận hành nhƣ là 1 bộ định thời 8 bít, 1 bộ đếm. - Có 2 module Capture/Compare/PWM.
Hình 3.1: Vi điều khiển PIC18F67J60
- Có 3 module EnhancedCapture/Compare/PWM.
- Các giao tiếp nối tiếp MSSP (Master Synchronous Serial Port) và Enhanced USART (Universal asynchronous receiver/transmitter).
- Có 11 kênh chuyển đổi A/D 10 bit.
3.2.2 Sơ đồ chân
Sau đây là sơ đồ chân của PIC18F67J60.
Hình 3.2: Sơ đồ chân của PIC18F67J60 Chân Loại Mô tả chức năng và các đặc tính
/MCLR I Chân Reset, mức tích cực thấp OSC1
OSC2
I O
Lối vào bộ giao động tinh thể Lối ra bộ giao động tinh thể CLKI
CLKO
I O
Lối vào của xung Clock ngoài, luôn kết hợp với chân OSC1
Lối ra của bộ dao động tinh thể, nối với tinh thể hoặc bộ cộng hƣởng trong chế độ dao động thạch anh. Giống nhƣ CKLO trong chế độ RC hoặc EC. Luôn kết hợp với chân chức năng OSC2
LEDA LEDB
O O
Ethernet LEDA indicator output Ethernet LEDB indicator output VREF-
VREF+
I I
Lối vào Vref- (thấp) thế chuẩn
Lối vào Vref+ (cao) thế analog chuẩn
TOCKI I Lối vào xung Clock ngoài của Timer0
INT0,INT1,INT2,INT3 I Ngắt ngoài
FLT0 I Tăng cƣờng PWM đầu vào, kích hoạt bằng phần
mềm
KBI0,KBI1,KBI2,KBI3 I Interrupt-on-change pin PGC
PGD
I I/O
Ngõ vào clock của ICSP Vào ra dữ liệu của ICSP T1OSO
T1OSI
O I
Dao động đầu ra Timer1 Dao động đầu vào Timer1
ECCP1, ECCP2, ECCP3,CCP4,CCP5
I/O Capture input/Compare output/PWM output
P1A, P2A,P3A P1B,P2B,P3B P1C,P2C,P3C P1D,P2D,P3D O O O O SCK1 SDI1 SDO1 I/O I O
Vào ra Clock đồng bộ của khối SPI Lối vào dữ liêu của khối SPI Lối ra dữ liêu của khối SPI SCL1
SDA1
I/O I/O
Vào ra Clock nối tiếp của I2C
Vào ra dữ liệu nối tiếp đồng bộ của I2C
RA0-RA5 I/O PortA.
RB0-RB7 I/O PortB.
RC0-RC7 I/O PortC.
RD0-RD2 I/O PortD.
RE0-RE5 I/O PortE.
RF1-RF7 I/O PortF. RG4 I/O PortG. TX1 CK1 RX1 DT1 O I/O I I/O
Cổng truyền khối EUSART1 Xung clock cho EUSART1 Cổng nhận khối EUSART1 Dữ liệu EUSART1
C1OUT,C2OUT O Ngõ ra bộ so sánh
CVREF O Bộ so sánh tham khảo điện áp đầu ra
/SS1 I Slaver đồng bộ
AN0-AN11 I 12 chân vào tín hiệu analog
Vss P GND cho module số và chân I/O
Vdd p Nguồn dƣơng cho module số và chân I/O
AVss P GND cho module tƣơng tự
AVdd P Nguồn dƣơng cho module tƣơng tự
ENVREG I Cho phép điều chỉnh điện áp trên chip VDDCORE
VCAP
P P
Nguồn cung cấp cho lõi vi điều khiển Kết nối tụ điện lọc bên ngoài
VSSPLL P GND cung cấp cho Ethernet PHY PLL
VDDPLL P 3.3V cung cấp cho Ethernet PHY PLL
VSSTX P GND cung cấp cho Ethernet PHY truyền
VDDTX P 3.3V cung cấp cho Ethernet PHY truyền
VSSRX P GND cung cấp cho Ethernet PHY nhận
VDDRX P 3.3V cung cấp cho Ethernet PHY nhận
RBIAS I Bias current for Ethernet PHY
TPOUT+ TPOUT- TPIN- O O I
Tín hiệu đầu ra Ethernet Tín hiệu đầu ra Ethernet Tín hiệu đầu vào Ethernet
TPIN+ I Tín hiệu đầu vào Ethernet
Bảng 0.1: Chức năng các chân của PIC18F67J60
3.2.3 Dao động thạch anh
Mỗi vi điều khiển hoạt động đều cần một xung clock nhất định. Hai chân OSC1 và OSC2 cung cấp dao động cho vi điều khiển PIC hoạt động.
PIC18F67J60 có thể hoạt động trong 5 chế độ dao động khác nhau: 1) HS Dùng thạch anh tần số cao
2) HSPLL Dùng thạch anh tần số cao với chế độ PLL 3) EC Dùng xung clock bên ngoài FOSC/4
4) ECPLL Dùng xung clock bên ngoài với chế độ PLL 5) INTRC Dùng dao động nội 31 kHz
Ở chế độ HS, HSPLL thì dùng thạch anh nối vào 2 chân OSC1 và OSC2 để thiếp lập dao động. Việc mắc thêm các tụ lọc giúp tăng tính ổn định của bộ dao động, tuy nhiên giá trị của tụ không quá lớn hay quá nhỏ để dao động ổn định và thời gian khởi động ngắn.
Bảng 3.2: Giá trị các tụ lọc thạch anh
Đối với một số ứng dụng mà độ chính xác của thời gian không quan trọng, có thể dùng dao động RC nhƣ một giải pháp tiết kiệm. Tần số dao động đƣợc xác định bởi giá trị của điện trở R và tụ C.
3.2.4 MCLR
PIC18F67J60 có 8 chế độ reset khác nhau:
2) MCLR Reset during normal operation Reset khi chân MCLR=0 3) MCLR Reset during Sleep Reset trog trạng thái nghỉ 4) Watchdog Timer (WDT) Reset Reset bằng bộ watchdog 5) Programmable Brown-out Reset (BOR) Reset mức thấp
6) RESET Instruction Reset bởi lệnh trong program
7) Stack Full Reset, Stack Underflow Reset Reset khi tràn 8) Configuration Mismatch (CM)
Hình 3.3: Sơ đồ kết nối chân MCLR.
Ngõ vào Master Clear (MCLR) trên chân số 7 của vi điều khiển PIC. Khi đƣa MCLR xuống thấp, các thanh ghi bên trong vi điều khiển PIC sẽ đƣợc tải những giá trị thích hợp để khởi động lại hệ thống.
Đa số những thanh ghi trong pic không ảnh hƣởng bởi reset. Các thanh ghi bị ảnh hƣởng bởi reset có thể tra cứu trực tiếp trong datasheet.
3.2.5 Nguồn cấp
PIC18F67J60 vận hành với nguồn đơn 3.3V.
- Chân Vdd và chân Vref ( nguồn cho bộ ADC) : nối với VCC - 2 Chân Vss ( trong đó có 1 chân Vss cho bộ ADC) : nối với GND Cả 4 chân này phải đƣợc nối nguồn thì PIC mới hoạt động đƣợc.
PIC có tổng cộng 3 chế độ hoạt động Run, Idle mode với dòng ít hơn 5.8 µA và Sleep mode với dòng tiêu thụ chỉ 0.1 µA. Hai chế độ idle và sleep đƣợc kích hoạt để đƣa pic vào trạng thái tiết kiệm năng lƣợng.
3.2.6 Tổ chức bộ nhớ
PIC18F67J60 bao gồm 2 khối bộ nhớ riêng biệt: Bộ nhớ chƣơng trình và bộ nhớ dữ liệu RAM. Đối với kiến trúc Harvard, bộ nhớ dữ liệu và bộ nhớ chƣơng trình sử dụng các bus riêng biệt. Điều này cho phép truy nhập đồng thời hai không gian bộ nhớ.
Bộ nhớ chƣơng trình còn có các ngăn xếp (stack) với 32 mức. Vector reset đƣợc đặt ở địa chỉ 0000h và vector ngắt ngoại vi đƣợc đặt ở địa chỉ 0008h và 00018h. Khi PIC đƣợc reset thì chƣơng trình sẽ nhảy về vị trí vector reset và bắt đầu thực hiện tại đó.
Các vùng RAM đa mục đích (GPR – General Purpose RAM) có chiều rộng là 8 bit và đƣợc truy cập trực tiếp hoặc gián tiếp thông qua thanh ghi chức năng đặc biệt.
Các thanh ghi chức năng đặc biệt đƣợc sử dụng bởi bộ xử lý trung tâm và các hàm chức năng ngoại vi để điều khiển hoạt động của các thiết bị. Các thanh ghi chức năng đặc biệt đƣợc chia làm 2 loại, loại thứ nhất dùng cho các chức năng ngoại vi (ngắt, so sánh, điều biến xung PWM,...) loại thứ hai dùng cho các chức năng bên trong của vi điều khiển (các phép tính số học, truy xuất dữ liệu,... )
Bộ nhớ dữ liệu bao gồm 16 Bank: Bank 0, Bank 1 … Bank 15. Mỗi Bank có dung lƣợng 256 Bytes, bao gồm vùng RAM đa mục đích và vùng các thanh ghi chức năng đặc biệt SFRs (Special Function Registers).
Việc truy xuất đƣợc khái quát qua hình sau:
3.2.7 Capture /Compare /PWM ( CCP)
CCP (Capture/Compare/PWM) bao gồm các thao tác trên các xung đếm cung cấp bởi các bộ đếm Timer1, Timer2, Timer3 và Timer4.
PIC18F67J60 đƣợc tích hợp sẵn năm khối CCP: ECCP1, ECCP2, ECCP3, CCP4 và CCP5.Mỗi CCP có một thanh ghi 16 bit (CCPRxH:CCPRxL), pin điều khiển dùng cho khối CCPx là RC2/ECCP1/P1A, RC1/T1OSI/ECCP2/P2A, RD1/ECCP3/P3A, RD2/CCP4/P3D và RG4/CCP5/P1D. Các chức năng của CCP bao gồm:
- Capture.
- So sánh (Compare).
- Điều chế độ rộng xung PWM (Pulse Width Modulation).
Khi hoạt động ở chế độ Capture thì khi có một “hiện tƣợng” xảy ra tại pin CCPx, giá
trị của thanh ghi TMR1(hoặc TMR3) sẽ đƣợc đƣa vào thanh ghi CCPRx. Các “hiện tƣợng” đƣợc định nghĩa bởi các bit CCPxM<3:0> (CCPxCON<3:0>) và có thể là một trong các hiện tƣợng sau:
- Mỗi khi có cạnh xuống. - Mỗi khi có cạnh lên. - Mỗi cạnh lên thứ 4. - Mỗi cạnh lên thứ 16.
Hình 3.6: Cơ chế hoạt động chế độ Capture.
Sau khi giá trị của thanh ghi TMR1(hoặc TMR3) đƣợc đƣa vào thanh ghi CCPRx, cờ ngắt CCPIF đƣợc set và phải đƣợc xóa bằng chƣơng trình. Nếu hiện tƣợng tiếp theo xảy ra mà giá trị trong thanh ghi CCPRx chƣa đƣợc xử lí, giá trị tiếp theo nhận đƣợc sẽ tự động đƣợc ghi đè lên giá trị cũ.
Khi hoạt động ở chế độ Compare, giá trị trong thanh ghi CCPRx sẽ thƣờng xuyên
đƣợc so sánh với giá trị trong thanh ghi TMR1(hoặc TMR3). Khi hai thanh ghi chứa giá trị bằng nhau, các pin của CCP đƣợc thay đổi trạng thái (đƣợc đƣa lên mức cao, đƣa xuống mức thấp hoặc giữ nguyên trạng thái), đồng thời cờ ngắt CCPIF cũng sẽ đƣợc set. Sự thay đổi trạng thái của pin có thể đƣợc điều khiển bởi các bit CCPxM<3:0> (CCPxCON <3:0>).
Tƣơng tự nhƣ ở chế độ Capture, Timer1 phải đƣợc ấn định chế độ hoạt động là timer hoặc đếm đồng bộ. Ngoài ra, khi ở chế độ Compare, CCP có khả năng tạo ra hiện tƣợng đặc biệt (Special Event trigger) làm reset giá trị thanh ghi TMR1 và khởi động bộ chuyển đổi ADC. Điều này cho phép ta điều khiển giá trị thanh ghi TMR1 một cách linh động hơn.
Hình 3.7:Cơ chế hoạt động chế độ Compare.
Khi hoạt động ở chế độ PWM (Pulse Width Modulation: khối điều chế độ rộng xung),
tín hiệu sau khi điều chế sẽ đƣợc đƣa ra các pin của khối CCP (cần ấn định các pin này là output). Để sử dụng chức năng điều chế này trƣớc tiên ta cần tiến hành các bƣớc cài đặt sau:
1) Thiết lập thời gian của 1 chu kì của xung điều chế cho PWM (period) bằng cách đƣa giá trị thích hợp vào thanh ghi PR2 (PR4).
2) Thiết lập độ rộng xung cần điều chế (duty cycle) bằng cách đƣa giá trị vào thanh ghi CCPRxL và các bit CCPxCON<5:4>.
3) Điều khiển các pin của CCP là output bằng cách clear các bit tƣơng ứng trong thanh ghi TRISG.
4) Thiết lập giá trị bộ chia tần số prescaler của Timer2 (Timer4) và cho phép nó hoạt động bằng cách đƣa giá trị thích hợp vào thanh ghi TxCON.
5) Cho phép CCP hoạt động ở chế độ PWM.
Trong đó giá trị 1 chu kì (period) của xung điều chế đƣợc tính bằng công thức: Bộ chia tần số prescaler của Timer2 (Timer4) chỉ có thể nhận các giá trị 1, 4 hoặc 16. Khi giá trị thanh ghi PR2 (PR4) bằng với giá trị thanh ghi TMR2 (TMR4) thì quá trình sau xảy ra:
- Thanh ghi TMR2 (TMR4) tự động đƣợc xóa. - Pin của khối CCP đƣợc set.
- Giá trị thanh ghi CCPRxL (chứa giá trị ấn định độ rộng xung điều chế duty cycle) đƣợc đƣa vào thanh ghi CCPRxH.
Độ rộng của xung điều chế (duty cycle) đƣợc tính theo công thức: PWM period = [(PRx)+1]*4*TOSC*(giá trị bộ chia tần số củaTMRx).
PWM duty cycle = (CCPRxL:CCPxCON<5:4>)*TOSC*(giá trị bộ chia tần số TMRx)
Hình 3.8:Cơ chế hoạt động chế độ PWM.
Nhƣ vậy 2 bit CCPxCON<5:4> sẽ chứa 2 bit LSB. Thanh ghi CCPRxL chứa byte cao của giá trị quyết định độ rộng xung. Thanh ghi CCPRxH đóng vai trò là buffer cho khối PWM. Khi giá trị trong thanh ghi CCPRxH bằng với giá trị trong thanh ghi TMR2 và hai bit CCPxCON<5:4> bằng với giá trị 2 bit của bộ chia tần số prescaler, pin của khối CCP lại đƣợc đƣa về mức thấp, nhƣ vậy ta có đƣợc hình ảnh của xung điều chế tại ngõ ra của khối PWM.
3.2.8 Ngắt
Vi điều khiển PIC 18F67J60 có nhiều nguồn ngắt và ƣu tiên một số tính năng ngắt, cho phép hầu hết các nguồn ngắt đƣợc gán các mức ƣu tiên cao hoặc một mức ƣu tiên thấp. Vector ngắt ƣu tiên cao tại 0008h và ƣu tiên thấp tại 0018h. Sự kiện ngắt ƣu tiên cao sẽ làm gián đoạn ngắt ƣu tiên thấp bất chấp nó đang đƣợc thực hiện.
Có 13 thanh ghi đƣợc sử dụng để kiểm soát hoạt động ngắt. Những thanh ghi này là:
- RCON - INTCON - INTCON2 - INTCON3 - PIR1,PIR2,PIR3 - PIE1,PIE2,PIE3 - IPR1,IPR2,IPR3
Mỗi nguồn ngắt đều có 3 bit để kiểm soát hoạt động đó là: - Flag bit: chỉ ra rằng một sự kiện ngắt xảy ra.
- Enable bit: cho phép chƣơng trình thực hiện rẽ nhánh tới địa chỉ vector ngắt khi bit cờ đƣợc thiết lập.
- Priority bit: chọn ƣu tiên cao hoặc là ƣu tiên thấp.
3.2.9 Module A/D 10bit
Vi điều khiển PIC 18F67J60 có 11 kênh chuyển đổi A/D (analog-to-digital). Module ADC cho phép chuyển đổi một tín hiệu tƣơng tự đầu vào thành một giá trị số 10 bit tƣơng ứng ở đầu ra.
Module A/D có 5 thanh ghi:
Thanh ghi ADRESH (A/D Result High Register). Thanh ghi ADRESL (A/D Result Low Register). Thanh ghi ADCON0 (A/D Control Register 0). Thanh ghi ADCON0 (A/D Control Register 1). Thanh ghi ADCON0 (A/D Control Register 2).
Quá trình chuyển đổi A/D:
- Bƣớc 1: Cấu hình cho module A/D
Thiết lập thanh ghi ADCON1 (cấu hình chân analog, VREF, Digital I/O). Thiết lập thanh ghi ADCON0 (cho phép bộ A/D hoạt động, chọn kênh A/D
đầu vào).
Thiết lập thanh ghi ADCON2 (chọn xung clock cho bộ A/D, acquisition time). - Bƣớc 2: Cấu hình ngắt A/D (nếu sử dụng)
Xóa bit ADIF. Set bit ADIE. Set bit GIE.
- Bƣớc 3: Chờ acquisition time đƣợc yêu cầu (nếu đƣợc yêu cầu). - Bƣớc 4: Bắt đầu chuyển đổi, set bit ADCON0<1>.
- Bƣớc 5: Chờ quá trình chuyển đổi A/D hoàn thành bằng việc chờ cho đến khi bit ADCON0<1> bị xóa hoặc chờ ngắt A/D.
- Bƣớc 6: Đọc kết quả các thanh ghi (ADRESH:ADRESL), xóa bit ADIF nếu đƣợc yêu cầu.
- Bƣớc 7: Để thực hiện quá trình chuyển đổi tiếp theo, quay lại bƣớc 1 hoặc bƣớc 2.
3.2.10Module Ethernet
Vi điều khiển PIC18F67J60 đƣợc tích hợp sẵn module điều khiển Ethernet. Đây là một giải pháp kết nối hoàn chỉnh, bao gồm cả module Media Access Control (MAC) và Physical Layer transceiver (PHY). Module Ethernet đáp ứng tất cả các chuẩn IEEE 802.3 cho kết nối 10-BaseT cáp đôi xoắn. Có hai led output để báo liên kết và trạng thái hoạt động của mạng.
Module Ethernet gồm 5 khối chức năng chính:
- Khối truyền nhận PHY sẽ mã hóa và giải mã dữ liệu gửi hoặc nhận ở đầu RJ45. - Khối MAC phù hợp với chuẩn IEEE 802.3 cung cấp MIIP ( Media Independent
Interface Management ) để điều khiển PHY.
- Một bộ đệm RAM 8Kbyte để lƣu trữ các gói tin truyền nhận.
- Một khối phân xử để điều khiển sự truy cập vào bộ đệm RAM khi đƣợc DMA, khối truyền nhận yêu cầu.
- Thanh ghi giao tiếp có chức năng thông dịch những dòng lệnh và tín hiệu trạng thái nội giữa module Ethernet và các thanh ghi đặc biệt của vi điều khiển SFRS.
CHƢƠNG 4: XÂY DỰNG THUẬT TOÁN CHƠI CỜ 4.1 Dạng trò chơi
Các trò chơi đấu trí nhƣ cờ Vua, cờ Tƣớng, cờ vây, cờ caro (go-moku), cờ gánh... còn gọi là các trò chơi đối kháng, diễn ra giữa hai đấu thủ. Các trò chơi đó đều có thể chuyển về một dạng bài toán tìm kiếm đặc biệt: tìm đƣờng đi đến các điểm cao nhất giữa hai đấu thủ. Đặc điểm của các trò chơi trên nhƣ sau:
Có hai đấu thủ, mỗi ngƣời chỉ đi một nƣớc khi tới lƣợt. Các đấu thủ đều biết mọi thông tin về tình trạng trận đấu.
Trận đấu không kéo dài vô tận, phải diễn ra hòa, hoặc một bên thắng và bên kia thua.