vi xu ly

Màu nền
Font chữ
Font size
Chiều cao dòng

CÂU 1: TRÌNH BÀY CẤU TRÚC VÀ H/Đ CỦA PIC 16F84

PIC 16F84 có các đặc tính:

Có 35 lệnh,câu lệnh chỉ cần 1 chu kì máy,câu lệnh nhảy cần 2 chu kì máy,tần số tối đa 20 Mhz và chu kì máy là 200 ns.bộ nhớ chương trình 1k x 14 words,bộ nhớ ram là 68 byte,bộ nhớ dữ liệu dạng EEPROM là 64 byte.chiều dài câu lệnh là 1 word 14 bit,xử lí dữ liệu dạng 8 bit.có 15 thanh ghi chuyên dụng SFR đặt trong bộ nhớ ram

-dùng ngăn xếp để cất giữ địa chỉ lệnh,ngăn xếp sâu đến 8 lớp.

-có thể truy cập bộ nhớ dùng địa chỉ trực tiếp,gián tiếp và tương đối

-có  4 dạng ngắt

-13 chân xuất nhập dữ liệu

-1 đồng hồ timer 0.dùng thanh đếm 8 bit nên đếm đc tối đa 256 nhịp

Câu 2: trình bày cấu trúc và h/đ của pic 16F877A

­­­Là loại PIC thông dụng loại trung sx bởi microchip

-         Có 35 lệnh,độ dài mỗi lệnh là 14 bit

-         Mỗi lệnh đc thực thi trong 1 chu kì máy

-         Tốc độ tối đa là 20 MHz với 1 chu kì lệnh là 20ms

-         Bộ nhớ Flash là 8k x 14 bit/word

-         Bộ nhớ Ram là 368 byte

-         Bộ nhớ EEPROM là 256 x 8 byte

-         Có 33 chân I/O

-         3 bộ định thời là timer 0(8 bit) , timer 1(16bit) ,timer 2 (8 bit)

-         Có 2 bộ bắt giữ /so sánh/điều rộng xung

-         Các cổng giao tiếp nối tiếp đồng bộ (SSP) với SPI phương thức chủ và I2C

-         Bộ truyền nhận nối tiếp đồng bộ,không đồng bộ có khả năng phát hiện 9 địa chỉ bit

-         Cổng phụ song song với 8 bit mở rộng

-         Bộ chuyển đổi tương tự sang số 10 bit  với 8 kênh ngõ vào

-         Hai bộ so sánh

-         Khả năng ngắt lên đến 14 nguồn ngắt

-         Ngăn xếp đc chia thành 8 bit

-         Truy cập bộ nhớ bằng địa chỉ trực tiếp hoặc gián tiếp.

Câu 1 : trình bày các phương thức địa chỉ hóa,cho ví dụ

Truy xuất bộ nhớ dữ liệu

a.     Tìm gián tiếp bộ  nhớ

Phương thức này thực hiện thông qua INDF bộ nhớ và FSR.

Địa chỉ thực tế trước tiên đặt vào trong FSR thông qua việc truy cập INDF để thực hiện gián tiếp đọc và viết số liệu bộ nhớ.

Phương pháp này chủ yếu dùng để viết các chương trình các bảng tra. Hoặc là bảng trị số thực hết sức tiện lợi.

Ví dụ : addwf INDF,<d>

b.     Tìm kiếm địa chỉ số lập tức.

Só thao tác và số lập tức,có thể nhận đc trực tiếp từ trong mã lệnh.

Ví dụ : movlw <constant>

            Movlw .122

c.      Tìm kiếm địa chỉ trực tiếp

Có thể phỏng vấn truy cập tìm kiếm địa chỉ  trực tiếp với bất kì bộ nhớ nào,tức là trong mã lệnh đã bao gồm địa chỉ của bộ nhớ bị truy cập    .

Ví dụ : addwf <data_address>,<d>

     d.tìm kiếm địa chỉ byte

         có thể trực tiếp truy cạp tìm kiếm 1 bit bất kì nào trong bộ nhớ bất kì tức là trong mã lệnh đã bao gồm địa chỉ của bộ nhớ bị truy cập đồng thời bao gồm địa chỉ hang số trong bộ nhớ đó.

d.     Địa chỉ tuyệt đối

