单片机是如何从入门到放弃的

第一步,做出实体芯片。
单片机一般理解为mcu(microcontroller unit,微控制单元),包含定时器、alu(arithmetic logic unit,算术逻辑单元)、内存、寄存器、总线等部分。而普通的意义的单片机还包含gpio、串口(uart)、dma、协处理器、adda等等。  看懂如下图前置:计算机组成原理,微机原理。流水线前置:数字逻辑电路,集成电路设计及其eda技术,verilog把各个模块细分为寄存器级,比如移位运算器、节拍器、译码器、存储器等。module minicpu(clk, reset, run, in, cs, pcout, irout, qtop, abus, dbus, out); input clk,reset,run; input [15:0] in; output [1:0] cs; output [15:0] irout, qtop, dbus, out; output [11:0] pcout, abus; wire [15:0] qnext, ramout, aluout; reg [11:0] abus; reg halt, jump, pcinc, push, pop, thru, qthru, dbus2qtop, dbus2ram, dbus2obuf, ir2dbus, qtop2dbus, alu2dbus, ram2dbus, in2dbus; reg pop2, ir2abus, qtop2abus, qnext2abus; reg [11:0] pcout, pcnext; reg [15:0] out; statef statef0(.clk(clk),.reset(reset),.run(run),.halt(halt),.cs(cs)); stackm stackm0(.clk(clk),.reset(reset),.load(dbus2qtop),.push(push),.pop(pop),.pop2(pop2),.thru(qthru),.d(dbus),.dthru(ramout),.qtop(qtop),.qnext(qnext)); alu alu0(.a(qtop),.b(qnext),.f(irout[4:0]),.s(aluout)); dpram #(16,10,1024) dpram0(.clk(clk),.load1(dbus2ram),.addr1(abus),.addr2(pcnext),.d1(dbus),.q1(ramout),.q2(irout));  
 物理上是这样的然后会调试bug,看时序。 前置:时序用modelsim,综合用quartus ii 等等  然后此时才刚刚开始。 继续生成电路网表,时序收敛,如果不对继续返回上述流程继续调试。 前置:synopsys回顾一下    此时应该生成版图文件,然后根据制造厂商提供的物理器件库进行最后的各种设计规则检查。前置:集成电路版图设计,软件有cadence:virtuoso layout editor送到代工厂,还要懂元器件前置:半导体物理,半导体器件物理,固体物理,电介质物理,量子力学,热力学与数理统计。根据得到的图表设计版图和工艺流程,大概是这样 前置:集成电路制造然后进行电气测试,电磁测试,最后封装。 前置:集成电路封装技术最后不能忘记出片的时候 焚香沐浴更衣,朝南拜三拜,祈祷不会有大问题。  第二步,设计系统驱动。终于得到了物理上的片子 我们开始写汇编器,编译器。 本质上烧写进rom的是这样的机器码。汇编器(把汇编语言变成机器码)前置:perl#!/usr/bin/perl -w//*****************//print *** label list ***;foreach $l (sort(keys(%label))){ printf %-8s%03x,$l,$label{$l};}$addr=0;print *** machine program ***;foreach (@source){ $line = $_; s/w+://; if(/pushis+(-?d+)/){ printf %03x:%04x $line,$addr++,$mcode{pushi}+($1&0xfff); } elsif(/(push|pop|jmp|jz|jnz)s+(w+)/){ printf %03x:%04x $line,$addr++,$mcode{$1}+$label{$2}; }elsif(/(-?d+)/){ printf %03x:%04x $line,$addr++,$1&0xffff; } elsif(/([a-z]+)/){ printf %03x:%04x $line,$addr++,$mcode{$1}; } else { print $line; }}  编译器 bison和flex(把高级语言转换成汇编语言)前置:编译原理%{#include %}%union {char *s; int n;}%token name number%destructor { free($$); } name number%token if while do%type if0%token goto else int in out halt......%%int yyerror(char *s){ printf(%s,s); }int main(){ yyparse(); }%{ #include #include y.tab.h int n=0;%}......while {yylval.n=++n;return(while);}[0-9]+ {yylval.s=strdup(yytext);return(number);}[a-za-z][a-za-z0-9]* {yylval.s=strdup(yytext);return(name);}. {return(yytext[0]);}%%int yywrap(){ return(1);}  终于可以固化进rom可以跑程序了,你还需要一段小型的开启代码(bootloader)前置:汇编语言%{#include %}%union {char *s; int n;}%token name number%destructor { free($$); } name number%token if while do%type if0%token goto else int in out halt......%%int yyerror(char *s){ printf(%s,s); }int main(){ yyparse(); }%{#include #include y.tab.hint n=0;%}......while {yylval.n=++n;return(while);}[0-9]+ {yylval.s=strdup(yytext);return(number);}[a-za-z][a-za-z0-9]* {yylval.s=strdup(yytext);return(name);}. {return(yytext[0]);}%%int yywrap(){ return(1);}  然后开始写操作系统 前置:ucos(嵌入式操作系统)系统宏定义,系统功能配置,系统头文件,初始化文件,调度文件,任务管理文件 系统时间管理文件,信号量文件,邮箱文件,消息队列文件,内存管理文件,系统服务文件,main文件。  写操作系统中的任务 前置:c语言,数据结构,算法导论。start: jk startnopsdal 32sdah 0datploop: tinginltinginhjend cxcutenopjmp loopincexcute: call 32nopjmp startnop  拿着含辛茹苦的板子还需要配置最小系统以及外围器件 前置:pcb设计和制造,电焊等技艺,模电、高频电子线路,信号与系统  如果有信号传输通讯协议 前置:spi,i2c,can,tcp/ip、wifi等等uint spi_rw(uint uchar){uint bit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit { mosi = (uchar & 0x80); // output 'uchar', msb to mosi uchar = (uchar << 1); // shift next bit into msb.. sck = 1; // set sck high.. uchar |= miso; // capture current miso bit sck = 0; // ..then set sck low again }return(uchar); // return read uchar}  rf天线前置:微波技术,电磁场与电磁波,hfss,天线技术等等。  以上回答来源:知乎,作者:彭谟威链接:https://www.zhihu.com/question/28580074/answer/93515413  看完这位同学的回答,网友纷纷评论表示:     化学,光学,半导体物理,等等就光刻胶涂胶的方式就够你研究一辈子了
