Trích:
Nguyên văn bởi foremostpirate
Vậy không có cách nào sao ? Hhuhuhu!!!!!!
|
tại sao lại không (nhưng cũng phải mất vài chu kỳ máy)
Code:
#include <16F877A.h>
#include <def_877a.h>
#include <DEFS_16F877A.h>
#device *=16 //su dung het ram trong pic
# fuses NOWDT, XT, NOPROTECT, NOLVP, PUT
# use delay (clock = 4000000)
void DELAY();
int8 bien=0,x=0,quay;
#int_ext
void ngat()
{
x=0xaa;
bien++;
if(bien>1)bien=0;//dem=0->2
}
void main()
{;
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 );
set_timer1(0x0000);//thiet lap gia tri ban dau cho timer1
trisb=0x01;
trisd=0;
portd=0x00;
while(true)
{
switch(bien)
{
case 0: {
portd=0x01;
delay();
for(quay=0;quay<=7;quay++)
{
portd<<=1;//quay trai
delay();
if(x==0xaa)
{
x=0;
break;
}
}
break;}
case 1: {
portd=0x80;
delay();
for(quay=0;quay<=7;quay++)
{
portd>>=1;//quay phai
delay();
if(x==0xaa)
{
x=0;
break;
}
}
break;}
}
}
}
void delay(void)
{
int8 tam;
for(tam=0;tam<=2;tam++)
{
if(x==0xaa)
break;
set_timer1(0x0000);//thiet lap gia tri ban dau cho timer1
while(TMR1IF==0)
{
if(x==0xaa)
break;
}
TMR1IF=0;
}
}