- 締切済み
PIC16F819とMAX232Cについて困っています。
まだ駆け出しでわからないことだらけで、以下のプログラムをふまえてPIC16F819とMAX232C(RS232C?)を接続したいのですが、どうプログラム(アセンブラ)を追加したら、また回路的にどうしたらいいのかわからないので教えてください。以下のプログラム(コメント省略)は、電圧変化により出力(LEDの点灯数の変化)を行ったものです。 LIST p=PIC16F819 #include <P16F819.inc> __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF & _LVP_OFF AD_DATA_H EQU 20h AD_DATA_L EQU 21h WAITCOUNT EQU 22h ORG H'00' GOTO START ORG H'04' GOTO START ;------------------------------ ; 初期設定 ;------------------------------ START BSF STATUS, RP0 BCF ADCON1, ADFM BCF ADCON1, ADCS2 BSF ADCON1, PCFG3 BSF ADCON1, PCFG2 BSF ADCON1, PCFG1 BCF ADCON1, PCFG0 MOVLW B'00000001' MOVWF TRISA MOVLW B'00000000' MOVWF TRISB BCF STATUS, RP0 CLRF ADCON0 CLRF PORTA CLRF PORTB ;------------------------------- ; メインルーチン ;------------------------------- MAIN CALL AD_CONVERT MOVLW b'10000000' SUBWF AD_DATA_H, W BTFSC STATUS, C GOTO V_UPPER_HALF GOTO V_LOWER_HALF V_UPPER_HALF MOVLW b'11000000' SUBWF AD_DATA_H, W BTFSC STATUS, C GOTO V_3_4 GOTO V_1_2 V_LOWER_HALF MOVLW b'01000000' SUBWF AD_DATA_H, W BTFSC STATUS, C GOTO V_1_4 GOTO V_ZERO V_3_4 MOVLW b'00000111' MOVWF PORTB GOTO MAIN V_1_2 MOVLW b'00000011' MOVWF PORTB GOTO MAIN V_1_4 MOVLW b'00000001' MOVWF PORTB GOTO MAIN V_ZERO MOVLW b'00000000' MOVWF PORTB GOTO MAIN ;--------------------------------- ; A/D 変換サブルーチン ;--------------------------------- AD_CONVERT MOVLW B'10000001' MOVWF ADCON0 CALL WAIT_100U BSF ADCON0, GO BTFSC ADCON0, GO GOTO ADLOOP MOVF ADRESH, W MOVWF AD_DATA_H MOVF ADRESL, W MOVWF AD_DATA_L RETURN ;------------------------------------------------------------ ; 100usec ( 100usec = 0.2u/Cycle at 20MHz x 500 ) ;------------------------------------------------------------ WAIT_100U MOVLW D'165' MOVWF WAITCOUNT WAIT_100UL DECFSZ WAITCOUNT,F GOTO WAIT_100UL RETURN END 長くなりましたがご教授どうかお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ponpoko213
- ベストアンサー率50% (10/20)
はじめまして,ご質問の投稿からずいぶんと時間がたっているようなので,この回答が届くかどうかはわかりませんが,ご参考までに. いただいたプログラムはA/D変換のテストプログラムなので,経験の無い私にはお答えしかねるのですが,一般論で申し上げるのであれば,他の方のソースを読み,カットアンドコピー&修正しながら習得してゆけばよろしいかと思います. あまり良い例とは言えないかもしれませんが,私も趣味でPICをいじっていて,ブログにその有様を公開しています. http://fp-masamichi.cocolog-nifty.com/pic/ 特段の目的も無く,趣味の日記代わりですが.今はRS-232CやデジタルI/O(液晶表示やスイッチパネルなど)制御を対象に,PIC16F88に厚くなっています.同じ16Fシリーズですからアセンブラは共通ですが,ご質問のPICとは異なります.PIC88はMax232等と組み合わせてRS-232C通信を実現するための非同期シリアルコミュニケーションI/F(UART)を内蔵しているタイプです.強力なPICですが,16F84Aよりも安いんですよ(秋月価格:18PinDIPタイプは230円です). 2008/1/2の日記に公開したソースには,RS-232Cの簡単なテストソフトが入っています.暇さえあればRS-232Cへ"Hello World!!"とのべつ幕無し送信しまくるだけのものですが,Windowsマシン+秋月のUSB-232C変換機にテラターム(フリーのターミナルソフト)を起動して38.4KBpsで連続受信しています.(ごくたまにPIC側の送信ミスなのか,テラターム側の受信こぼれが発生しますが,実用上は全く問題なく動作しています)もちろん,受信側も動作確認は済んでいます. 回路図も以前の記事に添付しています.ただ,RS232Cのドライバレシーバには,MAX232ではなく,もっと格安なADM3202を使っていますが. こんなに小さくて安いCPUですが,侮る無かれ,本当に奥が深いですね.お互い,楽しみましょう.
- zwi
- ベストアンサー率56% (730/1282)
PIC16F819はUARTという回路を内蔵していませんので、下記のページのようにには接続できません。↓ http://www.picfun.com/pic19.html PIC16F84が同様にUART回路なしですので、下記のページが参考になると思います。↓ http://www.picfun.com/equipj30.html タイマー割り込みを利用しているので難易度は上がりますが、PIC16F819でも利用可能です。 よくわからなければ、また質問してください。
お礼
有難うございます。参考にして頑張ってみたいと思います。まだまだ、未熟者ですのでまたわからない事が沢山あると思いますので、その時はまたよろしくお願いします。きっと2,3日したらまた質問させていただくと思います(笑)