欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    单片机原理与应用程序.docx

    • 资源ID:331170       资源大小:34.76KB        全文页数:79页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    单片机原理与应用程序.docx

    1、单片机原理与应用程序 单片机原理与应用参考程序 第3章【例3-49】MOVDPTR,#2000H ;源数据区首址PUSHDPL ;源数据区首址压栈保护PUSHDPHMOVDPTR,#3000H ;目的数据区首址MOVR6,DPL ;目的数据区首址存入寄存器MOVR7,DPHLP:POPDPH ;取源数据区地址指针POPDPLMOVXA,DPTR ;取源数据INCDPTRPUSHDPLPUSHDPH ;更新源数据地址,并将该新地址压栈保护MOVDPL,R6 ;取目的数据区首地址指针MOV DPH,R7MOVX DPTR,A ;将取得的源数据存入目的数据区INCDPTRMOVR6,DPL MOVR

    2、7,DPH ;更新目标数据地址,并将该新地址存入到R6和R7中DJNZ30H,LP ;若数据块未移完(即地址30H中的值不为0),则继续POPDPHPOPDPLSJMP【例3-65】MOVA,P1 ;将8位输入信号传到A中JBA.0,MM ;当A的第0位A.0为1时,转去执行MM SETBC ;当A.0为0时,将C置1 并转去执行OUTSJMPOUT ;X0=1,转出口MM:MOVC,A.1 ;C=X1ANLC,/A.2 ;X1X2JCOUT ;X1X2=1,转出口MOVC,A.2 ;C=X2ANLC,/A.1 ;X1X2JCOUT ;X1X2=1,转出口MOVC,A.7 ;C=X7ANLC,

    3、/A.4 ;X4X7ANLC,/A.5 ;X4X5X7ANLC,/A.6 ;X4X5X6X7OUT:MOVP3.0,C3.3实例解析CLRA ;结果单元20H29H清零MOVR0,#10MOVR1,#20HLP:MOVR1,AINCR1DJNZR0,LPMOVR0,#100 ;100个数的计数器READ:MOVA,P1 ;读入P1CHK0:CJNEA,#0,CHK1 ;比较,不为“0”,继续比较INC20H ;是“0”,则“0”计数单元加1SJMPEND0 ;是否全部统计完?CHK1:CJNEA,#1,CHK2INC21H ;是“1”,则“1”计数单元加1SJMPEND0CHK2:CJNEA,

    4、#2,CHK3INC22H ;是“2”,则“2”计数单元加1SJMPEND0CHK3:CJNEA,#3,CHK4INC23H ;是“3” ,则“3” 计数单元加1SJMPEND0CHK4:CJNEA,#4,CHK5INC24H ;是“4”,则“4”计数单元加1SJMPEND0CHK5:CJNEA,#5,CHK6INC25H ;是“5”,则“5”计数单元加1SJMPEND0CHK6:CJNEA,#6,CHK7INC26H ;是“6”,则“6”计数单元加1 SJMPEND0CHK7:CJNEA,#7,CHK8INC27H ;是“7”,则“7”计数单元加1SJMPEND0CHK8:CJNEA,#8,

    5、CHK9INC28H ;是“8”,则“8”计数单元加1SJMPEND0CHK9:CJNEA,#9,ERRINC29H ;是“9”,则“9”计数单元加1END0:DJNZR0,READ ;判是否全部统计完HERE:SJMPHEREERR: ;非09,出错第4章【例4-13】START:PUSHACC ;将A中内容进栈保护 MOV R0,20H ;将20H地址中的内容送R0 MOV R1,22H ;将22H地址的内容送R1 MOV A,R0 ;被加数低字节内容送A ADD A,R1 ;低字节数相加 MOV R0,A ;低字节数和存20H中 INC R0 ;指向被加数高位字节 INC R1 ;指向加

    6、数高位字节 MOV A,R0 ;被加数高位字节送A ADDC A,R1 ;高字节数带进位相加 MOV R0,A ;高字节数和存21H中 CLR A ADDC A, #00H MOV 10H, A ;进位暂存于10H中 POP ACC ;恢复A原内容【例4-14】ORG 0000HAJMP STARTORG 30HSTART: MOV P1,#0FFH ;关闭所灯MOV TMOD,#00000001B ;定时/计数器0工作于方式1MOV TH0,#15H MOV TL0,#0A0H ;即数5536SETB TR0 ;定时/计数器0开始运行 LOOP:JBC TF0,NEXT ;如果TF0等于1,

    7、则清TF0并转NEXT处AJMP LOOP ;否则跳转到LOOP处运行 NEXT: CPL P1.0MOV TH0,#15HMOV TL0,#9FH ;重置定时/计数器的初值AJMP LOOPEND AJMP LOOP【例4-15】ORG 000BH ;定时器0的中断向量地址AJMP TIME0 ;跳转到真正的定时器程序处ORG 30HSTART: MOV P1,#0FFH ;关闭所灯MOV TMOD,#00000001B ;定时/计数器0工作于方式1MOV TH0,#15H MOV TL0,#0A0H ;即数5536SETB EA ;开总中断允许SETB ET0 ;开定时/计数器0允许SET

    8、B TR0 ;定时/计数器0开始运行 LOOP:AJMP LOOP ;真正工作时,这里可写任意程序TIME0: PUSH ACC ;定时器0的中断处理程序PUSH PSW ;将PSW和ACC推入堆栈保护CPL P1.0 MOV TH0,#15HMOV TL0,#0A0H ;重置定时常数POP PSWPOP ACCRETIEND 【例4-17】ORG0000HSTART:MOVA,#aMOVB,AMULAB ;AB= a2MOVR0,A ;R1R0= a2MOVR1,BMOVA,#bCJNEA,#0AH,MMN ;b10则转移MM:ADD A,R0 ;b10, a2+b=YMOVR0,AMOVA

    9、,#00HADDCA,R1MOVR1,AJMPMMNN MMN:JNC MM ;无借位(即b10)转MMMOV R3,A ;R3bMOV A,R0CLR CSUBBA,R3 ; R1R0a2bMOV R0,AMOVA,R1SUBBA,#00HMOV R1,AMMNN:MOV Y0,R0 ;Y1Y0结果MOVY1,R1HERE:AJMP HERE【例4-18】CLRCSTART:MOVA,R1SUBBA,#64H ;超过100kg则报警JNCBJMOVA,R1CJNEA,#32H,LOOP1 ;是否为50kgMOVB,#2HMULA B ;50kg总收费SJMP LOOP3LOOP1: JCLO

    10、OP2MOVB,#3HSUBBA,#32H ;超过50kg部分的收费MULA BMOVR0,AMOVA,#32HMOVB,#2HMULA BADDA,R0 ;50kg以上总收费SJMPLOOP3LOOP2:MOVB,#2H ;50kg以下总收费 MULA BLOOP3: MOV80H,ASJMPEOFBJ: ;超重报警程序【例4-21】MOVR0,#DATA ;数据区首地址MOVDPTR,#BUFFER ;数据区长度指针LOOP:MOVA,R0CJNEA,#24H ,LOOP2 ;判是否为“$”符(24H)SJMPLOOP1 ;是“$”符,则结束LOOP2:MOVA,R0 ;不是“$”符,则传

    11、送 MOVX DPTR,AINC R0 INCDPTR DJNZ20H,LOOP ;数据串未查完,继续LOOP1:RETDATA: ;数据串【例4-22】BCDB: PUSHPSW ;现场保护PUSHA PUSH BMOVR3,00HMOVA,R0MOVR4,A ;BCD码千位送R4 LOOP:MOV A,R4MOVB,10MULABMOVR4,AMOVR5,BMOVB,10 ;(R3)、(R4)10XCHA,R3MULA,BADD A,R5MOVR3,AXCHA,R4INCR0ADDA,R0XCHA,R3 ;(R3R4)(R0)送R3R4ADDCA,0MOVR4,ADJNZR2,LOOP1

    12、;循环n1次POPB ;恢复现场POPAPOPPSWRET ;返回【例4-23】FILLE:PUSH PSW ;PSW及A保护入栈PUSHAMOVA,20H ;取第一个数据CLR CSUBBA,21H ;与第二个数据比较JNCLOB1 ;第一个数据比第二个数据大,转LOB1MOVA,20H ;第一个数据比第二个数据小,交换二个数的位置XCHA,21HMOV20H,ALOB1:MOVA,22HCLRCSUBBA,20H ;第三个数据与前二个数据中的较大数比较JNCLOB3 ;第三个数据大于前二个数据中的较大数,转LOB3 MOVA,22HCLRCSUBBA,21H ;第三个数据与前二个数据中的较

    13、小数比较JNCLOB4MOVA,21HMOVR0,A AJMPLOB2LOB3:MOV R0,20HAJMPLOB2LOB4:MOV R0,22HLOB2: POPA ;恢复A和PSWPOPPSWRET4.7实例解析主程序:ORG0400HASCB:MOVR0,#61H ;R0指向原始数据的高位MOV R1,#70H ;存放结果数据ACALLCVERT ;调用转换程序,结果放在A中SWAPA ;结果的高位和低位互换MOVR1,A ;保存高位DECR0 ;R0指向原始数据的低位ACALLCVERT ;再次调用转换程序XCHDA,R1 ;低半字节与高半字节交换LOOP: SJMPLOOP子程序:O

    14、RG0500HCVERT: MOVA,R0CLRCSUBBA,#30HCJNEA,#0AH,NEQAJMPBIGNEQ: JCCENDBIG:SUBB A,#07H ;大于0AH时再减去07HCEND:RETEND第5章【例5-1】MAIN:MOVSP , #60HLOOP:MOVA , P0ORLA , #10H ;P0.4=1MOVP0 , A ;准备读P0口的P0.4ANLA , #10HJC LOOP ;没有按下返回CALLDELAY ;调用延时程序, 去键盘抖动,再判断键是否按下MOVA , P0ORLA , #10H ;P0.4=1MOVP0 , A ;准备读P0口的P0.4MOV

    15、A,P0ANLA , #10HJCLOOP ;没有按下返回MOVA , P0MOVR0 , AMOVA, #0FHSUBBA , R0 ;对P0.0-P0.3 求反ANLA, #0FHMOVP0 , A ;通过P0口输出使D1D4LED亮或者灭CALLDELAYJMPLOOPDELAY:MOVR7,#00FHN1:MOVR6,#0F0HN2:NOPDJNZR6 , N2DJNZR7 , N1RET【例5-2】主机软件设计:初始化程序INIT: MOV TMOD,#20HMOV TH1,#0F9H ;设置波特率为2400MOV TL1,#0F9HMOV SCON,#0F0H ;串行口为方式3,S

    16、M2=1,允许接收SETB TR1 ;启动定时器RET通信子程序COM:SETBTB8 ;地址标志MOV SBUF, #ADDR1 ;发送要通信的从机地址LOOP:JNB TI, LOOP ;等待地址发完CLRTICLRTB8 ;数据标志MOVA, R0 ;取要发送的数据MOVSBUF, A ;发数据LOOP1:JNB TI,LOOP1 ;等待数据发完CLRTIRET从机软件设计:初始化程序INIT:MOVTMOD,#20HMOVTH1,#0F9H ;设置波特率为2400MOVTL1,#0F9HMOVSCON,#0F0H ;设置串行口为方式3,SM2=1,允许接收ANLPCON,#7FHSET

    17、BTR1SETBES ;允许串行口中断SETBEAWAIT: SJMPWAIT ;听号串口中断服务通信程序当接收到地址帧“呼号”且地址帧与本机地址相符时,要置SM2为0以便准备接收数据帧,同时需要将本机地址发回作为应答,建立与主机的联络。编程如下:SIO:CLRRIPUSHPSW ;现场保护PUSHACCMOVA,SBUF ;接收串行数据XRLA,#ADDR ;判断是否与本机地址相符JNZBACK ;不相符则返回CLRSM2 ;相符则SM2为0且发回本机地址CLR ES ;关串口中断,避免中断嵌套MOVA, SBUF ;接收数据WAIT:JNBRI,WAITCLRRIMOVR0, A ;保存数

    18、据SETB SM2 ;恢复多机通信,SETB ES ;开串口中断BACK:POPACC ;恢复现场POPPSWRETI【例5-3】MAIN: MOV SP , #60H ;设置堆栈为60HMOV TH1 , #0FDH ;设置波特率为9600MOV TL1 , #0FDHMOV TMOD , #21H ;T1 工作在方式2 MOV PCON , #00H ;SMOD=0MOV SCON , #0D0H ;串行方式3SETBTR1WSIO1: JNB RI , WSIO1CLR RIMOV A , SBUFMOV C , PANL C , /RB8MOV F0 , CMOV C , RB8ANL

    19、 C , /PORL C , F0 ;完成P与RB8相异或JCERROR; 转到出错处理MOV C , PMOV TB8, CMOV SBUF , AERROR: JMP WSIO1第6章6.5.2定时器中断应用实例(1)主程序代码:ORG 1000HMAIN:MOVSP,#60H ;设置推栈区MOVTMOD,#01H ;空时125msMOVTL0,#0DCHMOVTH0,#0BHSETBEA ;开总中断SETBET0 ;允许TO中断MOVR2,#08H ;计数8次SETBTR0 ;开始计时LOOP1:JBC20H,DY ;20H清零SJMPLOOP1DY:LCALLDISPLAYSJMPLO

    20、OP1(2)中断子程序:ORG 2000HT0SERVE: MOV TL0,#0DCH ;重置计数初值MOVTH0,#0BHDJNZR2,LOOP ;8次计数没剩则继续计时MOV R2,#08H ;R2重置为8SETB 20H ;1s到,置位20HLOOP:RETI(3)一个实现“间隔一秒调一次显示”功能的完整程序如下:ORG0000HAJMPMAINORG000BHAJMPINTT0ORG0050HMAIN: MOVSP,#60H MOV R0,#79HMOV R7,#06HMLO:MOV R0,#08HINCR 0DJNZR7,MLOMOVTMOD,#01HMOVTL0,#0DHMOVTH

    21、0,#0BHMOVR2,#08HSETBEASETBET0SETBTR0LOOP: JB20H, LOOP1SJMPLOOPLOOP1: LCALLDISPLAYSJMPLOOPINTT0: MOVTL0,#0DCHMOVTH0,#0BHDJNZR2,RETURNMOVR2,#08HCPL20HRETURN: RETI第7章【例7-2】ORG0000HAJMPMAIN ;转到主程序ORG000BH ;T0中断矢量地址AJMPINQP ;转到中断服务程序ORG0050HMAIN:MOVTMOD,#00H ;设置T0为方式0定时MOVTH0,#1EH ;装入T0的定时常数MOVTL0,#0CHSE

    22、TBTR0 ;启动T0SETBET0 ;允许T0中断SETBEA ;CPU开中断SJMP$ ;等待T0中断发生ORG0100H ;中断服务程序INQP:MOVTH0,1EH ;重装定时常数MOVTL0,0CHCPLP1.0 ;P1.0变反输出RETI ;中断返回【例7-3】ORG0000HAJMPMAIN ;转到主程序ORG000BH ;T0的中断入口AJMPINTS ;转到中断服务程序ORG0100H ;主程序入口地址MAIN:MOVSP , #60H ;设栈指针MOVTMOD,#06H ;设T0为计数方式2MOVTL0,#0FFH ;设TL0初值MOVTH0,#0FFH ;设TH0初值SE

    23、TBTR0 ;启动计数SETBET0 ;允许T0中断SETBEA ;中断开放 SJMP$ ;等待T0中断发生;中断处理程序INTS:PUSHA ;现场保护,把寄存器A中的值压入堆栈中PUSHDPL ;把数据指针的低位DPL中的值压入堆栈中PUSHDPH ;把数据指针的高位DPH中的值压入堆栈中;现场恢复POPDPH ;把数据指针的高位DPH中的值从堆栈中取出POPDPL ;把数据指针的低位DPL中的值从堆栈中取出POPA ;把寄存器A中的值从堆栈中取出RETI7.5实例解析【实例7-1】ORG0000H ;复位地址LJMPMAIN ;转入主程序ORG000BH ;T0中断入口地址LJMPIT0

    24、 ;转入T0中断服务程序ORG0100H ;主程序首地址MAIN:MOVTMOD,#01H ;设置T0为工作方式1MOVTH0,#3CH ;装入定时常数MOVTL0,#0B0HMOVIE,#10000010B ;T0开中断MOVR7,#0AH ;设置循环次数为10次SETBTR0;T0运行CLRP1.7SJMP$ ;等待中断;中断服务程序:ORG000BHITO:MOVTL0,#0B0H ;重新装入时间常数MOVTH0,#3CHDJNZR7,LOOP ;循环10次CRLP1.7 ;500ms定时到了,P1.7位取反,闪烁效果LOOP:RETI ;中断返回END ;程序结束【实例7-2】ORG0

    25、000HAJMPMAINORG000BH ;T0的中断入口AJMPTIME0 ;转入中断程序ORG001BH ;T1的中断入口AJMPTIME1 ;转入中断程序ORG0033HMAIN:MOVSP,#60H ;设置堆栈指针初值MOVR3,#0 ;清除软件计数器SETBP3.2 ;将P3.2,P3.5置1,即为输入状态SETBP3.5MOVTMOD,#59HMOVTH0,#3CH ;装入定时器初值MOVTL0,#0B0HMOVTH1,#0FFH ;装入计数器初值MOVTL1,#0FEHSETBTR0 ;启动定时器、计数器SETBTR1MOVIP,#08H ;T1中断优先于T0SETBET1 ;允

    26、许T1中断SETBTF1 ;设TF0、TF1为中断标志 LOOP:SETBTF0SETBET0 ;允许T0中断SETBEA ;中断开放 JBTF0,$ ;判断TF0是否溢出,并一直等待JBTF1,LOOP ;判断TF1是否溢出,如果溢出就转到LOOPRETTIME0:MOVTL0,#0B0H ;设TL0初值MOVTH0,#3CH ;设TH0初值INCR3 ;计数器加1CPLTF0 ;TF0取反RETI ;中断返回TIME1:CLRTF0 ;清除中断标志CLRTF1CLRET0 ;禁止T0、T1中断CLRET1CLREA ;关中断RETI ;中断返回第8章【例8-2】MAIN:MOVSP ,#6

    27、0HLOOP:MOVA ,P0ORLA,#0FH ;P0.0P0.3=1MOVP0,A ;准备读P0口ANLA, #0FH JNZLOOP ;没有按下返回CALL DELAY ;调用延时程序,去键盘抖动,再判断键是否按下MOV A,P0ORL A,#0FH ;P0.0P0.3=1MOVP0,A ;准备读P0口MOVA,P0ANLA,#01HJZ PP0 ;KEY0按下调用PP0MOVP0,A ;准备读P0口MOVA,P0ANLA,#02HJZPP1 ;KEY1按下调用PP1MOVP0,A ;准备读P0口MOVA,P0ANLA,#04HJZPP2 ;KEY2按下调用PP2MOVP0,A ;准备读

    28、P0口MOVA,P0ANL A,#08HJZPP3 ;KEY3按下调用PP3JMPLOOPDELAY: MOV R7,#0F0HN1: MOV R6, #0F0HN2: NOPDJNZ R6,N2DJNZ R7,N1RET【例8-3】MAIN:MOV SP,#60HLOOP:MOVA, #01HMOVR2, #4OUTPUT:MOVP1, ARLACALLDELAY DJNZR2, OUTPUTLJMPLOOPDELAY:MOVR6, #0MOVR7, #0DELAYLOOP:DJNZ R6, DELAYLOOPDJNZ R7, DELAYLOOPRETEND8.3实例解析程序设计如下:OUT

    29、BITEQU 0FE02H ;位控制口CLK164 EQU 0FE04H ;段控制口(接164时钟位)DAT164EQU 0FE06H ;段控制口(接164数据位)IN EQU 0FE00H ;键盘读入口 HASRCVEQU20H.0 ; 接收标志位LEDBUFEQU40H ;显示缓冲RCVBUFEQU50H ;接收缓冲指令ORG0000H一般用在一段源程序的前面,用来说明紧随其后的程序段的起始地址。下面的指令说明指令LJMP START的地址为0000H。ORG0000HLJMPSTART ;执行该指令后将转去执行以START为标号;的程序段,标志着程序的开始执行串行口中断子程序,程序的入口地


    注意事项

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

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开