日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【51单片机快速入门指南】1:基础知识和工程创建

發布時間:2023/12/9 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【51单片机快速入门指南】1:基础知识和工程创建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 簡介
  • 命名規則
  • 51單片機的數據類型
    • 總表
    • 擴展數據類型
    • stdint.h
  • 存儲器類型關鍵字
  • 燒錄工具
  • 工程的創建
    • 創建項目
    • 添加C文件
    • 配置工程
      • 存儲模式配置
      • 輸出配置
      • 代碼優化配置
  • 編譯
  • 燒錄

普中51-單核-A2
STC89C52
Keil uVision V5.29.0.0
PK51 Prof.Developers Kit Version:9.60.0.0


簡介

51 單片機是對所有兼容 Intel 8031 指令系統的單片機的統稱。
常見品牌
Intel (英特爾):
????????i80C31、i80C51、i87C51,i80C32、i80C52、i87C52 等;
ATMEL (艾德梅爾):
????????AT89C51、AT89C52、AT89C2051,AT89S51(RC),AT89S52 (RC)等;
STC (國產宏晶):
????????STC89C51、STC89C52、STC89C516、STC90C516
Nuvoton (國產新唐):
????????N76E003、N76E616、MS51FB9AE
Philips (飛利浦)
Dallas (達拉斯)
Siemens (西門子)等

命名規則

51單片機的數據類型

總表

類 別數 據 類 型長 度值 域
字符型unsigned char1字節0~255
字符型signed char1字節-128~+127
字符型char1字節-128~+127
整 型unsigned short int2字節0~65535
整 型signed short int2字節-32768~+32767
整 型short int2字節-32768~+32767
整 型unsigned short2字節0~65535
整 型signed short2字節-32768~+32767
整 型short2字節-32768~+32767
整 型unsigned int2字節0~65535
整 型signed int2字節-32768~+32767
整 型int2字節-32768~+32767
長整型unsigned long int4字節0~4294967295
長整型signed long int4字節-2147483648~+2147483647
長整型long int4字節-2147483648~+2147483647
長整型unsigned long4字節0~4294967295
長整型signed long4字節-2147483648~+2147483647
長整型long4字節-2147483648~+2147483647
浮點型float4字節±1.75494E-38~±3.402823E+38
浮點型double4字節±1.75494E-38~±3.402823E+38
位 型bit1位0,1
位 型sbit1位0,1
SFR 型sbit1位0,1
SFR 型sfr1字節0~255
SFR 型sfr162字節0~65535

擴展數據類型

bit
????????聲明一個普通的位變量。例如:“bit flag;”。
sbit
????????聲明特殊功能寄存器中的某一位。例如,使用"sbit TI = SCON^0;",就聲明了TI為特殊功能寄存器SCON的第0位。
sfr
????????聲明一個8位寄存器為特殊功能寄存器。例如,將51單片機內存地址0x98處的存儲單元聲明為8位特殊功能寄存器SCON,可以使用"sfr SCON = 0x98;"語句。
sfr16
????????聲明一個16位的寄存器為特殊功能寄存器。為了將51單片機內存地址0xCC處開始的連續兩個存儲單元聲明為一個統一的16位特殊功能寄存器T2,可以使用"sfr16 T2 = 0xCC;"語句。

????????在Keil中,用sbit、sfr、sfr16聲明特殊功能寄存器變量或特殊功能寄存器位變量時,其聲明語句都只能放在函數外,而不能放在函數內,否則出現語法錯誤;
????????而用bit聲明普通位變量時,聲明語句既可放在函數外,也可放在函數內。此外,bit、sbit、sfr、sfr16都不支持指針和數組擴展,因此,不能定義bit、sbit、sfr、sfr16型指針和數組。

stdint.h

????????其他平臺的單片機大多都有stdint.h頭文件統一數據類型,為了便利編程和之后的程序的移植,建議使用如下頭文件輔助編程。

