8051 (c51) マイクロコントローラーのアセンブリから C 言語、ブートからアプリケーションまで [オープンソース シリーズ チュートリアル]
著者 | オオカミはクジラになるだろうか |
---|---|
作成日 | 2022-09-29 |
-
このウェアハウスの関連 URL:
CSDN 記事アドレス
Gitee プロジェクトおよびソース コード アドレス -
関連ウェアハウス:
8051 コンテンツの一部についても説明されている組み込み全体の紹介:
Caijing Embedded / Embedded Knowledge Graph WiKi
C Language Framework の説明。これにより、C 言語で何を学ぶべきかを完全に理解できます:
embedded_programming_skills/ 0_doc / 02-C Language Framework Preparation.md
1. 倉庫の紹介
工事名 | 効果 |
---|---|
01_ハローワールド | Keil デバッグ ウィンドウから Hello world を直接出力します。 |
02_Keil_boot_アノテーション | Keil に付属するアセンブリ ブート ソース コードに注釈を付ける |
03_組み立て_レジスター | 8051 実際のプログラム エントリを表示し、カスタム レジスタ ヘッダー ファイルを追加します |
04_マクロ_機能と_irq | アセンブラマクロ定義関数と割り込み処理を表示 |
05_組み立てる_ハロー_ワールド | アセンブリを使用して Keil デバッグ ウィンドウから Hello world を出力する |
06_uart0_ループバック | Keil デバッグ出力ウィンドウのシリアル ポート ループバック |
… | … |
- これは 8051 教育リポジトリです。特定のハードウェアを使用する代わりに、Keil をシミュレータとして直接使用し、入出力に仮想シリアル ポートを使用し、ハードウェアの問題で立ち往生しないようにコンピュータ上で直接コンパイルして実行します。Keil 公式 Web サイトから Keil ソフトウェアをダウンロードしてから、このウェアハウスをダウンロードします。ウェアハウスでプロジェクトを開いた後、プログラムを実行すると、結果を直接確認できます。8051 のレジスタ、命令セット、Keil 擬似命令、アセンブリ ブート、アセンブリ プログラミング ルーチン、C 言語プログラミング ルーチン、ソフトウェア フレームワーク、および通信フレームワークに焦点を当てます。
- ウェアハウスには複数の Keil プロジェクトとソース コードがあり、各ウェアハウスは独立しており、直接開いてコンパイルし、実行できます。
- この倉庫の対象者は次のとおりです。
- 私は学校で「C51 マイクロコントローラーの原理 (アセンブリ)」や「C 言語プログラミング」などの同様のコースを勉強したことがありますが、商用プロジェクトの開発で 8051 チップを使用したことはありません。
- 8051チップを使用してC言語で商用プロジェクト開発を行ったのですが、チップの電源投入からmain()関数実行までの8051のブートプロセスが分かりません。
- 8051 純粋なアセンブリのプログラミングは行われていません。
- アセンブリを使用して 8051 ブート プログラムを最初から作成した人はいません。
- 本業は32ビットCPUのC言語開発ですが、仕事中に一時的に8051チップのプログラミングに触れたことがある、あるいは8051関連の知識、特にアセンブリロジックを復習したいだけです。
- なぜ 8051 チップを使用せずに Keil のシミュレータを使用してプログラムを直接実行するのでしょうか?
- プログラミングの習慣:
C 言語を学習する過程、または単に C 言語の純粋な論理関数を検証する過程では、GCC+Makefile、Qt、または VS (Microsoft Visual Studio) を直接使用してコンパイルおよび実行できます。printf はコンパイル環境の正確さを検証できます。
しかし、8051チップを搭載したハードウェアを使用すると、環境構築の過程でさまざまな問題が発生し、ガイダンスがないとボトルネックに遭遇することが多く、開発ボードの購入にも追加費用がかかります。
32 ビット CPU の組み込み開発であれば、オープンソースの QEMU シミュレーターも利用できます。 - 仕事の習慣:
元のチップ工場では、チップが開発中で FPGA 上で実行できない場合、組み込みソフトウェア エンジニアの作業は待ってくれません。多くの場合、最初にシミュレーターを使用してソフトウェア プロジェクトを構築し、プログラムの作成とテストを同時に行います。 - 時間を節約し、いつでもどこでもプログラムのデバッグを容易にします:
特定のハードウェア ドライバーが関与していない限り、さまざまな通信ドライバーのロジックとビジネス ロジックは、ソフトウェア シミュレーターを使用してシミュレートできます。コンピューターのみが必要で、自宅などの場所でコードを作成してデバッグできます。 - 汎用性:
あらゆる種類の組み込みチップがあり、すべてのチップに精通している人はいません。チップの最大公約数であるカーネルは、シミュレーターですでに完全に実行できます。32 ビット CPU の場合、QEMU はすでに USB、ネットワーク、シリアル ポート、SPI、I2C、ディスプレイなどのさまざまな周辺機器をシミュレートでき、Keil C51 もシリアル ポートと IO をシミュレートできるため、ソフトウェア ロジックを学習するには十分です。 - シンプル:
Keil プロジェクトを開いて直接実行し、ソフトウェア上でシリアル ポートの出力結果を確認します。
- Keil + Proteus を使用して 8051 ハードウェアをシミュレートしてみてはいかがでしょうか?
- 確かに一部のマイクロコントローラー開発者はソフトウェアとハードウェアに精通しており、この方法を受け入れることができますが、ほとんどの組み込みソフトウェア開発者はハードウェア関連のソフトウェアを使用した経験がありません。Proteus は学習コストを大幅に増加させるため、将来の作業では使用されません。
- 多数の 8051 件の教育記事がインターネット上で見つかります。なぜこの倉庫を作成するのでしょうか?
- インターネット上で見つかる多数の 8051 チュートリアルは、ほとんどが学校のロジックのセットです。さまざまなレジスタやアセンブリ命令が章で説明されています。これらは完全なプロジェクトを形成しておらず、そのまま使用することはできません。
- インターネット上には 8051 件の記事が繰り返し掲載されており、検索するのは時間の無駄です。
- 実際、私も 8051 を学習中ですが、どこを書いてどこを記憶を深めるべきかがわかり、久しぶりに同じ問題に遭遇したときに戻って調べるのにも便利です。
2. 環境整備と知識の蓄え
- 次のステップに進む前に、Keil ソフトウェアをダウンロードしてインストールし、Keil の基本的な使用方法を理解する必要があります。ソース コード内のいくつかの記述メソッドを確認するだけで、実際にプログラムを実行して結果を確認する必要がない場合は、この記事を無視してください。Keil ソフトウェアのインストールの基本的なプロセスは次のとおりです。他のインストール チュートリアルの URL は後でリストされます。
- 公式 Web サイトから Keil C51 プログラムをダウンロードします。これは、エディタ、コンパイラ、リンカ、シミュレータが統合された IDE です。
- ダウンロードアドレス https://www.keil.com/demo/eval/c51.htm は個人情報の登録と入力が必要です 評価版は 2K の容量のコードのコンパイルのみをサポートしていますが、このウェアハウスにあるプロジェクトの前の部分は 2K の範囲内にあり、直接実行およびデバッグできます。
- 既に Keil を使用している人は、Keil クラック版をダウンロードしてクラックすることができます。
- インストール プロセス中、インストール パスにスペースや中国語のディレクトリを含めることはできません。
- インストールが完了したら、「Keil uVision5」ソフトウェアを開きます。
- Keil のインストールと導入参考リンク
-
1 つは Keil 公式 Web サイトでアカウントを登録し、Keil C51 をダウンロードしてインストールする方法ですが、インストールされるソフトウェアは 2K 内のプログラムのコンパイルのみをサポートします。
https://www.keil.com/demo/eval/c51.htm -
2つ目は、ひび割れたKeil C51を取り付けることです。
51 MCU - Keil5 のインストール方法 (ナニー レベルのチュートリアル)
[組み込み学習] MCU 入門 - 1. Keil のインストール (バージョン 51)
-
Keil の公式 Web サイトによると、98 社の 9500 個のチップ (2022 年 9 月 29 日現在) をサポートしており、そのうちの半分は ARM コアに基づいており、半分は 8051 コアに基づいており、少量は他のコアに基づいています。
-
すべてのデバイスを表示するには、[レガシー デバイス リスト]をクリックします。
-
参考URL
メーカーリスト MDK5デバイスリスト: https://www.keil.com/dd2/
デバイスリスト レガシーデバイスリスト: https://www.keil.com/dd/ -
Keil に加えて、他の 8051 シミュレータには次のものがあります
。
- ケイル指令
-
Keil A51 アセンブリ コードは、習得する必要がある多くの一般的に使用される疑似命令をサポートしています。アセンブリを記述するときによく使用されます。これらの疑似命令は、A51 に関連する英語ドキュメントのすべての説明で確認できます。国内 Web サイトですべての疑似命令の完全な翻訳を見つけることはできませんが、オリジナルの英語版は Keil 公式 Web サイトで見つけることができます。注意深く検索しませんでしたが、C51 ユーザーのドキュメントのシリーズのいくつかの章にあるはずですマニュアルも
-
Keil アセンブリ疑似命令の導入については、同階層ディレクトリにあるドキュメント ["Keil A51 アセンブリ疑似命令"](./02_doc/Keil A51 アセンブリ疑似命令.md) を参照してください。
- Keil 8051 疑似命令関連参考 Web サイト
Keil ドキュメント: https://developer.arm.com/documentation#
C51 ユーザーマニュアル: https://www.keil.com/support/man_c51.htm
ARM ユーザーマニュアル: https://www.keil.com/support/man_arm.htm
A51 疑似命令
keil+A51
Keil 疑似命令
keilA51 アセンブリ言語疑似-instruction
RSEG の使用法とアセンブリの疑問符の意味 定義さ
れた Keil ディレクティブ
- プロジェクトの作成と Keil の使用に関する参考 Web サイトは以下のとおりです。
51 MCU トレーニング (1) —— Keil 基本操作 Keil C51 ソフトウェアを使用した
C8051 MCU BootLoader 体験第 13 章 Keil c51 と Proteus Virtual Simulation Platform の使用
- 次の使用例では、作成した Keil プロジェクトとソース コードを提供しますので、これを直接使用できますが、プロジェクトを最初から最後まで作成したい場合は、次の手順を参照してください。
- 既に Keil を使用している人は、Keil クラック版をダウンロードしてクラックすることができます。
- 公式 Web サイトから Keil C51 プログラムをダウンロードします。これは、エディタ、コンパイラ、リンカ、シミュレータが統合された IDE です。
- ダウンロードアドレス https://www.keil.com/demo/eval/c51.htm で個人情報の登録・記入が必要です 評価版では容量 2k のコードのみコンパイル可能です。
- インストール プロセス中、インストール パスにスペースや中国語のディレクトリを含めることはできません。
- 安装完成后打开“Keil uVision5”软件,
点击“Project”–>“new uVision Project”–>选中你愿意放工程的目录–>
在选择设备弹窗中,我选择Cadence公司的R8051XC2(8DPTR),选择哪款8051芯片都无所谓,前期只操作基础的8051寄存器,不同公司的基础寄存器是一致的,我这里以这款芯片为例–>
点击下一步后,弹出“Copy ‘STARTUP.A51’ to Project Folder and Add File to Project?”,点是,这样编译器会自动给你填充一份Boot汇编代码模板,这个Boot代码能让你跳转到main函数。 - 左上隅にある 2 つの矢印のボタンをクリックしてプログラムをコンパイルすると、下の「ビルド出力」領域に
「.\Objects\cadence_first_project」 - エラー 0 件、警告 2 件というプロンプトが表示されます。エラーが 0 の
場合は、コンパイルが成功したことを意味し、生成される実行可能ファイルはサフィックスなしの Objects\cadence_first_project になります。 - 点击右上角红色的‘d’图标,能直接使用软件自带的模拟器仿真运行8051程序,
如果提示“EVALUATION MODE…2K”,表示未注册的评估版只支持2K代码,我前期的代码没有超过2K,直接点确定下一步–>
使用Keil默认提供的boot汇编程序,测试时断点会停在“?C_STARTUP”这一行–>
点击行号前面可以创建和取消断点–>
点击左上角几个带箭头或者叉叉的图标,可以单步执行、跳转到函数内部执行、持续运行、立即停止运行,快捷键是F10、F11、F5–>
进入调试模式后,Keil里有各种窗口看串口输出的信息、RAM里的数据值、当前各个变量和寄存器的值、所有寄存器的值,修改当前变量的值,让程序中的变量按自己手动输入的值生效并运行,如果程序跑飞了可以查看异常寄存器和地址寄存器存储的上一个语句的地址。
- このチップに精通している場合は、Keil に付属のブート プログラムを使用せず、レジスタ マクロ定義全体を自分で記述し、Keil プロジェクト設定で魔法の杖のアイコン –> デバイス –> [Use LX51] および [Use AX51] をチェックし、自分で定義した SFR 特殊関数レジスタを使用します。
- プログラムをボードにダウンロードする必要がある場合、または 16 進数実行可能ファイルをより容量の小さい bin ファイルに変換する必要がある場合は、出力ページの「HEX ファイルの作成」にチェックを入れてください。
- Keil を使用する際のヒント:
-
Keil 付属の GB2312 中国語エンコーディングを使用せず、UTF-8 中国語エンコーディングを使用することで、バージョン管理に Git を使用するときに中国語が正常に表示され、Linux と Windows 間でプロジェクトを切り替えた後に文字化けが発生しにくく、回復できない中国語情報の損失が発生しにくくなり
ます。 -
Keil は、Tab を固定の 4 つのスペースに設定します (Linux カーネルと Git Tab との互換性を保つため、8 バイトで表示するために、スペースによって表示形式が固定される可能性があります) 構成 –> エディター –> C/C++ ファイル –> タブ サイズ:
4
2. 8051 リソースの説明
- 直感的にわかるように、8051 のすべてのレジスタをここに直接リストし、8051 のすべてのアセンブリ命令テーブルは、このレジスタ テーブルの後の記事へのリンクとして提供されます。
- 8051 MCU データ メモリは 2 つの領域に分割できます: 00H ~ 7FH はチップ上の下位 128 バイト RAM 領域、80H ~ FFH は特殊機能レジスタ領域 (SFR) です。
- 8051 IP コアは Cadence の r8051xc を使用しており、関連する汎用レジスタは r8051xc の関連ドキュメントを確認する必要があります。
- 8051 のレジスタの末尾が 0 と 8 のアドレスは、0x80 P0、0x88 TCON のようにビットアドレス可能であり、8051 のビットアドレス可能な各ビットには対応する名前があり、その名前を直接操作することでビットを操作できます。具体的な意味については、プログラムのソース コード内の注意事項を参照するか、必要に応じてインターネットで直接検索してください。
- アドレス 00H ~ 7FH の下位 128 バイトの内蔵 RAM 領域は、汎用レジスタ領域アドレス (00H ~ 1FH)、ビットアドレッサブル領域 (20H ~ 2FH)、ユーザ RAM 領域 (30H ~ 7FH、ここでスタックも設定可能) の 3 つの領域に分割できます。
- 8051汎用レジスタ導入、合計128個:
住所 | 0x00 | 0x01 | 0x02 | 0x03 | 0x04 | 0x05 | 0x06 | 0x07 |
---|---|---|---|---|---|---|---|---|
汎用レジスタ | 0グループR0 | 0グループR1 | 0グループR2 | 0グループR3 | 0グループR4 | 0グループR5 | 0グループR6 | 0グループR7 |
住所 | 0x08 | 0x09 | 0x0A | 0x0B | 0x0C | 0x0D | 0x0E | 0x0F |
1グループR0 | R1 1セット | R2 1セット | R3 1セット | R4 1セット | R5 1セット | R6 1セット | R7 1セット | |
住所 | 0x10 | 0x11 | 0x12 | 0x13 | 0x14 | 0x15 | 0x16 | 0x17 |
R0 2セット | R1 2セット | R2 2セット | R3 2セット | R4 2セット | R5 2セット | R6 2セット | R7 2セット | |
住所 | 0x18 | 0x19 | 0x1A | 0x1B | 0x1C | 0x1D | 0x1E | 0x1F |
R0 3セット | R1 3セット | R2 3セット | R3 3セット | R4 3セット | R5 3セット | R6 3セット | R7 3セット | |
住所 | 0x20 | 0x21 | 0x22 | 0x23 | 0x24 | 0x25 | 0x26 | 0x27 |
ビットアドレス | 00H~06H | 07H~0FH | 10時間〜16時間 | 17H~1FH | 20時〜26時 | 27時〜2時 | 30時間〜36時間 | 37H~3FH |
住所 | 0x28 | 0x29 | 0x2A | 0x2B | 0x2C | 0x2D | 0x2E | 0x2F |
40時間〜46時間 | 47H〜4FH | 50時間〜56時間 | 57H~5FH | 60H~66H | 67H~6FH | 70H~76H | 77H~7FH | |
住所 | 0x30 | 0x31 | 0x32 | 0x33 | 0x34 | 0x35 | 0x36 | 0x37 |
残りは | ユーザーRAM | 一般的な開発 | スタック | …… | ||||
住所 | 0x38 | 0x39 | 0x3A | 0x3B | 0x3C | 0x3D | 0x3E | 0x3F |
住所 | …… | …… | …… | …… | …… | …… | …… | …… |
住所 | 0x78 | 0x79 | 0x7A | 0x7B | 0x7C | 0x7D | 0x7E | 0x7F |
- R8051XC2 特殊機能レジスタ領域 (SFR) の導入、最大 128、8051 の汎用レジスタが太字になります。
住所 | 0x80 | 0x81 | 0x82 | 0x83 | 0x84 | 0x85 | 0x86 | 0x87 |
---|---|---|---|---|---|---|---|---|
説明 | P0 IOポートラッチ | SPスタックポインタ | DPLデータアドレス下位8ビット | DPH データアドレス上位 8 ビット | WDTREL | PCON | ||
住所 | 0x88 | 0x89 | 0x8A | 0x8B | 0x8C | 0x8D | 0x8E | 0x8F |
TCONタイマー制御 | TMODタイマーモード | TL0 タイマ0の下位8ビット | TL1 タイマー 1 下位 8 ビット | TH0 タイマー0 上位 8 ビット | TH1 タイマ 1 上位 8 ビット | CKCON | ||
住所 | 0x90 | 0x91 | 0x92 | 0x93 | 0x94 | 0x95 | 0x96 | 0x97 |
P1 IOポートラッチ | DPS | DPC | ページセル | D_PAGESEL | ||||
住所 | 0x98 | 0x99 | 0x9A | 0x9B | 0x9C | 0x9D | 0x9E | 0x9F |
S0CON串口控制 | S0BUF串口锁存 | IEN2 | S1CON | S1BUF | S1RELL | |||
地址 | 0xA0 | 0xA1 | 0xA2 | 0xA3 | 0xA4 | 0xA5 | 0xA6 | 0xA7 |
P2 IO口锁存器 | DMAS0 | DMAS1 | DMAS2 | DMAT0 | DMAT1 | DMAT2 | ||
地址 | 0xA8 | 0xA9 | 0xAA | 0xAB | 0xAC | 0xAD | 0xAE | 0xAF |
IE0 中断允许 | IP0 | S0RELL | ||||||
地址 | 0xB0 | 0xB1 | 0xB2 | 0xB3 | 0xB4 | 0xB5 | 0xB6 | 0xB7 |
P3 IO口锁存器 | DMAC0 | DMAC1 | DMAC2 | DMASEL | DMAM0 | DMAM1 | ||
地址 | 0xB8 | 0xB9 | 0xBA | 0xBB | 0xBC | 0xBD | 0xBE | 0xBF |
IP 中断优先级 IEN1 | IP1 | S0RELH | S1RELH | IRCON2 | ||||
地址 | 0xC0 | 0xC1 | 0xC2 | 0xC3 | 0xC4 | 0xC5 | 0xC6 | 0xC7 |
IRCON | CCEN | CCL1 | CCH1 | CCL2 | CCH2 | CCL3 | CCH3 | |
地址 | 0xC8 | 0xC9 | 0xCA | 0xCB | 0xCC | 0xCD | 0xCE | 0xCF |
T2CON | CRCL | CRCH | TL2 | TH2 | RTCSEL | |||
地址 | 0xD0 | 0xD1 | 0xD2 | 0xD3 | 0xD4 | 0xD5 | 0xD6 | 0xD7 |
PSW 程序状态字 | IEN4 | I2C2DAT | I2C2ADR | I2C2CON | I2C2STA | SMB2_SEL | SMB2_DST | |
地址 | 0xD8 | 0xD9 | 0xDA | 0xDB | 0xDC | 0xDD | 0xDE | 0xDF |
ADCCON | P5 IO口 | I2CDAT | I2CADR | I2CCON | I2CSTA | SMB_SEL | SMB_DST | |
地址 | 0xE0 | 0xE1 | 0xE2 | 0xE3 | 0xE4 | 0xE5 | 0xE6 | 0xE7 |
ACC 累加器 | SPSTA | SPCON | SPDAT | SPSSN | P6 IO口 | |||
地址 | 0xE8 | 0xE9 | 0xEA | 0xEB | 0xEC | 0xED | 0xEE | 0xEF |
P4 IO口 | MD0 | MD1 | MD2 | MD3 | MD4 | MD5 | ARCON | |
地址 | 0xF0 | 0xF1 | 0xF2 | 0xF3 | 0xF4 | 0xF5 | 0xF6 | 0xF7 |
B 寄存器 | ||||||||
地址 | 0xF8 | 0xF9 | 0xFA | 0xFB | 0xFC | 0xFD | 0xFE | 0xFF |
-
8051的指令集和boot原理介绍,含指令集中完整256条指令的表格:
embedded-knowledge-wiki/ documents / 2.3.1.1_c51编程.md - https://gitee.com/langcai1943/embedded-knowledge-wiki/blob/develop/documents/2.3.1.1_c51编程.md -
其它8051资源描述的网页链接:
8051单片机内部RAM低128单元划分为哪三个部分?各有什么特点?
8051基础之三:数据存储类型
8051内部RAM位寻址区
8051系列单片机-
R8051XC2的寄存器描述在网上没搜到,但是创建完R8051XC2工程后,在Keil中进入debug模式后,View–>Symbols Windows里面能看到所有寄存器地址。
-
Keil调试时“Register”窗口有最简单的寄存器:r0~r7、a、b、sp、sp_max、PC $、dpspl、dptr07、dpc07、states、sec、psw(p、f1、ov、rs、f0、ac、cy)。
-
Keil调试时“Symbols”窗口中有Virtual Registers寄存器:PPAGE、XPAGE、XTAL、CLOCK、INTPINS、INT0PIN、INT1PIN、PORT03O、PORT03I、SO1IN、S01OUT、SO1TIME、T01PIN、SWD、I2S、SPI、RTC。
-
Keil调试时“Symbols”窗口中有Special Function Registers:SP、PSW、ACC、A、B、DPL、DPH、DPS、DPC、CKCON、PCON、IEN04、IP01、IRCON、IRCON2、P0P3、S01CON、SO1BUF、SO1RELL、SO1RELH、ADCON、IEN2、TCON、TMOD、TL01、TH01、T2CON、TL2、TH2、CRCL、CRCH、CCEN、CCL13、CCH13、WDTREL、MD05、ARCON、I2CDAT、I2CADR、I2CCON、I2CSTA、I2C2ADR、I2C2CON、I2C2STA、SPSTA、SPCON、SPDAT、SPSSN、DMAS02、DMAT02、DMAC0~2、DMASEL、DMAM0、DMAM2、SRST、RTCSEL、RTCDAT
-
-
参考网址:
r8051中文资料,r8051xc所有寄存器描述
8051单片机21个特殊功能寄存器和指令汇总
R8051XC 数据表(PDF)
ATT7035A_7037A_7037B用户手册 - 钜泉
Toolchain Extensions for R8051XC/R8051XC2 Core
特殊功能寄存器(SFR)详解 ——以8051单片机为例
实验二 8051单片机IO口输出操作实验
三、工程与源码介绍
1)Hello world输出
-
本工程主要演示使用Keil创建一个R8051XC2的默认工程,使用Keil自带的Boot汇编文件,然后新建一个main.c文件,写一个printf函数 + 简单的串口0驱动,并能从软件窗口上看到printf的结果。
-
创建工程的步骤详见章节“二、环境准备及知识储备”中“Keil创建工程”小节中的内容,你可以省掉这步,直接打开现有的工程。
-
工程路径:本文档同级目录/01_proj_and_src/01_Hello_world/
-
你可以直接双击打开 ./01_proj_and_src/01_Hello_world/01_Hello_world.uvproj工程
-
然后编译:点击软件上面状态栏第三排左侧两个向下小箭头的图标。看到.\Objects\01_Hello_world" - 0 Error(s)表示编译通过。
-
然后开始运行:点击软件上面状态栏第二排右侧黑色放大镜+红色“d”的小图标;如果你的软件是官网下载的未破解的评估版,会出现一个弹窗,关掉那个弹窗不管它;程序会停在main()函数的第一行,先不要继续运行。
-
输出的结果会在Keil Debug状态下的UART #1窗口中;这个窗口Keil不会主动为你打开,你需要点击在软件上面第三排图标中的小串口带一个黑色串口的图标旁边的小三角形,选中里面的UART #1,然后软件右下角就会出现UART #1窗口。
-
继续运行:点击软件左上角一个向下箭头的图标,UART #1窗口中出现了Hello world!的输出。
-
额外的知识:
- Keil输出窗口选项中,除了有UART #1、UART #2和UART #3外,还有一个Debug (Printf) Viewer窗口,这个窗口C51是用不了的,这是Keil MDK为ARM等芯片准备的,例如调试STM32时,不需要写串口驱动,而且直接写串口驱动还有点麻烦,而直接对fputc()函数进行重定向之后,能直接在这个窗口看到printf()的输出;这和在PC上直接写C语言程序有点类似,就更方便了。
-
*参考网址 *
keil C51 重定向printf到串口
2)Keil自带的汇编boot源码解析注释
- 本工程主要演示使用Keil创建一个R8051XC2的默认工程,使用Keil自带的Boot汇编文件,然后对这个STARTUP.A51进行注释。
- 工程路径:本文档同级目录/01_proj_and_src/02_Keil_boot_annotation/
- 你可以直接双击打开 ./01_proj_and_src/02_Keil_boot_annotation.uvproj/02_Keil_boot_annotation.uvproj工程
3)展示8051真正的程序入口, 和添加自定义寄存器头文件
- 本工程主要演示使用Keil创建一个空工程,不使用Keil自带的boot汇编文件,也不使用Keil自带的寄存器头文件,而是自己添加一切文件,展示8051真正的程序入口,添加自定义寄存器头文件,顺便对8051的每个寄存器进行注释。
- 工程文件:本文档同级目录/03_Assemble_register/03_Assemble_register.uvproj
4)展示汇编宏定义函数和中断处理
- 工程文件:本文档同级目录/04_Macro_func_and_irq/04_Macro_func_and_irq.uvproj
5)用汇编从Keil调试窗口中输出Hello world
- 工程文件:本文档同级目录/05_Assemble_hello_world/05_Assemble_hello_world.uvproj
双击打开并直接运行,能在Keil UART #1串口中看到hello world输出(这个窗口可能需要你手动在软件中打开)
6)Keil调试输出窗口串口回环
-
本工程主要演示使用Keil创建一个默认工程,然后添加串口0的回环收发用例,在Keil的调试串口进行串口收发,并且可以使用虚拟串口,通过SSOM32与Keil通信来进行串口收发。
-
工程文件:本文档同级目录/06_uart0_loopback/06_uart0_loopback.uvproj
-
将Keil的UART #1调试输出串口与SSCOM32等串口软件绑定的话,需要用到VSPD软件。
-
参考网址: