You are on page 1of 19

TRƯỜNG ĐẠI HỌC GIAO THÔNG VẬN TẢI TP.

HCM
KHOA ĐIỆN - ĐIỆN TỬ VIỄN THÔNG

BÀI BÁO CÁO


THIẾT KẾ MẠCH ĐO NHỊP TIM

Giảng viên hướng dẫn: Th.S Nguyễn Thanh Hiếu

Sinh viên thực hiện: Nguyễn Thanh Phong


Tô Bình Giang
Bùi Xuân Trường
(Lớp: DV17)

TP. HCM, 8 - 2020


MỤC LỤC

LỜI CẢM ƠN..........................................................................................................1


NHẬN XÉT CỦA GIẢNG VIÊN...........................................................................2
CHƯƠNG I. CÁC LINH KIỆN LIÊN QUAN.....................................................3
1. VI ĐIỀU KHIỂN PIC16F887A.....................................................................3
2. KHỐI HIỂN THỊ LCD16X2.........................................................................6
CHƯƠNG II: MẠCH ĐO NHỊP TIM...................................................................9
1. CÁC SƠ ĐỒ LIÊN QUAN............................................................................9
2. GIẢI MÃ VÀ CHƯƠNG TRÌNH CHO PIC16F887A.............................11
TÀI LIỆU THAM KHẢO....................................................................................16
LỜI CẢM ƠN

Chúng em xin chân thành gửi lời cảm ơn khoa Điện – Điện Tử Viễn Thông,
trường đại học Giao Thông Vận Tải TP. HCM đã tạo điều kiện thuận lợi để chúng em
học tập và thực hiện bài báo cáo này.
Chúng em xin bày tỏ lòng biết ơn sâu sắc tới thầy Nguyễn Thanh Hiếu - giảng viên
bộ môn Kỹ thuật vi xử lý đã tận tình hướng dẫn chỉ bảo chúng em trong quá trình
thực hiện bài tập lớn này.
Chúng em xin chân thành cảm ơn quý thầy cô trong khoa Điện - Điện Tử Viễn
Thông đã tận tình giảng dạy, trang bị cho chúng em những kiến thức quý báu trong
những năm vừa qua.
Chúng con xin chân thành cảm ơn ông bà, cha mẹ đã luôn động viên ủng hộ vật
chất lẫn tinh thần trong suốt thời gian qua.
Cảm ơn sự quan tâm giúp đỡ và ủng hộ của các anh chị bạn bè trong quá trình
thực hiện bài tập lớn này.
Mặc dù đã cố gắng hoàn thành bài tập trong phạm vi và khả năng cho phép nhưng
chắc chắn sẽ không tránh khỏi những thiếu sót. Chúng em rất mong nhận được sự
thông cảm, góp ý và tận tình chỉ bảo của quý thầy cô và các bạn.

1
NHẬN XÉT CỦA GIẢNG VIÊN
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………………
…………………………………………………………………………………………………………………..
……………………………………………………………..
………………………………………………………………………………………

2
CHƯƠNG I. CÁC LINH KIỆN LIÊN QUAN

1. VI ĐIỀU KHIỂN PIC16F887A


1.1. CẤU HÌNH VI ĐIỀU KHIỂN PIC16F887A

Đây là một dòng vi điều khiển khá phổ biến, đầy đủ các chức năng, phù hợp với
các ứng dụng cơ bản.
Một số đặc điểm của PIC16F877A:
- PIC 16F877A là loại vi điều khiển 8bit tầm trung của hãng microchip.
- PIC 16F877A có kiến trúc Havard, sử dụng tập lệnh kiểu RISC (Reduced
Instruction Set Computer) với chỉ 35 lệnh cơ bản.
- Tất cả các lệnh được thực hiện trong một chu kì lệnh ngoại trừ các lệnh rẽ nhánh.
- Sơ đồ chân với chip loại cắm 40 chân

Hình 1-2: Sơ đồ chân PIC16F887A

