Chào các bạn hôm nay mình sẽ hướng dẫn các bạn tiếp phần UART nha. Trong BÀI 14 mình đã hướng dẫn lý thuyết và đã làm 1 ví dụ nhỏ về giao tiếp UART nên bạn nào chưa xem bài trước thì xem lại bài 14 nha ! Bài hôm bữa chúng ta chỉ dừng lại ở việc giao tiếp giữa 2 con Vi Điều Khiển con Master sẽ gửi lệnh sang con Slave của chúng ta sẽ nhận lệnh và thực hiện nhưng hôm bữa chúng ta chỉ dừng lại ở giao tiếp với LED thôi hôm nay sẽ thêm nút nhấn nữa ! OK.
- Đây là ảnh mô phỏng proteus.
- Đây là code chương trinh Master.
- Đây là ảnh mô phỏng proteus.
- Đây là code chương trinh Master.
#include <16F877a.h>
#FUSES NOWDT, HS, PUT, NOPROTECT,
#use DELAY(clock=16000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
#DEFINE ON PIN_B0
#DEFINE OFF PIN_B1
int8 TDATA;
void main()
{
SET_TRIS_B(0xFF);
PORT_B_PULLUPS(0XFF);
SET_TRIS_D(0x00);
OUTPUT_D(0X00);
WHILE(true)
{
IF (!INPUT(ON))
{
TDATA=0XFF;
PUTC(TDATA);
OUTPUT_D(TDATA);
}
IF (!INPUT(OFF) )
{
TDATA=0X00;
PUTC(TDATA);
OUTPUT_D(TDATA);
}
}
}
#FUSES NOWDT, HS, PUT, NOPROTECT,
#use DELAY(clock=16000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
#DEFINE ON PIN_B0
#DEFINE OFF PIN_B1
int8 TDATA;
void main()
{
SET_TRIS_B(0xFF);
PORT_B_PULLUPS(0XFF);
SET_TRIS_D(0x00);
OUTPUT_D(0X00);
WHILE(true)
{
IF (!INPUT(ON))
{
TDATA=0XFF;
PUTC(TDATA);
OUTPUT_D(TDATA);
}
IF (!INPUT(OFF) )
{
TDATA=0X00;
PUTC(TDATA);
OUTPUT_D(TDATA);
}
}
}
- Đây là code chương trình Slave.
#include <16F877a.h>
#FUSES NOWDT, HS, PUT, NOPROTECT,
#use DELAY(clock=16000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
int8 RDATA;
void main()
{
SET_TRIS_D(0x00);
output_d(0);
while(1)
{
if(kbhit())
{
RDATA=getch();
OUTPUT_D(RDATA);
}
}
}
EmoticonEmoticon