【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 char | 1字節 | 0~255 |
| 字符型 | signed char | 1字節 | -128~+127 |
| 字符型 | char | 1字節 | -128~+127 |
| 整 型 | unsigned short int | 2字節 | 0~65535 |
| 整 型 | signed short int | 2字節 | -32768~+32767 |
| 整 型 | short int | 2字節 | -32768~+32767 |
| 整 型 | unsigned short | 2字節 | 0~65535 |
| 整 型 | signed short | 2字節 | -32768~+32767 |
| 整 型 | short | 2字節 | -32768~+32767 |
| 整 型 | unsigned int | 2字節 | 0~65535 |
| 整 型 | signed int | 2字節 | -32768~+32767 |
| 整 型 | int | 2字節 | -32768~+32767 |
| 長整型 | unsigned long int | 4字節 | 0~4294967295 |
| 長整型 | signed long int | 4字節 | -2147483648~+2147483647 |
| 長整型 | long int | 4字節 | -2147483648~+2147483647 |
| 長整型 | unsigned long | 4字節 | 0~4294967295 |
| 長整型 | signed long | 4字節 | -2147483648~+2147483647 |
| 長整型 | long | 4字節 | -2147483648~+2147483647 |
| 浮點型 | float | 4字節 | ±1.75494E-38~±3.402823E+38 |
| 浮點型 | double | 4字節 | ±1.75494E-38~±3.402823E+38 |
| 位 型 | bit | 1位 | 0,1 |
| 位 型 | sbit | 1位 | 0,1 |
| SFR 型 | sbit | 1位 | 0,1 |
| SFR 型 | sfr | 1字節 | 0~255 |
| SFR 型 | sfr16 | 2字節 | 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:基础知识和工程创建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: acrobat dc mac版_Adob
- 下一篇: ColorUI从0开始搭建项目