![]() |
|
Tài trợ cho PIC Vietnam |
||||||||
| 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 |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
#5 | |
|
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
Trích:
tôi đã sửa lại code cho ban chạy mô phỏng OK. Code:
#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use fast_io(d)
#use fast_io(c)
#use fast_io(a)
#byte portb = 0x06
#byte portc = 0x07
#byte portd = 0x08
#bit rb1 = portb.1
#bit rb2 = portb.2
#bit rb3 = portb.3
#bit led = portb.7
int mode_= 0;
int i,j,k,x,y,z;
int s_chuc,s_dv,m_chuc,m_dv,h_chuc,h_dv;
#int_ext
void mode()
{disable_interrupts(INT_TIMER2);
if (mode_ == 0) disable_interrupts(INT_TIMER2);
mode_ +=1;
if (mode_ > 3)
mode_ = 1;
}
#int_timer2
void update()
{
setup_timer_2(t2_div_by_16,6,10); // na.p la.i cho timer 2
k++ ; // ta(ng bie^'n ?e^'m
if ( k == 250 ) /// 250 x 4.000 = 10.000.000 us
{
k=0;
if(x==0&y==0&z==0)//sửa tại đây
{
led=1;
}
else
{
if (z==0) {z=99;y--;}
z=z-1;
if (y==0)
{
if(x>0)
{
y=59;
x--;
}
if(y>0)
{
y--;
}
}
}
}
}
//******************Hien thi***********************
void hienthi()
{
s_chuc=z/10;//sửa tại đây
s_dv=z%10;
m_chuc=y/10;
m_dv=y%10;
h_chuc=x/10;
h_dv=x%10;//sửa tại đây
for(j=0;j<=50;j++)
{ portc=0b00100000;
i=s_dv;
portd=i;
delay_us(500);
portc=0b00010000;
i=s_chuc;
portd=i;
delay_us(500);
portc=0b00001000;
i=m_dv;
portd=i;
delay_us(500);
portc=0b00000100;
i=m_chuc;
portd=i;
delay_us(500);
portc=0b00000010;
i=h_dv;
portd=i;
delay_us(500);
portc=0b00000001;
i=h_chuc;
portd=i;
delay_us(500);
}
}
// ********************Chuong trinh chinh*************************
void main()
{
x=0;
y=2;
z=99;
led=0;
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
portc=0;
portd=0;
set_tris_c(0);
set_tris_d(0);
set_tris_b(0x0f);
while(1)
{
while(!mode_)
{
if(rb3)
{
enable_interrupts(INT_TIMER2);
setup_timer_2(t2_div_by_16,6,10);
hienthi();
}
hienthi();
}
while(mode_>0)
{
if(rb1) {
while(rb1) { hienthi();}
if (x>=59) x = 0; else
x +=(mode_==1)?1:0;
if (y>=59) y = 0; else
y +=(mode_==2)?1:0;
if (z>=99) z = 0; else
z +=(mode_==3)?1:0;
}
if(rb2) {
while(rb2) { hienthi();}
if (x==0) x = 59; else
x -= (mode_==1)?1:0;
if (y==0) y = 59; else
y -= (mode_==2)?1:0;
if (z==0) z = 99; else
z -= (mode_==3)?1:0;
}
if(rb3)
{
enable_interrupts(INT_TIMER2);
setup_timer_2(t2_div_by_16,6,10); // (4/20M)*4*C0*2
}
hienthi();
}
}
}
Code:
#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use fast_io(d)
#use fast_io(c)
#use fast_io(a)
#byte portb = 0x06
#byte portc = 0x07
#byte portd = 0x08
#bit rb1 = portb.1
#bit rb2 = portb.2
#bit rb3 = portb.3
#bit led = portb.7
int mode_= 0;
int i,j,k,x,y,z;
int s_chuc,s_dv,m_chuc,m_dv,h_chuc,h_dv;
#int_ext
void mode()
{disable_interrupts(INT_TIMER2);
if (mode_ == 0) disable_interrupts(INT_TIMER2);
mode_ +=1;
if (mode_ > 3)
mode_ = 1;
}
#int_timer2
void update()
{
setup_timer_2(t2_div_by_16,6,10); // na.p la.i cho timer 2
k++ ; // ta(ng bie^'n ?e^'m
if ( k == 250 ) /// 250 x 4.000 = 10.000.000 us
{
k=0;
if(x==0&y==0&z==0)//sửa tại đây
{
led=1;
}
else
{
if (z==0) {z=99;y--;}
z=z-1;k==0;
if (y==0)
{
if(x>0)
{
y=59;
x--;
}
if(y>0)
{
y--;
}
}
}
}
}
//******************Hien thi***********************
void hienthi()
{
s_chuc=z/10;//sửa tại đây
s_dv=z%10;//sửa tại đây
m_chuc=y/10;
m_dv=y%10;
h_chuc=x/10;//sửa tại đây
h_dv=x%10;//sửa tại đây
for(j=0;j<=50;j++)
{ portc=0b00100000;
i=s_dv;
portd=i;
delay_us(500);
portc=0b00010000;
i=s_chuc;
portd=i;
delay_us(500);
portc=0b00001000;
i=m_dv;
portd=i;
delay_us(500);
portc=0b00000100;
i=m_chuc;
portd=i;
delay_us(500);
portc=0b00000010;
i=h_dv;
portd=i;
delay_us(500);
portc=0b00000001;
i=h_chuc;
portd=i;
delay_us(500);
}
}
// ********************Chuong trinh chinh*************************
void main()
{
x=0;
y=2;
z=99;
led=0;
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
portc=0;
portd=0;
set_tris_c(0);
set_tris_d(0);
set_tris_b(0x0f);
while(1)
{
while(!mode_)
{
if(rb3)
{
enable_interrupts(INT_TIMER2);
setup_timer_2(t2_div_by_16,6,10);
hienthi();
}
hienthi();
}
while(mode_>0)
{
if(rb1) {
while(rb1) { hienthi();}
if (x>=59) x = 0; else
x +=(mode_==1)?1:0;
if (y>=59) y = 0; else
y +=(mode_==2)?1:0;
if (z>=99) z = 0; else
z +=(mode_==3)?1:0;
}
if(rb2) {
while(rb2) { hienthi();}
if (x==0) x = 59; else
x -= (mode_==1)?1:0;
if (y==0) y = 59; else
y -= (mode_==2)?1:0;
if (z==0) z = 99; else
z -= (mode_==3)?1:0;
}
if(rb3)
{
enable_interrupts(INT_TIMER2);
setup_timer_2(t2_div_by_16,6,10); // (4/20M)*4*C0*2
}
hienthi();
}
}
}
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. |
|
|
|
|
|
|