单片机原理实验
MOV DSB4,#02H ;LD2亮 JNB ESW2,WK11 MOV STA,#00H ;下次主循环返回WORK0模块 SJMP WK13 WK11: CLR A ;查询\键 JB EK0,WK12 INC A ;查询\键 JB EK1,WK12 ???? INC A ;查询\键 JNB EK9,WK13 WK12: XCH A,SNUM1 ;键值从数据2的右边移入 SWAP A MOV R7,A ANL A,#0F0H ORL SNUM1,A MOV A,R7 ANL A,#0FH XCH A,SNUM0 ANL A,#0FH SWAP A ORL SNUM0,A WK13: AJMP MLOOP ;====将双字节压缩BCD码(R0)(R0+1)送显缓==== DSBUDT: MOV A,@R0 ANL A,#0FH MOV DSB2,A MOV A,@R0 ANL A,#0F0H SWAP A MOV DSB3,A INC R0 MOV A,@R0 ANL A,#0FH MOV DSB0,A MOV A,@R0 ANL A,#0F0H SWAP A MOV DSB1,A
23
数据2送显缓、LD2点亮 N 无SW2键? Y (A)=0 Y 有K0键? N (A)=(A)+1 Y 有K1键? N ???? (A)=(A)+1 有K9键? Y 键值(A)从数据2的右边移入 (STA)=0 N 回到主循环的起点MLOOP处 图4.4:赋值模块流图 单片机原理实验
RET
从状态表4.1中可看出,在3个工作状态中都规定了数码显示器的显示信息,只要将等显示的压缩BCD码送给显示缓冲单元DSB3~0,即可实现显示内容更新,因此3个工作状态都有显示内容更新的操作,这些操作都是相似的,可由子程序DSBUPT(DISPLAY BUFFER UPDATE)完成,该子程序将(R0)为首地址的双字节压缩BCD码送往显示缓冲单元。
四、 实验内容
1. 矩阵键盘和独立按键读键状态及去抖处理程序设计 参照图3.6和图4.2,将“实验原理2”的“读矩阵、独立按键子程序(延时去抖)”中用“??”表示的扫描第1、2行按键等和键状态判断、延时去抖、键前沿提取等部分程序行写完整。
建立工作文件夹“E:\\学号\\实验四”,启动“WAVE 3.2”软件,点击“新建文件”快捷按钮,在打开的文件窗口中编辑读矩阵、独立按键子程序(延时去抖),编辑完成后,在工作文件夹中,以文件名“RDKEY.ASM”保存文件。
2. 程序移植 将“实验三”中建立的5位LED数码管动态显示子程序DISP.ASM复制到当前工作文件夹。
点击“新建文件”快捷按钮,在打开的文件窗口中编辑变量及常数定义子程序,编辑时可将实验三主程序MAIN.ASM的变量定义段的有关内容复制粘贴到当前编辑窗口中,删去与本项目无关的行,添加本项目新增的各变量的定义,并对各变量在内部RAM中的分配作统一规划。编辑完成后,在工作文件夹中,以文件名“VARDFN.ASM”保存文件。
将“实验三”中建立的初始化子程序INITIAL.ASM复制到当前工作文件夹,用“打开文件”快捷按钮打开该文件,修改初始化模块。堆栈设置、内部RAM清0不变,增加变量
在做程序移植时,移植过来的程序行若与本项目无关务必要删除干净,尤其是变量及常数定义子程序,该程序均由伪指令构成,没有删除干净可能不会影响程序的编译与运行,但会大大降低程序的可读性。
3. 系统程序设计与调试
将待机模块和查询模块细化,画出各自的流程图,写出程序清单;将赋值模块流程图中“????”部分画完整,并写出相应的程序行。
点击“新建文件”快捷按钮,在打开的文件窗口中编辑系统程序,编辑完成后,在工作文件夹中,以文件名“MAIN.ASM”保存文件。
在工作文件夹中,以“PROJECT”文件名创建工程项目,将MAIN.ASM添加到模块文件中,编译项目直至通过。将编译通过的目标程序下载到实验板中,取下下载器,通电试运行。若目标程序运行不能达到预期效果,用实验一、所述方法进行模拟仿真,查找算法、程序错误,再编译、下载、运行目标程序直至达到预期效果,完成调试。
24
单片机原理实验
五、 实验报告要求
实验报告要求写明实验目的,并提交以下内容。
1. 总结应用模块化方法设计系统程序的主要步骤及状态转移表应包含哪些要素?
2. 提交RDKEY.ASM、VARDFN.ASM二个模块文件的清单。
3. 提交待机模块、赋值模块细化的程序流图、汇编语言源程序清单。 4. 回答思考题。
六、 思考题
1. 估算你所编写的系统程序执行一次主循环的最长时间,即从执行“CLR TF0”到执行“AJMP MLOOP”转移等待MLOOP处所需的最长时间,如果该最长时间超过4mS会出现什么情况?
2. 为什么不能使用无条件转移指令由一个工作模块直接转移到另一个工作模块?
25
单片机原理实验
实验五、计数器应用实验
――基于热敏电阻和555电路的简易温度报警系统设计
一、 实验目地
1. 掌握定时器/计数器综合应用设计方法。
2. 掌握基于热敏电阻和555时基电路的简易温度计设计方法。 3. 进一步学习模块化程序设计方法,巩固状态及其转移分析方法。
4. 进一步学习程序移植方法,巩固变量定义、初始化、数码管动态显示、读键状态及去抖处理等子程序(或子模块)的调整与应用。
二、 实验设备
PC 兼容机1台、目标程序下载接口电路1套、AT89S52实验板1套;操作系统为WindowsXP,安装有单片机集成开发软件“WAVE 3.2”和下载器驱动软件。
三、 实验原理
1. 温度测量原理
常用的温度传感器有热电偶温度传感器、二极管温度传感器、半导体集成温度传感器、热敏电阻温度传感器,本实验采用热敏电阻和555时基电路构成简易的温度传感器,电路构成如图5.1所示。
图5.1是由555时基电路组成自激多谐振荡电路,电路的工作有三个过程。①上电时电容C5的电压uC5?0,555
+5V555IC448R63K762C5103C7104RESETDISCHGVCCOUT35C6104T1RTNTC/10KTHOLDCVOLTTRIGGND1输出高电平、放电端“DSI”关断,此时 电源通过电阻R6及RT向电容C5充电,图5.1:由555时基电路组成自激多谐振荡器 当充电至uC5?13VCC时,555状态不变仍输出高电平,继续充电。②电容C5从uC5?13VCC电平处通过R6及RT充电,此时输出为高电平;当充电至
表5.1:555时基电路逻辑功能表 TH OUT DIS TR R × × L H H H L L H 导通 导通 关断 ?1 ?23VCC3VCC ?1 ?23VCC3VCC× ?13VCCuC5?23VCC时,555状态翻转,输出低
电平、放电端“DIS”对地导通,电容
C5通过电阻RT放电;这个充电过程的时长T1满足:
23原状态 原状态 VCC?VCC?23VCCexp??T1(R6?RT)C5?,即T?(R16?RT)C5ln2 (1)
③电容C5从uC5?2此时输出为低电平;当放电至uC5?1V电平处通过RT放电,3VCC3CC
26
单片机原理实验
时,555状态翻转,输出高电平、放电端“DSI”关断,电源又通过电阻R6及RT向电容C5充电,这个放电过程的时长T2满足:
13VCC?23VCCexp??,即T?T2RTC52?RTC5ln2 (2)
此后,电路双重复②③两过程,输出矩形脉冲波,周期T为:
T?(R6?2RT)C5ln2?0.69(R6?2RT)C5 (3)
若电阻RT采用热敏电阻,当温度变化时,振荡器输出脉冲频率FT变化,将振荡器输出信号与单片机T1计数器输入引脚相连,通过测量恒定时间间隔内脉冲的个数,由该脉冲计数值可换算出相应的温度。
表4.2:NTC10K热敏电阻温度与电阻值对应关系及振荡器100mS产生脉冲数 T(℃) RT(KΩ) 0.0 1.0 2.0 3.0 4.0 5.0 6.0 7.0 8.0 9.0 10.0 11.0 12.0 13.0 14.0 15.0 16.0 17.0 18.0 19.0 20.0 21.0 22.0 23.0 24.0 100mS 100mS 100mS 100mS T(℃) RT(KΩ) T(℃) RT(KΩ) T(℃) RT(KΩ) 脉冲数 脉冲数 脉冲数 脉冲数 32.5030 213 25.0 10.0000 630 50.0 3.5870 1424 75.0 1.4619 2447 30.9026 224 26.0 9.5718 654 51.0 3.4525 1463 76.0 1.4136 2487 29.3896 235 27.0 9.1642 680 52.0 3.3238 1502 77.0 1.3672 2527 27.9590 246 28.0 8.7760 705 53.0 3.2005 1542 78.0 1.3225 2567 26.6058 258 29.0 8.4063 731 54.0 3.0824 1581 79.0 1.2795 2607 25.3254 270 30.0 8.0541 758 55.0 2.9692 1621 80.0 1.2381 2646 24.1135 283 31.0 7.7184 786 56.0 2.8608 1662 81.0 1.1983 2686 22.9661 296 32.0 7.3985 814 57.0 2.7568 1702 82.0 1.1599 2724 21.8795 310 33.0 7.0935 843 58.0 2.6572 1743 83.0 1.1229 2763 20.8502 324 34.0 6.8026 873 59.0 2.5616 1784 84.0 1.0873 2801 19.8747 339 35.0 6.5251 903 60.0 2.4700 1825 85.0 1.0530 2838 18.9502 354 36.0 6.2604 934 61.0 2.3820 1867 86.0 1.0199 2876 18.0735 370 37.0 6.0077 965 62.0 2.2977 1908 87.0 0.9880 2913 17.2421 387 38.0 5.7666 997 63.0 2.2167 1950 88.0 0.9573 2949 16.4534 404 39.0 5.5363 1030 64.0 2.1390 1991 89.0 0.9277 2985 15.7049 421 40.0 5.3164 1063 65.0 2.0644 2033 90.0 0.8991 3020 14.9944 439 41.0 5.1064 1097 66.0 1.9928 2075 91.0 0.8715 3056 14.3198 458 42.0 4.9057 1131 67.0 1.9240 2116 92.0 0.8450 3090 13.6792 477 43.0 4.7140 1166 68.0 1.8579 2158 93.0 0.8193 3124 13.0705 497 44.0 4.5307 1202 69.0 1.7944 2200 94.0 0.7945 3158 12.4922 518 45.0 4.3554 1238 70.0 1.7334 2241 95.0 0.7707 3191 11.9425 539 46.0 4.1878 1274 71.0 1.6747 2283 96.0 0.7476 3224 11.4198 561 47.0 4.0275 1311 72.0 1.6183 2324 97.0 0.7253 3256 10.9227 583 48.0 3.8742 1348 73.0 1.5641 2365 98.0 0.7038 3288 10.4499 606 49.0 3.7275 1386 74.0 1.5120 2406 99.0 0.6831 3319 NTC10K负温度系数热敏电阻,其温度与电阻值的对应关系是非线性的,标称值10K是指该热敏电阻在25℃时的电阻值为10KΩ,测温范围为-20~100℃,表4.2第1和2栏给出NTC10K温度与电阻值的对应关系,此对应关系由厂商提供,可精确到0.5℃,考虑到电路其它元件的误差,本简易温度测量方法的误差不可能小于1℃,因此表4.1仅给出0℃以上的整数(℃)温度值所对应的电阻值。通常情况下,热系统的温度变化
27