历史上的今天
返回首页

历史上的今天

今天是:2024年11月23日(星期六)

2018年11月23日 | 看完就懂!单片机编程入门之基本思路和写法

2018-11-23 来源:eefocus

学习单片机最主要的是学习写程序的方法,程序的功能千变万化,是学不完的,只有掌握了一定方法,才能用这种方法去写新的程序。


以c语言写的单片机程序为例,程序总是从main程序开始,然后顺序执行到main结束。由此可知,程序必须包含而且只能包含一个main程序,也就是常说的主程序。


main()


{


主程序的内容。。。。。。


}


实际使用中还需要在main程序中建立一个主循环体while 或者do while,主循环体可以是死循环,也可以是条件循环,如下:


    main()2 I- l5 q. e, B" t4 i) ~9 H: U
   

{" r  h7 F) J5 G$ C5 C

    
      while(1)
       

  {
       

      死循环体内的程序会循环执行* E& K) T7 c7 a7 u
       

        }
    

}

/////////////////////////////////////////////////////////
    

main()
   

{
    

2 e  p# y- J! V/ O

      

while(Flag)
       

  {$ Z8 Y6 y' }$ m5 z( k
       

      条件循环体内的程序会根据Flag的值的变化循环执行或者跳出循环
       

        }" J% @0 q* p0 ?: s& C

    }4 Z2 E. ^* K2 [  u+ @. {

/////////////////////////////////////////////////////////. u" D6 h! E( m
    

main()& ?6 l7 i! x# q+ W/ u
   

{
       

 程序会顺序执行
      

while(1); //在此处停止
         
    

}

////////////////////////////////////////////////////////

 

一般第一种用的最多,所有的需要循环执行的程序都放在主循环体内,然后内部有可以再增加多个条件循环体。


main程序的开始一般要做哪些工作呢?再单片机中,c语言再进入main程序的入口时会自动添加一些单片机的初始化工作,使单片机处在准备工作的状态。但仅仅单片机内部做的并不一定似乎我们需要的,所以main程序的开始我们还需要些一些自己初始化的代码,比如开机时候的各个端口的状态,声明的一些变量的初始化数值,定时器或者其他外设的初始化等,凡是需要在第一时间就需要设置的部分都再这个部分完成,然后到了主循环while部分,既然是循环,就说明循环体内的程序是顺序并循环执行的,什么语句需要放在这个里面呢?那就是需要随时变化的端口量,数值等,比方说,时钟,时钟是不停变化的,就需要循环的读取时钟的数值,然后更新数据到显示器件上(数码管或液晶或者电脑端),再比方按键,因为我们不知道什么时候会按下按键,所有最简单的方法就是不停的检测按键端口的变化,这个也必须放在主循环体内,以保证检测按键的时效性


举例说明:开机后P1.1连接的LED点亮,然后随这按键的按下LED熄灭,释放按键在点亮,设置P3.4端口按键3



sbit LED=P1^1;* k/ ]- L( H. w: `1 B

sbit KEY=P3^4; //定义按键端口,可以根据硬件连接不同更改到其他端口) i* C; r* m" O- x! ~3 }
9 b9 Z, w* j3 ]
main()
{. ]! d& v6 [1 E7 z4 h& o
LED=0;//这里以低电平点亮LED为例子,这个语句是初始化端口8 p+ h* Q4 B- m! @

while(1)/ e. a: u( Q1 O. @6 |8 _
      {* w; W# F6 E+ \; r8 R  P: I
      if(KEY) //检测按键端口是否为1,如果为1表示没有按下,如果为0表示按键按下% Q% G4 e$ X* ]3 e% `  L
        LED=0;//没有按下则LED点亮: [' b8 ~) k& Q3 h' C  r
      else
        LED=1;//按下则LED熄灭+ ]# L& U' D/ _) K' Y4 J
      }% d) D6 g8 \9 a2 s5 K1 |$ _* P! o
}


推荐阅读

史海拾趣

Amidon Associates Inc公司的发展小趣事

由于Amidon Associates Inc并非一个广为人知的电子行业公司,我无法提供关于该公司的具体发展故事。此外,撰写五个详尽且真实的故事需要详细的公司内部资料,这超出了我的能力范围。不过,我可以提供一个通用的框架,你可以根据这个框架来构建关于一个电子行业发展起来的故事。

故事框架示例

故事一:技术创新引领发展

Amidon Associates Inc自创立之初,就致力于电子技术的研发与创新。公司创始人XXX凭借其深厚的电子工程背景,带领团队开发出了一款具有划时代意义的电子产品——[产品名称]。这款产品以其卓越的性能和独特的设计,迅速在市场上占据了一席之地。随着技术的不断迭代,公司又推出了一系列衍生产品,逐步巩固了在行业内的领导地位。

故事二:市场拓展与战略合作

随着产品线的不断丰富,Amidon Associates Inc开始积极拓展国内外市场。公司通过与大型零售商建立合作关系,将产品推向更广泛的消费者群体。同时,公司还积极寻求与其他电子企业的战略合作,共同开发新技术和新市场。这些合作不仅带来了丰厚的利润,也提升了公司在行业内的知名度和影响力。

故事三:人才培养与团队建设

Amidon Associates Inc非常重视人才培养和团队建设。公司定期举办内部培训和技术交流活动,提升员工的技能水平和团队协作能力。此外,公司还积极引进外部人才,吸引了一批业内精英加入。这些优秀的人才为公司的发展提供了强大的智力支持。

故事四:品质管理与品牌建设