3
Nhận xét:
- PIC 16F887A có tất cả 40 chân.
- 40 chân được chia thành 5 PORT, 2 chân cấp nguồn, 2 chân GND, 2 chân
thạch anh và 1 chân dùng để RESET vi điều khiển.
- 5 port của PIC16F887A bao gồm:
+ PORTB: 8 chân
+ PORTD: 8 chân
+ PORTC: 8 chân
+ PORTA: 6 chân
+ PORTE: 3 chân

1.2. CHỨC NĂNG CƠ BẢN CỦA PIC16F887A

Hình 1-2: Chức năng của pic16f887a

PORTA

- PORTA: Gồm 6 chân, các chân của PortA, ta lập trình để có thể thực hiện
được chức năng “2 chiều” : xuất dữ liệu từ vi điều khiển ra ngoại vi và nhập
dữ liệu từ ngoại vi vào vi điều khiển.
- Việc xuất nhập dữ liệu ở PIC16F887A khác với họ 8051. Ở tất cả các
PORT của PIC16F887A, ở mỗi thời điểm chỉ thực hiện được một chức
năng: xuất hoặc nhập. Để chuyển từ chức năng nhập qua xuất hay ngược lại,
ta phải xử lý bằng phần mềm, không như 8051 tự hiểu lúc nào là chức năng
nhập, lúc nào là chức năng xuất.

4
- Trong kiến trúc phần cứng của PIC16F887A, người ta sử dụng thanh ghi
TRISA ở địa chỉ 85H để điều khiển chức năng I/O trên. Muốn xác lập các
chân nào của PORTA là nhập (input) thì ta set bit tương ứng chân đó trong
thanh ghi TRISA. Ngược lại, muốn chân nào là output thì ta clear bit tương
ứng chân đó trong thanh ghi TRISA. Điều này hoàn toàn tương tự với các
PORT còn lại.
- Ngoài ra, PORTA còn có các chức năng quan trọng sau:
+ Ngõ vào Analog của bộ ADC: thực hiện chức năng chuyển từ Analog sang
Digital
+ Ngõ vào điện thế so sánh
+ Ngõ vào xung Clock của Timer0 trong kiến trúc phần cứng: thực hiện các
nhiệm vụ đếm xong thông qua Timer0…
+ Ngõ vào của bộ giao tiếp MSSP (Master Synchronous Serial Port)

PORTB
- PORTB có 8 chân, cũng như PORTA, các chân của PORTB cũng thực hiện
được 2 chức năng: input và output. Hai chức năng trên được điều khiển bởi
thanh ghi TRISB. Khi muốn chân nào của PORTB là input thì ta set bit
tương ứng trong thanh ghi TRISB, ngược lại muốn chân nào là output thì ta
clear bit tương ứng trong TRISB
- Thanh ghi TRISB còn đượcc tích hợp bộ điện trở kéo lên có thể điều khiển
được bằng chương trình

PORTC
- PORTC có 8 chân và cũng thực hiện 2 chức năng input và output dưới sự
điều khiển của thanh ghi TRISC tương tự như 2 hình trên
- Ngoài ra PORTC còn có các chức năng quan trọng sau:
+ Ngõ vào xung Clock cho Timer1 trong kiến trúc phần cứng
+ Bộ PWM thực hiện chức năng điều xung lập trình được tần số, duty cycle:
sử dụng trong điều khiển tốc độ và vị trí của động cơ,…
+ Tích hợp các bộ giao tiếp nối tiếp I2C, SPI, SSP, USART

PORTD
- PORTD có 8 chân, thanh ghi TRISD điều khiển 2 chức năng input va output
của PORTD tương tự như trên. PORTD cũng là cổng xuất dữ liệu của chuẩn
giao tiếp song song PSP (Parallel Slave Port)

5
PORTE
- PORTE có 3 chân. Thanh ghi điều khiển xuất nhập tương ứng là TRISE.
Các chân của TRISR có ngõ vào Analog. Bên cạnh đó PORTE còn là các
chân điều khiển của chuẩn giao tiếp PSP

