单片机应用项目化教程-顾亚文课件项目三、计数器设计_第1页
单片机应用项目化教程-顾亚文课件项目三、计数器设计_第2页
单片机应用项目化教程-顾亚文课件项目三、计数器设计_第3页
单片机应用项目化教程-顾亚文课件项目三、计数器设计_第4页
单片机应用项目化教程-顾亚文课件项目三、计数器设计_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计数器的设计与制作项目三项目三1

输入电路设计输入口的热身动作P0~P3在作为输出功能时,结构有所不同;作为输入功能时,结构几乎完全相同。在输入之前,必须要送

1

到该I/O口。做输入功能时,都是通过一个三态的寄存器连接到CPU内部的数据总线的。内部“读引脚”必须为1,外部数据才会通过寄存器,送到内部数据总线。这也是为什么在输入之前,必须要送1到该I/O口的原因。输入电路1

输入电路设计一、输入设备输入电路1

输入电路设计一、输入设备输入电路一、输入设备输入电路BCD拨码开关1

输入电路设计一、输入设备输入电路BCD拨码开关1

输入电路设计一、输入设备输入电路BCD拨码开关1

输入电路设计二、输入电路输入电路1

输入电路设计二、输入电路输入电路如图所示,平时按钮PB为开路状态,其中470Ω的电阻连接到地,使输入引脚保持为低电平;若按下按钮开关则经由开关接VCC,输入引脚将变为高电平;放开开关时,输入引脚将恢复为低电平信号。1

输入电路设计二、输入电路输入电路如图所示,平时开关KS为开路状态,其中10KΩ的电阻连接到VCC,使输入引脚保持为高电平;若切换到ON状态,则经由开关接地,输入引脚将变为低电平;切换到OFF状态时,输入引脚将恢复为高电平信号。1

输入电路设计1

输入电路设计二、输入电路输入电路自己分析下面两图的按钮按下和弹起时,引脚对应电压的高低。三、输入电路的梦魇及其克星世界是美好的但却是现实的机械式设计产品老化开关接触面积小理想中干净的信号不可能闭合过程中出现毫秒级变化我不可避免的总会出现我是抖动输入电路1

输入电路设计三、输入电路的梦魇及其克星机械式设计产品老化开关接触面积小虽然依然存在但我用与非门构成我可以去掉抖动我是双稳态去抖电路输入电路1

输入电路设计三、输入电路的梦魇及其克星零件多占地面积大双稳态电路的缺点我一个都没有我也可以去掉抖动我是RC去抖电路输入电路1

输入电路设计三、输入电路的梦魇及其克星不需元件零占地面积双稳态电路RC去抖电路都不给力我只需要16毫秒我是软件去抖输入电路1

输入电路设计三、输入电路的梦魇及其克星思路:在程序执行时,避开产生抖动的那段时间(10~20ms),即可达到去抖的效果。做法:在读入第一个状态的输入信号时,执行10~20ms的延时子程序(通常为16ms),以下图为例,若按下PB,程序执行完延迟子程序后将执行BEEP子程序。输入电路1

输入电路设计ORG0START:

SETBP2.3JBP2.3,$

CALLDELAY16CALLBEEP……;****延迟子程序*****DELAY16:MOVR7,#40D1:

MOVR6,#200DJNZR6,$DJNZR7,D1……去抖实例;定义程序从0开始;将P2.3设计为输入功能;检查P2.3有无变化;调用延迟子程序,去抖动;调用BEEP子程序;省略其他内容;****16ms延时*****;R7寄存器加载40次;R6寄存器加载200次;本行执行R6次;本行执行R7次;省略其他内容1

输入电路设计任务1指拨开关实例功能说明:如图所示,指拨开关的状态由P2输入,其状态将反应到P0所连接到的LED上,若P2.0所连接的开关on,则P0.0所连接的LED会亮、若P2.0所连的开关为off,则P0.0所连接的LED将不亮,其他端口依次类推。实例演练实例演练原理图任务1指拨开关实例流程图实例演练开始将P2设计成输入功能读取P2开关状态将开关状态输出到P0任务1指拨开关实例实例演练ORG0START:MOVP2,#0FFHLOOP:MOVA,P2MOVP0,AJMPLOOPEND任务1指拨开关实例实例演练ORG0;程序从0开始START:MOVP2,#0FFH;将P2口设计为输入功能LOOP:MOVA,P2;读入指拨开关状态MOVP0,A;将开关状态反映到P0JMPLOOP;跳至LOOP形成一个循环END;程序结束任务1指拨开关实例任务2按钮开关实例功能说明:若按下PB1,则P0.0所连接的LED亮;若按下PB2,则关闭P0.0所连接的LED。实例演练实例演练原理图任务2按钮开关实例流程图实例演练开始将P2设计成输入功能读取P2开关状态P2.0=0?P2.1=0?yesyesnonoP0.0=0LED亮P0.0=1LED灭任务2按钮开关实例实例演练ORG0START:MOVP2,#0FFHLOOP:JNBP2.0,ONJNBP2.1,OFFJMPLOOPON:CLRP0.0ON_1:JBP2.0,LOOPJMPON_1OFF:SETBP0.0OFF_1:JBP2.1,LOOPJMPOFF_1END任务2按钮开关实例实例演练ORG0;程序从0开始START:MOVP2,#0FFH;将P2设计为输入功能LOOP:JNBP2.0,ON;若PB1on,则跳至ONJNBP2.1,OFF;若PB2on,则跳至OFFJMPLOOP;跳至LOOP形成循环ON:CLRP0.0;P0.0=0ON_1:JBP2.0,LOOP;按键断开?JMPON_1;跳至ON_1OFF:SETBP0.0;P0.0=1OFF_1:JBP2.1,LOOP;按键断开?JMPOFF_1;跳至OFF_1END任务2按钮开关实例

