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 01-05-2010, 03:20 AM   #1
hammecuala
Nhập môn đệ tử
 
Tham gia ngày: Feb 2009
Bài gửi: 6
:
lênh ép ngắt timer dùng ngôn ngữ C là gì

lúc trước học asm thì thẩyte6n PIC, timer có chức năng ép ngắt dùng lệnh: BSF PIR1,TMR1IF
Và lệnh cho timer chạy là :BSF T1CON,TMR1ON

thay đổi nội dung bởi: hammecuala, 09-05-2010 lúc 12:57 AM.
hammecuala vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-05-2010, 03:40 AM   #2
hammecuala
Nhập môn đệ tử
 
Tham gia ngày: Feb 2009
Bài gửi: 6
:
múc đích của mình là muốn làm cái bài dùng timer1 nhưng chỉ khi mình bấm nút nhấn thì timer1 mới bắt đầu đếm và khi mình nhấn nút nhấn thứ 2 thì timer 1 phải ngưng đếm và nhảy vào chương trình ngắt
hammecuala vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-05-2010, 10:12 AM   #3
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi hammecuala View Post
lúc trước học asm thì thẩyte6n PIC, timer có chức năng ép ngắt dùng lệnh: BSF PIR1,TMR1IF
Và lệnh cho timer chạy là :BSF T1CON,TMR1ON


đến khi hoc C thì chỉ thấy có lệnh cho timer chạy là: set_timer0()
còn lệnh ép ngắt thì kg có, mình tìm rồi thì có người nói là timer chay song song với chương trình nên kg thể can thiệp vào việc ngắt của nó dc

Xin các bẹn chỉ cho mình lệnh ép ngắt của timer dùng ngôn ngữ C
Bạn có thể viết TMR1IF = 1, với TMR1IF là bit TMR1IF trong thanh ghi PIR1 đã được trình dịch định nghĩa sẵn, hay bạn tự định nghĩa theo cú pháp mà trình dịch hỗ trợ.

Không rõ bạn đã học ngôn ngữ C chưa?

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-05-2010, 01:09 PM   #4
hammecuala
Nhập môn đệ tử
 
Tham gia ngày: Feb 2009
Bài gửi: 6
:
mình đã học C rồi, dùng CCS nên có thể đọc hiểu code đc, nếu bạn có gì chỉ dẫn bằng chương trình C thì càng tốt, thanks.

xin cho hỏi là mình muốn làm 1 bộ đếm thời gian giữa 2 lần nhấn nút(thực ra nó là 2 công tắc hành trình) rồi sau đó xuất giá trị thời gian đó ra LCD, mong bạn có thể chỉ cho mình là dùng timer1 đếm thời gian dc kg, hay phải capture của PIC nữa. nếu bạn có chương trình luôn thì hay quá
hammecuala vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 01-05-2010, 06:51 PM   #5
hammecuala
Nhập môn đệ tử
 
Tham gia ngày: Feb 2009
Bài gửi: 6
:
nếu đc xin bac namqn qua trang này giup em với
http://www.picvietnam.com/forum/show...5611#post35611
hammecuala vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 03-05-2010, 06:39 PM   #6
ledinhloi
Nhập môn đệ tử
 
Tham gia ngày: Sep 2009
Bài gửi: 1
:
ngat ngoai

ban phai set tri x potb la (0xf1) thi moi chay duoc vi chan b0 la chan nhan nhan du lieu
ledinhloi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 02-05-2010, 02:22 PM   #7
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi hammecuala View Post
mình viết code như sau, muc đích là khi mình nhấn công tắc rồi thì dãy đèn led nó mới bắt đầu chạy, nhưng nó mình làm thì nó lại chạy ngay cả khi mình chưa nhấn nút

#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTB = 0x06

int16 count;
int8 a;
//Chuong trinh ngat TMR0
#int_timer0
void interrupt_timer0()
{
set_timer0(6);
++count;
if(count == 2000) // 2000*500us = 500000us = 1s
{
count=0;
rotate_left(&a,1);
}
}
//Chuong trinh chinh
void main(void)
{
set_tris_b(0);
set_tris_a(0xff);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(global);
if(input(pin_A0)==0)
{
delay_ms(10);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
a = 0x01;
}

while(true)
{
PORTB = a;
}
}
************************************************** ***
Trích:
Nguyên văn bởi hammecuala View Post
mình viết code như sau, muc đích là khi mình nhấn công tắc rồi thì dãy đèn led nó mới bắt đầu chạy, nhưng nó mình làm thì nó lại chạy ngay cả khi mình chưa nhấn nút

#include <16F877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)
#byte PORTB = 0x06

int16 count;
int8 a;
//Chuong trinh ngat TMR0
#int_timer0
void interrupt_timer0()
{
set_timer0(6);
++count;
if(count == 2000) // 2000*500us = 500000us = 1s
{
count=0;
rotate_left(&a,1);
}
}
//Chuong trinh chinh
void main(void)
{
set_tris_b(0);
adcon1=0x06;//them lenh nay de port A la che do I/O
set_tris_a(0xff);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2);
enable_interrupts(global);
if(input(pin_A0)==0)
{
delay_ms(10);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us
a = 0x01;
}

while(true)
{
PORTB = a;
}
}
__________________
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
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:34 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