tag 标签: 最少焊点法

相关博文
  • 热度 63
    2010-9-14 15:28
    10807 次阅读|
    46 个评论
    本人从事单片机相关工作多年,刚开始学习串行通信时,没有老师指导,自己看完了好几本单片机教材,又上网查了很多关于单片机与计算机串行通信的文章,足足花了三个月时间才能够较自由的控制单片机的串口,当然包括做一个简单的属于自己的上位机界面,对于我们搞单片机的工程师来说,没有必要会做上位机界面,只要会用VB的 Mscomm控件做一个简单的就可以了。 学习是很艰苦的,但到底走了多少弯路呢?当然我是走了弯路: 第一、我认真的看完了好几本单片机教材的单片机串行口部分,每本都是大几十页,好几本,当然就是好几百页了。看得我头都大了。 第二、为了能看到效果,还得做一个上位机界面,如果像专业人士那样做,用VC编程,那是很难的,我首选VB,还是花了我不少的功夫(幸亏我好多年前就学习过用VB做界面,看过不少书,做过不少)。第三、在串口的控制方面也花了不少时间。 现在我有了设计经验,同时也有了学习经验,想告诉我的热心的读者,到底怎么学习做串口通信,才是捷径。 我个人认为主要有以下几点: 第一、必须会用定时器模式二(重点要了解定时器的TMOD)。 第二、至于单片机串口的多种工作方式中,只要了解通信协议、波特率设置就行了,其中只要知道SCON的设置就行了,当然这点的内容也很多,我们又只要知道串口的方式一就可以了。 第三、至于上位机软件,我们是在搞单片机的软件设计,不是在搞计算机的软件设计,只要用一个串口调试助手看看结果,或是用它从上位机往下位机发送几个数据看能不能控制就行了。完全没有必要去学VB、VC或是Delphi等软件。 本人认为,只要抓位了我上面提到的三点,就行了,如果要看下位程序实例,看看本人已经发表的相关的文章就绰绰有余了。
  • 热度 43
    2010-9-6 09:32
    10501 次阅读|
    30 个评论
                     很多朋友问我,学习单片机到底要花多少钱,我的回答是肯定的:只要花很少的钱。                他们总是说:要买仿真器,编程器,还要买实验箱或开发板,还要买大量的书和电子元器件。可能还要上培训学校。这样算算,怎么也得花上好几千人民币。               我学单片机花了多少钱呢?首先看看我买的书,随便点了一下,好像有百多本。算算也有好几千人民币。                                             再看看我买的工具与元器件,烙铁焊丝万用表都不算,因为我多年前就买了,示波器呢?根本就买不起。但元器件总得买一些吧,从旧板子上拆的也不够用,光单片机就买了千多块钱。还是从网上邮购的最廉价的货。                               这之中还没有别人常提到的仿真器和编程器。但现在我算是学会了单片机。              我有了学习单片机的经验,终于发现走了很多的弯路,不想让我的朋友们走很多的弯路,浪费社会资源,现将最廉价的单片机学习方法公布如下:              1、总得要买一两本书(一本基础的,一本C51的),当然也可以去向别人借。              2、总得买点焊接工具,如烙铁,摄子等。              3、买点单片机等相关元器件。            算起来要多少钱呢?几十加几十吧,也就百来块钱吧。            可能有朋友会问,没有仿真器怎么办呢,好像最差的也要一两千呢,编程器呢?好像也要好几百呢?           对于这个,我的回答是,都不用了,都可以让他们下岗吧!那用什么代替呢?我说还是少给那些公司厂家送点血汗钱吧! 有了ISP功能,不就什么都解决了吗?             在此,我向大家推荐几款有ISP功能的常见的单片机吧,SST的,STC的,AT89S51吧,当然还有菲利浦的部分单片机。我这里只是随便列出了几种,而且它们的下载工具都可以自己做。              综上所述,学单片机从51的开始学,开始成本也就花个几十块钱吧!             如果大家有什么经验,请发表评论或留言。
  • 热度 19
    2010-9-6 09:18
    3412 次阅读|
    0 个评论
                      在进行8051单片机应用系统程序设计时,编程都往往少不了要直接操作系统的各个存储器地址空间。C51程序经过编译之后产生的目标代码具有浮动地址,其绝对地址必须经过BL51连接定位后才能确定。为了能够在C51程序中直接对任意指定的存储器地址进行操作,可以采用扩展关键字“at”、指针、预定义以及连接定位控制命令。 在这些方法中,本人认为最简单而有效的方法是用“ _at_ ”关键字来对指定变量存储器空间绝对地址来指定。一般格式如下:                                         数据类型 标识符            _at_            地址常数             其中:                      存储器类型                为idata、data、xdata等C51能够识别的所有类型,最好不要省略。                      数据类型                   可以用int、long、float等基本类型,当然也可以用数组、结构等复杂数据类型             ,                本人认为一般用unsigned int 就可以解决很多问题了。                     标识符                      就是要定义的变量名,编程者自己决定                    地址常数                    就是要直接操作的存储器的绝对地址,必须位于有效的存储器空间之内。 注意:不能对变量进行初始化,只能是全局变量,一般不要轻易用,免得出错。 举例:                      xdata            unsigned int             addr1            _at_ 0x8300; 另有一种方法就是要用到一个头文件absacc.h,也不是很难,举个例说明一下就会明白:                #include absacc.h                 XBYTE =0;              /*向外部存储器(XDATA)地址0x8300写0 本人强烈建议用at,这样可能会更好些,还有一点就是不能乱用,因为有些存储器空间不能随便占用,C51编译器已经做其它的用了,而且有些空间单片机本身就做了很重要的作用,如果乱用,很容易出错.
  • 热度 33
    2010-9-6 09:17
    5108 次阅读|
    14 个评论
                 谈起单片机的硬件仿真器,给我的第一印象便是非常的昂贵。像我这样想在不到十年就想学习用会市面上大部分流行的单片机的单片机爱好者来说,根本就不可能去花钱买那么昂贵的单片机硬件仿真器,因为单片机的种类实在是太多了。             现在51单片机的C语言编译器非常的好,加上我用的51单片机大部分都是带ISP功能的,还有,就是有几次用伟福仿真器,仿真时的效果让人很失望,而今我手上的伟福仿真器这几年基本上是处于下岗状态.   仿真,对于初学者来说,还是有着极大的诱惑力的,就像我们刚开始用protel99se画电路图时,总是担心什么地方没有画好,想仿真一下,但实际上,真正用着protel99se画图的工程师是很少用它来仿真的.学习单片机也是这差不多的情况.   还有一种情况就是,某些51单片机根本就不能仿真,但ISP功能还是有的,我就用这个功能也还可以做出东西来.好像现在调试起来并不觉得很复杂.   一些厂家为了节省成本,根本就不用51单片机,而是用另外的指令系统更简单的价格更低廉的单片机,很多在学校学习用51单片机的学生,毕业之后就不得不重新学习,这时候,相应单片机的仿真器还是很重要的,因为单片机使用者对正在使用的单片机一点也不熟悉.              纵观各种情况,我个人认为单片机在不断更新,新的单片机仿真器也在不断出现,为了学习,单片机硬件仿真器在相当长的一段时间内还是会存在的.
  • 热度 18
    2010-9-6 09:15
    4826 次阅读|
    2 个评论
                   很多初学单片机者往往对C51的头文件感到很神秘,而为什么要那样写,甚至有的初学者喜欢问,P1口的P为什么要大写,不大写行不行呢?其实这样的问题,看过本文后,就会明白。其实这个是在头文件中用sfr定义的,现在定义好了的是这样的sfr P1           = 0x90;,也就是说,到底大写,还是小写,就是在这里面决定的。这就说明,如果你要用小写,就得在头文件中改为小写。其实它都是为了编程序方便才这样写的,在程序编译时,就会变成相应的地址(如P1就变成了0x90)。                 还有一点就是,现在有很多改进型的单片机,它们有很多新增的特殊功能寄存器在标准的reg51.h或reg52.h中没有定义,这就需要自己加进头文件(相关厂家已经把它们定义好了),当然也可以直接在程序中定义。下面是一个标准的C51头文件: /*         BYTE Registers         */ sfr P0           = 0x80; sfr P1           = 0x90; sfr P2           = 0xA0; sfr P3           = 0xB0; sfr PSW          = 0xD0; sfr ACC          = 0xE0; sfr B            = 0xF0; sfr SP           = 0x81; sfr DPL          = 0x82; sfr DPH          = 0x83; sfr PCON         = 0x87; sfr TCON         = 0x88; sfr TMOD         = 0x89; sfr TL0          = 0x8A; sfr TL1          = 0x8B; sfr TH0          = 0x8C; sfr TH1          = 0x8D; sfr IE           = 0xA8; sfr IP           = 0xB8; sfr SCON         = 0x98; sfr SBUF         = 0x99; /*         8052 Extensions         */ sfr T2CON         = 0xC8; sfr RCAP2L = 0xCA; sfr RCAP2H = 0xCB; sfr TL2           = 0xCC; sfr TH2           = 0xCD; /*         BIT Registers         */ /*         PSW         */ sbit CY           = PSW^7; sbit AC           = PSW^6; sbit F0           = PSW^5; sbit RS1          = PSW^4; sbit RS0          = PSW^3; sbit OV           = PSW^2; sbit P            = PSW^0; //8052 only /*         TCON         */ sbit TF1          = TCON^7; sbit TR1          = TCON^6; sbit TF0          = TCON^5; sbit TR0          = TCON^4; sbit IE1          = TCON^3; sbit IT1          = TCON^2; sbit IE0          = TCON^1; sbit IT0          = TCON^0; /*         IE         */ sbit EA           = IE^7; sbit ET2          = IE^5; //8052 only sbit ES           = IE^4; sbit ET1          = IE^3; sbit EX1          = IE^2; sbit ET0          = IE^1; sbit EX0          = IE^0; /*         IP         */ sbit PT2          = IP^5; sbit PS           = IP^4; sbit PT1          = IP^3; sbit PX1          = IP^2; sbit PT0          = IP^1; sbit PX0          = IP^0; /*         P3         */ sbit RD           = P3^7; sbit WR           = P3^6; sbit T1           = P3^5; sbit T0           = P3^4; sbit INT1         = P3^3; sbit INT0         = P3^2; sbit TXD          = P3^1; sbit RXD          = P3^0; /*         SCON         */ sbit SM0          = SCON^7; sbit SM1          = SCON^6; sbit SM2          = SCON^5; sbit REN          = SCON^4; sbit TB8          = SCON^3; sbit RB8          = SCON^2; sbit TI           = SCON^1; sbit RI           = SCON^0; /*         P1         */ sbit T2EX         = P1^1; // 8052 only sbit T2           = P1^0; // 8052 only               /*         T2CON         */ sbit TF2           = T2CON^7; sbit EXF2          = T2CON^6; sbit RCLK          = T2CON^5; sbit TCLK          = T2CON^4; sbit EXEN2         = T2CON^3; sbit TR2           = T2CON^2; sbit C_T2          = T2CON^1; sbit CP_RL2 = T2CON^0;