第15週 16F877で遊ぶ(準備体操1)
毎週、日曜日に入ってくる風俗系のお店の求人折り込み広告。社会の情勢や仕組みがよくわかって、中学生や高校生の教材にぴったりだと思うのですが、いかかでしょう、校長先生。
一説にこの業界は風営法で広告に規制の網がかけられているため、求人広告が宣伝広告でもあるという一石二鳥を狙っているそうな。ああ来ればこう行く、ここ押さえればあっち飛び出す、この積極性が大切なんです、閉塞状況の日本の社会には。(^^)

どの広告マスも決まって「ノーピンク」「託児所完備」「日払い可(前借り可)」などの文字。なんとなく業界の常識と全体像が見えますね。コスチューム貸与も常識らしく、これは金がかからなくていいなと思うと、括弧つきで小さく(制服・浴衣)とか書いてあったりして。一体何着せられちゃうんだか不安な気持ちになります。あ、オレが着る訳じゃないか。(^^;

でも、ちょっとは緻密さがほしい気もします。
「コンパニオンさん募集。風俗店でもない、パブでもない。和風パブ◎◎◎」って、それ自分でパブって言ってるでしょ、店長ったらぁ。
どうやら計算が得意じゃないらしいのもこの業界だとにらみました。
「ノーピンクのお店。こんな高収入。月収100万円。時給、ノーマル1600円、セーラー服1800円、・・・、シースルー3500円、トップレス4500円」 トップレスでノーピンク、それ、客もかなりカタブツにして意志堅固とみました。それに同じ職場なのに服装だけでこんな差があるってのも従業員の間に溝を作って職場がとげとげしくなったりしないでしょうか。管理上問題ありですね。店長さんはみんなのご機嫌とるのにきっとたいへんでしょう。改善の余地ありです。
それはともかく、ノーマル1600円で100万円稼ぐのってけっこう大変な気もします。計算したら、1日24時間働いても月に休みが4日。体がもたんぞ、これは。
ところで、ノーマルってなんだ? じゃあ、セーラー服、・・・、シースルー、トップレス、みんなアブノーマルだって言うのか。あ、そうだね。(^^;

中学生・高校生諸君、毎週日曜日は風俗チラシをしっかり読んで、月収百万円てのとノーマルってのはなかなか両立しがたいことをよぉく学んでおくように。世の中、月収百万ってのは多かれ少なかれ、どこかでちょっとノーマルじゃないことをやってると踏んだ方がいいのだよ。まあ、ノーマルな生き方をしようとすれば月収少な目な人生ってことになる。さあ、どっちを選ぶ?
どうだ、勉強になったろ。


 16F877で遊ぶ
先週配線したPIC16F877でさっそくいろいろ遊んでみます。
手始めに、すでにPIC16F84でやったことをおさらい。
まずはステッピングモータを回してみます。次いでLCDキャラクタ表示をします。
最初は混乱しないようにともにそれぞれ別個にやってみます。うまくいったら一緒に動かすことにします。(来週)



ポートが異なるだけ。
外部コネクタとICソケットで余計な部分をはずしてステッピングモータ部分だけ、LCD部分だけを裸にして影響を除いた上で単独チェックします。
ポートの Data Direction register はすべて出力としますが、トリマ抵抗をつないだRA0/NA0についてはトリマを0V側いっぱいに回しておいて入力設定にしておきました。

(回路図は前回参照)


プログラムはこちら

第9週(ステッピングモータを動かす)第13週(LCD表示器を操作してみる)のプログラムでポートを入れ替えるだけです.。(次回統合して動かします。)
ポート入れ替えだけとはいえ、以下の2点がわからず悪戦苦闘となりました。

1.LVP
コンフィグレーションビットのうちLVP(Low Voltage In-Circuit Serial Programing Enable bit) を書き換えてOFFにしておかないと動きませんでした。(突撃試行錯誤作戦 (^^; ) 
これはヘッダ部分で _LVP_OFF を&で追加記述しておきます。

プログラムの一部(先頭部分)
        LIST        P=PIC16F877   ;
        __CONFIG    _HS_OSC & _PWRTE_ON & _WDT_OFF & _LVP_OFF 
        ;LVPがF877で新たに出現!
        ;(このプログラムでは関係なさそうなのになんでかこれを
        ; 設定しないと動作しない)
        INCLUDE     "P16f877.inc" ;標準ヘッダ定義ファイル
LVPはBポートに関する設定ですが何故なんでしょう。CONFIGレジスタは初期FFですからLVPプログラミングイネーブルになっていて、ワルサするんでしょうか。よくわかりませんが、いずれにしても怪しげなビットですから、とりあえず当面LVPを使うこともなさそう(使いこなせない(^^; )なので「こういうこと」として、例によって深くは追求しないことにします。

2.ADCON1
A/D変換用のアナログ入力を持つPIC16F877は初期値でアナログ入力割付けになっているということです。
そのためデジタルI/Oとして使うこのケースではADCON1レジスタで設定してやらなければなりません。(単に出力設定しただけではダメのようです。)
ADCON1レジスタ bit3から (初期00000000)    
bit3:PCFG3 A/D Port configuration bits3 011Xのとき
全デジタル
       2                   2
       1                   1
bit0    0                   0
プログラムの一部
        BSF     STATUS,RP0      ;バンク1へ切替
        MOVLW   07H
       MOVWF   ADCON1        ;A/D用ピンを全てデジタルI/Oに
        ;◎ADCON1レジスタは初期値は全てアナログ端子となっている
        MOVLW   01H
        MOVWF   TRISA           ;とりあえずポートAをRA0入力、他は出力モードに
        CLRF    TRISB           ;とりあえずポートBを出力モードに設定
        COVLW   80H
        MOVWF   TRISA           ;とりあえずポートCをRC7入力、他は出力モードに設定
        CLRF    TRISD           ;とりあえずポートDを出力モードに設定
        CLRF    TRISE           ;とりあえずポートEを出力モードに設定
        BCF     STATUS,RP0      ;バンク0に戻す     


苦労した割には、ただ16F84でやったと同様な動きです。(^^; まあ、それでいいんですけど。





今週のなるほど


◎ 16F877ではCONFIGでLVPをOFFにしておく。
◎ 16F877ではアナログ割付ピンはADCON1レジスタでデジタルI/Oに設定しないと初期設定でアナログ入力となる。