/*****************************************************************************/ /* STDINT.H */ /* 僅適用于51單片機 */ /*****************************************************************************/#ifndef STDINT_H #define STDINT_Htypedef char int8_t; typedef unsigned char uint8_t; typedef short int16_t; typedef unsigned short uint16_t; typedef long int32_t; typedef unsigned long uint32_t;typedef int8_t int_least8_t; typedef uint8_t uint_least8_t; typedef int16_t int_least16_t; typedef uint16_t uint_least16_t; typedef int32_t int_least32_t; typedef uint32_t uint_least32_t;typedef int8_t int_fast8_t; typedef uint8_t uint_fast8_t; typedef int16_t int_fast16_t; typedef uint16_t uint_fast16_t; typedef int32_t int_fast32_t; typedef uint32_t uint_fast32_t;typedef int32_t intmax_t; typedef uint32_t uintmax_t;#define INT8_MAX 0x7f #define INT8_MIN (-INT8_MAX-1) #define UINT8_MAX 0xff#define INT16_MAX 0x7fff #define INT16_MIN (-INT16_MAX-1) #define UINT16_MAX 0xffff#define INT32_MAX 0x7fffffff #define INT32_MIN (-INT32_MAX-1) #define UINT32_MAX 0xffffffff#define INT_LEAST8_MAX (INT8_MAX) #define INT_LEAST8_MIN (INT8_MIN) #define UINT_LEAST8_MAX (UINT8_MAX) #define INT_LEAST16_MAX (INT16_MAX) #define INT_LEAST16_MIN (INT16_MIN) #define UINT_LEAST16_MAX (UINT16_MAX) #define INT_LEAST32_MAX (INT32_MAX) #define INT_LEAST32_MIN (INT32_MIN) #define UINT_LEAST32_MAX (UINT32_MAX)#define INT_FAST8_MAX (INT8_MAX) #define INT_FAST8_MIN (INT8_MIN) #define UINT_FAST8_MAX (UINT8_MAX) #define INT_FAST16_MAX (INT16_MAX) #define INT_FAST16_MIN (INT16_MIN) #define UINT_FAST16_MAX (UINT16_MAX) #define INT_FAST32_MAX (INT32_MAX) #define INT_FAST32_MIN (INT32_MIN) #define UINT_FAST32_MAX (UINT32_MAX)#define INT8_C(value) ((int_least8_t)(value)) #define UINT8_C(value) ((uint_least8_t)(value)) #define INT16_C(value) ((int_least16_t)(value)) #define UINT16_C(value) ((uint_least16_t)(value)) #define INT32_C(value) ((int_least32_t)(value)) #define UINT32_C(value) ((uint_least32_t)(value)) #define INTMAX_C(value) ((intmax_t)(value)) #define UINTMAX_C(value) ((uintmax_t)(value))#endif

存儲器類型關鍵字

燒錄工具

在宏晶科技官網下載燒錄工具

添加型號和頭文件到Keil中


選擇文件夾

工程的創建

普中科技–各型號開發板資料下載

創建項目

在Keil中,選擇項目-新uVision項目…

選擇位置創建工程

選擇芯片型號
通用的型號可選擇Legacy Device Database內Microchip的型號


若使用STC的單片機,并導入了STC的型號,則可選擇如下。

確認

添加C文件



源文件中右鍵空白處,添加芯片的頭文件
經典C52單片機為

STC的單片機為

配置工程

存儲模式配置

本節摘自51 small、compact、large模式 —— EmbededCoder

????????RAM在程序運行過程中存放隨機變量的數據空間。51單片機默認內部RAM只有128B;52單片機默認256B;STC89C52增加到512B ;

????????在Keil中編寫程序,總程序中所有變量占用的字節數少于128B時候,并且儲存模式為small時,對不定義的變量編譯器將默認為0;一旦程序中變量總數量超過128B,必須對所有變量進行初始化,否則未被初始化的變量的默認值將是不確定的。當變量總和超過128B時候,必須重設定存儲器的存儲模式。

????????存儲器模式一共有三種,分別為small、compact、large模式。

small模式

????????在small模式中,所有默認變量均裝入單片機內部的RAM中,例如:uchar a ; float b等變量時候;;該模式下的優點:訪問速度快、缺點是空間有限,且對堆棧的分配比較少,難以把握,碰到遞歸調用時候需要小心。這種模式只適用于小程序。

compact模式

????????在compact模式中,所有默認變量均位于單片機的256B RAM中,和在small模式中使用關鍵字 pdata來定義數據變量的效果一樣,如 uchar pdata a[100];在該模式下程序總變量空間不能超過256B。 對于只有128B的單片機來說,使用此模式定義超過128B變量數據時,將發生錯誤。其優點是覺small模式寬裕,速度較small慢,但是比large塊,是一種中間狀;’

large模式

????????在large模式中,所有默認變量可放在多達64KB的RAM中,包括內部RAM和外部RAM,這和使用關鍵子xdata 來定義變量的效果一樣。該模式的優點是空間大,可存變量多;缺點是:訪問速度慢,尤其對于兩個以上字節變量訪問速度來說更是如此。在large模式下編寫程序,定義的變量總數前外不能超過對應單片機的內部最大RAM字節數,因為即使超過了,編譯器也不會提示錯誤,但是程序必然會出錯。

輸出配置

輸出中勾選創建HEX文件以生成要燒錄進單片機的16進制文件

代碼優化配置

編譯


編譯后即可在工程路徑Objects文件夾下找到可燒錄的hex文件

燒錄

打開STC-ISP軟件,將開發板連接至電腦,選擇對應的串口


選擇要燒錄的hex文件


點擊下載/編程

有的開發板可直接下載,大部分情況下需要手動斷電重啟開發板
等待燒錄完成:

總結

以上是生活随笔為你收集整理的【51单片机快速入门指南】1:基础知识和工程创建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。