欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    汇编语言的单片机程序设计.ppt

    • 资源ID:5993760       资源大小:817.50KB        全文页数:39页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    汇编语言的单片机程序设计.ppt

    单片机接口技术及应用,单片机接口技术及应用 汇编语言的单片机程序设计,*,应用电子系,3,汇编语言的单片机程序设计,课程目录,一、程序设计概述二、汇编语言的伪指令三、汇编语言的典型程序结构四、汇编语言的子程序设计五、汇编语言实用子程序举例六、几个端口实验的任务书,*,1.延时子程序设计,例:编写10ms延时子程序。(假设晶振频率为12MHZ)D10ms:MOV R5,#10;1usD1ms:MOV R4,#249;1us DL:NOP NOP DJNZ R4,DL;4x249=996us DJNZ R5,D1ms;2us,总循环共(1+996+2)10=9990us RET;2us,*,延时子程序设计要点:,初始化:循环次数赋值循环体次数计算:晶振频率机器周期循环体时间循环次数精确计算:考虑赋值次数与时间,还要考虑进入与返回时间进入时,应注意子程序使用到的寄存器的保护;返回时,无参数带出。多时间延时子程序如何设计?外循环次数参数带入,内循环时间固定。,*,子程序:DLnms:NOPD1ms:MOV R4,#249 DL:NOP NOP DJNZ R4,DL DJNZ R5,D1ms RET;,主程序:MOV R5,#n CALL DLnms,多时间延时子程序调用,*,2.输入设备子程序设计,拨码开关电路设计,拨码开关状态的读取?,设置输入端口,读输入端口,保存输入值,KEYRD:MOV P3,#0FFH MOV A,P3 MOV R5,A RET,*,轻触开关电路设计,轻触开关状态的读取?,设置输入端口,读输入端口,去抖动,保存输入值,*,ANYKEY:MOV P3,#0FFHNOKEY:MOV A,P3 CPL A JZ NOKEY;无键按下 MOV TEMP,P3;有键按下,TEMP为存储器单元,保存结果 CALL D10ms MOV A,P3 CJNE A,TEMP,NOKEY;去抖 MOV R5,A;保存按键 SETB 00H;有键标志 RET,*,例:有二个轻触开关,分别控制二个计数器,每按一次,计数器加1,最大分别加到5与9,又从0开始。编写其子程序。,寄存器资源分配:R3、R4:保存计数值 R5:保存开关值,设计关键点:是否有按键?有按键,是什么键?是否同一次按下的键?,*,按键判断、去抖,ANYKEY:MOV P3,#03HNOKEY:MOV A,P3 ORL A,#0FCH CPL A JZ NOKEY MOV TEMP,A CALL D10MS MOV A,P3 ORL A,#0FCH CPL A CJNE A,TEMP,NOKEY MOV R5,A RET,KEYAGIN:MOV P3,#03HKEYTA:MOV A,P3 ORL A,#0FCH CPL A CJNE A,TEMP,KEYCH SJMP KEYTAKEYCH:NOP RET,按键释放判断,*,计数控制,COUNTER:MOV A,R5 CJNE A,#01,KEY2CON CJNE R3,#05,CON1ADD MOV R3,#00H SJMP CONOVERCON1ADD:INC R3 SJMP CONOVERKEY2CON:CJNE R4,#09H,CON2ADD MOV R4,#00H SJMP CONOVERCON2ADD:INC R4CONOVER:NOP RET,*,主程序引用:TEMP EQU 30H ORG 0000H LJMP MAIN ORG 00100HMAIN:MOV R3,#00HMOV R4,#00HLOOP:LCALL DISPLCALL ANYKEYLCALL COUNTERLCALL KEYAGIN SJMP LOOP,DISP:MOV A,R3 SWAP A ORL A,R4 MOV P1,A RET,*,问题:1.分析程序工作过程多个子程序调用关系2.如何分解任务(判键去抖计数键盘再次判断显示)3.显示从P1口输出,用发光二极管代替,也可以用带译码的数码实现4.修改程序,将程序修改为二键,先选择需要调整的计数位(可以闪烁显示),再用相同二键分别实现加减功能改变计数值。,*,3.信号处理(运算)子程序设计,例:编写多字节无符号数的减法子程序。设2个多字节无符号数的低字节地址分别存于R0和R1中,低字节在高地址单元。相减后的差存放在减数原来的位置。子程序入口:(R0)=被减数低字节地址;(R1)=减数的低字节地址;(R7)=字节数子程序出口:(R1)=差的高字节地址;,*,程序:ORG 0000H ljmp MAIN ORG 0040HMAIN:MOV R0,#37H MOV R1,#3FH ACALL NSUB SJMP$,NSUB:MOV R7,#3 CLR CNSUB1:MOV A,R0 SUBB A,R1 MOV R1,A DEC R0 DEC R1 DJNZ R7,NSUB1 INC R1 RET END,*,例:利用子程序实现c=a2+b2。设a,b,c分别存于内部RAM的30H,31H,32H三个单元中。子程序入口:(A)=预平方数;子程序出口:(A)=平方值;,*,SQR:MOV DPTR,#TAB MOVC A,A+DPTR RETTAB:DB 0,1,4,9,16,25,36,49,64,81 END,ORG 0000H LJMP MAIN ORG 0040HMAIN:MOV 30H,#4 MOV 31H,#5 MOV A,30H ACALL SQR MOV R1,A MOV A,31H ACALL SQR ADD A,R1 MOV 32H,A SJMP$,*,例:将1位十六进制数转换成相应的ASCII码。设十六进制数存放在R0中,转换后的ASCII码存放于R2中。,ORG 0000H ljmp MAINORG 0040H MAIN:MOV R0,#0BH ACALL HASC SJMP$,HASC:MOV A,R0 ANL A,#0FH PUSH ACC CLR C SUBB A,#0AH POP ACC JC LOOP ADD A,#07HLOOP:ADD A,#30H MOV R2,A RET END,*,例:双字节二进制数转换成BCD码。设(R2R3)为双字节二进制数,(R4R5R6)为转换完的压缩型BCD码。,ORG 0000H ljmp MAIN ORG 0040HMAIN:MOV R2,#0B2H MOV R3,#1BH ACALL DCDTH SJMP$,*,DCDTH:CLR A MOV R4,A MOV R5,A MOV R6,A MOV R7,#16LOOP:CLR C MOV A,R3 RLC A MOV R3,A MOV A,R2 RLC A MOV R2,A,MOV A,R6 ADDC A,R6 DA A MOV R6,A MOV A,R5 ADDC A,R5 DA A MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A DJNZ R7,LOOP RET END,*,4.输出设备子程序设计,例:数据端与P0口正序连接。编写程序,实现功能:上电后数码管显示“P”,1秒后,显示从“0”开始每隔1秒加1,加至“F”后,数码管显示“P”,重新开始。,*,ORG 0000H JMP START ORG 0100HSTART:MOV SP,#5FH MOV P0,#8CH;显示P MOV P3,#0FFH CALL D_1S CALL DISP JMP START,*,DISP:MOV R7,#16 MOV R2,#0LOOP:MOV A,R2 MOV DPTR,#CODE_P0 MOVC A,A+DPTR MOV P0,A INC R2 SETB RS0;切换组 CALL D_1S CLR RS0 DJNZ R7,LOOP RET,D_1S:(子程序),CODE_P0:DB 0C0H,0F9H,0A4H,0B0H DB 99H,92H,82H,0F8H DB 80H,90H,88H,83H,DB 0C6H,0A1H,86H,8EH,*,有时为方便走线而采用逆序连接,显示段码要进行调整:CODE_P2:DB 03H,9FH,25H,0DH,99H,49H,40H,1FH DB 01H,09H,11H,0C1H,63H,85H,61H,71H,CODE_P0:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H,90H,88H,83H,0C6H,0A1H,86H,8EH,试比较:,*,1.本章总结,2.编程思路,3.端口输入出与编程验证,*,例:P1口与开关及LED发光二极管的接口电路如图所示,其中,P1.7P1.4作并行输出口,分别与LED3LED0连接。当输出为1,即高电平时,LED不发光;输出为0,即低电平,LED发光。P1.3P1.0作并行输入口,分别接开关K3K0,通过开关的不同位置向P1.3P1.0输入“0”或“1”开关信号。要求读入P1.3P1.0引脚上的开关K3K0的预置状态,再经P1.7P1.4输出驱动LED3LED0发光二极管,使发光二极管显示开关状态。,*,*,编写程序如下:ORG0000HMAIN:MOV A,#0FFH MOV P1,A;置P1低4位为输入,高4位输出灭显示 MOV A,P1;输入P1低4位的开关状态 SWAP A;将低4位输入的数据转到高4位 MOV P1,A;将开关状态输出驱动相应的LED显示HERE:SJMP HEREEND,*,用一个准备好状态标志来表示每当开关状态K3K0设置完成后,将准备好状态标志置“1”,否则此标志为“0”,用一个开关S表示,当按钮按下P2.3引脚为“1”,说明开关设置完成。S开关不下压,P2.3=0,未准备好。那么,CPU就查询这个“S”,一直查到S=1为止。输入过程如图:,*,*,程序如下:TEST:MOV P2,#0FFH MOV A,P2 ANLA,#01H JZTEST MOV P1,#0FH MOV A,P1 SWAP A MOV P1,A,修改程序,用一个主程序+2个子程序实现,*,例:用一片74LS4(BCD-七段数码转换器)可外接一只共阳极七段数码管。要求不用延时的方法看到显示内容。欲显示的数据事先放在片内RAM30H起始的数据区内,共10个显示内容。,*,*,思考与实践,1、数据端与P0口正序连接。编写程序,分别实现功能:上电后数码管显示“P”,按下任何键后,显示从“0”开始每隔1秒加1,加至“F”后,数码管显示“P”,进入等待按键状态。2、数据端与P0口逆序连接,有二个轻触开关与P3连接。编写程序,分别实现功能:上电后数码管显示“P”闪烁,按下其中一键后,变化字符,字符有16种变化;按下另一键,变化闪烁频率,有10种明显的频率变化。,*,谢谢大家!,*,*,思考与实践,*,

    注意事项

    本文(汇编语言的单片机程序设计.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开