DA转换控制系统源程序.doc_第1页
DA转换控制系统源程序.doc_第2页
DA转换控制系统源程序.doc_第3页
DA转换控制系统源程序.doc_第4页
DA转换控制系统源程序.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

附录A2AD、DA转换控制系统源程序;#主程序# ORG 0000H main: mov 50h,#150 mov sp,#70h ;指定堆栈指针为70H B0: setb p1.5 ;关掉温度系统工作指示灯 LCALL ADC ;调用温度控制子程序ADC jnb p1.0,B1 ;判断功能切换键是否按下 SJMP B0 B1: setb p1.4 ;关掉转速系统工作指示灯 LCALL DAC ;调用转速控制子程序DAC jnb p1.0,B0 ;判断功能切换键是否按下 SJMP B1;#转速控制子程序# DAC: clr p1.4 ;开转速系统工作指示灯 lcall delay ;调用延时子程序 mov 23h,#11 ;数码显示最后一位显示字符P lcall DAC1 ;调用转速控制子程序DAC1 lcall ZS ;调用转测试子程序ZS RET;#温度控制子程序# ADC: clr p1.5 ;开温度系统工作指示灯 mov 23h,#10 ;数码显示最后一位显示字符C lcall delay lcall AD ;调用温度转换子程序AD lcall BCD ;调用BCD码转换子程序BCD lcall disp ;调用显示子程序disp lcall delay RET;#转控制子程序# DAC1: mov a,50h ;在50H单元取数 mov dptr,#07FFFh ;指向DAC0832控制口地址 movx dptr,a ;送到DAC0832中进行转换 lcall disp ;调用显示子程序disp jnb p1.2,dac2 ;加1键是否按下 jnb p1.3,dac3 ;减1键是否按下 ret dac2: lcall disp ;按键去抖 lcall disp lcall disp lcall disp lcall disp mov a,50h add a,#01h ;加1 mov 50h,a ret dac3: lcall disp ;按键去抖 lcall disp lcall disp lcall disp lcall disp dec 50h ;减1 ret;#转速测试子程序#3 ZS: mov tmod,#15h ;设置定时器1为定时器工作方式1,T0为计数器工作方式1 mov th0,#00h mov tl0,#00h mov th1,#0bh ;定时1/16s mov tl1,#0d2h setb tr1 ;启动T1 setb tr0 ;启动T0 js0: jbc tf1,js2 ;等待定时时间到 lcall disp sjmp js0 js2: clr tr1 ;停止T1 clr tr0 ;停止T0 sj1: mov a,tl0 mov r0,#38h mov r0,a ;38H保存低8位数TL0 inc r0 mov a,th0 mov r0,a ;39H保存高8位数TH0 lcall zhbcd ;调用十六位二进制数转十进制子程序 lcall fjbcd ;分解BCD码子程序 lcall disp RET;#十六位二进制数转十进制子程序#;编程说明:因为(a15a14a1a0)2=(02+a15)2+ a14)2+a0 所以将二进制数从高位逐次左移入BCD码寄存器的最底位,并且每次都实现()2+ai的运算。zhbcd: mov r1,#30h ;BCD码的存储地址 mov r2,#02h ;要转换的字节数 clr a ;清A bb0: mov r1,a ;30H,31H,32H单元清零 inc r1 djnz r2,bb0 ;是否全部清完 mov r3,#10h ;十六位二进制数移位位数 bb1: mov r0,#38h ;设置R0指针指向38H单元 mov r2,#02h clr c bb2: mov a,r0 ;把38H中的数TL0取出 rlc a ;左移一次 mov r0,a ;返送到38H中保存 inc r0 ;指针加1 djnz r2,bb2 ;再把39H中的数TH0取出左移一次并保存 mov r2,#03h mov r1,#30h bb3: mov a,r1 ;把R1所指单元中的数送A addc a,r1 ;带进位加 da a ;十进制调整 mov r1,a ;把A中的数据送到R1所指单元 inc r1 djnz r2,bb3 ;30H,31H,32H三个单元是否全部加了一次 djnz r3,bb1 ;要进行十六次移位 ret;#分解BCD码子程序# fjbcd: mov r1,#22h ;设置BCD码分解码存放首地址 mov r0,#30h mov a,r0 anl a,#0fh ;屏蔽高4位 mov r1,a ;个位送到R1所指存储单元20H中 dec r1 mov a,r0 swap a ;高低位互换 anl a,#0fh ;屏蔽高4位 mov r1,a ;十位送到21H中 inc r0 dec r1 mov a,r0 anl a,#0fh mov r1,a ;白位送到22H中 ret;#温度转换子程序# AD: mov dptr,#0BFFFh ;指向ADC0809控制口地址 movx dptr,a ;启动转换 lp1: jnb p1.7,lp1 ;等待转换完毕 movx a,dptr ;A中为Vt lp2: mov b,#140 ;扩大140倍的K值送到B mul ab ;140*K*Vt,B=K*Vt mov a,#90h ;Tc送到A clr c subb a,b ;Tc-K*Vt cjne a,#14,lp3 lp3: jc lp4 cjne a,#100,lp5 lp5: jc lp6 lp4: mov 20h,#12 ;显示字符F mov 21h,#12 mov 22h,#12 lp6: ret;#8位BCD码转换子程序# BCD: mov r1,#0 mov r2,#0 clr c bcd0: subb a,#64h ;减100 jc bcd1 ;不够减,转 inc r1 ;够减,百位数加1 sjmp bcd0 bcd1: add a,#64h ;还原百位数 bcd2: subb a,#0ah ;减10 jc bcd3 ;不够减,转 inc r2 ;够减,十位数加1 sjmp bcd2 ;重复减10 bcd3: add a,#0ah mov 20h,r1 ;将百位数字存到20H单元 mov 21h,r2 ;将十位数字存到21H单元 mov 22h,a ;将个位数字存到22H单元 ret;#显示子程序# disp: mov 30h,#0F7FFh ;数码片选初始值 mov r0,#20h ;数码位字码存储单元 mov r3,#4 ;有4位 sjmp lb0 lb0: mov dptr,#tab ;指向字码段表首地址 mov a,r0 ;送偏移量 movc a,a+dptr ;查表 mov dptr,#0d00h ; movx dptr,a ;送显示 lcall px ;调用片选子程序 lcall delay inc r0 ;扫描下一位 djnz r3,lb0 ;四位都扫描一遍 ret px: mov dptr,#0F7FFh ;片选子程序 mov a,30h movx dptr,a rl a ;移位扫描 mov 30h,a ret;#延时

温馨提示

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

评论

0/150

提交评论