ORG

0START:

MOV

P2,#0FFHLOOP:

JNB

P2.0,ON

JNB

P2.1,OFF

JMP

LOOPON:

CLR

P0.0ON_1:

JB

P2.0,LOOP

JMP

ON_1OFF:

SETB

P0.0OFF_1:

JB

P2.1,LOOP

JMPOFF_1

END实例演练任务2按钮开关实例2七段数码管7段LED数码管是利用7个LED组合而成的显示设备,可以显示0~9等10个数字,如下图所示。实例演练实例演练2七段数码管7段LED数码管分为共阴极和共阳极两种。实例演练2七段数码管共阳极7段LED数码管实例演练使用共阳极LED,首先把com连接到Vcc,然后将每一只阴极引脚各接一个限流电阻,限流电阻的大小可使用200~330Ω,电阻越大亮度越弱;若只用一个电阻,则显示不同的数字,将会有不同的亮度。2七段数码管共阴极7段LED数码管实例演练使用共阴极数码管,首先把com脚接地(GND),然后将每一只阳极引脚各接一个限流电阻。2七段数码管

译码器7447/7448实例演练7447/7448系列芯片就是将BCD码转换成7段LED数码管的译码驱动IC。其中7447系列包括7446、7447、7448、74LS49等,其中7446和7447用以推动共阳极7段LED数码管;7448和74LS49用以推动共阴极7段LED数码管。2七段数码管

译码器7447/7448实例演练A、B、C、D:BCD码输入引脚。a、b……g:7段LED数码管输出引脚。LT:测试引脚。该脚为低电平时所连接的7段LED数码管全亮。正常情况下,该引脚为高电平。RBI:连波淹没输入引脚,正常显示下,该引脚应输入高电平。RBO:连波淹没输出引脚,正常显示下,该引脚输入高电平或者空接。2七段数码管数字或功能输入RBO7446/74477448输出输出LTRBIDCBAabcdefgabcdefg011000010000001111111011X000111001111011000021X001010010010110110131X001110000110111100141X010011001100011001151X010110100100101101161X011011100000001111171X011110001111111000081X100010000000111111191X1001100011001110011101X1010111100100001101111X1011111001100011001121X1100110111000100011131X1101101101001001011141X1110111100000001111151X1111111111110000000BIXXXXXX011111110000000RBI100000011111110000000LT0XXXXX1000000011111112七段数码管

译码器7447/7448实例演练测试7段LED数码管若将LT引脚接地,则7段LED数码管全亮,可以检查是否有不显示的段。对于多个7段LED数码管的电路,可将每个LT的引脚连接起来作为测试端,平时此端口接高电平,测试时将其接地即可。功能说明:PB1具有增数功能、PB2具有减数功能,若程序刚开始时,7段LED数码管显示0,按一下PB1则数码管显示1,再按一下PB1,数码管显示2……若数码管显示9,按一下PB1,则数码管显示0。同样的,若数码管显示为0,按一下PB2,则数码管显示9,再按一下PB2,数码管显示8……依次类推。实例演练任务3计数器实例实例演练原理图任务3计数器实例1

ORG0;程序从0开始2START:MOVA,#0

3SETBP2.0

4SETBP2.1

5LOOP:MOVP0,A

6

JNBP2.0,INCR

7

JNBP2.1,DECR

8

JMPLOOP

9;===========================================10INCR:JNBP2.0,INCR

11

INCA

12

DAA;将A的内容进行BCD调整13

JMPLOOP

14;===========================================15DECR:JNBP2.1,DECR

16

JZZERO

17

DECA

18

JMPLOOP

19ZERO:MOVA,#9

20

JMPLOOP

21;===========================================22END

1

ORG0;程序从0开始2START:MOVA,#0;设定显示的初始值3SETBP2.0;将P2.0设定为输入功能4SETBP2.1;将P2.1设定为输入功能5LOOP:MOVP0,A;显示A的内容6