2. KHỐI HIỂN THỊ LCD16X2


2.1. HÌNH DÁNG, CHỨC NĂNG VÀ KÍCH THƯỚC

Có rất nhiều loại LCD với nhiều hình dáng và kích thước khác nhau, trên
hình 1 là loại LCD thông dụng.

Hình 2-1 : Hình dáng của loại LCD thông dụng 

Khi sản xuất LCD, nhà sản xuất đã tích hợp chíp điều khiển (HD44780)
bên trong lớp vỏ và chỉ đưa các chân giao tiếp cần thiết. Các chân này
được đánh số thứ tự và đặt tên như hình 2-1: 

Hình 2-2: Sơ đồ chân của LCD16x2

6
2.2. CHỨC NĂNG CỦA CÁC CHÂN

7
2.3. KHỞI TẠO LCD.

Khởi tạo là việc thiết lập các thông số làm việc ban đầu. Đối với LCD, khởi
tạo giúp ta thiết lập các giao thức làm việc giữa LCD và MPU. Việc khởi tạo
chỉ được thực hiện 1 lần duy nhất ở đầu chương trình điều khiển LCD và
bao gồm các thiết lập sau : 

•  Display clear : Xóa/không xóa toàn bộ nội dung hiển thị trước đó. 

•  Function set : Kiểu giao tiếp 8bit/4bit, số hàng hiển thị 1hàng/2hàng, kiểu
kí tự 5x8/5x10. 

•  Display on/off control: Hiển thị/tắt màn hình, hiển thị/tắt con trỏ, nhấp
nháy/không nhấp nháy. 

•  Entry mode set : các thiết lập kiểu nhập kí tự như: Dịch/không dịch, tự
tăng/giảm (Increment).

Khởi tạo bằng lệnh, chuỗi lệnh: Việc khởi tạo phải tuân theo lưu đồ sau của
nhà sản xuất.

8
CHƯƠNG II. MẠCH ĐO NHỊP TIM

1. CÁC SƠ ĐỒ LIÊN QUAN

1.1. SƠ ĐỒ KHỔI CỦA MẠCH ĐO

KHỐI NGUỒN BỘ ĐIỀU KHIỂN VÀ XỬ LÝ KHỐI HIỂN THỊ

PIC16F887A LCD16x2

1.2. SƠ ĐỒ NGUYÊN LÝ VÀ MÔ PHỎNG

Sử dụng phần mềm Proteus để mô phỏng mạch đếm

Hình 2.1: Sơ đồ nguyên lý và mô phỏng qua Proteus

9
1.3. SƠ ĐỒ CHÂN 16F887A

Hình 2-2: Sơ đồ chân PIC16F887A

CHỨC NĂNG CỦA CÁC CHÂN


Chức năng là port I/O: port A gồm các tín hiệu từ RA0 đến RA7, port
B gồm các tín hiệu từ RB0 đến RB7, port C gồm các tín hiệu từ RC0 đến
RC7, port D gồm các tín hiệu từ RD0 đến RD7, port E gồm các tín hiệu
từ RE0 đến RE3.
Chức năng tương tử là các ngõ vào bộ chuyển đổi ADC có 14 kênh:
14 kênh ngõ vào tương tự từ AN0 đến AN13, hai ngõ vào nhận điện áp
tham chiếu bên ngoài là Vref+ và Vref- .
Chức năng tương tự là các ngõ vào bộ so sành C1 và C2: có 2 bộ so
sánh, có 4 ngõ vào nhận điện áp ngõ vào âm của 2 bộ so sánh là
C12IN0-, C12IN1-, C12IN2-, C12IN3-. Có 2 ngõ vào điện áp tương tự
dương cho hai bộ so sánh là: C1IN+,C2IN+, có 2 ngõ ra của bộ so sánh
là :C1OUT và C2OUT, có 1 ngõ vào nhận điện áp tham chiếu chuẩn cấp
cho 2 bộ so sánh là :
Chức năng dao động cấp xung cho CPU hoạt động: có 2 ngõ vào nối
với tụ thạch anh để tạo dao động là OSC1 và OSC2, có 1 ngõ vào nhận
tín hiệu dao động từ nguồn khác là CKLIN nếu không dùng tụ thạch
anh, có 1 ngõ ra cấp xung clock cho thiết bị khác là CKLOUT.
Chức năng nhận xung ngoại của T0 và T1: có 1 ngõ vào nhận xung
ngoại cho timer/counter T0 tên là T0CKI, có 1 ngõ vào nhận xung ngoại

