電子書籍の厳選無料作品が豊富!

回路図を添付しました。動作確認しましたが全く動きません。コードの間違いをご指摘下さい。
#include<xc.h>
#pragma config PWRTE=ON,WDTE=OFF,FOSC=LP,CP=OFF,LVP=OFF
void init_port();
void init_timer();
void segment_set_data(short seg1,short seg2,short seg3,short seg4,short dot);
void segment_set_data_ss(short seg1,short seg2,short dot);
void interrupt intr();
void segment_disp();
void segment_disp_ss();
long clock_msec;
short lock;
#define LOCK 1
#define UNLOCK 0
void main(void){
short hh,mm,ss;long temp;init_port();init_timer();
INTCONbits.PEIE = 1;INTCONbits.GIE = 1;
while (1) {
temp=clock_msec /1000;
hh=temp/3600;
mm=(temp%3600)/60;
ss=temp%60;
segment_set_data(hh/10,hh%10,mm/10,mm%10,2);
segment_set_data_ss(ss/10,ss%10,1);
if (RE0==0) {
hh++;ss=0;
if(hh==24){hh=0;}
lock=LOCK;
clock_msec=(((long)hh*3600)+((long)mm*60)+(long)ss)*1000;
lock=UNLOCK;
}
if (RE1==0){
mm++;ss=0;
if(mm==60){mm=0;}
lock=LOCK;
clock_msec=(((long)hh*3600)+((long)mm*60)+(long)ss)*1000;
lock=UNLOCK;
}
_delay(8192);
}
}
void init_port(){
TRISA=0b000000;PORTA=0b000000;TRISB=0b00000000;PORTB=0b00000000;
TRISC=0b00000000;PORTC=0b00000000;TRISD=0b00000000;
PORTD=0b00000000;TRISE=0b011;PORTE=0b000;
}
void init_timer(){
T2CONbits.T2CKPS0 = 0;T2CONbits.T2CKPS1 = 0;T2CONbits.TOUTPS3 = 1;
T2CONbits.TOUTPS2 = 1;T2CONbits.TOUTPS1 = 1;T2CONbits.TOUTPS0 = 1;
TMR2 = 0;PIE1bits.TMR2IE = 1;PIR1bits.TMR2IF = 0;PR2 = 0.512;
T2CONbits.TMR2ON = 1;
}
short seg_dat[4] = {0, 0, 0, 0};short dot_point = 0;
void segment_set_data(short seg1, short seg2, short seg3, short seg4, short dot){
seg_dat[0] = seg1;seg_dat[1] = seg2;seg_dat[2] = seg3;seg_dat[3] = seg4;
dot_point = dot;
}
short seg_dat_ss[2] = {0, 0};short dot_point_ss = 0;
void segment_set_data_ss(short seg1, short seg2, short dot){
seg_dat_ss[0] = seg1;seg_dat_ss[1] = seg2;dot_point_ss = dot;
}
long clock_msec = 0;short lock = UNLOCK;
void interrupt intr(){
if(PIR1bits.TMR2IF == 1){
PIR1bits.TMR2IF = 0;
segment_disp();
segment_disp_ss();
if(lock == UNLOCK){
clock_msec++;
if(clock_msec == 86400000){clock_msec = 0;}
}
}
}
short seg_tbl[10] = {0b00111111,0b00000110,0b01011011,0b01001111,0b01100110, 0b01101101,0b01111101,0b00100111,0b01111111,0b01101111};
short seg_cnt = 0;
void segment_disp(void){
switch(seg_cnt){
case 0:
RA3=1;
PORTC=seg_tbl[seg_dat[0]];
if(dot_point==1){RC7=1;}
RA0=0;seg_cnt=1;break;
case 1:
RA0=1;
PORTC=seg_tbl[seg_dat[1]];
if(dot_point == 2){RC7=1;}
RA1=0;seg_cnt=2;break;
case 2:
RA1=1;
PORTC=seg_tbl[seg_dat[2]];
if(dot_point==3){RC7=1;}
RA2=0;seg_cnt=3;break;
case 3:
RA2=1;
PORTC=seg_tbl[seg_dat[3]];
if(dot_point==4){RC7=1;}
RA3=0;seg_cnt=0;break;
}
}
void segment_disp_ss(void){
switch(seg_cnt){
case 0:
PORTB=seg_tbl[seg_dat_ss[0]];
if(dot_point_ss==1){RB7=1;}
seg_cnt=1;break;
case 1:
PORTD=seg_tbl[seg_dat_ss[1]];
if(dot_point_ss==2){RB7=1;}
seg_cnt=0;break;
}
}

「PIC16F877AとC-552SRDと」の質問画像

A 回答 (2件)

デバッグ方法を勉強しようと言うなら答えは来るでしょうが、


丸投げじゃ無視されるだけですよ。
http://so-zou.jp/robot/tech/microcomputer/pic/de …
    • good
    • 0
この回答へのお礼

参考サイト拝見しました。
正直デバック方法が理解できてません。
理何もお返事できる段階でもないことに気づきました。
何もお返事できる段階でもないことに気づきました。
お返事が出来ずに申し訳ありませんでした。

お礼日時:2015/08/07 09:55

まずLEDを1つだけ点灯させるところからやってみてください。

    • good
    • 0
この回答へのお礼

まずLEDを1つだけ点灯させるところからやってみようと思います。
割り込みの指定方法をちゃんとできなければならないのですね。
今、本や参考サイトをみて勉強しています。
何もお返事できる段階でもないことに気づきました。
お返事が出来ずに申し訳ありませんでした。

お礼日時:2015/08/07 09:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!