PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Các ngôn ngữ lập trình khác (CCS C, HT PIC,...)

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

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 06-05-2009, 07:57 PM   #1
lequocbao
Đệ tử 6 túi
 
lequocbao's Avatar
 
Tham gia ngày: Oct 2008
Nơi Cư Ngụ: HCM
Bài gửi: 137
:
mình dùng encoder 4 dây ra ,vcc,mass và chA,chB.
Cái đó thì yên tâm vì mình đã thử với ngắt ngoài RB0 rồi, 77a đọc rất tốt chỉ có tội là khi tăng tốc độ động cơ lên thì đọc sai kết quả.

thay đổi nội dung bởi: lequocbao, 10-05-2009 lúc 05:01 PM.
lequocbao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 09-05-2009, 06:30 PM   #2
fcvanbachc1
Nhập môn đệ tử
 
Tham gia ngày: Mar 2009
Bài gửi: 1
:
em mới vào nghề,có bài sau muốn hỏi.em đang đọc về ngắt của con dspic,thử lập trình ngắt cho nháy đèn led từ 0-9 cho nó.chương trình của em gặp vấn đề thì phải,vì khi em thay đổi giá trị của PR1 thì thời gian nháy vẫn thế.nó vẫn nháy loạn lên.vậy mong các anh sửa giúp em với,và tư vấn cho em chút it về ngắt,khi nào dùng ngắt trong,khi nào dùng ngắt ngoài.sau đây là đoạn chương trình của em viết cho C30:
#define __dsPIC33FJ12MC202__
#include <p33fj12mc202.h>
int led[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6 7};
int i;
void _ISR _T1Interrupt(void)
{
_T1IF = 0;
}
main()
{
TMR1=0;
PR1=0x2625A; //cho phep ngat sau 1 giay
T1CON=0x8030; //chon ti le dem trc la 256
_T1IF=0; //xoa co ngat TMR1
_T1IE=1; //cho phep ngat
TRISB=0xff00;
while(1)
{
for (i=0;i<10;i++)
{
PORTB=led[i];
}
}
}
fcvanbachc1 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-02-2012, 06:30 AM   #3
Aducbkfet
Nhập môn đệ tử
 
Tham gia ngày: Sep 2010
Bài gửi: 5
:
Mình cũng nghĩ như bạn alycuong là cái set_timer1(3035). Thế thì mỗi lần ngắt Timer nó sẽ đếm được 0.5s do đó cần 2 lần ngắt timer để đếm được 1s. Nhưng ko hiểu sao mình mô phỏng thấy 1s gì mà nhanh khiếp. Mọi người xem hộ mình cái code nhé:
#include <16F877A.h>
#include <def_877A.h>
#fuses NOWDT,PUT,XT,NOPROTECT
#use delay(clock=4000000)


int16 count; //bien dem
/*Khoi tao port*/
void PortInit()
{
TRISD = 0x00; //PORTD la cong xuat
PORTD = 0xFF; //Keo chan PORTD len tro khang cao
}
/*Khoi tao Timer1*/
void Timer1Init()
{
set_timer1(3035);
setup_timer_1(RTCC_INTERNAL|RTCC_DIV_8); //Chon tan so Timer1 la Internal va chia tan 8
enable_interrupts(int_timer1); //Cho phep ngat tran Timer1
enable_interrupts(global); //Cho phep ngat toan cuc
count = 0;
}
//Chuong trinh ngat TMR0
#int_timer1
void interrupt_timer1()
{
set_timer1(3035);
++count;
if(count == 2) //
{
count=0;
PORTD^=0xFF; //Dao tat ca bit portD
}
}
//Chuong trinh chinh
void main(void)
{
PortInit(); //khoi tao port
Timer1Init(); //khoi tao timer1

while(1)
{
interrupt_timer1();
}
}
Aducbkfet vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 26-02-2012, 11:25 AM   #4
cutoi
Nhập môn đệ tử
 
Tham gia ngày: Feb 2012
Bài gửi: 3
:
Tính toán là 1 phần thôi, xong chạy cũng chẳng được chuẩn 1s đâu. Mình toàn áng chừng rồi lấy OSILO trong Proteus ra đo cho chuẩn =))
cutoi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 15-08-2012, 02:40 PM   #5
dcn_dt
Đệ tử 1 túi
 
