您的位置 首页 培训

单片机 C51 & A51 编程关键总结

C51:1、头文件:#include (我用的是 STC 89C54RD+)2、预定义:sbit LED = P1^0// 定义 P1 口的 0 位为 LED注:&ld

  C51

  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……

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/peixun/298629.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部