admin 管理员组

文章数量: 1086019


2024年4月26日发(作者:250z型钢每米重量)

第一节:吴坚鸿谈初学单片机的误区。

(1)很难记住繁杂的寄存器?寄存器不用死记硬背,

查找芯片数据手册是中策,死记硬背寄存器是最最下策。

(2)很难记住繁杂的汇编语言指令?除非是在校学生要应付考试或者少数工作中绕不开汇编,

否则学汇编就是浪费时间。鸿哥我行走江湖多年,从来就没有用汇编帮客户做过一个项目。

鸿哥我行走江湖多年,连一个寄存器都

记不住。需要配置寄存器的时候,直接在网上或者书本上参考别人现成的配置程序是上策,

t

y

w

(3)C语言很难学?你不用学指针,你不用学带形参的函数,你不用学结构体,你不用学宏

定义,你不用学文件操作,你也不用死记繁琐的数据类型。你只要会:

5

7

4

3

3

1

1

条指令语句switch语句,if else

个运算符+,-,*,/,|,&,!。

, unsigned int, unsigned long。

个逻辑关系符||,&&,!=,==.

个数据类型unsigned char

个void函数。

个一维数组code(或const) unsigned char array[]

那么世界上任何一种逻辑功能的单片机软件你都能做出来。

鸿哥我当年刚毕业出来工作的时候才知道可以用

开始用C语言其他的高级功能,但是我发现

举出来的最基本功能集合而成,

C语言开发单片机,一开始只用if

语句就把项目做出来了,没有用指针,没有用带形参的函数等复杂的功能。再到后来才慢慢

C语言其他的高级功能,本质上都是用我前面列

编译后的机器码都大同小异。只是书写更加简单方便了一点,

个进制相互转化,二进制,十六进制,十进制。

语句,while语句,for语句,=赋值语句。

所以不会指针等高级功能你不用自卑,恰恰相反,当你会最简单的几个语句,就把这些高级

功能的程序都做出来了,你才发现你对底层了解得更加透切,再学那些高级功能轻而易举。

当你裸机跑的程序都能够协调得很好的时候,你才发现所谓高深的操作系统也不过如此,只

要给你时间和金钱你也可以写个操作系统来玩玩。

(4)很难记住精确时间的计算公式?经常看到时间公式等于晶振,时钟周期,执行指令次数

他们之间的乘除关系式。鸿哥我认为这些都是浮云,不用纠结也不用去记,大概了解一下就

可以了。不管你对公式掌握得有多精确,你都不可能做出非常精确的时间。想用单片机做一

个非常精确的时间这种想法一开始就是错的,不可能的。真想做一个比较精确的时间,应该

用外围时钟芯片或者FPGA和CPLD,而不是单片机。

IIC,SPI,232串口通讯,CAN,USB等等。这些都是(5)很难记住繁杂的各种通信协议?什么

浮云,你不用记那么多,你只要理解两种通讯方式就够了,那就是串行通讯方式和并行通讯

方式。不管世界上有多少种通讯协议,物理世界上只有这两种通讯方式,其他各种名称的通

讯协议都基于此两种方式演变而来。

(6)很难写短小精悍的程序?初学者不要纠结于此。做项目开发,程序容量不是刻意追求的

目标,程序多一点少一点没关系,现在大容量的单片机品种非常多,容量不会是寸土寸金的

事情,我们更加要关注程序的运行效率,可读性和可修改性。

既然鸿哥列出了那么多误区,那么什么才是初学者关注的核心?预知详情,请听下回

分解----delay()延时实现LED灯的闪烁。

(未完待续,下节更精彩,不要走开哦)

第二节:delay()延时实现LED灯的闪烁。

开场白:

上一节鸿哥列出了初学者七大误区,到底什么才是初学者关注的核心?那就是裸机奔跑

的程序结构。一个好的程序结构,本身就是一个微型的多任务操作系统。鸿哥教给大家的就

是如何编写这个简单的操作系统。在main函数循环中用switch语句实现多任务并行处理的

任务切换,再外加一个定时器中断,这两者的结合就是鸿哥多年来所有实战项目的核心。鸿

哥的程序结构看似简单,实际上就是那么简单。大家不用着急,本篇连载文章现在才正式开

始,这一节我要教会大家两个知识点:

第一点:鸿哥首次提出的“三区一线”理论。此理论把程序代码分成三个区,一个延时分割

线。

第二点:delay()延时的用途。

(1)硬件平台:基于朱兆祺

(2)实现功能:让一个

(3)源代码讲解如下:

51单片机学习板。

t

y

w

LED闪烁。

view plaincopy to clipboardprint?

#include "REG52.H"

void initial_myself();

void initial_peripheral();

void delay_short(unsigned int uiDelayshort);

void delay_long(unsigned int uiDelaylong);

void led_flicker();

/* 注释一:

* 吴坚鸿个人的命名风格

* dr

*/

sbit led_dr=P3^5;

void main() //

{

/* 注释二:

学习要点:深刻理解鸿哥首次提出的三区一线理论

:凡是输出后缀都是_dr,凡是输入后缀都是_sr。

代表drive驱动,sr代表sensor感应器


本文标签: 不用 鸿哥 程序 时间 语句