PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 15-06-2011, 09:57 AM   #1
danghien719
Đệ tử 3 túi
 
danghien719's Avatar
 
Tham gia ngày: Jan 2010
Bài gửi: 52
:
Giúp đỡ về Ngắt của PIC16F877A

chào các bác.
em là amateur, em đang bị mắc 1 vấn đề. Mong rằng các anh chỉ giáo.
Em sử dụng 2 ngắt (RB0 + RDA) thì chương trình dưới PIC ko thể nhận được dữ liệu để xử lý. CÒn lại chương trình vẫn OK. Gửi lên vẫn đc.
Ngắt RB0 cứ 10ms lại xãy ra 1 ngắt.
Mong các bác hướng dẫn có cách nào để cả 2 làm việc ko?
thanks
danghien719 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-06-2011, 12:30 PM   #2
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi danghien719 View Post
chào các bác.
em là amateur, em đang bị mắc 1 vấn đề. Mong rằng các anh chỉ giáo.
Em sử dụng 2 ngắt (RB0 + RDA) thì chương trình dưới PIC ko thể nhận được dữ liệu để xử lý. CÒn lại chương trình vẫn OK. Gửi lên vẫn đc.
Ngắt RB0 cứ 10ms lại xãy ra 1 ngắt.
Mong các bác hướng dẫn có cách nào để cả 2 làm việc ko?
thanks
em không đưa code lên thì làm sao mà giúp.
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 18-06-2011, 03:19 PM   #3
hein_ts
Đệ tử 6 túi
 
Tham gia ngày: Feb 2011
Bài gửi: 156
:
Bạn nên chú ý một việc là: khi chạy hàm thực thi của một ngắt thì các ngắt còn lại sẽ bị disable. Chú ý thêm việc ưu tiên ngắt, ngắt toàn bộ,.... Tất cả đã có trong datasheet. Nó không chạy sai mà chương trình cho nó là không đúng hjhj
hein_ts vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 23-06-2011, 08:38 PM   #4
danghien719
Đệ tử 3 túi
 
danghien719's Avatar
 
Tham gia ngày: Jan 2010
Bài gửi: 52
:
thanks các bạn.
chạy ngon lành cành đào rồi
__________________
HIENCLUBVN -Naval Academy
danghien719 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-06-2013, 10:54 PM   #5
changnhoc123
Nhập môn đệ tử
 
Tham gia ngày: May 2012
Bài gửi: 3
:
Các bạn giúp mình với code mình bị lỗi ngắt RDA

Mình mô phỏng trên Protus thì nó chạy ok, khi nạp vô PIC thì nó không chạy, nhưng mình sờ tay vào chân RC7 thì nó lại chạy, nhả ra nó đứng im, mình kiểm tra thì khi mình xóa đoạn ngắt RDA trong chương trình thì PIC chạy bình thường. Code mình đây, các bác giúp mình với :
#include <16F877a.h>
#fuses HS
#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bi ts=8,stop=1)
#USE FAST_IO(B)
#USE FAST_IO(C)
#USE FAST_IO(D)
#DEFINE RS PORTB.5
#DEFINE RW PORTB.6
#DEFINE E PORTB.7
#BYTE PORTB = 0X6
#BYTE PORTC = 0X7
#BYTE PORTD = 0X8
#BIT B5 = PORTB.5
#BIT B6 = PORTB.6
#BIT B7 = PORTB.7
#BIT DIR= PORTC.2
#BIT KENHB = PORTB.1
INT16 Y, Y1, vtcd;
signed int16 p_err, err, p, i, d, out;
int x, t, m, tr, ch, dv, kp, ki, kd;
CHAR S[]={"0123456789"};
VOID PID();
VOID PWM();
VOID LCD();
VOID LENH();
VOID XUAT();
VOID NGAT();
VOID NHANDULIEU();
VOID MAIN()
{
ENABLE_INTERRUPTS(INT_RDA); // cho phep ngat TRUYEN THONG
ENABLE_INTERRUPTS(INT_EXT); // cho phep ngat RB0
ENABLE_INTERRUPTS(GLOBAL); // cho phép ngat toan cuc
SET_TRIS_B(0B00000011);
SET_TRIS_C(0B10000000);
SET_TRIS_D(0B00000000);

PORTB = 0;
PORTC = 0;
PORTD = 0;
PORTD = 0X01;
LENH();

VTCD = 20;
DIR = 0;
kp = 2;
ki = 1;
kd = 3;
Y = Y1 = 0;

WHILE(1)
{
PID();
PWM();
LCD();
DELAY_US(3000);
putc(Y1);
Y1 = Y;
Y = 0;
}
}
VOID PID()
{
err = vtcd - y1;
p = kp * err;
d = kd * (err - p_err);
i+= ki * err;
p_err = err;
out+= p + i + d; // duy tri van toc
if (out <= 0) {out = 1;} // gioi han do rong xung cho dc chay
if (out >= 255) {out = 255;} // gioi han do rong xung cho dc chay
m = out;
}
VOID PWM()
{
setup_ccp2(ccp_pwm);
set_pwm2_duty(m);
setup_timer_2(t2_div_by_1,255,1);
}
VOID LCD()
{
PORTD = 0X38;
LENH();
PORTD = 0X0C;
LENH();
PORTD = 0X80;
LENH();
PORTD = 'V';
XUAT();
PORTD = 'A';
XUAT();
PORTD = 'N';
XUAT();
PORTD = ' ';
XUAT();
PORTD = 'T';
XUAT();
PORTD = 'O';
XUAT();
PORTD = 'C';
XUAT();
PORTD = ' ';
XUAT();
PORTD = 'T';
XUAT();
PORTD = 'H';
XUAT();
PORTD = 'U';
XUAT();
PORTD = 'C';
XUAT();
PORTD = ' ';
XUAT();
PORTD = 'T';
XUAT();
PORTD = 'E';
XUAT();
PORTD = 0Xc0;
LENH();
TR = Y1/100;
CH = Y1%100;
DV = CH%10;
CH = CH/10;
PORTD = S[TR];
XUAT();
PORTD = S[CH];
XUAT();
PORTD = S[DV];
XUAT();
}
VOID LENH()
{
b5 = 0;
b6 = 0;
b7 = 1;
b7 = 0;
DELAY_US(1000);
}
VOID XUAT()
{
b7 = 1;
b5 = 1;
b6 = 0;
b7 = 0;
DELAY_US(1000);
}
#INT_EXT
VOID NGAT()
{
IF (DIR == 0)
{
IF (KENHB == 1)
{
Y++;
}
}
ELSE
{
IF (KENHB == 0)
{
Y++;
}
}
}
#INT_RDA
VOID NHANDULIEU()
{
kp = getc();
ki = getc();
kd = getc();
vtcd = getc();
t = getc();
m = 0;
pwm();
if ( t == 1 )
{
y = 0;
y1 = 0;
p = 0;
i = 0;
d = 0;
out = 0;
dir = 1;
}
if ( t == 0 )
{
y = 0;
y1 = 0;
p = 0;
i = 0;
d = 0;
out = 0;
dir = 0;
}
}
changnhoc123 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 12:41 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam