Вы находитесь на странице: 1из 22

TDH-DK 54

BÀI 1: 4Led7SEG - Hien thi 1234 for(j=0;j<100;j++);


#include <AT89X52.H> }
/* Cac ki hieu su dung cho LED 7 thanh*/ void Display(
#define LED P0 unsigned char digit1,
#define K1 P3_4 unsigned char digit2,
#define K2 P3_5 unsigned char digit3,
#define K3 P3_6 unsigned char digit4)
#define K4 P3_7 {
/* Cac ma LED 7 thanh // Hien thi so thu nhat
P0.7 = D OT LED = LED_code[digit1];
P0.6 = G K1 = 0;
P0.5 = F Delay(1);
P0.4 = E K1 = 1;
P0.3 = D // Hien thi so thu hai
P0.2 = C LED = LED_code[digit2];
P0.1 = B K2 = 0;
P0.0 = A Delay(1);
Cathode chung K2 = 1;
*/ // Hien thi so thu ba
#define Number0 0x3F LED = LED_code[digit3];
#define Number1 0x06 K3 = 0;
#define Number2 0x5B Delay(1);
#define Number3 0x4F K3 = 1;
#define Number4 0x66 // Hien thi so thu tu
#define Number5 0x6D LED = LED_code[digit4];
#define Number6 0x7D K4 = 0;
#define Number7 0x07 Delay(1);
#define Number8 0x7F K4 = 1;
#define Number9 0x6F }
// Khai bao cac bien toan cuc // Chuong trinh chinh
unsigned char code LED_code[] = void main(void)
{Number0, Number1, Number2, {
Number3, Number4, Number5,Number6, // Vong lap vo tan
Number7, Number8, Number9}; while(1)
// Dinh nghia cac ham {
void Delay(unsigned int n) Delay(10);
{ Display(1,2,3,4);
unsigned int i,j; }
for(i=0;i<n;i++) }

1
TDH-DK 54

BÀI 2: HIỂN THỊ LED 7 THANH TĂNG DẦN LED = LED_code[digit3];


K3 = 0;
00-99 VỚI 0.5S 1 NHỊP, GIẢM 99-00 1S 1
Delay(1);
NHỊP. K3 = 1;
// Khai bao cac file header // Hien thi so thu tu
#include <AT89X52.H> LED = LED_code[digit4];
//#include <Kit8051.h> K4 = 0;
/* Cac tin hieu su dung cho LED 7 thanh*/ Delay(1);
#define LED P0 K4 = 1; }
#define K1 P3_4 void demtien(){
#define K2 P3_5 unsigned char dem, chuc, donvi;
#define K3 P3_6 unsigned int i;
#define K4 P3_7 {
/* Cathode chung*/ for(dem=0;dem<100;dem++){
#define Number0 0x3F chuc = dem/10;
#define Number1 0x06 donvi=dem%10;
#define Number2 0x5B for(i=0;i<250;i++) //0,5s/1nhip
#define Number3 0x4F {
#define Number4 0x66 P0= LED_code[chuc];
#define Number5 0x6D K1=0;
#define Number6 0x7D Delay(1);
#define Number7 0x07 K1=1;
#define Number8 0x7F P0= LED_code[donvi];
#define Number9 0x6F K2=0;
// Khai bao cac bien toan cuc Delay(1);
unsigned char code LED_code[] = {Number0, K2=1;
Number1, Number2, Number3, Number4, }}}}
Number5,Number6, Number7, Number8, void demlui(){
Number9}; unsigned char dem, chuc, donvi;
void Delay(unsigned int n) { unsigned int i;
unsigned int i,j; {
for(i=0;i<n;i++) for(dem=99;dem>=0;dem-- )
for(j=0;j<100;j++); {
} chuc = dem/10;
void Display( donvi=dem%10;
unsigned char digit1, for(i=0;i<500;i++) //1s/1nhip
unsigned char digit2, {
unsigned char digit3, P0= LED_code[chuc];
unsigned char digit4) K1=0;
{ Delay(1);
// Hien thi so thu nhat K1=1;
LED = LED_code[digit1]; P0= LED_code[donvi];
K1 = 0; K2=0;
Delay(1); Delay(1);
K1 = 1; K2=1;}}}}
// Hien thi so thu hai // Chuong trinh chinh
LED = LED_code[digit2]; void main(void) {
K2 = 0; // Vong lap vo tan
Delay(1); while(1)
K2 = 1; { demtien();
// Hien thi so thu ba demlui();} }

2
TDH-DK 54

BÀI 3: MA TRẬN PHÍM 3X3 ĐÁNH SỐ 1-9 KẾT HỢP 8LED ĐƠN, NHẤN PHÍM 1 THÌ 1 LED
SÁNG ..NHẤN PHÍM 8 THÌ 8LED SÁNG, NHẤN PHÍM 9 THÌ 8LED SÁNG, SAU ĐÓ 8LED TẮT 1S,
SÁNG LẦN LƯỢT , SÁNG LẦN LƯỢT VÀ LƯU SÁNG.

#include <REGX51.H> ROW_1 = 1;


/* Cac tin hieu su dung cho ma tran ROW_2 = 1;
phim*/ ROW_3 = 1;
#define ROW_1 P1_5 COL_1 = 0;
#define ROW_2 P1_6 COL_2 = 0;
#define ROW_3 P1_7 COL_3 = 0;
#define COL_1 P1_2 // Kiem tra xem co phim bam?
#define COL_2 P1_3 if((!ROW_1)|(!ROW_2)|(!ROW_3))
#define COL_3 P1_4 {
// Dinh nghia cac ham // Chong rung phim
void Delay(unsigned int n) { Delay(100);
unsigned int i,j; // Kiem tra lai
for(i=0;i<n;i++) // Neu la hang 1 co phim bam
for(j=0;j<123;j++); if(!ROW_1) {
} // Chuyen cac cot lam dau vao
void ScanMatrix(void) { COL_1 = 1;
// Chuyen cac hang lam dau vao, cac cot COL_2 = 1;
lam dau ra muc thap COL_3 = 1;

3
TDH-DK 54

// Hang 1 lam dau ra muc thap }


ROW_1 = 0; // Neu la hang 2 co phim bam
// Kiem tra cac cot de xac dinh phim if(!ROW_2)
if(!COL_1) P2 = 0x01; {
else if (!COL_2) P2 = 0x03; // Chuyen cac cot lam dau vao
else if (!COL_3) P2 = 0x07; COL_1 = 1;

COL_2 = 1;
COL_3 = 1;
// Hang 2 lam dau ra muc thap
ROW_2 = 0;
// Kiem tra cac cot de xac dinh phim
if(!COL_1) P2 = 0x0f;
else if (!COL_2) P2 = 0x1f ;
else if (!COL_3) P2 = 0x3f;
}
// Neu la hang 3 co phim bam
if(!ROW_3)
{
// Chuyen cac cot lam dau vao
COL_1 = 1;
COL_2 = 1;
COL_3 = 1;
// Hang 3 lam dau ra muc thap
ROW_3 = 0;
// Kiem tra cac cot de xac dinh phim
if(!COL_1) P2 = 0x7f;
else if (!COL_2) P2 = 0xff;
else if(!COL_3)
{
P1 = 1;
Delay(1000) ;
P2=0xFF;
Delay(1000);
P2=0x00;
}
}}}
// Chuong trinh chinh
void main(void) {
// Khoi tao he thong
P2 = 0;
// Vong lap vo tan
while(1) {
ScanMatrix();
}}

4
TDH-DK 54

BÀI 4: BẤM PHÍM NHÁY LED SD NGẮT {


NGOÀI // Khoi tao he thong
InitSystem();
// Khai bao cac file header
// Vong lap vo tan
#include <AT89X51.H>
while(1);
// Dinh nghia cac ham
}
void InitSystem(void)
{
// Chon ngat theo suon xuong BÀI 5: BẤM PHÍM SÁNG LED, KHÔNG
IT1 = 1; BẤM LED TẮT
// Cho phep ngat ngoai 1 #include <REGX51.H>
EX1 = 1; void Delay(unsigned int n)
EA = 1; {
} unsigned int i,j;
void ExternalInterrupt(void) interrupt for(i=0;i<n;i++)
IE1_VECTOR for(j=0;j<125;j++);
{ }
// Dao trang thai cua cong P0 (trang thai void main()
cac LED) { P1=1;
khi co ngat if(P3_3==0)
P1 = ~P1; P1=0;
} else
// Chuong trinh chinh P1=1;
void main(void) }

5
TDH-DK 54

BÀI 6: THIẾT LẬP SƠ ĐỒ PHẦN CỨNG VÀ VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN ĐỘNG CƠ MỘT
CHIỀU LOẠI NHỎ TRỰC TIẾP THÔNG QUA PHÍM BẤM NỐI CHÂN VXL NHƯ SAU: -BẤM
PHÍM P3.7, ĐỘNG CƠ QUAY THUẬN -BẤM PHÍM P3.6, ĐỘNG CƠ QUAY NGHỊCH -BẤM
PHÍM P3.5 DỪNG KẾT NỐI 3 LED ĐƠN XANH VÀNG ĐỎ HIỂN THỊ CHẾ ĐỘ LÀM VIỆC
TƯƠNG ỨNG

#include <REGX51.H> }
#define dc1 P2_0 else if(sw2==0)// dc quay nghich
#define dc2 P2_1 {
#define dc3 P2_2 dc1=0;
#define dc4 P2_3 dc2=0;
#define sw1 P3_5 dc3=1;
#define sw2 P3_6 dc4=1;
#define sw3 P3_7 }
void main() else if(sw3==0) //dc dung
{ {
while(1) dc1=1;
{ dc2=0;
if(sw1==0) //dc quay thuan dc3=1;
{ dc4=0;
dc1=1; }
dc2=1; }
dc3=0; }
dc4=0;

6
TDH-DK 54

BÀI 7:AT89C51 VỚI NÚT BẤM VÀ LED


ĐƠN BÀI 8: NHÁY SÁNG LẦN LƯỢT 8 LED VỚI
NẾU SW=0 THÌ XUNG CHO CHU KÌ 10ms, TẦN SỐ 1HZ, SAU ĐÓ CHỚP TẮT 8LED 2
ĐỘ RỘNG 2ms. LẦN(1S SÁNG 1S TẮT), LẶP LẠI VÔ TẬN
NẾU SW=1 THÌ XUNG CHO CHU KÌ 10ms, QUÁ TRÌNH TRÊN, SỬ DỤNG TIMER VÀ
ĐỘ RỘNG 4,5ms. TẦN SỐ THẠCH ANH 12MHZ
#include <REGX51.H>
#include <REGX51.H> #define sw P3_3
#define sw P3_3 void delay( unsigned int t)
void delay( unsigned int t) {
{ do{
do{ TMOD=0X01;
TMOD=0X01; TL0=0X18;
TL0=0X18; TH0=0XFC;
TH0=0XFC; TR0=1;
TR0=1; while(!TF0);
while(!TF0){} TR0=0;
TR0=0; TF0=0;
TF0=0; t--;
t--; }
} while(t!=0);
while(t!=0); }
} void main(){
void main(){ int i;
while(1) while(1)
{ {
if(sw==0) P1=0x01;
{ for(i=0;i<8;i++)
P1_1=0; {
delay(200); delay(1000);
P1_1=1; P1=P1<<1;
delay(800); }
} P1=0x00;
else delay(1000);
{ P1=0xff;
P1_1=0; delay(1000);
delay(450); P1=0x00;
P1_1=1; delay(1000);
delay(550); P1=0xff;
} delay(1000);
}
} }
}

7
TDH-DK 54

BÀI 9: TẠO XUNG VUÔNG CÓ CHU KÌ 3ms TRÊN CHÂN P1.7


GỬI KÍ TỰ “F” ĐẾN CỔNG NỐI TIẾP
YÊU CẦU DÙNG TIMER 0 TẠO XUNG VUÔNG, GIẢ SỬ THẠCH ANH 11,0592MHZ, TỐC ĐỘ
BAUD 19200

#include <REGX51.H>
void delay( )
{
TMOD=0X01; //timer0 chon mode 1
TL0=-1500%256; //tao tre 1,5ms
TH0=-1500/256;
TR0=1;
while(!TF0);
TR0=0;
TF0=0;
}
void truyen_kitu(char t)
{
TMOD=0x20; //use Timer 1, mode 2
//TH1=0XF9; //9600 baud rate
//TH1=0xFA; //4800 baud rate
TH1=0xFD; //19200 baud rate
SCON=0x50;
TR1=1;
SBUF=t;
while (TI==0);
TI=0;
}
void main(void)
{
truyen_kitu('F');
while(1)
{
P1_7=0;
delay();
P1_7=1;
delay();
}

8
TDH-DK 54

BÀI 10: KHI ẤN PHÍM ĐẦU VÀO THÌ THỰC HIỆN TRUYỀN UART DỮ LIỆU SAU:
0x66/0x01/0x02/0x03/0x67. SAU ĐÓ NHẬN 5 BYTE DỮ LIỆU TỪ VXL KHÁC.
THẠCH ANH TẦN SỐ 11,0592MHZ, BAUD 19200

#include <REGX51.H>
#define sw P2_0
unsigned char mang[5]={0x66,0x01,0x02,0x03,0x67};
void truyen_kitu(char t){
TMOD=0x20; //use Timer 1, mode 2
TH1=0xFD; //19200 baud rate
SCON=0x50;
TR1=1;
SBUF=t;
while (TI==0);
TI=0;
}
void main(){
unsigned char i,k, mybyte;
if(sw==0)
{
for(k=0;k<5;k++)
truyen_kitu(mang[k]);
for(i=0;i<5;i++)
{ while (RI==0);
mybyte=SBUF;
P1=mybyte;
RI=0;
}
}}

9
TDH-DK 54

BÀI 11: THIẾT LẬP SƠ ĐỒ PHẦN CỨNG VÀ VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC LOẠI
5 ĐẦU NỐI, 200XUNG/S,ĐIỀU KHIỂN TRỰC TIẾP THÔNG QUA CHÂN INT0 CỦA VXL. BÌNH THƯỜNG
ĐỘNG CƠ Ở TRẠNG THÁI ĐỨNG YÊN,SAU KHI BẤM PHÍM ĐỘNG CƠ QUAY THUẬN 10S, DỪNG LẠI,
QUAY NGHỊCH 10S RỒI DỪNG LẠI

dc1=0;dc2=0;dc3=1;dc4=1;
#include <REGX51.H> Delay_ms(5);
#define dc1 P2_0 dc1=1;dc2=0;dc3=0;dc4=1;
#define dc2 P2_1 Delay_ms(5);
#define dc3 P2_2 }
#define dc4 P2_3 for(k=0;k<=500;k++)
#define sw1 P3_5 {
void Delay_ms(unsigned int ms) dc1=0;dc2=0;dc3=1;dc4=1;
{ Delay_ms(5);
unsigned int i,j; dc1=1;dc2=0;dc3=0;dc4=1;
for(i=0;i<ms;i++) Delay_ms(5);
for(j=0;j<125;j++); dc1=1;dc2=1;dc3=0;dc4=0;
} Delay_ms(5);
void main() dc1=0;dc2=1;dc3=1;dc4=0;
{ Delay_ms(5);
unsigned int k; }
if(sw1==0) }
{ else
for(k=0;k<=500;k++) {
{ dc1=0;dc2=0;dc3=0;dc4=0;
dc1=1;dc2=1;dc3=0;dc4=0; }
Delay_ms(5); }
dc1=0;dc2=1;dc3=1;dc4=0;
Delay_ms(5);

10
TDH-DK 54

BÀI 12: THIẾT LẬP SƠ ĐỒ PHẦN CỨNG TẠO XUNG RA VỚI TẦN SỐ LÀ 1HZ Ở CHÂN P3.5 VÀ
HIỂN THỊ LED 7 ĐOẠN TỪ 000 ĐẾN 999

CODE:
#include <regx52.h>
#define _7SEG_PORT P2
sbit K1 = P3^0;
sbit K2 = P3^1;
sbit K3 = P3^2;
unsigned char code Code7Seg[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F,
0x6F};
unsigned int j,count;
void Delay_ms(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
{
for(j=0;j<123;j++);
}
}
void Display(value) // Hiển thị giá trị value trong vòng 1 s
{
for(j=0;j<333;j++)
{
_7SEG_PORT = Code7Seg[value/100];
K1 = 1;
Delay_ms(1);
K1 = 0;
_7SEG_PORT = Code7Seg[(value/10)%10];
K2 = 1;
Delay_ms(1);
K2 = 0;
_7SEG_PORT = Code7Seg[value%10];

11
TDH-DK 54

K3 = 1;
Delay_ms(1);
K3 = 0;
}
}
void main()
{
unsigned char i;
TMOD &= 0xF0; //Khoi tao Timer 0 chế độ 16 bit
TMOD |= 0x01;
TH0 = 0x3C;
TL0 = 0xB0;
EA = 1; // Cho phép ngắt toàn cục
ET0 = 1;// Cho phép ngắt Timer
TR0 = 1;
while(1)
{
for(i=0;i<1000;i++)
{
Display(i);
}
}
}
void Timer0Overflow() interrupt 1 //Ngắt Timer 0
{
count++;
TH0 = 0x30;
TL0 = 0xB0;
if(count == 20)
{
P3_5 = !P3_5;
count = 0;
}
}

12
TDH-DK 54

ĐỀ CƯƠNG VI XỬ LÝ
Câu 1 lệnh hợp ngữ là gì,phân tích cấu trúc và cách mã hóa lệnh cho vi xử lí 8086.Cho ví dụ
minh họa ra dạng mã máy MOV CX (BX)
GIẢI

-Lệnh hợp ngữ là Một chương trình viết bằng hợp ngữ bao gồm một chuỗi các lệnh
(instructions) dễ nhớ tương ứng với một luồng các chỉ thị khả thi (executable) mà khi được
dịch bằng một trình hợp dịch, chúng có khả năng nạp được vào bộ nhớ đồng thời thực thi
được

Cấu trúc của 8086

1. Sơ đồ khối của bộ vi xử lý 8088

13
TDH-DK 54

Nhìn vài sơ đồ ta thấy, bên trong CPU 8086 có hai khối chính: khối phối ghép bus (Bus
Interface Unit, BIU) và khối thực hiện lệnh (Execution Unit, EU). Trong khối BIU có
các
thanh ghi đoạn và thanh ghi con trỏ lệnh IP, khối logic điều khiển bus, bộ cộng, bus dữ liệu 8
bit và bus địa chỉ 20 bit. Trong khối EU có các thanh ghi đa năng, các thanh ghi con trỏ và
chỉsố, khối tính toán số học và logic ALU, khối điều khiển CU, bus dữ liệu 16 bit của ALU,
bus
tín hiệu điều khiển. Việc chia CPU thành hai phần làm việc đồng thời có liên hệ với
nhau qua
hàng đợi lệnh làm tăng tốc độ đáng kể của CPU.
-CÁCH MÃ HÓA LỆNH

14
TDH-DK 54

Tổng quát, 8086/8088 có khoảng 300 tác vụ có thể có trong tập lệnh của nó.
Mỗi lệnh kéo dài từ 1 đến 6 byte. Từ ví dụ trên, ta thấy mã lệnh có các vùng:

15
TDH-DK 54

- Vùng mã lệnh (opcode): chứa mã lệnh của lệnh sẽ thực thi


- Vùng thanh ghi (reg): chứa các thanh ghi sẽ thực hiện (bảng 2.10)
- Vùng chế độ (mod): (bảng 2.11)
00: toán hạng bộ nhớ trực tiếp nếu R/M = 110, ngược lại là toán hạng gián tiếp
01: toán hạng gián tiếp, độ dời 8 bit
10: toán hạng gián tiếp, độ dời 16 bit
11: sử dụng 2 thanh ghi, vùng R/M sẽ là vùng Reg
- Vùng thanh ghi / bộ nhớ R/M (Reg/Mem):
VÍ DỤ:MOV CX [BX]:chuyển nội dung ô nhớ có địa chỉ DS:BX vào CX

Câu 2 So sánh phương pháp vào ra sữ liệu bằng pp thăm dò trạng thái sẵn sàng của thiết
bị ngoại vi và phương pháp vào ra dữ liệu sử dụng ngắt
Giải

2 phương pháp ngắt

16
TDH-DK 54

17
TDH-DK 54

Câu 3 phân tích khái niệm vi xử lí đa năng và vi xử lí công nghiệp.Cho ví dụ minh họa,so
sánh thiết kế và cách sử dụng vi xử lí này trên sản phẩm thực tế.
Giải
-phân tích vi xử lí đa năng :một bộ vi xử lý tích hợp hầu hết hoặc tất cả các chức năng
của một máy tính của đơn vị xử lý trung tâm (CPU) trên một đơn mạch tích hợp (IC, hoặc
microchip).

Vi xử lý đa năng X86 . Thuật ngữ x86 dùng để chỉ tới kiến trúc tập lệnh của
dòng vi xử lý 8086 của Intel. 8086 được Intel đưa ra năm 1978.
Intel xem dòng phát triển 8086 là IA-32. Kiến trúc x86 này rất phổ biến cho các
thế hệ máy tính cá nhân đang hiện hữu trong nhiều gia đình. Kiến trúc x86 gần như chiếm
toàn bộ thị phần máy tính cá nhân,máy workstation và cả server thậm chí siêu máy tính. Vì
tính phổ biến của nó và hỗ trợ tài liệu rất tốt từ Intel nên x86 được rất nhiều lập trình phần

18
TDH-DK 54

mềm viết chương trình chạy trên nó. Phần mềm được viết cho x86 bao gồm các nền OS: MS
DOS, Window, Linux,BSD và các biến thể Unix.
Kiến trúc x86 không phổ biến hoặc phù hợp lắm với hệ thống nhúng. Nếu kiến trúc x86
được Intel gọi là IA-32 thì Intel còn có thế hệ không cùng kiến trúc là IA-64 hay Itanium.
Itanium có sự tiến bộ hơn so với x86 với thiết kế ban đầu là 64 bit. Ngoài Intel sản xuất chip
kiến trúc x86 còn có: AMD, VIA. Kiến trúc x86 xuất hiện khi bộ vi xử lý Intel 8086 ra đời
1978, một thiết kế 16 bit đầy đủ dựa trên 8 bit trước đó. Sau đó là Intel 80386, bộ vi xử lý mở
rộng 8086 từ 16->32 bit được giới thiệu vào 1985. Intel 80486 vào 1989, tích hợp bộ xử lý
dấu chấm động. 50 Mhz 80486 tốc độ trung bình 40 Mips. Kế tiếp là Pentium, đời thứ năm vi
kiến trúc, lần đầu tiên ra đời vào 22 tháng 3 1993. Dòng Pentium kết thúc vào năm 2006.

-phân tích vi xử lí công nghiệp:


Vi xử lý công nghiệp MCS-51 mà chủ yếu trên AT89C51

Cho ví dụ minh họa: tự cho không biết.


Câu 4 nêu khái niệm chức năng bộ nhớ chương trình bộ nhớ dữ liệu
Giải
- Bộ nhớ chương trình (ROM, EPROM) là bộ nhớ chỉ đọc, có thể mở rộng tối đa
64Kbyte. Vói họ vi điều khiển 89xx, bộ nhớ chương trình được tích hợp sẵn trong chip có
kích thước nhỏ nhất là 4kByte. Với các vi điều khiển không tích hợp sẵn bộ nhớ chương trình
trên chip, buộc phải thiết kế bộ nhớ chương trình bên ngoài. Ví dụ sử dụng EPROM: 2764
(64Kbyte), khi đó chân PSEN phải ở mức tích cực (5V). +Phần bộ nhớ ROM: Phần này lại
thường được chia thành hai phần, một phần không cho phép người dùng truy cập (thường gọi
là internal ROM,còn lại là extended ROM), sử dụng để chứa hệ điều hành, phần này thường
chỉ có thể thay đổi tại nhà máy, tuy nhiên hiện nay một số dòng PPC thông dụng đã thường
xuyên có các phiên bản nâng cấp của HDH, cho phép dùng phần mềm trên PC để thực hiện
việc này. Phần ROM còn lại được thiết kế dành cho người sử dụng (thường gọi là File

19
TDH-DK 54

Store..trong đó một số hãng có khuynh hướng tặng cho người dùng các soft của hãng ..tuy
nhiên đó cũng là nguyên nhân một số anh em thích cook ROM:có nghĩa là chỉnh sưa thêm
bớt lại exROm để đủ chổ trống cho một số soft cần thiết khác sau khi hardreset(khỏi qua
công đoạn backup)), thuật ngữ ROM (Read Only Memory) dùng để chỉ bộ nhớ chỉ đọc, tuy
nhiên với công nghệ hiện nay, các loại bộ nhớ ROM dạng Flash(hiên tại đang có một số phát
triển chuẩn mới NNSF với tốc độ đọc cao hơn ít tiêu tốn điện năng) cho phép đọc và ghi lại
nhiều lần đã được sử dụng rộng rãi, vì vậy phần bộ nhớ này được sử dụng như một ổ cứng
bên trong PPC, có thể lưu trữ dữ liệu và cài đặt thêm các phần mềm ứng dụng trên đó. Theo
xu hướng hiện nay thì phần bộ nhớ này đang được tăng dần dung lượng, điển hình là các PPC
của HP đã có phần bộ nhớ này lên tới gần 100MB, điều này báo hiệu tương lai của một PPC
có khả năng hoạt động và cấu trúc như PC với "ổ cứng" và RAM theo đúng chức năng vốn có
của chúng trên PC vậy. 
Tất cả các dữ liệu trên phần bộ nhớ ROM nói trên đều không mất đi khi máy hết sạch pin
-   Bộ nhớ dữ liệu (RAM) tồn tại độc lập so với bộ nhớ chương trình. Họ vi điều khiển
8051 có bộ nhớ dữ liệu tích hợp trên chip nhỏ nhất là 128byte và có thể mở rộng với bộ nhớ
dữ liệu ngoài lên tới 64kByte. Với những vi điều khiển không tích hợp ROM trên chip thì vẫn
có RAM trên chip là 128byte. Khi sử dụng RAM ngoài, CPU đọc và ghi dữ liệu nhờ tín hiệu
trên các chân RD và WR. Khi sử dụng cả bộ nhớ chương trình và bộ nhớ dữ liệu bên ngoài
thì buộc phải kết hợp chân RD và PSEN bởi cổng logic AND để phân biệt tín hiệu truy xuất
dữ liệu trên ROM hay RAM ngoài.

Câu 5 thế nào là ngắt vi xử lý .Phân loại ngắt vi xử lý 8086.Cachsthi hành 1 lệnh int
như thế nào
Giải
-ngắt VXL là tận dụng khả năng của CPU đểlàm them được nhiều công việc khác
nữa,tức là bộ vi xử lý sẽ dừng các công việc đang thực hiện khi nó nhận được 1 tín hiệu yêu
cầu ngắt rồi trao quyền điều khiển lại cho chương trình ngắt.Sau khi hoàn thành việc trao đổi
dữ lieu thì CPU lại phải quay về tiếp tịc công việc bị gián đoạn
-các lạo ngắt trong hệ 8086:
Trong hệ xử lý 8086 có thể xếp các nguyên nhân gay ra ngắt CPU vào 3 nhóm như
sau
+nhóm ngắt cứng:một ngắt cứng phát sinh khi có 1 thiết bị phần cứng gọi tín hiệu yêu
cầu ngắt tới vi xử lí
Ví dụ:
Khi ta gõ một phím trên bàn phím hay bấm chuôt sẽ có tín hiệu ngắt tới vi xử lí để yêu
cầu xử lí yêu cầu vừa thực hiện.Các ngắt dk thực hiền từ cách thiết bị ngoài giống như ví dụ
trên dk gọi là ngắt cứng ngoài.Còn nếu ngắt phát sinh bằng phụ kiện bổ trợ nằm trên
mainboard thì dk gọi là ngắt cứng trong
+nhóm ngắt mềm: tagoij một ngắt là ngắt mềm nếu nó dk phát sinh khi có lời gọi ngắt
bằng lệnh int trong chuwog trình.cú pháp lệnh int là
Int <số hiệu ngắt>
Ví dụ :int 21h:gọi ngắt 21h couar dos
Int 13h gọi ngắt 13h của bios

20
TDH-DK 54

+nhóm các hiện tượng ngoại lệ:đó là các ngắt do lỗi nảy sinh trong quá trình hoạt động
của CPU như phép chia cho 0 xảy ra tràn khi tính toán
+Cách thực hiện lệnh int:
Int 0:ngắt mềm do phép chia số 0 gây ra
Int1:ngắt mềm đẻ chạy từng lệnh ứng với trường hợp cờ TF=1
Int2 :ngắt cứng do tín hiệu tích cực tại chân nm1 gây ra
Int3 : ngắt mềm để đặt diểm dừng của chương trình tại một địa chỉ nào đó
Int4:ngắt mềm ứng với trường hợp cờ tràn OF=1
Các kiểu ngắt khác còn lại thì dk dành cho intel và cho người sử dụng không hoàn tianf
tuân thủ quy định này khi chế tạo các máy PC/XT và PQ/ATO:
+INT 5-INT 1FH dành cho intel trong cac bộ vi xủ lí cao cấp khác
+int 20H-INT FFH:dành cho người sử dụng
Với các ưu tiên :
+ngắt nội bộ :INT 0.INTN,INTO……..cao nhất
+ngắt không che dk MNI
+NGẮT CHE DK INTR
+ngắt để chạy từng lệnh int1
Ví dụ
Giải thiết tại 1 thời điểm nào đó trong khi CPU đang thực hiện phép chia và có lỗi
xảy ra do số bị chia bằng 0 đúng vào lúc cpu đang nhận dk yêu cầu từ đầu vào intr .CPU sẽ
xử lí ra sao trong thường hợp này
Theo thứ tự ưu tiên ngầm định trong việc xử lí ngắt của CPU 8088 thì int 0 có mức ưu
tiên cao hơn intr ví vạy đàu tiên CPU thực hiện chương trình phục vụ ngắt int 0để đáp ứng
với lỗi đặc biệt cho phép chia cho 0 gây ra và cờ if sẽ bị xóa về 0.yêu cầu ngắt INTRsẽ tự
động bị cấm cho tới khi chương trình phục vụ ngắt INT 0 dk hoàn tất và trở về IRET,cờ IF cũ
dk trả lại .tiếp theo CPU SẼ ĐÁP ỨNG YÊU CẦU NGẮT INTR BẰNG CÁCH THỰC
HIỆN CHƯƠNG TRÌNH NGẮT DANHF CHO INTR

21
TDH-DK 54

MỤC LỤC
BÀI 1: 4Led7SEG - Hien thi 1234............................................................................................................1
BÀI 2: HIỂN THỊ LED 7 THANH TĂNG DẦN 00-99 VỚI 0.5S 1 NHỊP, GIẢM 99-00 1S 1 NHỊP....................2
BÀI 3: MA TRẬN PHÍM 3X3 ĐÁNH SỐ 1-9 KẾT HỢP 8LED ĐƠN, NHẤN PHÍM 1 THÌ 1 LED SÁNG ..NHẤN
PHÍM 8 THÌ 8LED SÁNG, NHẤN PHÍM 9 THÌ 8LED SÁNG, SAU ĐÓ 8LED TẮT 1S, SÁNG LẦN LƯỢT ,
SÁNG LẦN LƯỢT VÀ LƯU SÁNG.............................................................................................................3
BÀI 4: BẤM PHÍM NHÁY LED SD NGẮT NGOÀI.......................................................................................5
BÀI 5: BẤM PHÍM SÁNG LED, KHÔNG BẤM LED TẮT.............................................................................5
BÀI 6: THIẾT LẬP SƠ ĐỒ PHẦN CỨNG VÀ VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN ĐỘNG CƠ MỘT CHIỀU
LOẠI NHỎ TRỰC TIẾP THÔNG QUA PHÍM BẤM NỐI CHÂN VXL NHƯ SAU: -BẤM PHÍM P3.7, ĐỘNG CƠ
QUAY THUẬN -BẤM PHÍM P3.6, ĐỘNG CƠ QUAY NGHỊCH -BẤM PHÍM P3.5 DỪNG KẾT NỐI 3 LED
ĐƠN XANH VÀNG ĐỎ HIỂN THỊ CHẾ ĐỘ LÀM VIỆC TƯƠNG ỨNG..........................................................6
BÀI 7:AT89C51 VỚI NÚT BẤM VÀ LED ĐƠN NẾU SW=0 THÌ XUNG CHO CHU KÌ 10ms, ĐỘ RỘNG 2ms. 7
NẾU SW=1 THÌ XUNG CHO CHU KÌ 10ms, ĐỘ RỘNG 4,5ms...................................................................7
BÀI 8: NHÁY SÁNG LẦN LƯỢT 8 LED VỚI TẦN SỐ 1HZ, SAU ĐÓ CHỚP TẮT 8LED 2 LẦN(1S SÁNG 1S
TẮT), LẶP LẠI VÔ TẬN QUÁ TRÌNH TRÊN, SỬ DỤNG TIMER VÀ TẦN SỐ THẠCH ANH 12MHZ................7
BÀI 9: TẠO XUNG VUÔNG CÓ CHU KÌ 3ms TRÊN CHÂN P1.7.................................................................8
GỬI KÍ TỰ “F” ĐẾN CỔNG NỐI TIẾP........................................................................................................8
YÊU CẦU DÙNG TIMER 0 TẠO XUNG VUÔNG, GIẢ SỬ THẠCH ANH 11,0592MHZ, TỐC ĐỘ BAUD 19200
...............................................................................................................................................................8
BÀI 10: KHI ẤN PHÍM ĐẦU VÀO THÌ THỰC HIỆN TRUYỀN UART DỮ LIỆU SAU:......................................9
0x66/0x01/0x02/0x03/0x67. SAU ĐÓ NHẬN 5 BYTE DỮ LIỆU TỪ VXL KHÁC.........................................9
THẠCH ANH TẦN SỐ 11,0592MHZ, BAUD 19200...................................................................................9
BÀI 11: THIẾT LẬP SƠ ĐỒ PHẦN CỨNG VÀ VIẾT CHƯƠNG TRÌNH ĐIỀU KHIỂN ĐỘNG CƠ BƯỚC LOẠI 5
ĐẦU NỐI, 200XUNG/S,ĐIỀU KHIỂN TRỰC TIẾP THÔNG QUA CHÂN INT0 CỦA VXL. BÌNH THƯỜNG
ĐỘNG CƠ Ở TRẠNG THÁI ĐỨNG YÊN,SAU KHI BẤM PHÍM ĐỘNG CƠ QUAY THUẬN 10S, DỪNG LẠI,
QUAY NGHỊCH 10S RỒI DỪNG LẠI.......................................................................................................10
BÀI 12: THIẾT LẬP SƠ ĐỒ PHẦN CỨNG TẠO XUNG RA VỚI TẦN SỐ LÀ 1HZ Ở CHÂN P3.5 VÀ HIỂN THỊ
LED 7 ĐOẠN TỪ 000 ĐẾN 999..............................................................................................................11
ĐỀ CƯƠNG VI XỬ LÝ............................................................................................................................13
Câu 1 lệnh hợp ngữ là gì,phân tích cấu trúc và cách mã hóa lệnh cho vi xử lí 8086.Cho ví dụ minh họa
ra dạng mã máy MOV CX (BX).............................................................................................................13
Câu 2 So sánh phương pháp vào ra sữ liệu bằng pp thăm dò trạng thái sẵn sàng của thiết bị ngoại vi
và phương pháp vào ra dữ liệu sử dụng ngắt......................................................................................15
Câu 3 phân tích khái niệm vi xử lí đa năng và vi xử lí công nghiệp.Cho ví dụ minh họa,so sánh thiết kế
và cách sử dụng vi xử lí này trên sản phẩm thực tế.............................................................................18

22

Вам также может понравиться