10
cho tmer/counter T1 tên à T1CKI, 2 ngõ vào tạo dao độn riêng cho
Timer1 hoạt động độc lập có tên là T1OSO và T1OSI.
2. GIẢI MÃ VÀ CHƯƠNG TRÌNH CHO PIC16F887 VÀ LCD16X2

2.1. LƯU ĐỒ THUẬT TOÁN

11
2.2. VIẾT CHƯƠNG TRÌNH CHO MẠCH ĐẾM

THƯ VIỆN LCD16X2

12
#include <stddef.h>

#define LCD_RS PIN_D5


#define LCD_RW PIN_E1
#define LCD_EN PIN_D4

#define LCD_D4 PIN_D3


#define LCD_D5 PIN_D2
#define LCD_D6 PIN_D1
#define LCD_D7 PIN_D0

// misc display defines-


#define Line_1 0x80
#define Line_2 0xC0
#define Clear_Scr 0x01

// prototype statements
#separate void LCD_Init ( void ); //ham khoi tao LCD
#separate void LCD_SetPosition ( unsigned int cX );//Thiet lap vi tri con tro
#separate void LCD_PutChar ( unsigned int cX );// Ham viet 1 ki tu/1 chuoi len LCD
#separate void LCD_PutCmd ( unsigned int cX) ;// Ham gui lenh len LCD
#separate void LCD_PulseEnable ( void );// Xung kich hoat
#separate void LCD_SetData ( unsigned int cX );// Dat du lieu len chan Data

// D/n Cong
#use standard_io ( B )
#use standard_io (A)

//khoi tao LCD


#separate void LCD_Init ( void )
{
LCD_SetData ( 0x00 );
delay_ms(200); /* wait enough time after Vdd rise >> 15ms */
output_low ( LCD_RS );// che do gui lenh
LCD_SetData ( 0x03 ); /* init with specific nibbles to start 4-bit mode */
LCD_PulseEnable();
LCD_PulseEnable();
LCD_PulseEnable();
LCD_SetData ( 0x02 ); /* set 4-bit interface */
LCD_PulseEnable(); /* send dual nibbles hereafter, MSN first */
LCD_PutCmd ( 0x2C ); /* function set (all lines, 5x7 characters) */
LCD_PutCmd ( 0b00001100); /* display ON, cursor off, no blink */
LCD_PutCmd ( 0x06 ); /* entry mode set, increment & scroll left */
LCD_PutCmd ( 0x01 ); /* clear display */
}

#separate void LCD_SetPosition ( unsigned int cX )


{

13
/* this subroutine works specifically for 4-bit Port A */
LCD_SetData ( swap ( cX ) | 0x08 );
LCD_PulseEnable();
LCD_SetData ( swap ( cX ) );
LCD_PulseEnable();
}

#separate void LCD_PutChar ( unsigned int cX )


{
/* this subroutine works specifically for 4-bit Port A */
output_high ( LCD_RS );
LCD_PutCmd( cX );
output_low ( LCD_RS );
}

#separate void LCD_PutCmd ( unsigned int cX )


{
/* this subroutine works specifically for 4-bit Port A */
LCD_SetData ( swap ( cX ) ); /* send high nibble */
LCD_PulseEnable();
LCD_SetData ( swap ( cX ) ); /* send low nibble */
LCD_PulseEnable();
}

#separate void LCD_PulseEnable ( void )


