0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅析C51单片机编程过程中的要点

GReq_mcu168 来源:未知 作者:胡薇 2018-09-19 15:08 次阅读

1、头文件:#include (我用的是 STC 89C54RD+)

2、预定义:sbit LED = P1^0// 定义 P1 口的 0 位为 LED

注:“P1^0”这个写法,与 A51 不同(A51 是 P1.0),P1 是一组端口,端口号范围 0~7

注2:sbit 用于定义 SFR(特殊功能寄存器)的位变量,上例中 LED 作为“全局变量”进行定义

注3:以下写法是错误的:

sbit code table[ ] = {P1^0, P1^1, P1^2, P1^3};// 想用 table[i] 指定不同的引脚,但这么做会报错

sbit table[ ] = {P1^0, P1^1, P1^2, P1^3}; // 考虑到上面可能是 code 关键字使用错误,使用标准 C 数组写法,但这同样是错的

3、主函数写法:void main (void)

4、数值的表示:

P1 = 1111 1111// 二进制

P1 = 0xff 或者 P1 = 0xFF // 十六进制,0x 开头,且数值不分大小写

P1 = 255// 十进制

5、定义小数值时,可以使用 unsigned char i,这样 i 的范围为 0~255,作为循环变量比较好用

6、左右移位:

P1 <<= 2 等价于 P1 = P1 << 2  // P1 左移 2 位,左移一位相当于乘以 2

P1 >>= 3 等价于 P1 = P1 >> 3// P1 右移 3 位,右移一位相当于除以 2

注:左右移位默认为“逻辑移位”,即无论左移还是右移,空位都补 0

7、按位与或:

P1 = P1 & 0x01

P1 = P1 | 0x01

8、定义 ROM 表格(就是数据为常量的数组):

unsigned char code table[ ] = {0xff, 0xff, 0xff, 0xff};

使用:P1 = table[i]

注:table[ ] 定义为“全局变量”,上例中 i 的范围为 0~3

注2:code 定义的常量存于“代码区”,即 ROM 区,可以节省 RAM 空间

9、在使用数码管编程时,假如你正在使用 temp[i] 代表某一个显示字符,突然想显示小数点,可以使用 temp[i] | 0x80,通过“或”运算实现加上小数点……

10、如果你用 Keil C51 进行编译,记住一点:它不区分大小写!!!卧槽,今天编程序那个调错啊,就因为一个数组名和一个变量名完全一样,只是大小写不一样罢了,标准 C 我怎么记得这样可以啊……上网一查,卧槽,Keil C51 不区分大小写,准确的说是“连接的时候不区分大小写”,更准确一点就是“具有外部连接的变量区分大小写,内部连接 static 区分大小写”……至少 Keil uVision2 是这样,不知道别的版本是不是,待验证……

11、没有 unsigned float x !float 型变量从来没有前边加 unsigned 的语法!

12、Keil 编译的程序,main 函数执行完不会停止,会循环执行 main 函数,何解?

结论 1:如果主程序中没有 while(1) 这个无限循环,程序走到最后会再次从头开始执行。

结论 2:如果主程序有 while(1) 这个无限循环,程序走到最后会一直在这个死循环中运行,不会出现再从头执行的情况。

这应该属于 Keil 编译器的 bug,有网友做过实验,表示 Keil 编译后期产生的汇编代码中,结尾有一条 LJMP main,意思就是跳到 main 函数重复执行……还有一种说法是 PC 指针溢出,溢出后的地址指向开头,造成继续执行的效果……(博主觉得还是 Keil 的问题,要是 Keil 编译器不产生 LJMP main 这种语句,也不会产生循环效应……)

不管怎么说,在程序结尾加上 while(1) 能够解决循环执行 main 函数的 bug……

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6044

    文章

    44632

    浏览量

    639400
  • 编程
    +关注

    关注

    88

    文章

    3642

    浏览量

    94094

