giao tiếp máy tính
em đang làm đồ án dùng PC điều khiển động cơ bước thông qua 16f877A, gửi 1 kí tự từ máy tính xuống để đk động cơ xoay thuận nghịch, e có đoạn code sau biên dịch ko lỗi nhưng mô phỏng không chạy, mong các pro giúp e kiểm tra sai ở đâu.
#include <16F877A.h>
#fuses NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP, NOCPD,NOWRT
#use delay(clock=20000000,RESTART_WDT)
#use rs232(baud=9600, parity=N, xmit=pin_C6, rcv=pin_C7, bits=9)
#byte portb=0x06
#byte portd=0x08
char t;
int i;
//quay 1 buoc;
void motvong();
void quay();
void motvongnguoc();
void quaynguoc();
#int_RDA
void RDA_interrupt()
{
t = getc();
{
switch(t)
{
// quay thuan 1 buoc
case 'A': motvong(); break;
case 'B': quay(); break;
//quay nguoc 1 buoc
case 'C': motvongnguoc(); break;
case 'D': quaynguoc(); break;
}
}
}
//CHUONG TRINH CHINH
void main()
{
set_tris_b(0xff);
set_tris_d(0x00);
portd=0b11111110;
enable_interrupts(global);
enable_interrupts(int_RDA);
ext_int_edge(h_to_l);
while(1)
{
}
}
///quay 1 vong
void motvong()
{
for(i=0;i<50;i++)
{
portd=0b00001101;
delay_ms(200);
portd=0b00001011;
delay_ms(200);
portd=0b00000111;
delay_ms(200);
portd=0b00001110;
delay_ms(200);
}
}
//quay thuan
void quay()
{
while(1)
{
portd=0b00001101;
delay_ms(200);
portd=0b00001011;
delay_ms(200);
portd=0b00000111;
delay_ms(200);
portd=0b00001110;
delay_ms(200);
}
}
//mot vong nguoc
void motvongnguoc()
{
for(i=0;i<50;i++)
{
portd=0b00000111;
delay_ms(200);
portd=0b00001011;
delay_ms(200);
portd=0b00001101;
delay_ms(200);
portd=0b00001110;
delay_ms(200);
}
}
//quay nguoc
void quaynguoc()
{
while(1)
{
portd=0b00000111;
delay_ms(200);
portd=0b00001011;
delay_ms(200);
portd=0b00001101;
delay_ms(200);
portd=0b00001110;
delay_ms(200);
}
}
|