Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
257,14 KB
Nội dung
Hình 2.31 Sơ đồ khối MSSP (I2C Master mode) I2C Master đóng vai trò tích cực trình giao tiếp điều khiển I2C Slave thông qua việc chủ động tạo xung giao tiếp điều kiện Start, Stop truyền nhận liệu Một byte liệu bắt đầu điều kiện Start, kết thúc điều kiện Stop bắt đầu kết thúc với điều kiện khởi động lặp lại (Repeated Start Condition) Xung giao tiếp nối tiếp tạo từ BRG (Baud Rate Generator), giá trị ấn định tần số xung clock nối tiếp lấy từ bit thấp ghi SSPADD Khi liệu đưa vào ghi SSPBUF, bit BF set BRG tự động đếm ngược dừng lại, pin SCL giữ nguyên trạng thái trước đó.Khi liệu đưa vào, BRG cần khoảng thời gian TBRG tự động reset lại giá trị để tiếp tục trình đếm ngược Mỗi vòng lệnh (có thời gian TCY ) BRG giảm giá trị lần Hình 2.32 Sơ đồ khối BRG (Baud Rate Benerator) I2C Master mode Các giá trị cụ thể tần số xung nối tiếp BRG tạo liệt kê bảng sau: Trong giá trị BRG giá trị lấy từ bit thấp ghi SSPADD Do I2C chế độ Master mode, ghi SSPADD không sử dụng để chứa địa chỉ, thay vào chức SSPADD ghi chứa giá trị BRG Để tạo điều kiện Start, trước hết cần đưa hai pin SCL SDA lên mức logic cao bit SEN (SSPCON2) phải set Khi BRG tự động đọc giá trị bit thấp ghi SSPADD bắt đầu đếm Sau khoảng thời gian TBRG, pin SDA đưa xuống mức logic thấp Trạng thái pin SDA mức logic thấp pin SCL mức logic cao điều kiện Start I2C Master mode Khi bit S (SSPSTAT) set Tiếp theo BRG tiếp tục lấy giá trị từ ghi SSPADD để tiếp tục trình đếm, bit SEN tự động xóa cờ ngắt SSPIF set Trong trường hợp pin SCL SDA trạng thái logic thấp, trình tạo điều kiện Start, pin SCL đưa trạng thái logic thấp trước pin SDA đưa trang thái logic thấp, điều kiện Start không hình thành, cờ ngắt BCLIF set I2C trạng thái tạm ngưng hoạt động (Idle) Hình 2.33 Giản đồ xung I2C Master mode trình tạo điều kiện Start Tín hiệu Stop đưa pin SDA kết thức liệu cách set bit PEN (SSPCON2) Sau cạnh xuống xung clock thứ với tác động bit điều khiển PEN, pin SDA đưa xuống mức thấp, BRG lại bắt đầu trình đếm Sau khoảng thời gian TBRG, pin SCL đưa lên mức logic cao sau khoảng thời gian TBRG pin SDA đưa lên mức cao Ngay thời điểm bit P (SSPSTAT) set, nghóa điều kiện Stop tạo Sau khoảng thời gian TBRG nữa, bit PEN tự động xóa cờ ngắt SSPIF set Hình 2.34 Giản đồ xung I2C Master mode trình tạo điều kiện Stop Để tạo diều kiện Start lặp lại liên tục trình truyền liệu, trước hết cần set bit RSEN (SSPCON2) Sau set bit RSEN, pin SCL đưa xuống mức logic thấp, pin SDA đưa lên mức logic cao, BRG lấy giá trị từ ghi SSPADD vào để bắty đầu trình đếm Sau khoảng thời gian TBRG, pin SCL đưa lên mức logic cao khoảng thời gian TBRG Trong khoảng thời gian TBRG kế tiếp, pin SDA lại đưa xuống mức logic thấp SCL giữ mức logic cao Ngay thời điểm bit S (SSPSTAT) set để báo hiệu điều kiện Start hình thành, bit RSEN tự động xóa cờ ngắt SSPIF set sau khoảng thời gian TBRG Lúc địa I2C Slave đưa vào ghi SSPBUF, sau ta việc đưa tiếp địa liệu vào ghi SSPBUF nhận tín hiệu từ I2C Slave, I2C Master tự động tạo tín hiệu Start lặp lại liên tục cho trình truyền liệu liên tục Cần ý trình tự sai trình tạo điều kiện Start lặp lại làm cho bit BCLIF set I2C đưa trạng thái “Idle” Hình 2.35 Giản đồ xung I2C Master mode trình tạo điều kiện Start liên tục Xét trình truyền liệu, xung clock đưa từ pin SCL liệu đưa từ pin SDA Byte liệu phải byte địa xác định I2C Slave cần giao tiếp bit (trong trường hợp = 0) Đầu tiên giá trị địa đưa vào ghi SSPBUF, bit BF tự động set lên đếm tạo xung clock nối tiếp BRG (Baud Rate Generator) bắt đầu hoạt động Khi bit liệu (hoặc địa bit ) dịch theo cạnh xuống xung clock sau cạnh xuống pin SCL nhận diện (điều kiện Start), BRG bắt đầu đếm ngược Khi tất bit byte liệu được đưa ngoài, đếm BRG mang giá trị Sau đó, cạnh xuống xung clock thứ 8, I2C Master ngưng tác động lên pin SDA để chờ đợi tín hiệu từ I2C ) Tại cạnh xuống xung clock thứ 9, I2C Master lấy mẫu tín Slave (tín hiệu xung hiệu từ pin SDA để kiểm tra xem địa I2C Slave nhận dạng chưa, trạng thái đưa vào bit ACKSTAT (SSPCON2) Cũng thời điểm cạnh xuống xung clock thứ 9, bit BF tự động clear, cờ ngắt SSPIF set BRG tạm ngưng hoạt động liệu địa đưa vào ghi SSPBUF, liệu địa tiếp tục truyền cạnh xuống xung clock Hình 2.36 Giản đồ xung I2C Master mode trình truyền liệu Xét trình nhận liệu chế độ I2C Master mode Trước tiên ta cần set bit cho phép nhận liệu RCEN (SSPCON2) Khi BRG bắt đầu trình đếm, liệu dịch vào I2C Master qua pin SDA cạnh xuống pin SCL Tại cạnh xuống xung clock thứ 8, bit cờ hiệu cho phép nhận RCEN tự động xóa, liệu ghi SSPSR đưa vào ghi SSPBUF, cờ hiệu BF set, cờ ngắt SSPIF set, BRG ngưng đếm pin SCL đưa mức logic thấp Khi MSSP trạng thái tạm ngưng hoạt động để chờ đợi lệnh Sau đọc giá trị ghi SSPBUF, cờ hiệu BF tự cách set bit ACKEN (SSPCON2) động xóa Ta gửi tín hiệu Hình 2.37 Giản đồ xung I2C Master mode trình nhận liệu 2.13 CỔNG GIAO TIẾP SONG SONG PSP (PARALLEL SLAVE PORT) Ngoài cổng nối tiếp giao điện nối tiếp trình bày phần trên, vi điều khiển PIC16F877A hỗ trợ cổng giao tiếp song song chuẩn giao tiếp song song thông qua PORTD PORTE Do cổng song song hoạt động chế độ Slave mode nên vi điều khiển giao tiếp qua giao diện chịu điều khiển thiết bị bên thông qua pin PORTE, liệu đọc ghi theo dạng bất đồng thông qua pin PORTD Bit điều khiển PSP PSPMODE (TRISE) PSPMODE set thiết lập chức pin PORTE pin cho phép đọc liệu ( ), cho phép ghi liệu ( ) pin chọn vi điều khiển ( ) phục vụ cho việc truyền nhận liệu song song thông qua bus liệu bit PORTD PORTD lúc đóng vai trò ghi chốt liệu bit, đồng thời tác động ghi TRISD bỏ qua PORTD lúc chịu điều khiển thiết bị bên PORTE chịu tác động ghi TRISE, cần xác lập trạng thái pin PORTE input cách set bit TRISE Ngoài cần đưa giá trị thích hợp bit PCFG3:PCFG0 (thanh ghi ADCON1) để ấn định pin PORTE pin I/O dạng digital (PORTE pin chức khối ADC) Khi pin mức thấp, liệu từ bên ghi lên PORTD Khi hai pin chuyển lên mức logic cao, cờ hiệu báo liệu buffer đầy BIF (TRISE) set cờ ngắt PSPIF (PIR1) set để báo hiệu kết thúc ghi liệu Bit BIF xóa liệu vừa nhận PORTD đọc vào Bit báo hiệu liệu nhận buffer bị tràn IBOV (TRISE) set vi điều khiển nhận tiếp liệu chưa đọc vào liệu nhận trước Khi pin mức logic thấp, bit báo hiệu buffer truyền liệu đầy BOF (TRISE) xóa để báo hiệu PORTD sẵn sàng cho trình đọc liệu Khi hai pin chuyển sang mức logic cao, cờ ngắt PSPIF Hình 2.38 Sơ đồ khối PORTD PORTE hoạt động chế độ PSP Slave mode set để báo hiệu trình đọc liệu hoàn tất Bit BOF giữ mức logic liệu đưa vào PORTD Cần ý ngắt SSPIF điều khiển bit PSPIE (PIE1) phải xóa chương trình Các ghi liên quan đến PSP bao gồm: Thanh ghi PORTD (địa 08h): chứa liệu cần đọc ghi Thanh ghi PORTE (địa 09h): chứa giá trị pin PORTE Thanh ghi TRISE (địa 89h): chứa bit điều khiển PORTE PSP Thanh ghi PIR1 (địa 0Ch): chứa cờ ngắt PSPIF Thanh ghi PIE1 (địa 8Ch): chứa bit cho phép ngắt PSP Thanh ghi ADCON1 (địa 9Fh): điều khiển khối ADC PORTE Chi tiết ghi trình bày cụ thể phụ lục 2.14 TỔNG QUAN VỀ MỘT SỐ ĐẶC TÍNH CỦA CPU 2.14.1 CONFIGURATION BIT Đây bit dùng để lựa chọn đặc tính CPU Các bit chứa nhớ chương trình địa 2007h truy xuất trình lập trình cho vi điều khiển Chi tiết bit sau: Bit 13 CP: (Code Protection) 1: tắt chế độ bảo vệ mã chương trình 0: bật chế độ bảo vệ mã chương trình Bit 12, 5, 4: không quan tâm mặc định mang giá trị Bit 11 DEBUG (In-circuit debug mode bit) 1:không cho phép, RB7 RB6 xem pin xuất nhập bình thường 0:cho phép, RB7 RB6 pin sử dụng cho trình debug Bit 10-9 WRT1:WRT0 Flash Program Memory Write Enable bit 11: Tắt chức chống ghi, EECON điều khiển trình ghi lên toàn nhớ chương trình 10: chống từ địa 0000h:00FFh 01: chống ghi từ địa 0000h:07FFh 00: chống ghi từ địa 0000h:0FFFh Bit CPD Data EEPROM Memory Write Protection bit 1: Tắt chức bảo vệ mã EEPROM 0: Bật chức bảo vệ mã Bit LVP Low-Voltage (Single supply) In-Circuit Serial Programming Enable bit 1: Cho phép chế độ nạp điện áp thấp, pin RB3/PGM sử dụng cho chế độ 0: Không cho phép chế độ nạp điện áp thấp, điện áp cao đưa vào từ pin , pin RB3 pin I/O bình thường Bit BODEN Brown-out Reset Enable bit 1: cho phép BOR (Brown-out Reset) 0: không cho pheùp BOR Bit Power-up Timer Enable bit 1: không cho phép PWR 0: cho phép PWR Bit WDTEN Watchdog Timer Enable bit 1: cho pheùp WDT 0: không cho phép WDT Bit 1-0 FOSC1:FOSC0 lựa chọn loại oscillator 11: sử dụng RC oscillator 10: sử dụng HS oscillator 01: sử dụng XT oscillator 00: sử dụng LP oscillator Chi tiết đặc tính đề cập cụ thể phần 2.14.2 CÁC ĐẶC TÍNH CỦA OSCILLATOR PIC16F877A có khả sử dụng loại oscillator, là: LP: (Low Power Crystal) XT: Thạch anh bình thường HS: (High-Speed Crystal) RC: (Resistor/Capacitor) dao động mạch RC tạo Đối với loại oscillator LP, HS, XT, oscillator gắn vào vi điều khiển thông qua pin OSC1/CLKI OSC2/CLKO Đối với ứng dụng không cần loại oscillator tốc độ cao, ta sử dụng mạch dao động RC làm nguồn cung cấp xung hoạt động cho vi vi điều khiển Tần số tạo phụ thuộc vào giá trị điện áp, giá trị điện trở tụ điện, bên cạnh ảnh hưởng yếu tố nhiệt độ, chất Hình 2.39 RC oscillator lượng linh kiện Các linh kiện sử dụng cho mạch RC oscillator phải bảo đảm giá trị sau: K < REXT < 100 K CEXT >20 pF 2.14.3 CÁC CHẾ ĐỘRESET Có nhiều chế độ reset vi điều khiển, bao gồm: Power-on Reset POR (Reset cấp nguồn hoạt động cho vi điều khiển) reset trình hoạt động từ chế độ sleep WDT reset (reset khối WDT tạo trình hoạt động) WDT wake up từ chế độ sleep Brown-out reset (BOR) Ngoại trừ reset POR trạng thái ghi không xác định vàWDT wake up không ảnh hưởng đến trạng thái ghi, chế độ reset lại đưa giá trị thị trạng thái hoạt động, ghi giá trị ban đầu ấn định sẵn Các bit trạng thái reset vi điều khiển điều khiển CPU reset: Khi pin mức logic thấp, vi điều khiển reset Tín hiệu reset cung cấp mạch ngoại vi với yêu cầu cụ thể sau: Không nối pin trực tiếp lên nguồn VDD R1 phải nhỏ 40 K để đảm bảo đặc tính điện vi điều khiển R2 phải lớn K để hạn dòng Hình 2.40 Mạch reset qua pin vào vi điều khiển reset chống nhiễu lọc để tránh tín hiệu nhỏ tác động lên pin Power-on reset (POR): Đây xung reset vi điều khiển tạo phát nguồn cung cấp VDD Khi hoạt động chế độ bình thường, vi điều khiển cần đảm bảo thông số dòng điện, điện áp để hoạt động bình thường Nhưng tham số không đảm bảo, xung reset POR tạo đưa vi điều khiển trạng thái reset tiếp tục hoạt động tham số đảm bảo Power-up Timer (PWRT): định thời hoạt động dựa vào mạch RC bên vi điều khiển Khi PWRT kích hoạt, vi điều khiển đưa trạng thái reset PWRT tạo khoảng thời gian delay (khoảng 72 ms) để VDD tăng đến giá trị thích hợp Oscillator Start-up Timer (OST): OST cung cấp khoảng thời gian delay 1024 chu kì xung oscillator sau PWRT ngưng tác động (vi điều khiển đủ điều kiện hoạt động) để đảm bảo ổn định xung oscillator phát Tác động OST xảy POR reset vi điều khiển đánh thức từ chế đợ sleep OST tác động lọai oscillator XT, HS LP Brown-out reset (BOR): Nếu VDD hạ xuống thấp giá trị VBOR (khoảng 4V) kéo dài khoảng thời gian lớn TBOR (khoảng 100 us), BOR kích hoạt vi điều khiển đưa trạng thái BOR reset Nếu điện áp cung cấp cho vi điều khiển hạ xuống thấp VBOR khoảng thời gian ngắn TBOR, vi điều khiển không reset Khi điện áp cung cấp đủ cho vi điều khiển hoạt động, PWRT kích hoạt để tạo khoảng thời gian delay (khoảng 72ms) Nếu khoảng thời gian điện áp cung cấp cho vi điều khiển lại tiếp tục hạ xuống mức điện áp VBOR, BOR reset lại kích hoạt vi điều khiển đủ điện áp hoạt động Một điểm cần ý BOR reset cho phép, PWRT hoạt động bất chấp trạng thái bit PWRT Tóm lại để vi điều khiển hoạt động từ cấp nguồn cần trải qua bước sau: POR tác động PWRT (nếu cho phép hoạt động) tạo khoảng thời gian delay TPWRT để ổn định nguồn cung cấp OST (nếu cho phép) tạo khoảng thời gian delay 1024 chu kì xung oscillator để ổn định tần số oscillator Đến thời điểm vi điều khiển bắt đầu hoạt động bình thường Thanh ghi điều khiển thị trạng thái nguồn cung cấp cho vi điều khiển ghi PCON (xem phụ lục để biết thêm chi tiết) Hình 2.41 Sơ đồ chế độ reset PIC16F877A 2.14.4 NGẮT (INTERRUPT) PIC16F877A có đến 15 nguồn tạo hoạt động ngắt điều khiển ghi INTCON (bit GIE) Bên cạnh ngắt có bit điều khiển cờ ngắt riêng Các cờ ngắt set bình thường thỏa mãn điều kiện ngắt xảy bất chấp trạng thái bit GIE, nhiên hoạt động ngắt phụ thuôc vào bit GIE bit điều khiển khác Bit điều khiển ngắt RB0/INT TMR0 nằm ghi INTCON, ghi chứa bit cho phép ngắt ngoại vi PEIE Bit điều khiển ngắt nằm ghi PIE1 PIE2 Cờ ngắt ngắt nằm ghi PIR1 PIR2 Trong thời điểm có chương trình ngắt thực thi, chương trình ngắt kết thúc lệnh RETFIE Khi chương trình ngắt thực thi, bit GIE tự động xóa, địa lệnh chương trình cất vào nhớ Stack đếm chương trình đến địa 0004h Lệnh RETFIE dùng để thoát khỏi chương trình ngắt quay trở chương trình chính, đồng thời bit GIE set phép ngắt hoạt động trở lại Các cờ hiệu dùng để kiểm tra ngắt xảy phải xóa chương trình trước cho phép ngắt tiếp tục hoạt động trở lại để ta phát thời điểm mà ngắt xảy Đối với ngắt ngoại vi ngắt từ chân INT hay ngắt từ thay đổi trạng thái pin PORTB (PORTB Interrupt on change), việc xác định ngắt xảy cần chu kì lệnh tùy thuộc vào thời điểm xảy ngắt Cần ý trình thực thi ngắt, có giá trị đếm chương trình cất vào Stack, số ghi quan trọng không cất bị thay đổi giá trị trình thực thi chương trình ngắt Điều nên xử lí chương trình để tránh tượng xảy Hình 2.42 Sơ đồ logic tất ngắt vi điều khiển PIC16F877A 2.14.4.1 NGẮT INT Ngắt dựa thay đổi trạng thái pin RB0/INT Cạnh tác động gây ngắt cạnh lên hay cạnh xuống điều khiển bit INTEDG (thanh ghi OPTION_ REG ) Khi có cạnh tác động thích hợp xuất pin RB0/INT, cờ ngắt INTF set bất chấp trạng thái bit điều khiển GIE PEIE Ngắt có khả đánh thức vi điều khiển từ chế độ sleep bit cho phép ngắt set trước lệnh SLEEP thực thi 2.14.4.2 NGẮT DO SỰ THAY ĐỔI TRẠNG THÁI CÁC PIN TRONG PORTB Các pin PORTB dùng cho ngắt điều khiển bit RBIE (thanh ghi INTCON) Cờ ngắt ngắt bit RBIF (INTCON) 2.14.5 WATCHDOG TIMER (WDT) Watchdog timer (WDT) đếm độc lập dùng nguồn xung đếm từ tạo xung tích hợp sẵn vi điều khiển không phụ thuộc vào nguồn xung clock ngoại vi Điều có nghóa WDT hoạt động xung clock lấy từ pin OSC1/CLKI pin OSC2/CLKO vi điều khiển ngưng hoạt động (chẳng hạn tác động lệnh sleep) Bit điều khiển WDT bit WDTE nằm nhớ chương trình địa 2007h (Configuration bit) WDT tự động reset vi điều khiển (Watchdog Timer Reset) đếm WDT bị tràn (nếu WDT cho phép hoạt động), đồng thời bit tự động xóa Nếu vi điều khiển chế độ sleep WDT đánh thức vi điều khiển (Watchdog Timer Wake-up) đếm bị tràn Như WDT có tác dụng reset vi điều khiển thời điểm cần thiết mà không cần đến tác động từ bên ngoài, chẳng hạn trình thực thi lệnh, vi điều khiển bị “kẹt” chổ mà không thoát đươc, vi điều khiển tự động reset WDT bị tràn ể chương trình hoạt động trở lại Tuy nhiên sử dụng WDT có phiền toái vi điều khiển thường xuyên reset sau thời gian định, đói cần tính toán thời gian thích hợp để xóa WDT (dùng lệnh CLRWDT) Và để việc ấn định thời gian reset linh động, WDT hỗ trợ chia tần số prescaler điều khiển ghi OPTION_REG (prescaler chia xẻ với Timer0) Một điểm cần ý lệnh sleep xóa đếm WDT prescaler Ngoài lệnh xóa CLRWDT xóa đếm không làm thay đổi đối tượng tác động prescaler (WDT hay Timer0) Xem lại Timer0 ghi OPTION_REG (phụ lục 2) để biết thêm chi tiết 2.14.6 CHẾ ĐỘ SLEEP Đây chế độ hoạt động vi điều khiển lệnh SLEEP thực thi Khi cho phép hoạt động, đếm WDT bị xóa WDT tiếp tục hoạt động, (STATUS) reset 0, bit set, oscillator ngưng tác động bit PORT giữ nguyên trạng thái trước lệnh SLEEP thực thi Do chế độ SLEEP, dòng cung cấp cho vi điều khiển nhỏ nên ta cần thực bước sau trước vi điều khiển thực thi lệnh SLEEP: Đưa tất pin trạng thái VDD VSS Cần bảo đảm không cò mạch ngoại vi điều khiển dòng điện vi điều khiển dòng điện nhỏ không đủ khả cung cấp cho mạch ngoại vi hoạt động Tạm ngưng hoạt động củ khối A/D không cho phép xung clock từ bên tác động vào vi điều khiển Để ý đến chức kéo lên điện trở PORTB Pin phải mức logic cao 2.14.6.1 “ĐÁNH THỨC” VI ĐIỀU KHIỂN Vi điều khiển “đánh thức” tác động số tượng sau: Tác động reset ngoại vi thông qua pin Tác động WDT bị tràn Tác động từ ngắt ngoại vi từ PORTB (PORTB Interrupt on change pin INT) Các bit dùng để thể trạng thái vi điều khiển để phát nguồn tác động làm reset vi điều khiển Bit set vi điều khiển cấp nguồn reset vi điều khiển chế độ sleep Bit reset WDT tác động đếm bị tràn Ngoài có số nguồn tác động khác từ chức ngoại vi bao gồm: Đọc hay ghi liệu thông qua PSP (Parallel Slave Port) Ngắt Timer1 hoạt động chế độ đếm bất đồng Ngắt CCP hoạt động chế độ Capture Các tượng đặc biệt làm reset Timer1 hoạt động chế độ đếm bất đồng dùng nguồn xung clock bên ngoài) Ngắt SSP bit Start/Stop phát SSP hoạt động chế độ Slave mode truyền nhận liệu Tác động USART từ pin RX hay TX hoạt động chế độ Slave mode đồng Khối chuyển đổi A/D nguồn xung clock hoạt động dạng RC Hoàn tất trình ghi vào EEPROM 10 Ngõ so sánh thay đổi trạng thái Các tác động ngoại vi khác tác dụng đánh thức vi điều khiển chế độ sleep xung clock cung cấp cho vi điều khiển ngưng hoạt động Bên cạnh cần cho phép ngắt hoạt động trước lệnh SLEEP thực thi để bảo đảm tác động ngắt Việc đánh thức vi điều khiển từ ngắt thực thi bất chấp trạng thái bit GIE Nếu bit GIE mang giá trị 0, vi điều khiển thực thi lệnh sau lệnh SLEEP chương trình (vì chương trình ngắt không cho phép thực thi) Nếu bit GIE set trước lệnh SLEEP thực thi, vi điều khiển thực thi lệnh chương trình sau nhảy tới địa chứa chương trình ngắt (0004h) Trong trường hợp lệnh không đóng vai trò quan trọng chương trình, ta cần đặt thêm lệnh NOP sau lệnh SLEEP để bỏ qua tác động lệnh này, đồng thời giúp ta dễ dàng việc kiểm soát hoạt động chương trình ngắt Tuy nhiên có số điểm cần lưu ý sau: Nếu ngắt xảy trước lệnh SLEEP thực thi, lệnh SLEEP không thực thi thay vào lệnh NOP, đồng thời tác động lệnh SLEEP bỏ qua Nếu ngắt xảy hay sau lệnh SLEEP thực thi, vi điều khiển đánh thức từ chế độ sleep, lệnh SLEEP thực thi sau vi điều khiển đánh thức Nếu bit Để kiểm tra xem lệnh SLEEP thực thi hay chưa, ta kiểm tra bit mang giá trị tức lệnh SLEEP không thực thi thay vào lệnh NOP Bên cạnh ta cần xóa WDT để chắn WDT xóa trước thực thi lệnh SLEEP, qua cho phép ta xác định thời điểm vi điều khiển đánh thức tác động WDT CHƯƠNG TẬP LỆNH CỦA VI ĐIỀU KHIỂN PIC 3.1 VÀI NÉT SƠ LƯC VỀ TẬP LỆNH CỦA VI ĐIỀU KHIỂN PIC Như trình bày chương 1, PIC vi điều khiển có tập lệnh rút gọn RISC (Reduced Instruction Set Computer), bao gồm 35 lệnh phân thành nhóm bản: Nhóm lệnh thao tác bit Nhóm lệnh thao tác byte Nhóm lệnh điều khiển Đối với dòng vi điều khiển PIC16Fxxx, lệnh mã hóa thành 14 bit word, bao gồm bit opcode (dùng để xác định lệnh mã hóa) bit mô tả hay vài tham số lệnh Đối với nhóm lệnh thao tác byte, ta có tham số f (xác định địa byte cần thao tác) d (xác định nơi chứa kết thực thi lệnh) Nếu d = 0, kết đưa vào ghi W Nếu d = 1, kết đưa vào ghi mô tả tham số f Đối với nhóm lệnh thao tác bit, ta có hai tham số b (xác định bit cần thao tác) f (xác định địa byte liệu cần thao tác) Hình 3.1 Cơ chế mã hóa lệnh PIC16Fxxx Đối với nhóm lệnh điều khiển có tham số k (k bit trường hợp lệnh bình thường hay 11 bit trường hợp lệnh CALL lệnh GOTO) dùng để mô tả đối tượng tác động vi điều khiển (một label, số đó) Mỗi lệnh vi điều khiển thực thi xong vòng chu kì lệnh, ngoại trừ lệnh làm thay đổi giá trị đếm chương trình PC cần chu kì lệnh Một chu kì lệnh gồm xung clock oscillator Ví dụ ta sử dụng oscillator có tần số MHz tần số thực thi lệnh 4MHz/4 = MHz, chu kì lệnh có thời gian uS Các lệnh thao tác ghi thực chế Read-Modify-Write, tức ghi đọc, liệu thao tác kết đưa vào ghi chứa kết (nơi chứa kết tùy thuộc vào lệnh thực thi tham số d) Ví dụ thưc thi lệnh “CLRF PORTB”, vi điều khiển đọc giá trị ghi PORTB, xóa tất bit ghi kết trở lại ghi PORTB Sau ta sâu vào cấu trúc, cú pháp tác động cụ thể lệnh 3.2 TẬP LỆNH CỦA VI ĐIỀU KHIỂN PIC 3.2.1 Lệnh ADDLW 3.2.5 Lệnh BCF Cú pháp: ADDLW k (0 ≤ k≤255) Tác dụng: cộng giá trị k vào ghi W, kết chứa ghi W Bit trạng thái: C, DC, Z Cú pháp: BCF f,b (0≤f≤127, 0≤b≤7) Tác dụng: xóa bit b ghi f giá trị Bit trạng thái: 3.2.2 Lệnh ADDWF 3.2.6 Lệnh BSF Cú pháp: ADDWF f,d (0≤f≤255, d∈[0,1]) Tác dụng: cộng giá trị hai ghi W ghi f Kết chứa ghi W d = ghi f d =1 Bit trạng thái: C, DC, Z Cú pháp: BSF f,b (0≤f≤127, 0≤b≤7) Tác dụng: set bit b trnh ghi f Bit trạng thái: 3.2.7 Lệnh BTFSS Cú pháp: ANDLW k (0≤k≤255) Tác dụng: thực phép toán AND ghi ¦ giá trị k, kết chứa ghi W Bit trạng thái: Z Cú pháp: BTFSS f,b (0≤f≤127, 0≤b≤7) Tác dụng: kiểm tra bit b ghi f Nếu bit b 0, lệnh thực thi Nếu bit b 1, lệnh bỏ qua thay vào lệnh NOP Bit trạng thái: 3.2.4 Lệnh ANDWF 3.2.8 Lệnh BTFSC 3.2.3 Lệnh ANDLW Cú pháp: ANDWF f,d (0≤f≤127, d ∈[0,1]) Tác dụng: thực phép toán AND giá trị chứa hai ghi W f Kết đưa vào ghi W d=0 ghi f d = Bit trạng thái: Z Cú pháp: BTFSC f,b (0≤f≤127, 0≤b≤7) Tác dụng: kiểm tra bit b ghi f Nếu bit b 1, lệnh thực thi Nếu bit b 0, lệnh bỏ qua thay vào lệnh NOP Bit trạng thái: 3.2.9 Lệnh CALL Cú pháp: CALL k (0≤k≤2047) Tác dụng: gọi chương trình Trước hết địa quay trở từ chương trình (PC+1) cất vào Stack, giá trị địa đưa vào đếm gồm 11 bit biến k bit PCLATH Bit trạng thái: 3.2.14 Lệnh DECF Cú pháp: DECF f,d (0≤f≤127, d∈[0,1]) Tác dụng: giá trị ghi f giảm đơn vị Kết đưa vào ghi W d = ghi f d = Bit trạng thái: Z 3.2.10 Lệnh CLRF Cú pháp CLRF f (0≤f≤127) Tác dụng: xóa ghi f bit Z set Bit trạng thái: Z 3.2.15 Lệnh DECFSZ Cú pháp: DECFSZ f,d Cú pháp CLRW Tác dụng: xóa ghi W bit Z set Bit trạng thái: Z (0≤f≤127, d∈[0,1]) Tác dụng: gía trị ghi f giảm đơn vị Nếu kết sau giảm khác 0, lệnh thực thi, kết 0, lệnh không thực thi thay vào lệnh NOP Kết đưa vào ghi W d = ghi f d = Bit trạng thái: 3.2.12 Lệnh CLRWDT 3.2.16 Lệnh GOTO Cú pháp: CLRWDT Tác dụng: reset Watchdog Timer, đồng thời prescaler reset, bit set lên Bit trạng thái: , Cú pháp: GOTO k (0≤k≤2047) Tác dụng: nhảy tới label định nghóa tham số k bit PCLATH Bit trạng thái: 3.2.13 Lệnh COMF Cú pháp: COMF f,d 3.2.17 Lệnh INCF (0≤f≤127, d∈[0,1]) Tác dụng: đảo bit ghi f Kết đưa vào ghi W d=0 ghi f d=1 Bit trạng thái: Z Cú pháp: INCF f,d 3.2.11 Lệnh CLRW (0≤f≤127, d ∈[0,1]) Tác dụng: tăng giá trị ghi f lên đơn vị Kết đưa vào ghi W d = ghi f d = Bit trạng thái: Z ... xác định thời điểm vi điều khiển đánh thức tác động WDT CHƯƠNG TẬP LỆNH CỦA VI ĐIỀU KHIỂN PIC 3.1 VÀI NÉT SƠ LƯC VỀ TẬP LỆNH CỦA VI ĐIỀU KHIỂN PIC Như trình bày chương 1, PIC vi điều khiển có... ghi quan trọng không cất bị thay đổi giá trị trình thực thi chương trình ngắt Điều nên xử lí chương trình để tránh tượng xảy Hình 2 .42 Sơ đồ logic tất ngắt vi điều khiển PIC1 6F877A 2. 14. 4.1... cho vi điều khiển ghi PCON (xem phụ lục để biết thêm chi tiết) Hình 2 .41 Sơ đồ chế độ reset PIC1 6F877A 2. 14. 4 NGẮT (INTERRUPT) PIC1 6F877A có đến 15 nguồn tạo hoạt động ngắt điều khiển ghi INTCON