Tham gia ngày: Oct 2009
Bài gửi: 12
:
Timer1 PIC8F

Có ai giúp em cái này với. Em dùng ngắt timer1 để thử tạo 1 xung trên chân bất kì của PIC8F26K22 để kiểm tra độ chính xác nhưng ko rõ lỗi ở đâu nữa.
Thạch anh:16MHz
Code của em đây ah
Code:
#bit Pulse=getenv("SFR:PORTB").0

#INT_TIMER1
void Timer1_Isr(void)
{
set_timer1(65410);//Tràn sau 125 chu kỳ timer
Pulse ^=1;//Đảo trạng thái chân PORTB.0
}

void main(void)
{
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(65410);
enable_interrupts(INT_TIMER1);
enable_interrupts(global);

while(true);
}
Theo như tính toán của em thì nó phải ra cái xung 2KHz, nhưng mạch thật đo bằng đồng hồ đo tần số là:1.888KHz, mô phỏng ISIS là 1.901KHz
Có ai chỉ ra chỗ thiếu sót giúp em với. Thank
dcn_dt vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 04-07-2016, 12:33 PM   #6
tdmh.2508
Nhập môn đệ tử
 
Tham gia ngày: Apr 2016
Bài gửi: 1
:
em có code xuất tần số mà không hiểu đoạn này anh nào pro giúp mình với

//===========================
#int_ext
void dem_xung()
{
so_xung++;
}

#INT_TIMER1
void tao_tre_1s() // Trinh phuc vu ngat tran TIMER1
{
set_timer1(3036); //(65536-3036).1us.8=50 000us
count_t1++; //tran sau 500 000us=0.5us
if(count_t1==2) // 2*500 000=1s
{
tan_so = so_xung;
so_xung = 0;
count_t1 = 0;

}
}
//=====================

chương trình
#include <16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock=4000000)
#use fast_io(d)
#use fast_io(e)
#byte portd=0x08
#bit rs=0x09.0
#bit rw=0x09.1
#bit e=0x09.2
#bit rb0=0x06.0

int16 so_xung,tan_so,count_t1;
int16 tramnghin,chucnghin,nghin,tram,chuc,dv;
int16 u[10]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x3 9};


#int_ext
void dem_xung()
{
so_xung++;
}

#INT_TIMER1
void tao_tre_1s() // Trinh phuc vu ngat tran TIMER1
{
set_timer1(3036); //(65536-3036).1us.8=50 000us
count_t1++; //tran sau 500 000us=0.5us
if(count_t1==2) // 2*500 000=1s
{
tan_so = so_xung;
so_xung = 0;
count_t1 = 0;

}
}

void ghi_ir()
{
e=1;rs=0;rw=0;e=0;
delay_ms(3);
}
void ghi_dr()
{
e=1;rs=1;rw=0;e=0;
delay_ms(3);
}

void main()
{
{
set_tris_d(0);
set_tris_e(0b000);

enable_interrupts(global);
enable_interrupts(int_ext);
ext_int_edge (H_to_L);
enable_interrupts(INT_TIMER1);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
set_timer1(3036);

portd=0x01;
ghi_ir();
portd=0x0c;
ghi_ir();
portd=0x38;// 2 dong
ghi_ir();

PORTD=0X80;
GHI_IR();
PORTD="T";
GHI_DR();
PORTD="a";
GHI_DR();
PORTD="n";
GHI_DR();
PORTD=" ";
GHI_DR();
PORTD="S";
GHI_DR();
PORTD="o";
GHI_DR();
PORTD=":";
GHI_DR();
}

while(1)
{
tramnghin=tan_so/100000;
chucnghin=(tan_so/10000)%10;
nghin=(tan_so/1000)%10;
tram=(tan_so/100)%10;
chuc=(tan_so/10)%10;
dv=tan_so%10;

portd=0x87;
ghi_ir();
portd=u[tramnghin];
ghi_dr();
portd=u[chucnghin];
ghi_dr();
portd=u[nghin];
ghi_dr();
portd=u[tram];
ghi_dr();
portd=u[chuc];
ghi_dr();
portd=u[dv];
ghi_dr();
portd="H";
ghi_dr();
portd="z";
ghi_dr();

}
}
tdmh.2508 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Ðiều Chỉnh
Xếp Bà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à 06:28 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