Goto <program_address>

    f.địa chỉ tương đối

addwf  PCL,f

cấu trúc và hoạt động của 1 hệ vxl:

Nguyên lí hoạt động :

+ CPU (central processing unit) đơn vị xử lí trung tâm hay còn gọi là VXL MP ,đây là bộ não của máy tính điều khiển toàn bộ hoạt dộng của hệ thống,VXL sẽ lấy lệnh phân tích lệnh và thi hành lệnh

+ bộ nhớ: là nơi lưu trữ dữ liệu và chương trình cần thiết cho quá trình thực hiện lệnh,bộ nhớ gồm có bộ nhớ trong và bộ nhớ ngoài

-bộ nhớ trong ROM,RAM

-bộ nhớ ngoài :USB, đĩa từ ,HDD

+ vào ra( input/output): là bộ giao tiếp giữa CPU và thiết bị vào(bàn phím,chuột) và thiết bị ra(màn hình,máy in...)

+ bus hệ thống: 3 bộ phận được liên lạc với nhau thông qua bus hệ thống,bus hệ thống gồm

-      Bus địa chỉ : cho phép xây dựng địa chỉ của ô nhớ hoặc truy xuất đọc /ghi

-      Bus dữ liệu: cho phép trao đổi thông tin giữa CPU và bộ nhớ hay ngoại vi,bus dữ liệu có thể 16,32 bit...

-      Bus điều khiển : là các đường tín hiệu do CPU đưa ra để điều khiển bộ nhớ vào/ra hoặc tín hiệu đưa vào CPU

-      * chú ý: bus địa chỉ có 1 chiều CPU đi ra

     Bus dữ liệu có hai chiều

        Bus điều khiển có hai chiều hoặc vào hoặc ra.

CÁC THANH GHI CHỨC NĂNG ĐẶC BIỆT

Khái niệm ô nhớ thanh ghi (register file)

-      All cả bộ nhớ dữ liệu là phần của file thanh ghi,vì vậy bất kì ô nhớ trong bộ nhớ dữ diệu có thể hoạt đọng trực tiếp.

-      All ngoại vi đc ánh xạ vào bộ nhớ dl như là chuối các thanh ghi

-      Tập lệnh trực giao:all các lệnh có thẻ hoạt động trên bất kì vị trí bộ nhớ dl

-      Khuôn dạng lệnh từ dài chó phép file thanh ghi định địa chỉ trực tiếp.đc truy xuất như bất kì thanh ghi khác.

-      Một thanh ghi mang all cả các bank(vd:PCLATH,INTCON…)

Thah ghi PORTB,C,D,A

Thanh ghi TRISA,B,C,D,E

Thanh ghi PCLATH

Thanh ghi INTCON

Thanh ghi PIR1,2

Thanh ghi PIE1,2

Tập lệnh

* BCF bit ; xóa trong ô nhớ.

Thí dụ: GPIO equ 6; GPIO là ô nhớ 6

BCF GPIO,4; xoá (0)bit 4 của ô nhớ 6

* BSF bit; bật trong ô nhớ.

Thí dụ: BSF GPIO,2; bật bit 2 lên 1.

* BTFSC bit; kiểm tra bit trong ô nhớ và bỏ qua nếu bit bị xóa (0).

Thí dụ: CHK_ON BTFSC GPIO,0; kiểm tra báo động

* BTFSS bit; kiểm tra bit trong tập tin (ô nhớ) và bỏ qua nếu bit được bật (=1).

Thí dụ: zerobit equ 2; zerobit là bit 2

STATUS equ 3; STATUS là ô nhớ 3.

BTFSS STATUS,zerobit

* ADDWF cộng W và F.

* ANDWF and logic W và F.

* CLRF xóa ô nhớ .

* CLRW xóa thanh ghi làm việc W.

* COMF lấy bù ô nhớ.

* DECF giảm ô nhớ đi 1.

* DECFSZ giảm ô nhớ đi 1, bỏ qua nếu bằng không (0).

* INCF tăng ô nhớ lên 1.

* INCFSZ tăng ô nhớ lên 1 và bỏ qua nếu bằng không (0).

* IORWF: I-xor W và F (inclusive or)

* MOVF di chuyển F vào W.

