2013-12-20 8 views
5

8051マイクロコントローラをリセットすると、すべてのポートピンラッチが '1'の値に設定されます。今、私はこの本「組込みC」を読んでいますと、それは以下のコードとTHRの問題は、それが誤った安心感の中に、開発者が小康状態ということです状態:後日、誰かが修正し、場合、cおよび8051マイクロコントローラ

// Assume nothing written to port since reset 
// – DANGEROUS!!! 
Port_data = P1; 

このコードは動作しませんなぜ組み込みCの知識を持つ

unsigned char Port_data; 
P1 = 0x00; 
. . . 
// Assumes nothing written to port since reset 
// – WON’T WORK BECAUSE SOMETHING WAS WRITTEN TO PORT ON RESET 
Port_data = P1; 

誰もが私に説明することができます。必要に応じて、同じポートの全部または一部への書き込みのためのルーチンを含むプログラムは、このコードは、一般的に動作しないのだろうか?それがするのは、char変数に0を代入することだけです。

答えて

2

潜在的な問題。

1)ポートに関連付けられたデータ方向レジスタ(DDR)が期待どおりに設定されていない可能性があるため、電源投入時にDDRが「入力」に設定されている可能性があります。したがって、0にポートを書き込むと、予期しないことに0が読み出される可能性があります。

2)ポートに関連付けられたデータ方向レジスタが「出力」に設定されている可能性があり、データが明確な意味を持たないことがあります。アーキテクチャによっては、リードバックのために出力ビットをシャドーするためにファントムビットが必要な場合があります。

3)パワーアップコードは、リセットコマンドによって入力されることがあります。リセットコマンドは、「リセットベクタ」にジャンプするだけです。したがって、 "コールド"パワーアップに関連するハードウェア固有のアクションは発生しませんでした。これは "ウォーム"パワーアップです。

溶液:(必要に応じて影ビット)パワーアップコードに

明示はDDRと出力値を設定します。

一般的な組み込みプロセッサを話す8051には適用されません。

-1

私は同じ本を読んでいて、数ヶ月前に同じ混乱がありました。後発のPIC18とM0 +のプロジェクトに取り組み、それが本当に何であるかを理解しています。

実際、これはソフトウェア/プログラミング上の問題ではなく、むしろハードウェア/電子的な問題です。あなたの805Xコードがピンの外部入力から1と0の両方を読み取ることができるようにするには、コードはピンに1を書き込む必要があります。あなたのコードがピンにあらかじめ0を書いていれば、外部周辺機器はピンをハイに引き上げることができず、コードが1を読むことができなくなります。電子のもの!!窓の外で風を楽しんだりする場合は、まず窓を開けなければならないと想像してください。

あなたが本当に興味がある場合は、Googleの「ピン値とラッチ値」を自分で設定してください。私はプログラマーがハードウェアエンジニアにそれを任せてもいいと思う.805Xには高度なDDRがないと思う。入力モードと出力モードの間でピンを切り替えるのは簡単ですが、混乱することがあります。

関連する問題