{
output_high ( LCD_EN );
delay_us ( 3 ); // was 10
output_low ( LCD_EN );
delay_ms ( 3 ); // was 5
}

#separate void LCD_SetData ( unsigned int cX )


{
output_bit ( LCD_D4, cX & 0x01 );
output_bit ( LCD_D5, cX & 0x02 );
output_bit ( LCD_D6, cX & 0x04 );
output_bit ( LCD_D7, cX & 0x08 );
}

14
CHƯƠNG TRÌNH CHO MẠCH ĐO NHỊP TIM
#include <16F887.h>
#include <def_877a.h>
#device *=16 adc=10
#FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,
NOLVP, NOCPD, NOWRT
#use delay(clock=20000000)
#include <lcd_lib_4bit.c>
#include <math.h>

//#define loa RC3


#priority ext,timer1

//KHAO BAO BIEN


int32 dem=0;
int32 count=0; //Dem so xung trong 50 MS
int32 x=0; //So xung trong 1 phut

// Chuong trinh ngat


#INT_TIMER1
void process()
{
set_timer1(15536); // so xung = (65536-15536)*4/4Mhz= 50ms..., max=65ms...
dem++;
if(dem==200)
{
x=0;//count*60; // count = 0; dem=0;
}
}
#int_ext
void ngat_RB0()
{
//++count;
x = 6000/dem; dem=0;
}

// Chuong trinh chinh


VOID main()
{
loa=0;
set_tris_a(1);
set_tris_b(0b00000001);// set RB0 la input..
set_tris_d(0);// portD, portC : output..
set_tris_c(0x00);
//set_tris_e(0);
//enable_interrupts(int_rda);
enable_interrupts(INT_TIMER1); //cho phep ngat timer1 dinh thoi..
setup_timer_1(T1_INTERNAL); // cho timer 1 hoat dong...
15
enable_interrupts(global); //Cho phep ngat toan cuc..
enable_interrupts(int_ext); //Cho ngat canh ngoai..
ext_int_edge(H_to_L); //Ngat canh cao xuong thap..
set_timer1(15536);
count=0; //re0 = 0;
LCD_init();
// Printf(LCD_putchar,"MACH DO NHIP TIM");
// LCD_putcmd(0xC0);
// Printf(LCD_putchar,"SVTH: SV NHOM 06 ");
// delay_ms(500);
LCD_putcmd(0x80);
Printf(LCD_putchar,"MACH DO NHIP TIM");
LCD_putcmd(0xC0);
Printf(LCD_putchar," ");
delay_ms(500);
while(true)
{
delay_ms(2000);
LCD_putcmd(0x80);printf(LCD_putchar,"NHIP TIM= ");
if(x>999) printf(LCD_putchar,"Over "); else
LCD_putchar(x/100+0x30); LCD_putchar((x%100)/10+0x30); LCD_putchar(x
%10+0x30); printf(LCD_putchar," ");
lcd_putcmd(0xC0);
if(x==0) printf(lcd_putchar,"Xin moi do ");
else
if(x<60) printf(lcd_putchar,"Nhip tim yeu ");
else if(x<140)printf(lcd_putchar,"Nhip tim TB ");
else printf(lcd_putchar,"Nhip tim nhanh");
// if ( x=0) loa=1; else loa=0;
delay_ms(5000);
LCD_putcmd(0xC0);
printf(lcd_putchar,"Dang Lay Mau ");

}
}

16
TÀI LIỆU THAM KHẢO

1. GIÁO TRÌNH KỸ THUẬT VI XỬ LÝ- TRƯỜNG ĐH GTVT TP. HCM


2. GIÁO TRÌNH KỸ THUẬT SỐ - TRƯỜNG ĐH GTVT TP. HCM
3. HỆ THỐNG SỐ VÀ MÃ, CÁC THIẾT BỊ BÁN DẪN (NGUYỄN MINH ĐỨC)
4. LINH KIỆN BÁN DẪN VÀ VI MẠCH (HỒ VĂN SUNG)

---HẾT---

17

You might also like