这是一个人的活吗?  没有一定水平干不了这些的,微电子专业,呵呵 然后再制造出通量电容,回到过去,干死自己最后一张图是pcb layout还是ic的?  。。。看完我已经不想学单片机了。。手动再见    好吧,短短几分钟,经历了一遍《从入门到放弃》      ︿( ̄︶ ̄)︿不能更详细。。。     其实,21ic论坛的一位道友曾经尝试过制作51单片机,接下来欣赏网友一路向北lm的制作过程:
设计的电路原理图如下(pdf文件及相关详细资料见点击下方“阅读原文”查看原帖):pcb设计如下,双面板,10*10以内(打印比较便宜),3d图效果图如下:
板卡功能:1. 板载8个led  可做流水灯实验。2. 板载4位一体数码管 可做数码管静态 动态显示实验。3. 板载ch340下载芯片,可以通过usb实现一键下载。4. 板载max232串口芯片,现在串口下载,串口通讯。5. 板载继电器模块,可实现对大电流大电压的控制。6. 板载蜂鸣器模块,可以作为相关应用的提示。7. 板载1602液晶接口,可以实时显示相关字符数据。8. 板载12864液晶接口,可以实时显示汉子字符数据。9. 板载四颗独立按键,可以实现对一些功能的触发。10. 板载nrf24l01 无线接口,实现无线传输。11.所有io口引出,方便调试。  几天后,拿到打印后的板子,红色很是喜庆哈。     马不停蹄的焊接,很累啊,这么多贴片测试的过程必然艰辛。
大功告成,一块板子横空出世,赶紧试试, 板子焊接完成正面图,还算可以。
led、数码管、蜂鸣器、继电器一切ok,usb ch340 下载电路也ok,使用max232 db9串口下载也ok,液晶接口1602 12864 也可以正常显示,基本功能都一切正常这次打板还是比较成功的。趁着这股劲,一鼓作气,多焊机了几块板子,摆一排,成就感爆棚。
 下面是测试功能的一些图,包括1602、12864与oled显示。
▲1602显示
▲12864显示
▲oled显示


【收藏】大牛总结的30个PCB布局的细节与心得
谐波的产生、危害及抑制
潮州全面整治线路板等行业重金属污染
日韩运营商5G全球首发,预计明年3月商用
MATLAB学习笔记之傅里叶变换2
单片机是如何从入门到放弃的
一种数字功放PCB实现方案
汽车安全设计开发完整的碰撞防护系统解决方案
技术分享|终端安全防护|ChatGPT会创造出超级恶意软件吗?
使用 RAPIDS 进行更快的单细胞分析
如何快速成为一名高尔夫高手?你可能需要它
ADAS视频采集和注入解决方案 | CANoe+DYNA4+VX1161.51
电路原理图分享(复位电路 过零检测电路 风机驱动电路)
led芯片基础知识
麒麟820性能如何,能否成为新一代中端手机的芯片守门员
“柔性生产线是刚需!”华辰精密装备携手Fastems打造中国全数字化工厂
SK海力士收购Intel存储业务,标志着韩企在NAND闪存领域的强势地位
霍尔效应传感器的原则是怎样的
美国很多官员正在看好区块链应用于政府内外的潜力
飞思卡尔传感器在消费电子的应用