Tải bản đầy đủ (.doc) (5 trang)

chuong 10 mạch đo tốc độ động cơ và giá cước taxi

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (66.47 KB, 5 trang )

Chöông 10:Phuï Luïc
Code CCS su dung bộ EEPROM trong chip.
#include <16F877.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#include "stdlib.h"
#include <input.c>
#include "limits.h"
// The following initializes the first 4 locations of the data EERPOM
// using the #ROM directive
#rom 0x2100={1,2,3,4}
typedef int8 INTEE;
void main() {
unsigned int8 i, j, address;
INTEE value;
do {
printf("\r\n\nEEPROM:\r\n");
// Display contents of
the first 64
for(i=0; i<=3; ++i) {
// bytes of the data
EEPROM in hex
for(j=0; j<=15; ++j) {
printf( "%2x ", read_eeprom( i*16+j ) );
}
printf("\n\r");
}
printf("\r\nLocation to change: ");
address = gethex();
printf("\r\nNew value: ");


value = gethex();
write_eeprom( address, value );
} while (TRUE);

Ñ0aïn code chöông trình duøng Rom ngoaïi PIC 16f877:
#include <16F877A.h>
#include <DEFS_16F877A.h>
#include <def_877a.h>
//#include
#device *=16// ADC=10
#fuses
NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#use rs232(baud=19200,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#use i2c(master,sda=PIN_C4, scl=PIN_C3, force_hw,Slow)
void write_eeprom(long int address,unsigned char data)


{

}

int upper_addr;
int lower_addr;
upper_addr=(int)(address >> 8);
lower_addr=(int)(address & 0x00FF);
i2c_start();
i2c_write(0xa0);
i2c_write(upper_addr);
i2c_write(lower_addr);

i2c_write(data);
i2c_stop();
delay_ms(11);

//********************************************************
unsigned char read_eeprom(long int address)
{
unsigned char data;
int upper_addr;
int lower_addr;
upper_addr=(int)(address >> 8);
lower_addr=(int)(address & 0x00FF);
i2c_start();
i2c_write(0xa0);
i2c_write(upper_addr);
i2c_write(lower_addr);
i2c_start();
i2c_write(0xa1);
data=i2c_read(0);
i2c_stop();
return(data);
}
//------------------------ax25--------------------------main()
void testrom()
{
int16 i;
unsigned char x;
char DIGITS[15] ={"Tran Minh Duc"};
if(RCIF)
{

x=getch();
portb=x;
if(x=='b')
{

putch('c');
output_low(PIN_B4);
output_high(PIN_B5);
for(i=0;i<15;i++)
{
x=read_ext_eeprom(i);


putch(x);
delay_ms(100);
}
}
if(x=='t')
{
output_high(PIN_B4);
output_low(PIN_B5);
for(i=0;i<15;i++)
{
write_ext_eeprom(i,DIGITS[i]);
}
putch("a");
}
}
}
main()

{
while(1)
{
testrom();
}

}

*Khảo sát CPU Z80:
Được dùng thực tế trong các mạch đồng hồ taxi:
Z80 CPU là đơn vò xử lý trung tâm thực hiện mọi quyết đònh
và phân bố thời gian điều khiển toàn hệ thống.
• Những đặc điểm chính yếu của CPU Z80.
- 8 bít tác động song song
- 158 loại lệnh căn bản
- Có 52 thanh ghi bên trong
- Có tính năng ngắt (interrupt).
- Có thể nối trực tiếp với RAM động mà hầu như
không cần mạch phụ trợ bên ngoài.
- Tốc độ của lệnh fetch là 1.6µs
- Chỉ cần dùng một nguồn điện +5v duy nhất.
- Tất cả các chân xuất tín hiệu ra và nhập tín hiệu
vào đều thuộc loại TTL.


Mô tả tổng quát :
Người ta phân Z80 CPU làm 3 khối chính:
- Khối thanh ghi : Là những ô nhớ nằm bên trong CPU và
được giới thiệu trong lệnh bằng những ký hiệu cụ thể.
Dữ liệu từ bộ nhớ được chuyển vào lưu trữ tạm thời,

trong quá trình tính toán và xử lý.
-

Khối ALU (Arithmetic and Logic Unit): Khối này thực hiện các
phép toán luận lý và số học.
Khối giải mã lệnh và điều khiển : Có nhiệm vụ phân
tích mã lệnh và hình thành các thao tác tiếp theo tương
ứng với lệnh đó.

1- Phân tích khối thanh ghi (Register set):
Khối thanh ghi của CPU được chia là 3 nhóm theo bảng sau:
• Nhóm 1 : Bao gồm các bộ thanh ghi 16bit được ghép nối
tiếp từ 2 thanh ghi 8bit, một bộ chính và một bộ hoán
đổi. Cả hai bộ gồm có:
- Thanh ghi tích lũy (Accumulator Register).
- Thanh ghi cờ (Flag Register).
- Sáu thanh ghi đa dụng : B, C, D, E, H,L: có thể dùng đơn lẻ
hoặc ghép thành 3 cặp BC, DE, HL.
Sự chuyển đổi dữ liệu giữa các bộ ghép nối của các
thanh ghi được thực hiện bằng lệnh chuyển đổi (Exchange).
Kết quả được đáp ứng nhanh và dễ dàng đối với các
ngắt.
• Nhóm 2 : Gồm 6 thanh ghi.
- Thanh ghi ngắt (Interrupt Register).
- Thanh ghi làm tươi bộ nhớ (register Memory Refresh).
- Con trỏ ngăn xếp (Stack pointer).
- Thanh ghi đếm chương trình (program Counter).
- Thanh ghi chỉ số (Index Register) : Dùng cho phép đònh vò
chỉ số.
• Nhóm 3 : Gồm2 Flip – flop để ghi nhớ các trạng thái ngắt.

a- Các Bus đòa chỉ và dữ liệu
♥ Bus đòa chỉ (Address Bus) A0 ÷ A15 : Ngõ ra ba trạng thái
xuất, tác động ở mức cao, tạo thành tuyến đòa chỉ 16 bit.
Bằng cách phối hợp giữa các tính hiệu “1” và “0” ở mỗi
chân chúng ta có thể chỉ đònh được đòa chỉ trên bộ nhớ
hay bộ vào ra I/O khác.
♥ Bus dữ liệu (Data Bus) D0 ÷ D7 : Ngõ ra ba trạng thái xuất
nhập, tác động ở mức cao, tạo thành tuyến dữ liệu 8 bit,
trên đó dữ liệu có thể di chuyển theo hai chiều, nhận và
giao dữ liệu giữa CPU và bộ nhớ hay vào ra I/O.



Tập lệnh của Z80-CPU:
Vi xử lý Z80 có tập lệnh rất phong phú so với các vi
xử lý 8bit khác. Đặc biệt có các lệnh truyền khối, tạo thao
tác dòch chuyển một khối dữ liệu trong bộ nhớ hay giữa bộ
nhớ và thiết bò vào/ra.
Các lệnh của Z80 chia thành các loại:
- Lệnh truyền dữ liệu 8 bit.
- Lệnh truyền dữ liệu 16bit.
- Lệnh trao đổi, truyền khối, dò tìm.
- Lệnh tính toán 8bit.
- Lệnh tính toán 16bit.
- Lệnh xê dòch dữ liệu (shift).
- Các lệnh nhảy (Jump).
- Lệnh nạp dữ liệu vào từng bit.
- Các lệnh gọi chương trình con, trở về và khởi động.
- Lệnh điều khiển CPU.
- Lệnh hoán chuyển thanh ghi.

- Lệnh xuất nhập dữ liệu.



×