今学期は51のシングルチップマイクロコンピュータコースがあります。コードをデバッグするためのウィンドウは必要ありません。いくつかの情報を確認しましたが、あまり役に立ちません。次に、ubuntu(Linux汎用)での51のシングルチップマイクロコンピュータの開発とダウンロードについて説明します。** SDCC **と*を使用する必要があります。 * stcgal **。
一般的なLinuxでテスト済みで、Ubuntu 16.04、18.04.20.04を使用できます。
リソースのダウンロード: [https://download.csdn.net/download/ZhangRelay/12820423](https://download.csdn.net/download/ZhangRelay/12820423)
SDCC は、リターゲット可能で最適化された標準C(ANSI C89、ISO C99、ISO C11)コンパイラスイートであり、 Intel MCS51 マイクロプロセッサに基づくことを目的としています。 (8031、8032、8051、8052など)、マキシム(以前はダラス**)、*** DS80C390 *、フリースケール (以前は Motorola に基づいていました) HC08(hc08、s08)に基づいており、MCUは Zilog Z80 (z80、z180、gbz80、Rabbit 2000に基づいています) / 3000、Rabbit 3000A、TLCS-90)、 Padauk(pdk14、pdk15)および STMicroelectronics STM8 。 *** Padauk(pdk13)、 Microchip PIC16 および PIC18 ***ターゲットをサポートするための作業が進行中です。他のマイクロプロセッサに再配置できます。
SDCCスイートは、さまざまなFOSSライセンスを持つさまざまなソースから派生したいくつかのコンポーネントのコレクションです。 SDCCコンパイラキットには次のものが含まれます。
**SDCC は元々SandeepDuttaによって作成され、 GPL **ライセンスの下でリリースされました。最初のリリース以来、多くのバグ修正と改善が行われました。 1999年12月以降、コードはSourceForgeに移動され、すべての「ユーザーが開発者になる」ことが同じソースツリーにアクセスできるようになりました。 SDCCは、すべてのユーザーと開発者の入力を継続的に更新します。
簡単に紹介します。
sdcc圧縮ファイルを解凍し(ここでは最新バージョン4.0.0が使用されます)、すべてのドキュメントは** sdcc-4.0.0 / share / sdcc / doc **にあります。
cd sdcc-4.0.0
cp -r * /usr/local
sdcc -mmcs51 xxx.c
最も簡単なインストール方法:
sudo apt install sdcc
stcgalは、[STC MCU Ltd](http://stcmcu.com/)のコマンドラインフラッシュプログラミングツールです。 8051互換のマイクロプロセッサ。
STCマイクロプロセッサにはUART / USBベースのブートローダー(BSL)があります。パケットベースのプロトコルを使用して、シリアルリンクを介してコードメモリとIAPメモリを更新します。これは、インシステムプログラミング(ISP)と呼ばれます。 BSLは、さまざまな(ヒューズのような)機器オプションを構成するためにも使用されます。残念ながら、この合意は公に文書化されておらず、STCはプログラミング用の(大まかに)WindowsGUIアプリケーションのみを提供します。
**stcgalは、STCのWindowsソフトウェアに代わるフル機能のオープンソースです。複数のMCUをサポートし、非常にポータブルで、自動化に適しています。 ****
stcgalをインストールします(root /管理者権限が必要な場合があります):
pip3 install stcgal
Collecting stcgal
Downloading https://files.pythonhosted.org/packages/b0/68/4924bd584b9e47639b28a1900cbced4e90deac7905fd996108ee2fcf975c/stcgal-1.6-py3-none-any.whl
Collecting tqdm>=4.0.0(from stcgal)
Downloading https://files.pythonhosted.org/packages/28/7e/281edb5bc3274dfb894d90f4dbacfceaca381c2435ec6187a2c6f329aed7/tqdm-4.48.2-py2.py3-none-any.whl(68kB)100%|████████████████████████████████| 71kB 754kB/s
Collecting pyserial>=3.0(from stcgal)
Using cached https://files.pythonhosted.org/packages/0d/e4/2a744dd9e3be04a0c0907414e2a01a7c88bb3915cbe3c8cc06e209f59c30/pyserial-3.4-py2.py3-none-any.whl
Installing collected packages: tqdm, pyserial, stcgal
Successfully installed pyserial-3.4 stcgal-1.6 tqdm-4.48.2
ネットワークに問題がある場合は、次のコマンドを試してください。
pip3 install stcgal -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com
stcgalを呼び出し、使用法を表示します。
stcgal -h
usage: stcgal [-h][-a][-r RESETCMD][-P {stc89,stc12a,stc12b,stc12,stc15a,stc15,stc8,usb15,auto}][-p PORT][-b BAUD][-l HANDSHAKE][-o OPTION][-t TRIM][-D][-V][code_image][eeprom_image]
stcgal 1.6- an STC MCU ISP flash tool(C)2014-2018 Grigori Goronzy and others
https://github.com/grigorig/stcgal
positional arguments:
code_image code segment file to flash(BIN/HEX)
eeprom_image eeprom segment file to flash(BIN/HEX)
optional arguments:-h,--help show this help message and exit
- a,--autoreset cycle power automatically by asserting DTR
- r RESETCMD,--resetcmd RESETCMD
shell command for board power-cycling(instead of DTR
assertion)-P {stc89,stc12a,stc12b,stc12,stc15a,stc15,stc8,usb15,auto},--protocol {stc89,stc12a,stc12b,stc12,stc15a,stc15,stc8,usb15,auto}
protocol version(default: auto)-p PORT,--port PORT serial port device
- b BAUD,--baud BAUD transfer baud rate(default:19200)-l HANDSHAKE,--handshake HANDSHAKE
handshake baud rate(default:2400)-o OPTION,--option OPTION
setoption(can be used multiple times, see
documentation)-t TRIM,--trim TRIM RC oscillator frequency inkHz(STC15+ series only)-D,--debug enable debug output
- V,--version print version info and exit
stcgal -P stc89 xxx.ihx
プログラムを変更する必要があります。例としてLEDライトを取り上げます。
# include <reg52.h>//52シリーズMCUヘッダーファイル
sbit LSA = P1^5;//LEDビット選択デコードアドレスピンA
sbit LSB = P1^6;//LEDビット選択デコードアドレスピンB
sbit LSC = P1^7;//LEDビット選択デコードアドレスピンC
int main(void){while(1)//メインプログラムには無限ループプログラムが設定されており、繰り返し動作します。{//LEDライトのメインスイッチングトランジスタQ6をオンにします。+LEDライトグループに5Vを追加
LSA =0;
LSB =0;
LSC =0;
P0 =0xfe;//発光ダイオードを点灯する}}
次のように変更する必要があります。
# include <8052.h>
# define LSA P1_5
# define LSB P1_6
# define LSC P1_7
int main(void){while(1){
LSA =0;
LSB =0;
LSC =0;
P0 =0xfe;}}
Linuxでドライバーをインストールする必要はありません! ! !
sdcc -mmcs51 led.c
stcgal -P stc89 led.ihx
点滅:
# include <8052.h>
# define LSA P1_5 //LEDビット選択デコードアドレスピンA
# define LSB P1_6 //LEDビット選択デコードアドレスピンB
# define LSC P1_7 //LEDビット選択デコードアドレスピンC
# define Led10 P0_7 //P0を定義する.7名前はled10
int main(void){
unsigned int a;//符号なし整数変数をしばらく定義します(1){//LEDライトのメインスイッチングトランジスタQ6をオンにします。+LEDライトグループに5Vを追加
LSA =0;
LSB =0;
LSC =0;
Led10 =0;//LED10を点灯
a =50000;while(a--);//50000サイクル、遅延の目的を達成するために時間が消費されます
Led10 =1;;//LED10をオフにします
a =50000;while(a--);//ディレイ}}
呼吸光:
# include <8052.h>
# define LSA P1_5 //LEDビット選択デコードアドレスピンA
# define LSB P1_6 //LEDビット選択デコードアドレスピンB
# define LSC P1_7 //LEDビット選択デコードアドレスピンC
# define Led10 P0_7 //P0を定義する.7名前はled10
int atime=64;voiddelay(unsigned int pms)//遅延機能{
unsigned int x;
unsigned int y;for(x=pms;x>0;x--)for(y=11;y>0;y--);}voidledfade(unsigned int i)//呼吸光{
Led10 =0;delay(i);
Led10 =1;delay(atime-i);}
int main(void){
int a;//符号なし整数変数をしばらく定義します(1){//LEDライトのメインスイッチングトランジスタQ6をオンにします。+LEDライトグループに5Vを追加
LSA =0;
LSB =0;
LSC =0;for(a=0;a<atime;a++){ledfade(a);}for(a=atime;a>0;a--){ledfade(a);}}}
呼吸マーキー? ? ? (改善と最適化が必要です!)
# include <8052.h>
# define LSA P1_5 //LEDビット選択デコードアドレスピンA
# define LSB P1_6 //LEDビット選択デコードアドレスピンB
# define LSC P1_7 //LEDビット選択デコードアドレスピンC
# define Led10 P0_0 //P0を定義する.0名前はled10
# define Led11 P0_1 //P0を定義する.0名前はled11
# define Led12 P0_2 //P0を定義する.0名前はled12
# define Led13 P0_3 //P0を定義する.0名前はled13
# define Led14 P0_4 //P0を定義する.0名前はled14
# define Led15 P0_5 //P0を定義する.0名前はled15
# define Led16 P0_6 //P0を定義する.0名前はled16です
# define Led17 P0_7 //P0を定義する.0名前はled17です
int atime=64;voiddelay(unsigned int pms)//遅延機能{
unsigned int x;
unsigned int y;for(x=pms;x>0;x--)for(y=11;y>0;y--);}voidledfade0(unsigned int i)//呼吸光{
Led10 =0;delay(i);
Led10 =1;delay(atime-i);}voidledfade1(unsigned int i)//呼吸光{
Led11 =0;delay(i);
Led11 =1;delay(atime-i);}voidledfade2(unsigned int i)//呼吸光{
Led12 =0;delay(i);
Led12 =1;delay(atime-i);}voidledfade3(unsigned int i)//呼吸光{
Led13 =0;delay(i);
Led13 =1;delay(atime-i);}voidledfade4(unsigned int i)//呼吸光{
Led14 =0;delay(i);
Led14 =1;delay(atime-i);}voidledfade5(unsigned int i)//呼吸光{
Led15 =0;delay(i);
Led15 =1;delay(atime-i);}voidledfade6(unsigned int i)//呼吸光{
Led16 =0;delay(i);
Led16 =1;delay(atime-i);}voidledfade7(unsigned int i)//呼吸光{
Led17 =0;delay(i);
Led17 =1;delay(atime-i);}
int main(void){
int a;//符号なし整数変数をしばらく定義します(1){//LEDライトのメインスイッチングトランジスタQ6をオンにします。+LEDライトグループに5Vを追加
LSA =0;
LSB =0;
LSC =0;for(a=0;a<atime;a++){ledfade0(a);}for(a=atime;a>0;a--){ledfade0(a);}for(a=0;a<atime;a++){ledfade1(a);}for(a=atime;a>0;a--){ledfade1(a);}for(a=0;a<atime;a++){ledfade2(a);}for(a=atime;a>0;a--){ledfade2(a);}for(a=0;a<atime;a++){ledfade3(a);}for(a=atime;a>0;a--){ledfade3(a);}for(a=0;a<atime;a++){ledfade4(a);}for(a=atime;a>0;a--){ledfade4(a);}for(a=0;a<atime;a++){ledfade5(a);}for(a=atime;a>0;a--){ledfade5(a);}for(a=0;a<atime;a++){ledfade6(a);}for(a=atime;a>0;a--){ledfade6(a);}for(a=0;a<atime;a++){ledfade7(a);}for(a=atime;a>0;a--){ledfade7(a);}}}
51をロボットオペレーティングシステムROSに接続する必要がある場合は、以下を参照してください。
Recommended Posts