当前位置:   article > 正文

C51编程_单片机程序里可以有几个main函数

单片机程序里可以有几个main函数

程序结构

 

  1. 汇编语言
  • 面向机器的编程语言(能直接操作单片机的系统硬件)

  • 具有指令效率高、执行速度快的优点

  • 低级编程语言

  • 程序可读性差,移植困难,且编程时必须具体组织、分配存储器资源和处理端口数据

  1. C51语言
  • 为51系列单片机设计的一种C语言,是标准C语言的子集

  • 具有结构化语言特点和机器级控制能力,代码紧凑,效率可与汇编语言媲美

  • 程序的可读性强,易于调试维护,编程工作量小,产品开发周期短

  1. C51程序结构
  • C51程序的基本单元是函数

  • 一个C51源程序至少包含一个主函数(主函数是程序的入口)

  • main()函数一对圆括号()必须有,不能省略

  • C51语言程序基本结构

    1. 包含<头文件>
    2. 函数类型说明
    3. 全局变量定义
    4. main(){
    5. 局部变量定义
    6. <程序体>
    7. }
    8. func1(){
    9. 局部变量定义
    10. <程序体>
    11. ...
    12. }
    13. funcN(){
    14. 局部变量定义
    15. <程序体>
    16. ...
    17. }

    数据结构

         

  • 变量的基本属性:变量名、变量值(变量名与存储单元地址相对应,变量值与存储单元的内容相对应)

  • 定义变量

  1. [存储种类] 数据类型 [存储类型] 变量名;
  2. 1

1

  1. - sfr特殊功能寄存器型:21个特殊功能寄存器(地址为80H~FFH)
  2. ```C
  3. sfr sfr_name = 地址常数 //8位SFR
  4. sfr16 sfr16_name = 地址常数 //16位SFR
  5. 12
  1. - sfr sfr_name是一个特殊功能寄存器名
  2. - “=”后面必须是常数
  3. - 数值范围必须在特殊功能寄存器地址范围内(0x80~0xFF)

12 ```

12

  1. - sbit 位变量名=SFR名称^位位置
  2. ```C
  3. sfr PSW=0xD0
  4. sbit CY=PSW^7
  5. //SFR名称必须是己定义的SFR名字
  6. //位位置是一个0~7之间的常数
  7. 1234
  1. - sbit 位变量名=字节地址^位位置
  2. ```C

sbit CY=0xD0^7 //以一个常数(字节地址)作为基地址,该常数必须在0x80~0xFF之间

  • 数据类型、变量名和末尾的英文分号是不能省略的部分
  • 自动变量:使用存储种类说明符auto定义的变量

  • 作用范围在定义它的函数体或复合语句内部

  • 如果省略存储种类,则变量默认为自动变量

  • 将函数体内和复合语句中使用频繁的变量放在片内RAM中,且定义为自动变量(有效利用片内有限的RAM资源)

  • 外部变量:使用存储种类说明符extern定义的变量

  • 将多个函数或模块共享的变量定义为外部变量

  • 外部变量是全局变量,在程序执行期间一直占有固定的内存空间

  • 静态变量:使用存储种类说明符static定义的变量

  • 内部静态变量(当离开函数时数值不被改变):在函数体内部定义的静态变量

  • 外部静态变量:在函数体外部定义的静态变量

  • 寄存器变量:使用存储种类说明符register定义的变量

  • 将使用频率最高的那些变量定义为寄存器变量

  • C51基本数据类型(有符号数据类型可忽略signed标识符)

    https://img-blog.csdnimg.cn/08135049422149c09370d8a741bb69eb.png

  • 特殊数据类型

  • bit位型:定义一个位变量(0或1)

    ```C bit bit_name [=0或1]

  • sbit可位寻址型:定义可寻址的特殊功能寄存器的位寻址对象

    • sbit 位变量=位地址

      ```C sbit CY=0xD7
      //将位的绝对地址赋给变量名(位地址必须位于0x80~0xFF之间)

  • sbit与bit的区别

    • bit型变量的位地址是由编译器为其随机分配的

    • sbit型变量的位地址是由用户指定的

    • sfr型变量和sbit型变量必须定义为全局变量(必须在所有C51函数之前定义)

  • 用预处理命令#include 后可使用特殊功能寄存器明和特殊位名称

  • 逻辑存储空间(3个):片内低128B RAM、片外 64KB RAM、片内外统一编址 64KB ROM

https://img-blog.csdnimg.cn/4a2b687cf3a84e0db6783f9cade4482e.png

存储类型(6种):data、bdata、idata、xdata、pdata、code

https://img-blog.csdnimg.cn/5f78854b9f0c48b99ab0cb419bde3b22.png

https://img-blog.csdnimg.cn/5eb102cac28c47258cfee3ff8de0e76e.png

https://img-blog.csdnimg.cn/be62d4f1949d42e08ff1da5927cf8300.png

  1. 数据类型*指针变量名; //被指变量和指针变量都位于C编译器默认的存储区中
  2. 1

C51指针的一般定义形式

  1. #include<reg51.h>
  2. void main(void){
  3. unsigned char i=0; //定义变量i
  4. #pragma asm //嵌入汇编代码
  5. MOV R0,#0AH
  6. LOOP:INC A //累加器循环加1
  7. DJNZ R0,LOOP
  8. #pragma endasm
  9. i=ACC; //累加器结果传给i
  10. }
  • 变量定义时必须指明其所属类型,否则无法选择存储空间

  • 如果再定义变量时省略了存储类型说明符,C51编译器会根据当前编译模式自动认定默认存储变量

  • 编译模式(3种):小编译模式(Small)、紧凑编译模式(Compact)、大编译模式(Large

  • C51规定变量名可以由字母、数字和下划线3种字符组成(第一个字符必须为字母或下划线)

  • 大写的变量和小写的变量不同(习惯上变量用小写表示)

  • 所有变量在使用前必须声明(变量须“先定义,后使用”)
    • 变量名除了应避免使用标准C语言的32个关键字外,还要避免使用C51拓展的新关键字

    • C51拓展的21个关键字

    • 标准C语言指针的一般定义形式
    1. 数据类型 [存储类型1] * [存储类型2] 指针变量名
    2. //数据类型:被指向变量的数据类型
    3. //存储类型1:被指向变量所在的存储区类型
    4. //存储类型2:指针变量所在的存储区类型

    https://img-blog.csdnimg.cn/4b9a3f25138e4c62a16dc6681f11207a.png

    https://img-blog.csdnimg.cn/1372f74641704ac7a57291a5a817f4a4.png

    https://img-blog.csdnimg.cn/6fa0e32e781f4985a4d2b8ef2a795f2b.png

    • C51编译器的编译规则

    • 程序的寻址:通过在汇编文件中定义同名的“函数”来实现

    • 参数传递:使用寄存器
    • 返回值传递:汇编语言通过寄存器或存储器传递参数给C语言程序
    • 汇编代码必须放在两条预处理命令#pragma asm和#pragma endasm之间(预处理命令必须用小写字母)
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/408711
推荐阅读
相关标签
  

闽ICP备14008679号