51单片机初步印象

51单片机初步印象

前言

因为前段时间都在搞CS相关的,说实话已经开始有有点后悔了,早知道电子相关的东西也要同步进行的,现在感觉有些事情就因为当时的一步走错拖累了整体的进程,说实话今年上半年的计划被打乱了不少
51单片机买的时间很早,但是整体用的并不多,拖到现在才开始写这篇文档。而且以下均是一些零碎的知识点

关于51单片机的中断向量表

对于51单片机来说,中断向量表的映射已经写死在了内置的ROM中,直接org <address>写入中断函数跳转地址就可以使用中断,而stm32则可以支持用户修改中断向量表

关于C51的语法障碍

C51编程语言相比于C语言新添加了四种数据类型,bitsbit等等,其中有些引脚对应的名称P2^1(P2.1管脚),一开始我只是以为C51中把^当做名称的一部分,但vscode会把它当做异或运算符,所以vscode会爆红

后来发现问题没有那么简单

sftsbit这种东西的语法似乎是特殊的不符合语义的。

1
sfr P1 = 0x90;

在这句语句之后,是把P1看作0x90处的8位寄存器,要想修改这个寄存器里的值
1
P1 =0xff;

此刻P1在声明时是地址,但修改时又赋值为数值
1
sbit P1_1 = P1^1;

这一句话就更加显得奇怪,为什么这里P1地址而不是数值呢,就感觉是狗皮膏药打了个补丁,不过既然它已经被广泛应用了,就直接当做一个特殊情况好了。即
1
sbit P1_1 = P1^1;

类似这样的特殊声明会自动修改等号后^的意义,此时不应该再是异或,而是特殊的引脚号的记号,在声明时候的特殊定义下,这些P1也是被特殊化为地址。

只能这样解释这种行为了,这个语义问题也是引起vscode报错的根本原因吧,所以不管怎么改,怎么样把它看成typedef的嵌套都会爆红(悲)

也许这就是为什么周围的人入门都选择的是stm32的原因吧,一来可以使用更优秀的文本编辑器,又不会引起语法上的误解,还能有更强大的功能

关于VCC、GND的符号

在电路里,VCC代表电源正极,而GND是逻辑上的接地,其实不一定接地,它是电源负极,直观感受,看上去VCC和GND其实是唯一的?VCC只在中间起供能和”比较”的作用,或者一切的开头起功能作用,端口有一系列的保护措施使得最后电平不易被改写?
除了VCC,GND另外的似乎也就是可以看作特殊情况下的VCC和GND?现在也只能够这样粗浅的理解了

关于51单片机的GPIO

GPIO,对于上图所示的准标准输入输出,和51单片机是一致的,其输出时候是利用了锁存器的功能,锁死了电位,而对于输入的时候,是不写入锁存器的,将锁存器写入1,才能读取,这里用的上拉电阻是默认它那个点位是高电位,但是如果直接连接地的话就可以是低电位了