掲示板


[記事リスト] [返信する] [新着記事] [過去ログ] [ワード検索] [留意事項] [管理用]

記事No 803
タイトル Re^5: lcdのビジーチェック
投稿日 : 2017/01/22(Sun) 15:44:56
投稿者 negishi   <nekinorijp@yahoo.co.jp>
参照先
lcd_cmd(0x0e);がシミレーションではLATBは0x0eになるのですがPORTBは0x0cとなりカーソルが表示されなかったので割り込みピンint0(RB0)と
int1(RB1)を入力でなく出力に設定したところPORTBは0x0eになったのですが、PORTBが0x0eとなったのと同時に今度はlwdiv.cというファイルが
開いてそこから先にシミレーションが進まなくなってしまいました。どうしたら先に進めることが出来るでしょうか?



> ヘッダファイルなのでmain関数はありません
> lcd_initの辺りをそこら中にブレークポイントを作ったところ
> lcd_incmdはパスしてlcd_cmd(0x06)のcmdoutの処理が終わった所で止まりました。ヘッダーファイルからソースコードへは戻れませんでした。
>
>
> > どこで止まるのかブレークポイントを付けて、デバッグを繰り返して下さい。
> > void lcd_init()のlcd_incmdで止まるしかないです。
> > main()がないので、何とも言えませんが、キチンと呼び出せていないかどちらかです。
> >
> > > やはりbit_testが無いとうまく動かないのでしょうか。
> > > bit_testをつけるとビルドで失敗します
> > > 複数個所あるwhile((lcd_ready(),7));をコメントアウトして下さい。で
> > > コメントアウトして無視するとlcd_initが実行されません。
> > > シミュレーションでも動いてないし、実際にPICに書いてもLCDが何も反応が無くLCDの初期化がされてないみたいです。
> > > どっかからbit_test関数を持ってこれないでしょうかね。ccs-cのコンパイラーではbit_testが動いていたので探せばどっかに関数がありますかね。
> > > なんでxc8のコンパイラでわざわざプログラムを作ったのかはitoa関数が使えるからなんですがxc8ではbit_test関数はないのですかね。困りました。
> > >
> > >
> > >
> > >
> > > > mplabxでデバッグしましたか?
> > > > 関数がないと言われているのではないですか?
> > > > while(bit_test(lcd_ready(),7))が正しそうですが、
> > > > bit_test()関数がどこにあるかは知りません。
> > > > 関数の場所が分からなければ、複数個所あるwhile((lcd_ready(),7));をコメントアウトして下さい。
> > > > コピペするならば、きちんとコピペしましょう。
> > > >
> > > > > lcdのビジーチェックでデータビット7が0になってもビジーチェックを抜けられません。どうすれば抜けられるか教えていただけますか?ソースコードは以下のようになっています。開発環境はmplabx idev3.5 xc8v1.4です 
> > > > >
> > > > > #define _XTAL_FREQ 20000000 // クロック周波数設定
> > > > > /**** 液晶表示用設定 *****/
> > > > > #define DB7 RB7 //DB7 pin
> > > > > #define DB6 RB6 //DB6 pin
> > > > > #define DB5 RB5 //DB5 pin
> > > > > #define DB4 RB4 //DB4 pin
> > > > > //#define DB3 pin_b3 //DB3 pin
> > > > > //#define DB2 pin_c6 //DB2 pin
> > > > > //#define DB1 pin_c5 //DB1 pin
> > > > > //#define DB0 pin_c4 //DB0 pin
> > > > > #define RS LATD7 //RS pin
> > > > > #define RW LATD6 //RW pin
> > > > > #define STB LATD5 //E pin (STB pin)
> > > > > #define bmode 0x0f
> > > > > ///////////////////////////////////////////////
> > > > > // LCD control Library
> > > > > // lcd_init()-------- initialize
> > > > > // lcd_ready()------- busy check
> > > > > // lcd_cmd(cmd)------ send command
> > > > > // lcd_data(string)-- display string
> > > > > // lcd_clear() ------ clear display
> > > > > ///////////////////////////////////
> > > > >
> > > > > /// lcd ready check function
> > > > > int lcd_ready(){
> > > > > int high,low;
> > > > > TRISB=(0x0f | 0xF0); //upper is input
> > > > > LATDbits.RS=0;//_low(rs)
> > > > > LATDbits.RW=1;//high(rw); //read mode
> > > > > LATDbits.STB=1;//high(stb);
> > > > > high=PORTB &0xF0; //input upper
> > > > > LATDbits.STB=0;//low(stb);
> > > > >
> > > > > LATDbits.STB=1;//_high(stb);
> > > > > low=PORTB & 0xF0; //input lower
> > > > > LATDbits.STB=0;//low(stb);
> > > > > TRISB=(0x0f);
> > > > > return(high | (low>>4)); //end check
> > > > > }
> > > > >
> > > > > ////////// lcd display data function
> > > > > void lcd_data(int asci){
> > > > > //db = asci; //set upper data
> > > > > LATB=(asci);
> > > > > LATDbits.RW=0;//_low(rw); //set write
> > > > > LATDbits.RS=1; //set rs high
> > > > > LATDbits.STB=1; //strobe
> > > > > LATDbits.STB=0; //low(stb);
> > > > >
> > > > > asci=asci<<4;
> > > > > LATB=(asci); //set lower data
> > > > > LATDbits.STB=1; //strobe
> > > > > LATDbits.STB=0; //low(stb);
> > > > > while((lcd_ready(),7));
> > > > >
> > > > >
> > > > > }
> > > > > ////////// lcd command out function
> > > > > int cmd;
> > > > > void cmdout(int cmd){
> > > > > LATB=(cmd);
> > > > > LATDbits.RW=0; //set write
> > > > > LATDbits.RS=0; //set rs low
> > > > > LATDbits.STB=1; //strobe
> > > > > LATDbits.STB=0;
> > > > > cmd=cmd<<4;
> > > > > PORTB=(cmd);
> > > > > LATDbits.STB=1; //strobe
> > > > > LATDbits.STB=0;
> > > > > }
> > > > >
> > > > > void lcd_cmd(int cmd){
> > > > > cmdout(cmd);
> > > > > while(( lcd_ready(),7)); //end check
> > > > > }
> > > > >
> > > > > ///// lcd display clear function
> > > > > //MCHP void lcd_clear();{
> > > > > void lcd_clear(){
> > > > > lcd_cmd(1); //initialize command
> > > > > __delay_ms(100);
> > > > > }
> > > > >
> > > > > ///////// lcd initialize function
> > > > > //MCHPvoid lcd_incmd(int cmd);{
> > > > > void lcd_incmd(int cmd){
> > > > > //db = cmd; //mode command
> > > > > LATB=(cmd);
> > > > > LATDbits.RW=0; //set write
> > > > > LATDbits.RS=0; //set rs low
> > > > > LATDbits.STB=1; //strobe
> > > > > LATDbits.STB=0; //low(stb);
> > > > > __delay_ms(10);
> > > > > }
> > > > >
> > > > > //MCHP void lcd_init();{
> > > > > void lcd_init(){
> > > > > __delay_ms(15);
> > > > > lcd_incmd(0x30); //8bit mode set
> > > > > __delay_ms(5);
> > > > > lcd_incmd(0x30); //8bit mode set
> > > > > __delay_ms(5);
> > > > > lcd_incmd(0x30); //8bit mode set
> > > > > __delay_ms(5);
> > > > > lcd_incmd(0x20); //4bit mode set
> > > > > __delay_ms(5);
> > > > >
> > > > > lcd_cmd(0x2C); //DL=0 4bit mode
> > > > > lcd_cmd(0x08); //disolay off C=D=B=0
> > > > > lcd_cmd(0x0e); //display on C=D=1 B=0
> > > > > lcd_cmd(0x06); //entry I/D=1 S=0
> > > > > }

- 関連一覧ツリー (▼ をクリックするとツリーを一括表示します)


- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
Eメール
タイトル
メッセージ
参照先
画像UP
暗証キー (英数字で8文字以内)
投稿キー (右画像の数字を入力) 投稿キー


- 投稿記事修正/削除フォーム -
処理 No 暗証キー

- WebForum -