原文标题:单片机 C51 编程要点总结

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    单片机C51编程要点大合集

    单片机C51 编程要点总结1、头文件:#include 2、预定义:***it LED = P1^0 // 定义 P1 口的 0 位为 LED 注:“P1^0”这个写法,与 A
    发表于 11-30 07:23

    单片机C51编程规范教程

    单片机C51编程规范 本标准规定了程序设计人员进行程序设计时必须遵循的规范。本规范主要针对C51编程语言和keil编译器而言,包括排版、注
    发表于 01-09 12:04 156次下载

    单片机C51编程规范

    单片机C51编程规范 1单片机C51编程规范- 前言   为了提高源程序的质量和可维护性,从而
    发表于 01-14 21:03 2600次阅读

    C51编程规范说明

    C51编程规范说明 现在单片机的程序设计,C51已经得到广泛的推广和应用,算是单片机的主流设计程序,甚至可以说作为
    发表于 04-07 14:00 785次阅读

    单片机C51程序烧写过程

    【LabVIEW从入门到精通】5.2.4.1b 单片机C51程序烧写过程
    发表于 01-08 15:47 0次下载

    单片机教程之单片机C51基础知识详细资料概述

    两种51单片机编程语言:汇编语言和C51语言 汇编语言是一种面向机器的编程语言,能直接操作单片机
    发表于 10-30 08:00 12次下载
    <b class='flag-5'>单片机</b>教程之<b class='flag-5'>单片机</b>的<b class='flag-5'>C51</b>基础知识详细资料概述

    单片机教程之如何进行单片机内部资源的C51编程

    本文档的主要内容详细介绍的是单片机教程之如何进行单片机内部资源的C51编程详细资料免费下载
    发表于 11-30 18:02 21次下载
    <b class='flag-5'>单片机</b>教程之如何进行<b class='flag-5'>单片机</b>内部资源的<b class='flag-5'>C51</b><b class='flag-5'>编程</b>

    单片机C51编程的警告提示说明

    本文档的主要内容详细介绍的是单片机C51编程的警告提示说明资料免费下载。
    发表于 08-02 17:34 2次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>C51</b><b class='flag-5'>编程</b>的警告提示说明

    单片机C51程序设计的学习课件免费下载

    本文档的主要内容详细介绍的是单片机C51程序设计的学习课件免费下载包括了:1、C51程序设计基础,2、C51的数据类型及其在51
    发表于 11-24 17:24 64次下载
    <b class='flag-5'>单片机</b><b class='flag-5'>C51</b>程序设计的学习课件免费下载

    8051单片机C51编程电子版书籍

    8051单片机C51编程电子版书籍
    发表于 06-24 09:16 0次下载

    C51单片机流水灯C代码

    C51单片机流水灯C代码
    发表于 11-05 15:20 34次下载
    <b class='flag-5'>C51</b><b class='flag-5'>单片机</b>流水灯<b class='flag-5'>C</b>代码

    C51单片机C52单片机内部的资源区别

    C52单片机可以理解为是C51单片机的增强版• 两个方面有差异,存储空间和定时器计数器方面有区别 ○ C52
    发表于 11-19 10:36 20次下载
    <b class='flag-5'>C51</b><b class='flag-5'>单片机</b>与<b class='flag-5'>C</b>52<b class='flag-5'>单片机</b>内部的资源区别

    单片机 C51 编程要点总结

    单片机C51 编程要点总结1、头文件:#include 2、预定义:sbit LED = P1^0 // 定义 P1 口的 0 位为 LED 注:“P1^0”这个写法,与 A
    发表于 11-21 15:06 19次下载
    <b class='flag-5'>单片机</b> <b class='flag-5'>C51</b> <b class='flag-5'>编程</b><b class='flag-5'>要点</b>总结

    C51编程

    嵌入式编程C51编程1.C51 与标准C的差别1)库函数不同C51的库函数是根据
    发表于 11-22 18:06 50次下载
    <b class='flag-5'>C51</b><b class='flag-5'>编程</b>

    单片机原理与应用及C51编程技术

    单片机原理与应用及C51编程技术课件下载
    发表于 08-29 10:21 11次下载