#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);
}