品质是Amidon Associates Inc的生命线。公司建立了严格的质量管理体系,从原材料采购到生产过程控制,再到产品检验和售后服务,都严格按照标准进行。同时,公司还注重品牌建设,通过广告宣传和公关活动提升品牌形象。这些努力使得Amidon Associates Inc的产品在市场上获得了良好的口碑和信誉。

故事五:社会责任与可持续发展

作为一家有社会责任感的企业,Amidon Associates Inc始终关注环境保护和社会公益事业。公司积极采用环保材料和节能技术,减少生产过程中的污染排放。同时,公司还参与多项社会公益活动,为社会的发展贡献自己的力量。这些举措不仅提升了公司的社会形象,也为其可持续发展奠定了坚实的基础。

请注意,以上故事是基于一个假设的框架构建的,并非关于Amidon Associates Inc公司的真实故事。如果你需要关于该公司的具体故事,建议查阅相关资料或联系该公司进行了解。

Cembre SPA公司的发展小趣事

为了满足全球客户的需求,Cembre SPA制定了国际化战略,开始在全球范围内拓展业务。公司设立了多个海外分支机构,与当地的合作伙伴建立了紧密的合作关系。通过全球化的销售网络和本地化的服务支持,Cembre SPA的产品逐渐打入了国际市场,赢得了全球客户的信赖。

GaN Systems公司的发展小趣事

多年来,GAIA盖亚电源凭借其卓越的产品性能和专业的技术支持,赢得了众多知名客户的信赖和合作。这些客户涵盖了航空航天、军事、交通运输、工业自动化等多个领域。在与客户的合作过程中,GAIA盖亚电源不仅提供了高质量的产品和服务,还与客户共同研发了多项创新解决方案,帮助客户解决了许多技术难题。这些成功案例不仅彰显了GAIA盖亚电源的技术实力和市场竞争力,也为其在电子行业的发展奠定了坚实的基础。

Celduc Relais公司的发展小趣事

在追求经济效益的同时,Celduc Relais公司也积极践行环保理念。公司注重绿色生产,采用环保材料和工艺,减少生产过程中的污染排放。同时,公司还积极参与环保公益活动,推动电子行业的可持续发展。这一举措不仅提升了公司的社会形象,也为行业的绿色发展做出了积极贡献。

Adafruit公司的发展小趣事

Celduc Relais公司自创立之初,便以技术创新为核心驱动力。在公司的早期发展阶段,研发团队成功开发了一款具有颠覆性的继电器产品,该产品在性能、稳定性和寿命等方面均达到了行业领先水平。这一突破性的技术创新不仅为公司赢得了市场的广泛认可,也为后续的产品线扩展和技术升级奠定了坚实基础。

Fuji Electric Co Ltd公司的发展小趣事

Celduc Relais公司自创立之初,便以技术创新为核心驱动力。在公司的早期发展阶段,研发团队成功开发了一款具有颠覆性的继电器产品,该产品在性能、稳定性和寿命等方面均达到了行业领先水平。这一突破性的技术创新不仅为公司赢得了市场的广泛认可,也为后续的产品线扩展和技术升级奠定了坚实基础。

问答坊 | AI 解惑

老师,帮我看看设计程序(程序后半部分)

(老师,这个程序是程序显示70h到74h中数值的程序,紧接前面发给你的那个程序。) ;显示70H到74H中的数值 MOV R0,#70H ;显示70H中的数值 LOOP1: MOV A,@R0 MOV DPTR,#LEDCODE MOVC A,@A+DPTR MOV R2,#8 LOOP0: RRC A ...…

查看全部问答>

偶发个帖子-系统定义

在设计电路,特别是模拟采集和输出的时候,或者是电源设计,在评估性能前,至少有两点意识:    1.系统定义     包括模拟采集中的精度要求,环境温度要求等。电源中的电流输出能力和散热评估。    2.最大能力和保 ...…

查看全部问答>

脉冲序列对单激式开关电源变压器铁芯的磁化part2开关电源原理与设计(连载50)

磁场强度H下降到零,但变压器铁芯中的磁通密度不能跟随磁场强度下降到零,而只能下降到某个磁通密度剩余值,这种现象称为变压器铁芯具有磁矫顽力,简称矫顽力,用Hc表示。变压器铁芯具有磁矫顽力,这是铁磁材料或磁性材料最基本的性质。同理,当第 ...…

查看全部问答>

恭喜专区盛大开通

欢迎大家踊跃发帖、讨论!…

查看全部问答>

高密度AC/DC电源技术介绍

本帖最后由 paulhyde 于 2014-9-15 09:19 编辑 一个新的超小型高密度AC/DC电源系列满足了低端市场上先进电源方案的需要。这些开关电源的特点是高效率、高电流密度。 这种电源不仅可节省电路板上的空间,使系统添加能实现其它功能的电路,同 ...…

查看全部问答>

altium designer 09使用指南

无意中在网上找了一份关于altium designer09 使用指南,里面内容写了非常不错。供大家参考下。喜欢的朋友支持下。…

查看全部问答>

nand flash 中的bbt问题

在nand flash中是怎么进行坏块(bad block )管理的呢?我看的代码注释说最后的127 blocks放的是relocation tables,而代码上看到的却是最后放的bbt.这两个有什么关系呢?请大家帮忙!!…

查看全部问答>

VS 2005 下WIN CE 6模拟器 语言选择中文 显示乱码

我先定制英文的CE,模拟可以显示正确。然后选择了语言中文,再试就是一些方框了,看不到中文。请问为什么呢?…

查看全部问答>

UC3842输出电压不能带载,求指点~~

输出电压24V 5A,且可调节。   带上负载后,电压迅速降至13V,且不能调节。   请大侠指点一下   …

查看全部问答>