欢迎来到文档下载导航网!

单片机原理与应用-第2版-源代码1.doc

时间:2020-11-26|当前位置:首页 > 计算机 > 计算机资料/编程 > |用户下载:

单片机原理与应用-第2版-源代码1.doc


本文档部分文本预览

单片机原理与应用-第2版-源代码1 例4-2 有两个4位压缩BCD码,分别存储在30H、31H和40H、41H单元,要求把两个BCD码数相加,结果送至51H、52H中(高位在前,低位在后)。 程序如下: ORG 0000H CLR C MOV A,31H ADD A,41H DA A MOV 52H,A MOV A,30H ADDC A,40H DA A MOV 51H,A END ;CY清0 ;(31H)→A ;(31H)+(41H)→A ;对A进行十进制调整 ; (A)→52H ;(30H)→A ;(30H)+(40H)+CY→A ;对(A)进行十进制调整 ;(A)→51H 例4-3 求双字节有符号数的补码。 参考程序如下: CMPT2: MOV JNB MOV MOV CPL MOV MOV CPL ADD MOV CLR ADDC MOV MOV MOV EXT: RET A,R7 ACC.7,EXT C,ACC.7 F0,C A R7,A A,R6 A A,#1 R6,A A A,R7 C,F0 ACC.7,C R7,A ;取高字节数 ;(A)>0,不需要转换 ;符号位暂存→F0 ;(A)取反 ;取低字节数 ;加1 ;存储数的补码(低字节) ;取符号位送入C ;恢复符号位 ;存储数的补码(高字节) 例4-4 求分段函数的值。分段函数定义如下: FENFUC: MOV CJNE AJMP NZEAR: JB ADD AJMP POSI: MOV NEGT: MOV RET A,30H A,#00H,NZEAR NEGT ACC.7,POSI A,#1 NEGT A,#81H 31H,A ;取数据X至A ;判断A不等于0跳转 ;A等于0 ;判断符号位,A0,Y=X+1 ;X<0时,Y=-1 ;保存结果 例4-5 根据寄存器R2的内容,转向各个处理程序PRGx(x=0~n)。 (R2)=0,转PRG0 (R2)=1,转PRG1 (R2)=n,转PRGn 程序如下: JMP8: MOV DPTR,#TAB ;转移表首地址送DPTR MOV A,R2 ADD A,R2 MOV R3,A CLR A ADDC A,DPH MOV DPH,A MOV A,R3 JMP @A+DPTR TAB: AJMP PRG0 AJMP PRG1 AJMP PRGn ;分支转移参数送A ;分支转移参数乘2 ;结果的低字节存入R3 ;结果的高字节数据加到DPH中 ;分支转移选择 ;多分支转移表 例4-6 根据31H(高字节)、30H(低字节)的内容(分支转移参数)转向不同的处理程序。程序如下: JMP4: MOV DPTR,#TAB1 MOV A,30H MOV B,#3 MUL AB MOV R3,A MOV A,B ADD A,DPH MOV DPH,A MOV A,31H MOV B,#3 MUL AB ADD A,DPH MOV DPH,A MOV A,R3 JMP @A+DPTR TAB1: LJMP PRG0 LJMP PRG1 LJMP PRGn ;分支转移表首地址送DPTR ;分支转移参数低字节送A ;参数低字节乘3 ;乘积低字节送R3 ;乘积高字节送A ;DPH+高字节内容 ;参数高字节送A并乘3 ;DPH+乘积低字节内容 ;和送DPH ;参数低字节送A ;跳相应的分支 ;分支转移表 例4-7 设有一串字符,依次存储在内部RAM从30H单元开始的连续单元中,该字符串以0FFH为结束标志,要求编程测试字符串长度。 参考程序如下: MOV R0,#0FFH ;计数器初值送R0 MOV R1,#2FH ;字符串指针初值送R1 NEXT: INC R0 INC R1 CJNE @R1,#0FFH,NEXT ;比较不相等循环 RET 例4-8 设8051使用12 MHz晶振,试设计延迟100 ms的延时程序。 可用双重循环方法写出如下的延时程序: DELAY:MOV R2,#200 ;延时一个机器周期T = 1 ?s LOOP1:MOV B,#250 ;每循环延时1 ?s LOOP2:DJNZ B,LOOP2 ;250×2×1us =500 ?s DJNZ R2,LOOP1 ;500×200×1 ?s = 100 ms RET 可修改程序: DELAY: MOV R2,#200 ;延时一个机器周期T = 1 ?s LOOPS: MOV B,#248 ;每循环延时1 ?s NOP ;每循环延时1 ?s DJNZ B,$ ;248×2×1us =496 ?s DJNZ R2,LOOPS ;(496+2+2)×200×1 ?s RET ;[(496+2+2)×200+1+2]×1 ?s =100.003 ms 例4-9 编写一个通用子程序,实现N个单字节无符号数之和(N <100H,存储在2FH单元)。调用该子程序完成将片内30H~5FH中存储的单字节无符号数求和,结果存入60H、61H单元中(高位在前)。 子程序如下: ORG 0100H SUB2: PUSH PSW ;保护现场 MOV @R1,#0 ;目的单元清0 INC R1 MOV @R1,#0 LOOP: MOV A,@R0 ;取数

继续预览文档剩余内容

温馨提示:本页预览文本内容并非错乱,是从文档中提取部分无格式预览!如您需要正常预览文档全文,请点击下方按钮↓↓↓

上一篇:单片微机原理及应用 徐春辉第12章 习题答案.doc

栏    目:计算机资料/编程

下一篇:20172018年人工智能在工业领域应用解析报告.pdf

本文标题:单片机原理与应用-第2版-源代码1.doc

本文地址:https://www.365weibook.com/html/20201126/376898.html

    正常预览或下载提示:

    本页面文档预览是由服务器自动提取的部分内容,并不是文档错乱。如您需要预览全文或下载文档,请点击页面左侧(点击去预览文档全文或下载文档)按钮,进行全文预览或下载。

推荐下载

联系我们 | 广告投放 |网站地图

免责申明:本网站不提供任何形式的下载服务,因此与之有关的知识产权纠纷本网站不承担任何责任。

如果侵犯了您的权利,请与我们联系,我们将进行删除处理。