* MOVWF di chuyển W vào F.

* NOP không làm gì cả.

* RLF quay trái ô nhớ 1 bit ( 1 vị trí).

* RRF quay phải ô nhớ 1 bit.

* SUBWF trừ W từ F , nghĩa là F-W.

* SWAPF trao đổi 4 bit thấp và 4 bit cao của F.

* XORWF EXOR W và F (exclusive or).

* ADDLW cộng số với W.

* ANDLW AND logic số với W.

* CALL gọi chương trình con.

* CLRWDT xóa bộ đếm xung thời gian (bộ định thời chó giữ cửa).

* GOTO nhảy tới địa chỉ.

* IORLW inclusive-or số với W.

* MOVLW chuyển số vào W.

* RETFIE trở về từ ngắt.

* RETLW trở về nơi số trong W

*RETURN trở về từ chương trình con.

* SLEEP đi vào chế độ chờ (standby).

* SUBLW trừ số từ W, nghĩa là số-W.

* XORLW EXOR số và W.

BÀI TẬP

BÀI 3:

A.   0-59

#include <16F877A.h>

#include <def_877a.h>

#fuses nowdt,noput,xt

#use delay(clock=4000000)

unsignedcharma[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

int dem,mch,mdv,dv,ch;

void giaima(int tam)

{

   ch=tam/10;

   dv=tam%10;

   mch=ma[ch];

   mdv=ma[dv];

   if(mch==0xc0)

      {mch=0xff;}

}

void hienthi()

{

   portb=mch;

   portd=mdv;

}

void main()

{

   set_tris_b(0x00);

   set_tris_d(0x00);

   portd=0x00;

   portb=0x00;

   while(1)

   {

      for(i=0;i<=59;i++)

{

            giaima(i);

            hienthi();

            delay_ms(200);

         }

   }

}

A.    0-59 CÓ NÚT

#include <16F877A.h>

#include <def_877a.h>

#fuses nowdt,noput,xt

#use delay(clock=4000000)

unsignedcharma[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};

int ch,dv,mch,mdv;

void giaima(int tam)

{

   ch=tam/10;

   dv=tam%10;

   mch=ma[ch];

   mdv=ma[dv];

   if(mch==0xc0)

      {mch=0xff;}

}

void hienthi()

{

   portb=mch;

   portd=mdv;

}

void main()

{

   int dem,i;

   set_tris_b(0x00);

   set_Tris_d(0x00);

   setup_timer_1(t1_internal| t1_div_by_1);

   set_timer1(0);

   while(1)

   {

   for(i=0;i<250;i++)

   {

      dem=get_timer1();

      giaima(dem);

      if(dem==60)

      set_timer1(0);

      hienthi();

      delay_ms(200);

   }

   }

}

BÀI 2: 8 LED SANG TÙY CHỌN

#include <16f877a.h>

#include <def_877a.h>

#fuses nowdt,noput,noprotect,xt

#use delay(clock=4000000)

unsigned char ma[8]={0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};

void sangdan()

{

   for(i=0;i<8;i++)

      {

         portd=ma[i];

         delay_ms(100);

      }

}

void sangdan1()

{

   for(i=8;i>0;i--)

      {

         portd=ma[i];

         delay_ms(100);

      }

}

void main()

{

   set_tris_d(0x00);

   portd=0x00;

   while(1)

      {

         sangdan();

         portd=0x00;

         delay_ms(1000);

         sangdan1();

portd=0x00;

         delay_ms(1000);

      }

}

BÀI 3: ĐIỀU KHIỂN LED SANG TÙY CHỌN VÀO NÚT NHẤN

#include <16F877A.h>

#include <def_877a.h>

#fuses nowdt,noput,noprotect,xt

#use delay(clock=4000000)

#bit d0=0x08.0

#bit trisb0=0x86.0

#int_ext

void ngat_ext()

{

   for(i=1;i<3;i++)

   {

   d0=1;

   delay_ms(1000);

   d0=0;

   delay_ms(1000);15

   }

}

void main()

{

   trisb0=1;

   set_tris_d(0x00);

   enable_interrupts(global);

   enable_interrupts(int_ext);

   d0=0;

   while(1)

      {

      }

}

Bạn đang đọc truyện trên: Truyen2U.Pro

#just