• 締切済み

PICC  ビルドトラブル

 宜しくお願いします。  あるソースファイル(net から入手)を ビルド しましたら 次のような メッセージ が 出ました。 これは どうしてでしょうか。 usart.h の 情報 も コピー します。  Error [141] C:\Users\tadao\Desktop\1207\0702_3.c; 3.18 can't open include file "usart.h": No such file or directory  #ifndef _SERIAL_H_ #define _SERIAL_H_ #define BAUD 9600 #define FOSC 4000000L #define NINE 0 /* Use 9bit communication? FALSE=8bit */ #define DIVIDER ((int)(FOSC/(16UL * BAUD) -1)) #define HIGH_SPEED 1 #if NINE == 1 #define NINE_BITS 0x40 #else #define NINE_BITS 0 #endif #if HIGH_SPEED == 1 #define SPEED 0x4 #else #define SPEED 0 #endif #if defined(_16F87) || defined(_16F88) #define RX_PIN TRISB2 #define TX_PIN TRISB5 #else #define RX_PIN TRISC7 #define TX_PIN TRISC6 #endif /* Serial initialization */ #define init_comms()\ RX_PIN = 1; \ TX_PIN = 1; \ SPBRG = DIVIDER; \ RCSTA = (NINE_BITS|0x90); \ TXSTA = (SPEED|NINE_BITS|0x20) void putch(unsigned char); unsigned char getch(void); unsigned char getche(void); #endif  C:\Users\tadao\Desktop\1207  以上 宜しくお願いいたします。 0256  

  • 0256
  • お礼率54% (13/24)

みんなの回答

回答No.1

ヘッダファイルが見つからないと行っているのだからヘッダファイルの内容を書くのは的外れ。 usart.hが無いか、ディレクトリが違うなど。

0256
質問者

補足

説明不足はお詫びいたします。  私は usart.h が あること と ヂレクトリー を 知って貰いたかったのです。あのエラーメッセージは、開くことが出来ないと言っていると思うのですけど、間違っていますかね。 マニュアルを見たら、つずり(?)と ルートをチエックしろとか言うようなことが書いてありました。 (インターネット翻訳) 宜しくお願いします。 0256

