PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Cơ bản về vi điều khiển và PIC (http://www.picvietnam.com/forum/forumdisplay.php?f=8)
-   -   lập trình đếm sản phẩm (http://www.picvietnam.com/forum/showthread.php?t=19601)

shinichi1807 20-05-2012 01:43 AM

lập trình đếm sản phẩm
 
1 Attachment(s)
tình hình là em mới học về PIC nên chưa biết nhiều. em đang lập trình bài đếm sản phẩm bằng timer0(dùng xung ngoại ở chân RA4, hiển thị số LED 7 thanh ở cổng B) nhưng không hiếu sao nó lại ko chạy. các bác xem và sửa hộ em nhé. thanks các bác nhiều.
code:


# include<16F877A.h>
# include<def_877a.h>
# fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
# use delay(clock=12000000)
#use fast_io(b)//chi thuc hien dung lenh I/O dung 1 lan,neu ko thì phai mat 3-4 lenh gi do
unsigned char maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};//ma led 7seg anot chung
int8 dem;
#int_timer0
void interrupt_timer0()
{
set_timer0(6);//xac dinh gia tri ban dau cho timer
++dem;
if (dem==10) dem=0;
}
void main()
{
set_tris_B(0);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_EXT_L_TO_H);
enable_interrupts(global);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us

while(1)
{
output_B(~maled[dem]);
delay_ms(100);
}
}

tdm 21-05-2012 10:49 PM

Trích:

Nguyên văn bởi shinichi1807 (Post 62976)
tình hình là em mới học về PIC nên chưa biết nhiều. em đang lập trình bài đếm sản phẩm bằng timer0(dùng xung ngoại ở chân RA4, hiển thị số LED 7 thanh ở cổng B) nhưng không hiếu sao nó lại ko chạy. các bác xem và sửa hộ em nhé. thanks các bác nhiều.
code:


# include<16F877A.h>
# include<def_877a.h>
# fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
# use delay(clock=12000000)
#use fast_io(b)//chi thuc hien dung lenh I/O dung 1 lan,neu ko thì phai mat 3-4 lenh gi do
unsigned char maled[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};//ma led 7seg anot chung
int8 dem;
#int_timer0
void interrupt_timer0()
{
set_timer0(6);//xac dinh gia tri ban dau cho timer
++dem;
if (dem=10) dem=0;
}
void main()
{
set_tris_B(0);
enable_interrupts(int_timer0);
setup_timer_0(RTCC_EXT_L_TO_H);
enable_interrupts(global);
set_timer0(6);// T_dinhthi = 2*(256 - 6)*1us = 500us

while(1)
{
output_B(~maled[dem]);
delay_ms(100);
}
}

theo như code em viết thì RA4 phải nhận 250 xung mới sảy ra ngắt, lúc đó biến đếm mới được tăng lên 1 đơn vị.
coi lại lệnh này if (dem=10) .

shinichi1807 24-05-2012 12:07 PM

Trích:

Nguyên văn bởi tdm (Post 63437)
theo như code em viết thì RA4 phải nhận 250 xung mới sảy ra ngắt, lúc đó biến đếm mới được tăng lên 1 đơn vị.
coi lại lệnh này if (dem=10) .

đúng là 250 xung thật, sữa lại lệnh if(dem==10). anh giải thích giúp em là tại sao lại 250 xung đc ko? làm thế nào chỉ 1 xung thôi là sảy ra ngắt?
cám ơn anh nhé.


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

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam