简易数字万用表设计

电子 专栏收录该内容
1 篇文章 0 订阅

简易数字万用表设计

课程设计论文 1、设计任务
1(1设计目的
采用8位8路A/D转换器ADC0809和AT89S52单片机,设计一台数字多用表,能进行电压、电流和电阻的测量,测量结果通过LED数码管显示,通过按键进行测量功能转换。
1(2设计指标及要求
电压测量范围05V,测量误差约为0.02V,电流测量范围1100mA,测,
量误差约为0.5mA,电阻测量范围0~1000Ω,测量误差约为2Ω。 ,
2、设计思路与总体框图
2(1设计思路
首先利用P0 口数据地址复用,将地址通过P0口输入到单片机中。再利用模数转换将模拟信号转换成数字信号,再次利用P0口将其输入到单片机。最后,充分利用单片机强大的运算转化功能将其转成适当的二进制信号控制数显以确保正确的显示被测量的读数。
2(2总体框图
驱动LED
显示
振荡电路 89S52 待测电阻电路 阻 ADC0809 待测电流电路 复位电路
待测电压电路
3、系统硬件电路的设计
3(1 数字多用表的主电路
数字多表仪表主电路如图1所示。89S52单片机通过线选方式扩展了A/D转换器ADC0809和4位LED数码管,单片机的P2.7引脚作为ADC0809的片选信号,因此A/D转换器的端口地址为7FFFH.片选信号和信号一起经或非WR
RD信门产生ADC0809的启动信号START和地址锁存信号ALE。片选信号和号一起经或非门产生输出允许信号OE,OE=1时选通三态门使输出锁存器中的转换结果送入数据总路线。ADC0809的EOC信号经反相后接到89S52的INT1引脚,用于产生A/D转换完成中断请求信号。ADC0809芯片的3位模拟量输入通道地址输入端A、B、C分别接到89S52的P0.0、P0.1和P0.2,故只要向端口地址0C000H分别写入00H07H,即可启动模拟量输入通道07进行A/D转换。ADC0809参考正电压为5V,参考负电压为0V,时钟输入为2MHz。

图1 数字多用表的主电路图
单片机的P1.0 ~P1.2引脚通过一个转换开关接地,通过判断P1.0 ~P1…2引脚电平的高低,决定是否进行电阻测量、电压测量或电流测量。
3(2 数字多用表的电阻测量输入电路
图2所示为数字多用表的电阻测量输入
电路。运算放大器的反馈电阻R作为待x
Ω电阻R接到电源测量电阻,通过100019
-5V。假定运算放大器理想,那么放大器
5,Rx的输出电压RV=,将RV送给R19
RV,255ADC0809,转换后得到数字量为DV=。单片机读取A/D转换数据,5
DV,R19再经过逆向运算可得R=,注意此时得到的R为二进制数,需要转xx255
化为十进制数后才能送给数码管显示。程序中采用4字节专利号除法,连续进行4次除以10的除法,依1000Ω范围内不超过2Ω,如果测量其他范围的电阻,
R需要修改的数值,或者采用其他电路。 19
3(3电压测量输入电路
图3所示为数字多用表的电压测量输入电路。待测电压经过低通滤波器滤除高频干扰,再通过同相放大器送给ADC0809,电压测量范围为0~5V,
,ADC0809的分辨率为8位,测量误差为5/2550.02V.

3.4 电流输入测量电路
图4所示为数字多用表的电流输入电路。电流测量范围为1~100mA,因为ADC0809是电压转换器件,必须交电流转换为电压才能进行测量,这可以通过串接电阻R来实现,注意R必须很小(例如00.1Ω),否则影响电流数值。由于待测电LL
3
课程设计论文 流和R都很小,R两端的电压也很小,必须将其放大到ADC0809能够分辨的LL
范围之内。

两端节点电压分别为V和V,V经过反向缓冲假设待测电流大小为I,RLABA电路之后V=- V。V和V经过差分放大电路得: AABC
RRR292929,,I,R, V=-(V-V)( V-V) ,,LDBABARRR272727
再经过同相放大电路得:
RRR322932,(1,),I,R,,(1,),I,0.1,352AV= V LDRRR302730
将AV送给ADC0809转换后得到数字量为:
AV,255I,0.1,352,255I,0.1,89760, DAV= 555
DAV,5单片机读取A/D转换数据,再经过逆向运算可得I= 0.1,89760
有两个问题值得注意,首先,由于电流的单位是mA,不能直接计算I的值
DAV,50000应先变换为I=再进行计算;其次,这么算出来的电流值误差比较89760
大,原因是LM324不是精密理想运算放大器,当输入信号很小时误差比较大。因此需要对计算数值进行修正,方法是先计算DAV*50000,然后将结果减去102000这个数值是通过反复测试并经过曲线拟合得到的。
4、系统的软件设计
数字多用表的软件程序(略)

ABCDEF GH
5、系统的设计仿真
5.1仿真原理图
1 234
ABCDRDU4:A3E1FU374LS3742+5VGH32U274LS02P2.7D0Q045916D1Q1OEVREF(-)76U4:B12D2Q2VREF(+)89U16D3Q31312419391722D4Q4C3WRXTAL1P0.0/AD022pOUT8ALE14155381423D5Q5X1P0.1/AD1OUT7ADD C1716371524D6Q6P0.2/AD2OUT6ADD B1819183674LS02825D7Q7CRYSTALXTAL2P0.3/AD3OUT5ADD A3518P0.4/AD4OUT4134195OEC2P0.5/AD522pOUT3IN7+5V1133204CLKP0.6/AD6OUT2IN6932213待测电流RSTP0.7/AD7OUT1IN52IN4500CAR110k21718051P2.0/A8EOCIN3U4:D2228C1U5:AP1P2.1/A9IN2AV236271110uP2.2/A10STARTIN1VV292410261312PSENP2.3/A11CLOCKIN0302512ALEP2.4/A123126ADC0808EAP2.5/A1374LS042774LS02+5VP2.6/A1470928待测电阻-5VP2.7/A15P2.7待测电压测电阻110P1.0/T2P3.0/RXDU4:C211测电压10kCVP1.1/T2EXP3.1/TXDU6:CR193129测电流P1.2/ECIP3.2/INT0941310P1.3/CEX0P3.3/INT1810005148P1.4/CEX1P3.4/T0101测量转换615P1.5/CEX2P3.5/T1LM324271674LS02P1.6/CEX3P3.6/WRWR3817411P1.7/CEX4P3.7/RDRD4
同相放大电路-15V
C7U6:B0.33uFC5U6:A6VV0.1uF72R15R1651R12R13340k40kCVLM324LM324R1740k40k411R14C810k411低通滤波器C610k0.1uF+15V0.1uF
R32待测电流反相缓冲电路差分放大电路R2RLR27R291.5M-5VVAVBU6:DCAR26100.1100k2.2MR20U7:AR3013U7:B30100kAV14R25100k212R28VC1LM3246R24100kVD37100k4115LM324100kLM324411411+5V
5
课程设计论文
5.2实物图

5.3主要元器件功能介绍
1、AT89S52芯片功能特性描述
AT89S52引脚框图:
6
课程设计论文

图2.12 AT89S52芯片引脚图
AT89S52 主要性能:
1、 与MCS-51 单片机产品兼容 2、8K 字节在系统可编程Flash 存储器 3、1000 次擦写周期
4、全静态操作:0Hz,33Hz 5、 三级加密程序存储器
6、32 个可编程I/O 口线
7、三个16 位定时器/计数器
8、八个中断源
9、全双工UART 串行通道
10、低功耗空闲和掉电模式
l 1、掉电后中断可唤醒
l2、 看门狗定时器
13、双数据指针
l 4、掉电标识符
7
课程设计论文 功能特性描述:
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
VCC : 电源
GND: 地
P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。
P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输(P1.0/T2)和时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。在flash编程和校验时,P1口接收低8位地址字节。
表2.1 P1口的第二功能
8
课程设计论文

P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。
P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下表所示。在flash编程和校验时,P3口也接收一些控制信号。 表2.2 P3口的第二功能

9
课程设计论文
RST: 复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。
ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。 在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲
“1”,ALE操作将会跳过。如果需要,通过将地址为8EH的SFR的第0位置
将无效。这一位置 “1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。
PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。
当AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。
EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。
为了执行内部程序指令,EA应该接VCC。
在flash编程期间,EA也接收12伏VPP电压。
XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。
XTAL2:振荡器反相放大器的输出端。
Flash 编程―并行模式:
AT89S52 带有用作编程的片上Flash 存储器阵列。编程接口需要一个高电压(12V)编程使能信号,并且兼容常规的第三方Flash 或EPROM 编程器。
AT89S52 程序存储阵列采用字节式编程。
编程方法:
对AT89S52 编程之前,需根据Flash 编程模式表和图13、图14 对地址、数据和控制信号设置。可采用下列步骤对AT89S52 编程:
1(在地址线上输入编程单元地址信号
10
课程设计论文
2(在数据线上输入正确的数据
3(激活相应的控制信号
4(把EA/Vpp 升至12V
5(每给Flash 写入一个字节或程序加密位时,都要给ALE/PROG 一次脉冲。字节写周期时自身定制的,典型值仅50us。改变地址、数据重复第1 步到第5 步‘知道’全部文件结束。
Data Polling AT89S52 用Data Polling 作为一个字节写周期结束的标志特征
2、ADC0809介绍
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。 (1)ADC0809的内部逻辑结构

图2.14 ADC0809的内部逻辑结构
上图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
(2) 引脚结构
11
课程设计论文

图2.15 ADC0809引脚结构图
IN0,IN7:8条模拟量输入通道
ADC0809对输入模拟量要求:信号单极性,电压范围是0,5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
地址输入和控制线:4条
ALE为地址锁存允许输入线,高电平有效。当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进转换器进行转换。A,B和C为地址输入线,用于选通IN0,IN7上的一路模拟量输入。通道选择表如下表所示。
表2.3 地址输入线的通道选择
选择的
C B A
通道
0 0 0 IN0
0 0 1 IN1
0 1 0 IN2
0 1 1 IN3
1 0 0 IN4
1 0 1 IN5
1 1 0 IN6
1 1 1 IN7
12
课程设计论文
数字量输出及控制线:11条
ST为转换启动信号。当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。EOC为转换结束信号。当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE,1,输出转换得到的数据;OE,0,输出数据线呈高阻状态。D7,D0为数字量输出线。
CLK为时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ,
VREF(,),VREF(,)为参考电压输入。
ADC0809应用说明:
(1)( ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。
(2)( 初始化时,使ST和OE信号全为低电平。
(3)( 送要转换的哪一通道的地址到A,B,C端口上。
(4)( 在ST端给出一个至少有100ns宽的正脉冲信号。
(5)( 是否转换完毕,我们根据EOC信号来判断。
(6)( 当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
6、总结与体会
6. 1 总结
本次课程设计,虽然方案基本出来了,但是在硬件制作方面出现了几个问题,这也暴露出我们知识方面的一欠缺。不足主要体现在以下几个方面:
(1)ADC0809的第10脚的时钟信号,我们是通过单片机编程实现的但是由于频率过低,只有500KHz,造成LED数码管显示不稳定而出现闪烁现象。最终验收时是通过从外部信号发生器输入2MHz时钟信号解决的。
(2)万用板焊接时,由于布线不太合理,使得背面线很零乱。并给后面的线路检查带来了不少麻烦。
13
课程设计论文
(3)对Proteus仿真软件使用不熟练,使画仿真图时遇到不少问题。
(4)51单片机基础知识不扎实,电路分析遇到比较多的问题。
6. 2体会
这次课程设计暴露出了很多问题,但在做课程设计的过程中也学到了很多东西。比如查阅资料,动手焊接万用板等等,这些都是平时很少做的。此次课程设计让我对基于单片机的汇编语言有了新的认识,对本学期的单片机学习有很大的助益,也在激励我们多动手,从实践中去获取新知识。
在此要特别感谢老师在做设计期间精心指导,他对我们要求非常严格。课程设计的顺利完成离不开老师的帮助的。他为我提供了很多宝贵的资料。本次课程设计自始至是在他的指导和帮助下完成的,在此再一次向他致以深深的敬意和感谢!
7、 参考文献
(1) 张毅刚 单片机原理及应用 高等教育出版社 2010年8月 (2) 徐爱钧 单片机原理实用教程 电子工业出版社 2011年3月 (2) 张伟 王力 protel2004入门与提高 人民邮电出版社 2005年11月 (3) 常健生 检测与转换技术 机械工业出版社 2000年2月
(4) 阎石 数字电子技术基础 高等教育出版社 1998年12月
(5) 童诗白 模拟电子技术基础 高等教育出版社 2001年
(6) 李伯成 微型计算机原理与接口技术 清华大学出版社 2005年1月 (7) 李昌喜 智能仪表原理与设计 化学工业出版社 2005年2月
14
课程设计论文
附录 系统源程序:
org 0000h ;单片机复位地址
ajmp main ;转移到主程序处
org 0100h ;main被定位在0x0100处 main: mov sp,#80h ;初始化堆栈指针
jnb P1.0,cr
jnb P1.1,cv
jnb P1.2,ca
cr: mov R7,#00h
lcall adc
LCALL RDAT
lcall DISPLAY
sjmp main
CV: MOV R7,#01H
LCALL ADC
LCALL VDAT
LCALL DISPLAY
SJMP MAIN
CA: MOV R7,#02H
LCALL ADC
LCALL ADAT
LCALL DISPLAY
SJMP MAIN
ADC: MOV A,R7 ;0808 A/D转换子程序
MOV DPTR,#7FFFH
MOVX @DPTR,A
JB P3.3,$
MOVX A,@DPTR ;输入转换结果
RET
vdat:
mov R2,#00h
mov R3,A
mov R6,#01h
mov R7,#0F4h
call MULD2 ;乘以500
clr C
mov A,r5
add A,#60h ;加96修正
mov r5,A
mov A,r4
15
课程设计论文
addc A,#00h
mov r4,A
mov A,r3
addc A,#00h
mov r3,A
mov A,r2
addc A,#00h
mov r2,A
mov r0,#30h
mov r1,#34h
mov A,R2
mov @r1,A
inc r1
mov A,R3
mov @r1,A
inc r1
mov A,R4
mov @r1,A
inc r1
mov A,R5
mov @r1,A
inc r1
mov @r1,#00h
inc r1
mov @r1,#00h
inc r1
mov @r1,#00h
inc r1
mov @r1,#0FFh
call DIVD4 ;除以255
mov r1,#38h
mov @r1,#00h
inc r1
mov @r1,#00h
inc r1
mov @r1,#00h
inc r1
mov @r1,#0Ah
call DIVD4
mov 43h,33h
call DIVD4
mov 42h,33h
call DIVD4
mov 41h,33h
16
课程设计论文
mov r0,#40h
mov @r0,#00h
inc r0
mov A,41h
mov DPTR,#SEGMENT7
movc A,@A+DPTR
orl A,#80h
mov @r0,A
inc r0
mov A,42h
mov DPTR,#SEGMENT7
movc A,@A+DPTR
mov @r0,A
inc r0
mov A,43h
mov DPTR,#SEGMENT7
movc A,@A+DPTR
mov @r0,A
ret
ADAT:
mov B,A
mov A,#0B6h
clr C ;以下根据范围设置数值以防溢出
subb A,B
jc LARGERA
mov A,B
subb A,#16h
jc LESSA
ajmp MIDDLEA
LARGERA: mov A,#0B6h
ajmp CALCULATEA LESSA: mov A,#16h
ajmp CALCULATEA MIDDLEA: mov A,B CALCULATEA: mov r2,#0C3h
mov r3,#50h
mov r6,#00h
mov r7,A
call MULD2 ;乘以50000
clr C
mov A,r5
subb A,#70h ;以下减去102000
mov r5,A
17
课程设计论文
mov 37h,A
mov A,r4
subb A,#8Eh
mov r4,A
mov 36h,A
mov A,r3
subb A,#01h
mov r3,A
mov 35h,A
mov A,r2
subb A,#00h
mov r2,A
mov 34h,A
mov r0,#30h
mov r1,#38h
mov @r1,#00h
inc r1
mov @r1,#01h
inc r1
mov @r1,#5Eh
inc r1
mov @r1,#0A0h
call DIVD4 ;除以89760
mov r1,#38h
mov @r1,#00h
inc r1
mov @r1,#00h
inc r1
mov @r1,#00h
inc r1
mov @r1,#0Ah
mov DPTR,#SEGMENT7
call DIVD4
mov A,33h
movc A,@A+DPTR
mov 43h,A
call DIVD4
mov A,33h
movc A,@A+DPTR
mov 42h,A
call DIVD4
mov A,33h
movc A,@A+DPTR
cjne A,#3Fh,NOTEQU
18
课程设计论文
mov A,#00h
NOTEQU: mov 41h,A
mov 40h,#00h
RET
rdat:
mov R2,#00h
mov R3,A
mov R6,#03h
mov R7,#0E8h
call MULD2 ;乘以1000
mov r0,#30h
mov r1,#34h
mov A,R2
mov @r1,A
inc r1
mov A,R3
mov @r1,A
inc r1
mov A,R4
mov @r1,A
inc r1
mov A,R5
mov @r1,A
inc r1
mov @r1,#00h
inc r1
mov @r1,#00h
inc r1
mov @r1,#00h
inc r1
mov @r1,#0FFh
call DIVD4 ;除以255
mov r1,#38h
mov @r1,#00h
inc r1
mov @r1,#00h
inc r1
mov @r1,#00h
inc r1
mov @r1,#0Ah
mov DPTR,#SEGMENT7
call DIVD4 ;连续进行4次除以10的操作
mov A,33h ;取得10进制值
19
课程设计论文
movc A,@A+DPTR
mov 43h,A
call DIVD4
mov A,33h
movc A,@A+DPTR
mov 42h,A
call DIVD4
mov A,33h
movc A,@A+DPTR
mov 41h,A
call DIVD4
mov A,33h
movc A,@A+DPTR
cjne A,#3Fh,NONZERO
mov A,#00h
NONZERO: mov 40h,A
ret
DELAY_5ms: mov R5,#01h ;设置R5初始计数值 DELAY_5ms1: mov R6,#16h ;设置R6初始计数值 DELAY_5ms2: mov R7,#70h ;设置R7初始计数值 DELAY_5ms3: djnz R7,DELAY_5ms3 ;延时时间为
Time=( ( (R7*2)+2+1 )*R6+2+1 )*R5+1
djnz R6,DELAY_5ms2 ;
djnz R5,DELAY_5ms1 ;
ret
SEGMENT7: DB 3Fh ;7段数码管字符0的abcdefg的值,a在最低位,最高位始终保留为0
DB 06h
DB 5Bh
DB 4Fh
DB 66h
DB 6Dh
DB 7Dh
DB 07h
DB 7Fh
DB 6Fh
DISPLAY: mov DPTR,#0fEffh ;写第一位数码管
mov r1,#40h
mov A,@r1
movx @DPTR,A
setb C
20
课程设计论文
mov P1.4,C
clr C
mov P1.4,C
call DELAY_5ms
setb C
mov P1.4,C
inc r1
mov A,@r1 ;写第二位数码管
movx @DPTR,A
setb C
mov P1.5,C
clr C
mov P1.5,C
call DELAY_5ms
setb C
mov P1.5,C
inc r1
mov A,@r1 ;写第三位数码管
movx @DPTR,A
setb C
mov P1.6,C
clr C
mov P1.6,C
call DELAY_5ms
setb C
mov P1.6,C
inc r1
mov A,@r1 ;写第四位数码管
movx @DPTR,A
setb C
mov P1.7,C
clr C
mov P1.7,C
call DELAY_5ms
setb C
mov P1.7,C
ret
;双字节二进制无符号数乘法
;被乘数在R2(高位)、R3(低位)中,乘数在R6(高位)、R7(低位)中。
;乘积在R2(高位)、R3、R4、R5(低位)中。 ;用到累加器A,B,PSW,R2~R7。 ;永远不会产生进位。
21
课程设计论文
;在出口时总是清除C。 ;若结果超出2个字节范围则OV=1。
MULD2:
MOV A,R3
MOV B,R7
MUL AB
MOV R4,B
MOV R5,A
MOV A,R3
MOV B,R6
MUL AB
ADD A,R4
MOV R4,A
CLR A
ADDC A,B
MOV R3,A
MOV A,R2
MOV B,R7
MUL AB
ADD A,R4
MOV R4,A
MOV A,R3
ADDC A,B
MOV R3,A
CLR A
RLC A
XCH A,R2
MOV B,R6
MUL AB
ADD A,R3
MOV R3,A
MOV A,R2
ADDC A,B
MOV R2,A
ORL A,R3
JZ MULD21
SETB OV
RET
MULD21:
CLR OV
RET
22
课程设计论文
;四字节无符号数除法
;R0存放被除数,除数,商数的地址。 ;从R0开始的连续四个字节为结果的余数,入口时可以为任意,但在出口时发生变化。
;其后的连续4个字节在入口时是被除数,出口时是商数。
;再其后的连续四个字节在入口时是除数,出口时保持不变。
;用到累加器A,B,PSW,R0~R7。 ;如果除数为零,则置OV=1标志,否则清零。
;在出口时总是清除C。
DIVD4:
MOV A,R0
MOV B,A
ADD A,#08h
MOV R1,A
MOV A,#00h
ORL A,@R1
INC R1
ORL A,@R1
INC R1
ORL A,@R1
INC R1
ORL A,@R1
JZ DIVD45
MOV R1,B
MOV R2,#04h DIVD41:
MOV @R1,#00h
INC R1
DJNZ R2,DIVD41
MOV R3,#20h DIVD42:
MOV R2,#08h
MOV A,B
MOV R0,A
ADD A,#07h
MOV R1,A
CLR C
DIVD43:
MOV A,@R1
RLC A
MOV @R1,A
DEC R1
DJNZ R2,DIVD43
MOV A,R0
ADD A,#03h
23
课程设计论文
MOV R1,A
MOV A,R0
ADD A,#0Bh
MOV R0,A
MOV A,@R1
SUBB A,@R0
MOV R4,A
DEC R1
DEC R0
MOV A,@R1
SUBB A,@R0
MOV R5,A
DEC R1
DEC R0
MOV A,@R1
SUBB A,@R0
MOV R6,A
DEC R1
DEC R0
MOV A,@R1
SUBB A,@R0
MOV R7,A
JC DIVD44
MOV A,B
MOV R0,A
ADD A,#03h
MOV R1,A
MOV A,R4
MOV @R1,A
DEC R1
MOV A,R5
MOV @R1,A
DEC R1
MOV A,R6
MOV @R1,A
DEC R1
MOV A,R7
MOV @R1,A
MOV A,R0
ADD A,#07h
MOV R1,A
INC @R1
DIVD44:
DJNZ R3,DIVD42
24
课程设计论文
MOV R0,B
CLR OV
CLR C
RET
DIVD45:
SETB OV
CLR C
RET
end
25

  • 5
    点赞
  • 0
    评论
  • 23
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值