関連するQ&A

  • USART通信で文字化け

    __CONFIG( WDTDIS & UNPROTECT & BORDIS & MCLRDIS & PWRTEN & HS & LVPDIS ); // // test.c 2009/07/30 HI-TECH C Compiler // プリスケーラ1/256 セラミック発振子10MHz使用 1命令当り102us // unsigned char buff[10]; unsigned int RecCnt=0; main(){ /*Port initalizeなど .................... */ RCSTA = 0x90; TXSTA = 0x24; SPBRG = 0x40; //BaudRate 9600 FOCS 10MHz unsigned int i; while(1){ putch('A'); for(i=0; i<60000; i++); putch('K'); for(i=0; i<60000; i++); } } ヘッダーファイル #ifndef _SERIAL_H_ #define _SERIAL_H_ #define BAUD 9600 #define FOSC 10000000L #define NINE 0 // Use 9bit communication? FALSE=8bit #define DIVIDER ((int)(FOSC/(16UL * BAUD) -1)) #define HIGH_SPEED 1 #if HIGH_SPEED == 1 #define SPEED 0x04 #else #define SPEED 0 #endif #define RX_PIN TRISB1 #define TX_PIN TRISB2 /* Serial initialization */ #define init_comms()\ RX_PIN = 1; \ TX_PIN = 1; \ SPBRG = DIVIDER; \ RCSTA = (NINE_BITS|0x90); \ TXSTA = (SPEED|NINE_BITS|0x20) void putch(unsigned char); unsigned char getch(void); unsigned char getche(void); #endif void putch(unsigned char byte) { unsigned int i; /* output one byte */ while(!TXIF) /* set when register is empty */ continue; TXREG = byte; } unsigned char getch() { /* retrieve one byte */ while(!RCIF) /* set when register is not empty */ continue; return RCREG; } 上記が自分で作成したUSART通信を使用したプログラムです。AとKを送信しています。ですがハイパーターミナルで受信した文字列を見てみるとまったく異なる文字や空白など文字化けをしていました。 前に作成した時は正常に表示されたのですが、今また流用してみると文字化けしていました。 発振子に10MHz使用でBRGH=1(高速)と9600bps→SPBRG=0x40 原因はここだと思うのですが、、、謎です。 丸投げな感じですが、どうか分かる方回答をお願いします。

  • c18でのusart受信割り込み

    いつもお世話になっております。 pic18f14k50を使用して設計を行っています。 コンパイラはc18です。 usartで受信したときに割り込みを発生させ、規定の処理を実行したいのですが、割り込みが発生せずに困っております。 timer0を使用した割り込みの記述を行った場合は、割り込みは問題なく発生しました。 usart受信割り込みを以下のようなコードで行いたいのですが、間違いがわかる方がいらっしゃいましたら、ご指摘をお願い致します。 void main(){ TRISB=0x20; TRISC=0; OpenUSART(USART_TX_INT_OFF & USART_RX_INT_ON & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH,10);     IPENbits.IPEN=0; IPR1bits.RCIP=1; PIE1bits.RCIE=1; INTCONbits.GIE=1; while(1){ } } #pragma interrupt isr #pragma code isrcode = 0x08 void jump_isr(void){ _asm goto isr _endasm } #pragma code void isr(void){ //割り込み関数 if (PIR1bits.RCIF == 1){ PIR1bits.RCIF =0;         処理; } }

  • C言語で他のファイルの値を参照する方法

    現在、組み込み系のソフト開発を行っています。 ファイルが、main.c と sub.c があります。 main.cで  #define kcode 0x01 と定義します。 その後、 sub.cでこのkcode の値を参照したいため、 #if kcode == 0x01 #endif と書きましたがコンパイルエラーになりました。 仕方なく、main.cで const unsigned char kcode 0x01; と書いて、sub.cで extern unsigned char kcode; if(kcode == 0x01){ } と書きました。 これしか方法がないのでしょうか? よろしくお願いします。

  • プログラミングハッシュ値についての質問

    #ifndef _SHA1_H_ #define _SHA1_H_ //#include <stdint.h> /* * If you do not have the ISO standard stdint.h header file, then you * must typdef the following: * name meaning * uint32_t unsigned 32 bit integer * uint8_t unsigned 8 bit integer (i.e., unsigned char) * int_least16_t integer of >= 16 bits * */ typedef unsigned int uint32_t; typedef unsigned char uint8_t; typedef short int_least16_t; #ifndef _SHA_enum_ #define _SHA_enum_ enum { shaSuccess = 0, shaNull, /* Null pointer parameter */ shaInputTooLong, /* input data too long */ shaStateError /* called Input after Result */ }; #endif #define SHA1HashSize 20 /* * This structure will hold context information for the SHA-1 * hashing operation */ typedef struct SHA1Context { uint32_t Intermediate_Hash[SHA1HashSize/4]; /* Message Digest */ uint32_t Length_Low; /* Message length in bits */ uint32_t Length_High; /* Message length in bits */ /* Index into message block array */ int_least16_t Message_Block_Index; uint8_t Message_Block[64]; /* 512-bit message blocks */ int Computed; /* Is the digest computed? */ int Corrupted; /* Is the message digest corrupted? */ } SHA1Context; /* * Function Prototypes */ int SHA1Reset( SHA1Context *); int SHA1Input( SHA1Context *, const uint8_t *, unsigned int); int SHA1Result( SHA1Context *, uint8_t Message_Digest[SHA1HashSize]); #endif /* のプログラムを160ビットのハッシュ値を今出力しているのですが16ビットだけを出力するようにしたいです。[SHA1HashSize/4]のところを直せば16ビットだけ出力できるらしいのですが、今のところ書き変えてもそれらしい答えが出てきませんどなたかご教授ください

  • VC2005のDLLを6.0で呼び出すには

    VC 2005 Pro Editionで作ったライブラリ(ヘッダ、lib、dll)を頂きました。    頂いたDLLの形式は定義ファイル.defを使わない形式、declspec(dllexport)を使う形式の方です。  呼び出し側はVC6.0EnterPrize(SDK)を使います。 (諸事情により6.0以上にUPすることは不可能)     まず、静的リンクをし、関数を呼び出してみました。  (設定のリンクよりlibをリンクさせ、ヘッダをインクルードして)  すると以下のメッセージが出てしまいます。 リンク中... Dialog1.obj : error LNK2001: 外部シンボル ""__declspec(dllimport) void __cdecl Init(unsigned char *,unsigned char *,unsigned char *,unsigned char *)" (__imp_?Init_Card@@YAXPAE000@Z)" は未解決です Debug/CardMake.exe : fatal error LNK1120: 外部参照 1 が未解決です 。 link.exe の実行エラー    色々やってみましたが、このエラーから回避できませんでした。  ヘッダ自体に #ifdef _USRDLL #define DLL_PORT __declspec(dllexport) #else #define DLL_PORT __declspec(dllimport) #endif    の宣言があるので、別に特別なことをしなくても、大丈夫そうなのですが、何故か出来ません。  次に動的リンクを行っていました。  するとLoadLibraryでエラーになり、GetLastErrrorで14001(エラーメッセージはつかめず)が返ってきました。 (色々調べたところ定義ファイルがないと動的リンクはできないようですね)    というわけでにっちもさっちも行かなくなった状況です。  そこでご質問です。 (1)定義ファイルを使わない形式のライブラリ(暗示的に定義されているもの)はどのように呼び出させばよいでしょうか? (2)2005のライブラリを6.0から呼び出すことは可能ですか?  また呼び出す方法は?  すいませんがご回答をお願いします。

  • どういった計算をしてるのか知りたい

    以下のコードはある特殊なファイルのCRCを算出するものですが、算出できてもこのコードのプログラムだと算出だけでCRCをうまく合わせられるように変更ができないので、計算してバイナリ上で変更できるように計算公式が知りたいです。 ☆CRC.cpp Hidden Block (10 post(s) are required, you have 32): #ifndef _CCRC32_CPP #define _CCRC32_CPP #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <iostream> #include "CRC.H" void CCRC32::Initialize(void) { memset(&this->ulTable, 0, sizeof(this->ulTable)); // 256 values representing ASCII character codes. for(int iCodes = 0; iCodes <= 0xFF; iCodes++) { this->ulTable[iCodes] = this->Reflect(iCodes, 8) << 24; for(int iPos = 0; iPos < 8; iPos++) { this->ulTable[iCodes] = (this->ulTable[iCodes] << 1) ^ (this->ulTable[iCodes] & (1 << 31) ? CRC32_POLYNOMIAL : 0); } this->ulTable[iCodes] = this->Reflect(this->ulTable[iCodes], 32); } } // Reflection is a requirement for the official CRC-32 standard. // You can create CRCs without it, but they won't conform to the standard. unsigned long CCRC32::Reflect(unsigned long ulReflect, char cChar) { unsigned long ulValue = 0; // Swap bit 0 for bit 7 bit 1 For bit 6, etc.... for(int iPos = 1; iPos < (cChar + 1); iPos++) { if(ulReflect & 1) ulValue |= 1 << (cChar - iPos); ulReflect >>= 1; } return ulValue; } unsigned long CCRC32::FileCRC(const char *sFileName) { unsigned long ulCRC = 0xffffffff; FILE *fSource = NULL; unsigned char sBuf[CRC32BUFSZ]; int iBytesRead = 0; if( (fSource = fopen(sFileName, "rb")) == NULL) { return 0xffffffff; } do{ iBytesRead = fread(sBuf, sizeof(char), CRC32BUFSZ, fSource); this->PartialCRC(&ulCRC, sBuf, iBytesRead); }while(iBytesRead == CRC32BUFSZ); fclose(fSource); return(ulCRC ^ 0xffffffff); } unsigned long CCRC32::FullCRC(unsigned char *sData, unsigned long ulLength) { unsigned long ulCRC = 0xffffffff; this->PartialCRC(&ulCRC, sData, ulLength); return ulCRC ^ 0xffffffff; } //For Example usage example, see FileCRC(). void CCRC32::PartialCRC(unsigned long *ulInCRC, unsigned char *sData, unsigned long ulLength) { while(ulLength--) { *ulInCRC = (*ulInCRC >> 8) ^ this->ulTable[(*ulInCRC & 0xFF) ^ *sData++]; } } #endif ☆CRC.h Hidden Block (10 post(s) are required, you have 32): #ifndef _CCRC32_H #define _CCRC32_H // This is the official polynomial used by CRC-32 in PKZip, WinZip and Ethernet. #define CRC32_POLYNOMIAL 0x04c11db7 #define CRC32BUFSZ 1024 //Used for FileCRC() class CCRC32{ public: void Initialize(void); unsigned long FileCRC(const char *sFileName); unsigned long FullCRC(unsigned char *sData, unsigned long ulLength); void PartialCRC(unsigned long *ulInCRC, unsigned char *sData, unsigned long ulLength); private: unsigned long Reflect(unsigned long ulReflect, char cChar); unsigned long ulTable[256]; // CRC lookup table array. }; #endif わかる方よければ教えてください。

  • トランジスタ技術8月号:UARTについて

    こんにちは。 トランジスタ技術2007年8月号付録のdsPIC30Fを使って色々といじっているのですが、UARTのところで問題が現れてしまいました。 付録基盤の23・24ピン(dsPIC30F2012の16・17ピン)のURx/UTxを使って、他の組み込みチップと20~30バイトのパケットを通信したいのですが、ボーレートやパリティの設定を正しく行っても送受信ができません。 PCのRS232-Cと組み込みチップを繋げて通信はできているのですが、付録基盤から同じパケットを送信すると不定値が現れてしまいます。 電圧や配線は確かめましたが、特に問題がありそうな場所はありませんでした。 ソースは次のような感じです。助けていただけないでしょうか。 #include <uart.h> #include <p30f2012.h> void init() { unsigned int _U1BRG; // U1BRG register config unsigned int _U1MODE; // U1MODE register config unsigned int _U1STA; // U1STA register config CloseUART1(); ConfigIntUART1( UART_RX_INT_DIS & UART_TX_INT_DIS ); // U1BRG register _U1BRG= ( (7370000*4/19200)/16); // Fcy / BaudRate / 16 // U1MODE register, I/O (U1TX/U1RX), N81 _U1MODE = UART_EN & UART_IDLE_CON & UART_RX_TX & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_EN_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT; // U1STA register _U1STA = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE & UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR; // Open UART1 OpenUART1(_U1MODE, _U1STA, _U1BRG); } // end of init() int main(void){ unsigned int packet[] = {パケットデータ} unsigned int result[30]; unsigned int i; // write process for(i=0; i<PACKET_LENGTH; i++) { while(U1STAbits.UTXBF != 0) { ; } U1TXREG = packet[i] & 0xFF; } while(!U1STAbits.TRMT) {;} // read process for(i=0; i<PACKET_LENGTH; i++) { while(U1STAbits.URXDA != 0) {;} result[i] = U1RXREG & 0xFF; } // for(i) while(1) {;} } // end of main()

  • PIC12F675、HC-SR04のプログラム

    PIC12F675にプログラムをMPLABX IPEで書き込んで、超音波センサ HC-SR04の距離が5cm以下の時にブザーが鳴る(出力が5Vになる)ようにしたいです。 以下のプログラムで出力は、距離に関わらず5Vか0Vで一定になっています。 プログラムに間違いがあれば、教えていただけないでしょうか。 #include <xc.h> #include <stdio.h> //12F675 #include <stdlib.h> #pragma config FOSC = INTRCIO // Oscillator Selection bits (INTOSC oscillator: I/O function on GP4/OSC2/CLKOUT pin, I/O function on GP5/OSC1/CLKIN) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-Up Timer Enable bit (PWRT enabled) #pragma config MCLRE = OFF // GP3/MCLR pin function select (GP3/MCLR pin function is digital I/O, MCLR internally tied to VDD) #pragma config BOREN = OFF // Brown-out Detect Enable bit (BOD disabled) #pragma config CP = OFF // Code Protection bit (Program Memory code protection is disabled) #pragma config CPD = OFF // Data Code Protection bit (Data memory code protection is disabled) #define _XTAL_FREQ 32000000 #define TX_UART_SIZE 3 #define SONIC_TRIG GPIO5 #define SONIC_ECHO GPIO4 #define SONIC_TEMP GPIO2 #define SONIC_BUZZ GPIO1 #define IO_OFF 0 #define IO_ON 1 #define TIME_OFF -1 #define TIME_UP 0 #define TIME_START_H 0xD8 #define TIME_START_L 0xF0 #define TIME_LED_CNT_MAX 5 #define TIME_LED_CNT2_MAX 15 unsigned char cnt10ms; char TimerLed1; char TimerLed2; int main(int argc, char** argv) { long echo_time; long dist; OSCCAL = 0b00110000 ; // 内部クロック8MHz ANSEL = 0x00 ; // AN未使用、デジタルI/Oに割当てる CMCON = 0x07; // コンパレータ未使用 TRISIO = 0b00011100 ; // RA2,3,4を入力にし、他は出力に割当てる GPIO = 0b00000000 ; // 出力ピンの初期化(全てLOWにする) T1CON = 0b01110000 ; // ゲート有効、Hiでカウント、単一パルス、T1Gピン TMR1ON = 1; // タイマー1開始 while(1) { // タイマ1のカウンタ準備 TMR1 = 0; // カウンタの初期化TMR1 = 0; // トリガ送信 SONIC_TRIG = IO_ON; __delay_us( 10 ); SONIC_TRIG = IO_OFF; // エコー信号のON待ち while( SONIC_ECHO == IO_OFF ) { } // エコー信号のOFF待ち while( SONIC_ECHO == IO_ON ) { } // 超音波の往復時間を取得 echo_time = TMR1; // 往復時間から片道の時間にする echo_time /= 2; // パルス時間から距離(cm)に変更 dist = echo_time * 34 / 1000; if( dist <= 5 ) //距離5cm以下でブザー出力 { (SONIC_BUZZ = 1); } else { (SONIC_BUZZ = 0); } __delay_ms( 1000 ); } return (EXIT_SUCCESS); }

  • AU携帯コネクタとRS232Cでシリアル通信で

    AUの携帯を制御する RBK-110CIIN(リュウド 携帯キーボード)と言う機器からプロトコル信号を 取りたいと思い、D-SUB9ピンとCDMAコネクタを 接続し、ポートモニターで内容を取得しようとしているのですが うまく 信号が取れません。どなたか この手の配線お知りのかたご教授願えますでしょうか よろしくお願いいたします。 接続 CDMA 1番 -> D-SUB 5番 GND CDMA 11番-> D-SUB 3番 RX TX CDMA 13番-> D-SUB 2番 TX RX 参考資料 D-SUB9PIN http://ja.wikipedia.org/wiki/RS-232 CDMAONEコネクタ http://www.naxnet.or.jp/~masafumi/pin.html ポートモニター http://www.shoshin.co.jp/c/digi/portmon/index.html 携帯キーボード http://www.reudo.co.jp/serial30/index.html

  • 2進数でのシリアル通信

    シリアルを用いてデータを伝送するプログラムを作りたいのですが、よく分かりません。 10進数では出来たのですが2進数に変換する際に上手く行きません。 シリアル通信のプログラムとして以下を使用しています。 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <termios.h> #include <fcntl.h> #include <errno.h> #define BAUDRATE B9600 //hentyou-kaisu per second #define BSIZE 64 //byte size #define CR 0x0D // carriage return int fd; //file descriptor 0:H-nyuryoku,1:H-syuturyoku,2;error struct termios otio; int open_serial_port(char *modem_dev) //modem_dev = serial_dev { struct termios ntio; if ((fd = open(modem_dev, O_RDWR | O_NOCTTY)) < 0) { // O_RDWR=read&write O_NOCTTY= perror(modem_dev); exit (1); } tcgetattr(fd, &otio); //tanmatsu-no-now-settei-syutoku memset(&ntio, 0, sizeof(ntio)); ntio.c_cflag = BAUDRATE | CS8 | CLOCAL | CREAD; ntio.c_cc[VTIME] = 0; //burst-de-datadenso-wo-timeout-surutameno-timer ntio.c_cc[VMIN] = 1; //jyusin-moji-no-min tcflush(fd, TCIFLUSH); // not read data-wo flash tcsetattr(fd, TCSANOW, &ntio); //new-tanmatsu-settei-watasu return (0); } void close_serial_port(void) { tcsetattr(fd, TCSANOW, &otio); //motono-settei-ni-modosu close(fd); } int main(int argc, char **argv) { char *serial_dev; // char buf[BSIZE]; //data-wo-kakikomu-buffa-no-top-address char *buf = (char *)malloc(sizeof(char)*64); char msg[BSIZE]; int i,j; j=0; if (argc != 2) { fprintf(stderr, "usage : %s serial_dev\n", argv[0]); exit (1); } serial_dev = argv[1]; //device to write e.g. /dev/ttyUSB0 memset(buf, '\0', BSIZE); //m byte memory block no set \0=char-gatano-0 memset(msg, '\0', BSIZE); //syokika open_serial_port(serial_dev); i = 0; while (1) { //infinite loop sprintf(buf, "%d,", i); //printf-wo-buf-ni j = strlen(buf); write(fd, buf, j); //write to modem-device printf("%s\n", buf); sleep (2); //read(fd, msg, BSIZE); //printf("%s\n", msg); i++; if (i >= 10) i = 0; } close_serial_port(); free(buf); exit (0); } 2進数変換プログラムは、 #include <stdio.h> #include <stdlib.h> int main(void) { int i, n; int bits[1024]; int digit, amari; printf("10進数: "); scanf("%d", &digit); n=0; while(digit>=1){ amari = digit % 2; /* 配列変数に順番に代入して */ bits[n++] = amari; digit = digit / 2; } /* 逆順に表示している */ for(i=n-1; i>=0; i--){ printf("%d", bits[i]); } printf("\n"); return 0; } この両者をつなぎ合わせたいのですが、どうすればよろしいでしょうか。