tmtm
16-04-2013, 12:14 PM
Cũng lâu quá rồi mới tìm hiểu lại về PIC, mọi kiến thức cũ gần như quên hết. Hôm nay em có bài tập chắc cũng đơn giản với rất nhiều anh chị và các bạn tham gia diễn đàn mà hí hoáy mãi vẫn gặp lỗi.
Bài tập của em là đọc xung ở chân RB4 và hiển thị lên 4 led 7 thanh. Hiển thị 3 led thì OK, nhưng thêm đoạn code để hiển thị led thứ 4 thì gặp lỗi.
Mong các bạn và các anh chị giúp đỡ.
#include <16f877a.h>
#include <def_877a.h>
#fuses xt,nowdt,noprotect,nolvp,nobrownout
#use delay(clock=4000000)
#bit tram= portc.2
#bit chuc= portc.1
#bit dv= portc.0
#bit nghin= portc.3
#bit dk= portb.4
int16 x,y,z,t;
void hien(x,y,z,t);
void khong_lam_viec();
void main()
{
set_tris_d(0b00000000);
set_tris_b(0b00010000);
set_tris_c(0b00000000);
x=0;y=0;z=0;
while(1){
if(dk==0){
loop:
if(dk==1){
z=z+1;
if(z==10){
z=0;
y=y+1;}
if(y==10)
{y=0;
x=x+1;}
if(x==10)
{x=0;
t=t+1;}
if(x==9&y==9&z==9&t==9)
{
khong_lam_viec();}
}
else{hien(x,y,z,t);
goto loop;}
}
hien(x,y,z,t);
}
}
void hien(x,y,z,t)
{
portc=9;
switch(t){
case 0 :{portd=0xc0;break;}
case 1 :{portd=0xf9;break;}
case 2 :{portd=0xa4;break;}
case 3 :{portd=0xb0;break;}
case 4 :{portd=0x99;break;}
case 5 :{portd=0x92;break;}
case 6 :{portd=0x82;break;}
case 7 :{portd=0xf8;break;}
case 8 :{portd=0x80;break;}
case 9 :{portd=0x90;break;}
default:break;
}
delay_ms(5);
portc=3;
switch(x){
case 0 :{portd=0xc0;break;}
case 1 :{portd=0xf9;break;}
case 2 :{portd=0xa4;break;}
case 3 :{portd=0xb0;break;}
case 4 :{portd=0x99;break;}
case 5 :{portd=0x92;break;}
case 6 :{portd=0x82;break;}
case 7 :{portd=0xf8;break;}
case 8 :{portd=0x80;break;}
case 9 :{portd=0x90;break;}
default:break;
}
delay_ms(5);
portc=5;
switch(y){
case 0 :{portd=0xc0;break;}
case 1 :{portd=0xf9;break;}
case 2 :{portd=0xa4;break;}
case 3 :{portd=0xb0;break;}
case 4 :{portd=0x99;break;}
case 5 :{portd=0x92;break;}
case 6 :{portd=0x82;break;}
case 7 :{portd=0xf8;break;}
case 8 :{portd=0x80;break;}
case 9 :{portd=0x90;break;}
default:break;
}
delay_ms(5);
portc=6;
switch(z)
{
case 0 :{portd=0xc0;break;}
case 1 :{portd=0xf9;break;}
case 2 :{portd=0xa4;break;}
case 3 :{portd=0xb0;break;}
case 4 :{portd=0x99;break;}
case 5 :{portd=0x92;break;}
case 6 :{portd=0x82;break;}
case 7 :{portd=0xf8;break;}
case 8 :{portd=0x80;break;}
case 9 :{portd=0x90;break;}
default:break;
}
delay_ms(5);
}
void khong_lam_viec()
{
while(1)
{
hien(x,y,z,t);
}
}
Em xin cảm ơn!
Bài tập của em là đọc xung ở chân RB4 và hiển thị lên 4 led 7 thanh. Hiển thị 3 led thì OK, nhưng thêm đoạn code để hiển thị led thứ 4 thì gặp lỗi.
Mong các bạn và các anh chị giúp đỡ.
#include <16f877a.h>
#include <def_877a.h>
#fuses xt,nowdt,noprotect,nolvp,nobrownout
#use delay(clock=4000000)
#bit tram= portc.2
#bit chuc= portc.1
#bit dv= portc.0
#bit nghin= portc.3
#bit dk= portb.4
int16 x,y,z,t;
void hien(x,y,z,t);
void khong_lam_viec();
void main()
{
set_tris_d(0b00000000);
set_tris_b(0b00010000);
set_tris_c(0b00000000);
x=0;y=0;z=0;
while(1){
if(dk==0){
loop:
if(dk==1){
z=z+1;
if(z==10){
z=0;
y=y+1;}
if(y==10)
{y=0;
x=x+1;}
if(x==10)
{x=0;
t=t+1;}
if(x==9&y==9&z==9&t==9)
{
khong_lam_viec();}
}
else{hien(x,y,z,t);
goto loop;}
}
hien(x,y,z,t);
}
}
void hien(x,y,z,t)
{
portc=9;
switch(t){
case 0 :{portd=0xc0;break;}
case 1 :{portd=0xf9;break;}
case 2 :{portd=0xa4;break;}
case 3 :{portd=0xb0;break;}
case 4 :{portd=0x99;break;}
case 5 :{portd=0x92;break;}
case 6 :{portd=0x82;break;}
case 7 :{portd=0xf8;break;}
case 8 :{portd=0x80;break;}
case 9 :{portd=0x90;break;}
default:break;
}
delay_ms(5);
portc=3;
switch(x){
case 0 :{portd=0xc0;break;}
case 1 :{portd=0xf9;break;}
case 2 :{portd=0xa4;break;}
case 3 :{portd=0xb0;break;}
case 4 :{portd=0x99;break;}
case 5 :{portd=0x92;break;}
case 6 :{portd=0x82;break;}
case 7 :{portd=0xf8;break;}
case 8 :{portd=0x80;break;}
case 9 :{portd=0x90;break;}
default:break;
}
delay_ms(5);
portc=5;
switch(y){
case 0 :{portd=0xc0;break;}
case 1 :{portd=0xf9;break;}
case 2 :{portd=0xa4;break;}
case 3 :{portd=0xb0;break;}
case 4 :{portd=0x99;break;}
case 5 :{portd=0x92;break;}
case 6 :{portd=0x82;break;}
case 7 :{portd=0xf8;break;}
case 8 :{portd=0x80;break;}
case 9 :{portd=0x90;break;}
default:break;
}
delay_ms(5);
portc=6;
switch(z)
{
case 0 :{portd=0xc0;break;}
case 1 :{portd=0xf9;break;}
case 2 :{portd=0xa4;break;}
case 3 :{portd=0xb0;break;}
case 4 :{portd=0x99;break;}
case 5 :{portd=0x92;break;}
case 6 :{portd=0x82;break;}
case 7 :{portd=0xf8;break;}
case 8 :{portd=0x80;break;}
case 9 :{portd=0x90;break;}
default:break;
}
delay_ms(5);
}
void khong_lam_viec()
{
while(1)
{
hien(x,y,z,t);
}
}
Em xin cảm ơn!