#include <htc.h> #include <stdio.h> #include <string.h> #include "uart.h" __CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO); __IDLOC(0001); #define _XTAL_FREQ 4000000 #define tan 5 #define tyo 15 //WRITE No.1(0-63) __EEPROM_DATA(0x43,0x51,0x20,0x43,0x51,0x25,0xFF,0xFF); /* 0-7 00-07 CQ CQ*/ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 8-15 08-0F */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 16-23 10-17 */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 24-31 18-1F */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 32-39 20-27 */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 40-47 28-2F */ __EEPROM_DATA(0x55,0x52,0x20,0x35,0x39,0x39,0x25,0xFF); /* 48-55 30-37 UR 599*/ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 56-63 38-3F */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 64-71 40-47 */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 72-79 48-4F */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 80-87 50-57 */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 88-95 58-5F */ __EEPROM_DATA(0x54,0x4E,0x58,0x20,0x51,0x53,0x4F,0x25); /* 96-103 60-67 TNX QSO*/ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 104-111 68-6F */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 112-119 70-77 */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 120-127 78-7F */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 128-135 80-8F */ __EEPROM_DATA(0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF); /* 136-143 90-97 */ ioport(); char getch(); void putch(char); mojisend(); ra2_1tyo(); ra2_0tyo(); ra2_1tan(); ra2_0tan(); romread(); jmprm1(); jmprm2(); jmprm3(); rs232(); _romcnt(); char rommoji; char rxdata; int cntmoji; int flug1; int flug2; int cnt; int sadd; int romcnt; int scnt; int speed; main() { // OSCCON=0x00; /* 31kHz */ // OSCCON=0x30; /* 500kHz */ OSCCON=0x60; /* 4000kHz */ // OSCCON=0x70; /* 8000kHz */ /*RCSTA,TXSTAの設定位置は BRGH,SPBRGの前に書く、後に書いてもビルドもプログラムもエラーは出ないが、実動作しない*/ RCSTA=0x90; /* USART非同期モード */ TXSTA=0x20; // BRGH=1; /* 31khz 300bps */ // SPBRG=5; // BRGH=1; /* 500khz 1200bps */ // SPBRG=25; // BRGH=1; /* 500khz 2400bps */ // SPBRG=12; BRGH=1; /* 4000khz 1200bps */ SPBRG=207; // BRGH=0; /* 8000khz 2400bps */ // SPBRG=51; // BRGH=0; /* 8000khz 9600bps */ // SPBRG=12; ioport(); romcnt=0; cntmoji=0; cnt=0; sadd=0; flug1=0; flug2=0; speed=5; while(1){ //読み出しの時のspeed if(RA4==1 && RA5==0 && flug2==0) jmprm2(); if(RA4==1 && RA5==1 && flug2==1) jmprm3(); //読み出しアドレスのカウント if(RA4==1 && RA1==0 && flug1==0) jmprm1(); if(RA4==1 && RA1==1 && flug1==1) _romcnt(); //読み出しスタート if(RA4==1 && RA0==0 && flug1==0)romread(); //rs232通信での書き込み、読み出し if(RA4==0) rs232(); } } /* 関数 */ ioport() { ANSEL=0x00; /* RA0,1,2,4,RC0,1,2,3をデジタル */ CMCON0=0x07; /* RA0,1,2RC0,1,2をデジタル */ TRISA=0xFB; /* RA0,1,3,4,5は入力ピンRA2は出力ピン */ TRISC=0x00; /* RC0-5は出力ピン */ PORTA=0xF8; /* RA3,4,5はH RA0,1,2はL */ PORTC=0; /* RC0-5はL */ } char getch() { while(!RCIF); /* 受信したら */ return(RCREG); /* データを読む */ } void putch(char txdata) { while(!TXIF); /* 送信バッファが空いたら */ TXREG=txdata; /* 1バイトだけ書く */ } jmprm1() { __delay_ms(100); flug1=1; } jmprm2() { flug2=1; } jmprm3() { flug2=0; ++speed; if(speed>=30) speed=15; } _romcnt() { __delay_ms(100); flug1=0; ++romcnt; if(romcnt>=3) romcnt=0; if(romcnt==0) sadd=0; if(romcnt==1) sadd=48; if(romcnt==2) sadd=96; } rs232() { //PCからの文字をゲットする rxdata=getch(); switch(rxdata){ case 'x': cnt=0; sadd=0; break; case 'y': cnt=0; sadd=48; break; case 'z': cnt=0; sadd=96; break; case 0x21: speed=18; break; case 0x22: speed=13; break; case 0x23: speed=10; break; case 0x24: speed=7; break; } //ゲット文字が'~'ならPIC EEPROM内容を、'%'が書き込まれている所まで読み出す。 if(rxdata == 0x7E){ romread(); } //ゲット文字が >= 0x20 && <= 0x5Aなら、'%'が送られるまでEEPROMに書き込む //if(rxdata >= 0x20 && rxdata <= 0x5A || rxdata == 'a' || rxdata == 'b' || rxdata == 'h' || rxdata == 's' ){ //space,/,%,A-Z,0-9,a,b,h,s は書込み可 if(rxdata >= 0x2F && rxdata <= 0x39 || rxdata >= 0x41 && rxdata <= 0x5A || rxdata==0x25 || rxdata== ' ' || rxdata == 'a' || rxdata == 'b' || rxdata == 'h' || rxdata == 's' ){ eeprom_write(cnt+sadd,rxdata); ++cnt; //cntが>=49もしくは、ゲット文字が'%'なら、cntを0にして書き込みから抜ける。 if (cnt>=48 || rxdata == 0x25){ cnt=0; } } } romread() { //do while の記述方法 whileの所の(rommoji != '%')が成立中(%以外)は繰り返す。'%'なら抜ける do{ rommoji=eeprom_read(cntmoji+sadd); printf("%c\n",rommoji); mojisend(); ++cntmoji; }while(rommoji != '%'); cntmoji=0; /* 抜けたらcntmoji=0にする*/ flug1=0; } mojisend() { switch(rommoji){ case 'A': ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'a': ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); break; case 'B': ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'b': ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); break; case 'C': ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'D': ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'E': ra2_1tan(); ra2_0tyo(); break; case 'F': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'G': ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'H': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'h': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); break; case 'I': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'J': ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'K': ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'L': ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'M': ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'N': ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'O': ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'P': ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'Q': ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'R': ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 'S': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case 's': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); break; case 'T': ra2_1tyo(); ra2_0tyo(); break; case 'U': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'V': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'W': ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'X': ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'Y': ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case 'Z': ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case '1': ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case '2': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case '3': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case '4': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case '5': ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case '6': ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case '7': ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case '8': ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case '9': ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; case '0': ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tyo(); ra2_0tyo(); break; case ' ': ra2_0tyo(); ra2_0tyo(); break; case '/': ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tan(); ra2_0tan(); ra2_1tyo(); ra2_0tan(); ra2_1tan(); ra2_0tyo(); break; } } ra2_1tyo() { RA2=1; for(scnt=0;scnt<speed;scnt++) __delay_ms(tyo); RA2=0; } ra2_0tyo() { for(scnt=0;scnt<speed;scnt++) __delay_ms(tyo); } ra2_1tan() { RA2=1; for(scnt=0;scnt<speed;scnt++) __delay_ms(tan); RA2=0; } ra2_0tan() { for(scnt=0;scnt<speed;scnt++) __delay_ms(tan); }