JNBP2.0,INCR;若PB1闭合,则跳转到INCR7

JNBP2.1,DECR;若PB0闭合,则跳转到DECR8

JMPLOOP;跳转至LOOP形成循环9;===========================================10INCR:JNBP2.0,INCR;放开按键?11

INCA;A加112

DAA;将A的内容进行BCD调整13

JMPLOOP;跳转至LOOP形成循环14;===========================================15DECR:JNBP2.1,DECR;放开按键?16

JZZERO;判断A的内容是否为017

DECA;A减118

JMPLOOP;跳转至LOOP形成循环19ZERO:MOVA,#9;0-1=920

JMPLOOP;跳转至LOOP形成循环21;===========================================22END;程序结束ORG0START:MOVA,#0SETBP2.0SETBP2.1MOVP0,ALOOP:JNBP2.0,INCRJNBP2.1,DECRSJMPLOOP;====================INCR:JNBP2.0,INCRADDA,#1DAAMOVP0,ASJMPLOOP;====================DECR:JNBP2.1,DECRJZZER0DECAMOVP0,ASJMPLOOPZER0:MOVA,#9MOVP0,ASJMPLOOPEND有没有发现什么不对的地方?尝试着把INCA

改成ADDA,#01H如何?实例演练三、计数器实例4.3跳转指令(22条指令)1、条件跳转指令2、无条件跳转指令3、子程序操作指令4、比较式跳转指令5、计数循环指令6、空操作指令451、条件跳转指令条件跳转指令是指只有满足某个条件后,程序才可实现转移,当条件满足时,程序按照指令提供的转移偏移量,转移到由PC当前值与偏移量相加得到的目的地址去执行;当条件不满足时,程序顺序执行下一条指令。46JCrel说明:以进位标志位CY为程序分支的依据,若CY=1则转移到rel位置,rel的范围从下一个地址开始,向前128个地址,向后127个地址。若CY=0,则继续执行下条指令。编译后大小:2B执行时间:24个时钟脉冲指令:JCLOOP若执行前CY=0,将继续执行下一条指令。若执行前CY=1,将执行LOOP地址的指令。47JNCrel说明:以进位标志位CY为程序分支的依据,若CY=0则转移到rel位置,rel的范围从下一个地址开始,向前128个地址,向后127个地址。若CY=1,则继续执行下条指令。编译后大小:2B执行时间:24个时钟脉冲指令:JNCLOOP若执行前CY=1,将继续执行下一条指令。若执行前CY=0,将执行LOOP地址的指令。48JBbit,rel说明:以bit为程序分支的依据,若bit=1则转移到rel位置,rel的范围从下一个地址开始,向前128个地址,向后127个地址。若bit=0,则继续执行下条指令。编译后大小:2B执行时间:24个时钟脉冲指令:JBP1.0,LOOP若执行前P1.0=0,将继续执行下一条指令。若执行前P1.0=1,将执行LOOP地址的指令。49JNBbit,rel说明:以bit为程序分支的依据,若bit=0则转移到rel位置,rel的范围从下一个地址开始,向前128个地址,向后127个地址。若bit=1,则继续执行下条指令。编译后大小:2B执行时间:24个时钟脉冲指令:JNBP1.0,LOOP若执行前P1.0=1,将继续执行下一条指令。若执行前P1.0=0,将执行LOOP地址的指令。50JBCbit,rel说明:以bit为程序分支的依据,若bit=1则转移到rel位置,并清除bit(bit=0)。rel的范围从下一个地址开始,向前128个地址,向后127个地址。若bit=1,则继续执行下条指令。编译后大小:2B执行时间:24个时钟脉冲指令:JBCP1.0,LOOP若执行前P1.0=0,将继续执行下一条指令。若执行前P1.0=1,将执行LOOP地址的指令,并使P1.0=051JZrel说明:以ACC的内容为程序分支的依据,若ACC=0则转移到rel位置,rel的范围从下一个地址开始,向前128个地址,向后127个地址。若ACC≠0,则继续执行下条指令。编译后大小:2B执行时间:24个时钟脉冲指令:JZLOOP若执行前ACC≠0,将继续执行下一条指令。若执行前ACC=0,将执行LOOP地址的指令。52JNZrel说明:以ACC的内容为程序分支的依据,若ACC≠0则转移到rel位置,rel的范围从下一个地址开始,向前128个地址,向后127个地址。若ACC=0,则继续执行下条指令。编译后大小:2B执行时间:24个时钟脉冲指令:JNZLOOP若执行前ACC=0,将继续执行下一条指令。若执行前ACC≠0,将执行LOOP地址的指令。534.3跳转指令(22条指令)1、条件跳转指令2、无条件跳转指令3、子程序操作指令4、比较式跳转指令5、计数循环指令6、空操作指令542、无条件跳转指令无条件跳转指令是指当程序执行到该指令时,立即无条件转移到指令所指定目的地址去执行后面的程序。55AJMPaddr11说明:将11位地址送到PC的低11位中,PC的高5位不变。因为2^11=2K,也就是2KB范围内的跳转,所以称为短转移指令。编译后大小:2B执行时间:24个时钟脉冲指令:AJMPL1执行前PC指向“AJMPL1”指令的地址。执行后,PC指向L1卷标的地址,将程序流程改至L1地址。56LJMPaddr16说明:将16位地址送到PC中。因为2^16=64K,也就是2KB范围内的跳转,所以称为长转移指令。编译后大小:3B执行时间:24个时钟脉冲指令:LJMPL2执行前PC指向“LJMPL2”指令的地址。执行后,PC指向L2卷标的地址,将程序流程改至L2地址。57SJMPrel说明:执行rel地址的指令,可向前128个地址,向后127个地址,成为相对地址跳转。编译后大小:2B执行时间:24个时钟脉冲指令:SJMPX1执行前,PC指向“SJMPX1”指令的地址。执行后,PC指向X1卷标的地址。58HERE:SJMPHERE59JMP@A+DPTR说明:改变程序的流程,跳至(A+DPTR)地址的指令。编译后大小:1B执行时间:24个时钟脉冲指令:JMP@A+DPTR执行前,PC指向“JMP@A+DPTR”指令的地址,A=02H,DPTR=1234H执行后,PC指向1236H,将程序流程改到1236H。60614.3跳转指令(22条指令)1、条件跳转指令2、无条件跳转指令3、子程序操作指令4、比较式跳转指令5、计数循环指令6、空操作指令623、子程序操作指令子程序操作指令包括主程序调用子程序的指令,以及由子程序返回主程序的指令。63ACALLaddr11说明:调用addr11地址的子程序,也就是2KB范围内的子程序,又称为近程调用。编译后大小:2B执行时间:24个时钟脉冲指令:ACALLDELAY执行前,PC指向“ACALLDELAY”指令的地址。执行后,PC指向DELAY卷标的地址,执行DELAY子程序。64LCALLaddr16说明:调用addr16地址的子程序,也就是64KB范围内的子程序,又称为远程调用。编译后大小:3B执行时间:24个时钟脉冲指令:LCALLDISP执行前,PC指向“LCALLDISP”指令的地址。执行后,PC指向DISP卷标的地址,执行DISP子程序。65RET说明:由子程序返回主程序。编译后大小:1B执行时间:24个时钟脉冲指令:RET执行前,PC指向子程序RET指令地址。执行后,PC指向主程序调用该子程序指令的下一地址。66RETI说明:由中断子程序返回主程序。编译后大小:1B执行时间:24个时钟脉冲指令:RETI执行前,PC指向中断子程序RETI指令地址。执行后,PC指向主程序中断之前的PC值,执行下一条地址的指令。674.3跳转指令(22条指令)1、条件跳转指令2、无条件跳转指令3、子程序操作指令4、比较式跳转指令5、计数循环指令6、空操作指令684、比较式跳转指令比较时跳转指令的功能就是将两个操作数的比较结果作为跳转与否的依据,然后判断是否跳转。69CJNEA,direct,rel说明:将A的内容与(direct)相比较,若不等则跳转到rel的相对地址,若相等则继续执行下一条指令。编译后大小:3B执行时间:24个时钟脉冲指令:CJNEA,20H,LOOP若执行前ACC=(20H),执行后程序将继续执行下一行指令。若执行前ACC≠(20H),执行后将执行LOOP地址的指令。ACC=(direct)?70CJNEA,#data,rel说明:将A的内容与立即数data相比较,若不等则跳转到rel的相对地址,若相等则继续执行下一条指令。编译后大小:3B执行时间:24个时钟脉冲指令:CJNEA,#FFH,LOOP若执行前ACC=FFH,执行后程序将继续执行下一行指令。若执行前ACC≠FFH,执行后将执行LOOP地址的指令。ACC=data?71CJNE@Ri,#data,rel说明:将(Ri)的内容与立即数data相比较,若不等则跳转到rel的相对地址,若相等则继续执行下一条指令。编译后大小:3B执行时间:24个时钟脉冲指令:CJNE@R0,#100,LOOP若执行前(R0)=100,执行后程序将继续执行下一行指令。若执行前(R0)≠100,执行后将执行LOOP地址的指令。(Ri)=data?72CJNERn,#data,rel说明:将Rn的内容与立即数data相比较,若不等则跳转到rel的相对地址,若相等则继续执行下一条指令。编译后大小:3B执行时间:24个时钟脉冲指令:CJNER1,#100,LOOP若执行前R1=10

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论