单片机例程及详细分析.docVIP

  • 10
  • 0
  • 约7.74千字
  • 约 11页
  • 2017-12-26 发布于河南
  • 举报
单片机例程及详细分析

近期的几个单片机例程及详细分析 最近,我们在课上讲了几个小例子,在此再把Proteus图及程序的详细解释列出来,供大家参考。 应用查询方式,对连接在P1.4管脚上的按键次数进行计数,每5次在P1.0上连接的红色LED亮或不亮。 图1 找元器件的方法 单片机属于微处理器库里面的,因此,应再点击Microprocessor ICS,后同。 图2. 1题图 程序: ORG 0H ;程序从程序存储器的0单元开始存放 MAIN: MOV R0,#0 ;设R0为计数器,赋初始值0,注意,在这儿不赋值0,单片机一上电R0也等于0 LOOP: JB P1.4,$ ;若P1.4为高,表明没键按下,等待 JNB P1.4,$ ;若P1.4为低,表明有键按下,等待该键的弹起 INC R0 ;按键弹起后,表明按键一次,计数器加1 CJNE R0,#6,LOOP ;若R0不等于6,表明还没按够5次,继续查询按键信息 MOV R0,#0 ;若R0=6,表明已经被按下5次,计数器清零 CPL P1.0 ;P1.0翻转,即LED的状态转换 AJMP LOOP ;进入下一个循环 END ;程序结束 计算得:X=106,16进制为6AH,即TH0和TL0的赋值都为6AH(因方式2位自动装入模式) Proteus图: 图4 题2图及调出示波器的位置 程序及解释: ORG 0H ;程序从程序存储器的0单元开始存放 AJMP MAIN ;跳转至以MAIN为标号的主程序 ORG 0BH ;0B是定时器0的中断子程序入口 AJMP T0INT ;跳转到以T0INT为标号的中断子程序 ORG 30H ;主程序从30H单元开始存放 MAIN: MOV TMOD,#20H ;设置定时器的工作方式,采用工作方式2即自动装入的8位 MOV TH0,#8AH ;给TH0赋初值 MOV TL0,#8AH ;给TL0赋初值 SETB EA ;打开总中断 SETB ET0 ;打开T0的中断 SETB TR0 ;让T0开始工作 SJMP $ ;踏步,等待中断 T0INT: CPL P1.0 ;时间到,翻转P1.0 INC R0 ;因为300us正好是150us的整数倍,因而可用一个定时器 CJNE R0,#2,GOON ;用R0作为中断几次的计数器,若中断2次既达到150us的两倍 MOV R0,#0 ;若达到了两倍,翻转,计数器清零 CPL P1.1 ;P1.1翻转 GOON: RETI ;中断子程序返回 END ;程序结束 图5 波形图 应用164带3只数码管,显示从000-999的单个跳数; 本题考虑点: 164是移位寄存器,因此最好直接用串口,与164连接; 3位数,可把三位数设为一个计数器,设从30H-32H,其中30H为最低位,31H为中间位,32H为最高位,然后从30H开始加1,当30H加到10后,30H清零,31H再加1,31H为10后,变为零,32H再加1,当32H为10后,清零。 把显示部分编写为一个子程序,30-32H内的数每改变一次,调用一次显示; 由于人的视力跟不上单片机一条指令的运算时间,因此需要延时。 因此,在软件设计上可分为三部分:一是加数部分,一是显示部分,一是延时部分。 Proteus图: 图6 题3图 (注意RXD、TXD的接法,以及后两只164的接法) 程序: ORG 0H ;程序从程序存储器的0单元开始存放 AJMP MAIN ;跳转到主程序

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档