스위치 4번 : 포트A.0 - A.1 - A.2 - A.3 - 포트 B.0 - B.1 - B.2 - B.3 순으로 LED 점등
스위치 5번 : 포트A.0 - B.3 - B.2 - B.1 - B.0 - 포트 A.3 - A.2 - A.1 순으로 LED 점등 (4번과 반대방향)
스위치 6번 : 일시정지 및 다시시작
(일시정지하는 동안엔 스위치 4, 5번은 인식 안됨)
이런 프로그램을 짜야됩니다ㅠ 포트b변화 인터럽트를 쓰는것 까진 알겠는데, 어떻게 짜야될까요ㅠㅠ
#include <16f628a.h>
#use delay(clock=4000000)
#FUSES NOWDT, XT, NOPUT, NOPROTECT
#byte porta = 0x05
#byte portb = 0x06
int fl=0;
int flag;
int flag_act=3;
int key1;
#int_rb
rb_svr()
{
key1=portb;
key1=(key1 & 0x70); // 키값 마스크 처리
switch(key1)
{
case 0b00010000:
flag_act=0;
break;
case 0b00100000:
flag_act=1;
break;
case 0b01000000:
if(fl==0)
{
flag=flag_act;
fl=1;
flag_act=2;
}
else { flag_act=flag; fl=0; set_tris_b(0xf0);}
break;
}
}
void main(void)
{
char temp=0x10;
char temp1=0;
set_tris_a(0x00);
set_tris_b(0xf0);
enable_interrupts(int_rb);
enable_interrupts(global);
porta=0x00;
portb=0x00;
while(1)
{
if(flag_act==0)
{
portb=temp;
temp1=temp;
rotate_right(&temp1,1);
rotate_right(&temp1,1);
rotate_right(&temp1,1);
rotate_right(&temp1,1);
porta=temp1;
delay_ms(1000);
rotate_left(&temp,1);
}
if(flag_act==1)
{
portb=temp;
temp1=temp;
rotate_right(&temp1,1);
rotate_right(&temp1,1);
rotate_right(&temp1,1);
rotate_right(&temp1,1);
porta=temp1;
delay_ms(1000);
rotate_right(&temp,1);
}
if(flag_act==2)
{
delay_ms(500);
set_tris_b(0x40);
}
}
}
친구한테 받았는데 도저히 감이 안오네요ㅠ
<script type="text/javascript">var vglnk = {api_url: '//api.viglink.com/api', key: '0dff9ade2d1125af6c910069b6d6e155'};</script><script type="text/javascript" async="" src="http://cdn.viglink.com/api/vglnk.js"></script>