TR0定时器0开始继续运行AJMPREADPAUSE暂停键按下,跳转至此CLRTR0AJMPREADTIME0定时器0溢出,中断,跳转至此INC30HMOVA30HCJNEA0AHTIME130H单元中的值到10了吗?计时到10毫秒了吗,也就是说,该向毫秒位送数了吗?MOVDPTRTAB30H中的值到10了,顺序执行MOVAR0INCR0CJNER00AHGETR0中的值到10了吗?该向秒位进位了吗?MOVR000HLCALLSECOND到了,R0清零,调用进位子程序SECOND,向秒位进位GET没到,跳过进位子程序MOVCAADPTRMOVP1A查表并向数码管毫秒位送数MOV30H00H重置30H单元TIME1MOVTH00D8HMOVTL00FEH给定时器0重新预置数RETI中断返回SECOND秒位进位子程序PUSHACCPUSHPSW将ACC和PSW推入堆栈保护MOVAR1INCR1CJNER114HGET1R1中的值到20了吗,也就是说,该向十秒位进位了吗?MOVR10AHLCALLSECOND1到了。R1重置,调用进位子程序SECOND1,向十秒位进位GET1没到,跳过进位子程序MOVCAADPTRMOVP2A查表并向数码管秒位送数POPPSWPOPACCPSWACC出栈RET子程序返回SECOND1十秒位进位子程序
10
fPUSHACCPUSHPSW将ACC和PSW推入堆栈保护MOVAR2INCR2CJNER20AHGET2R2中的值到10了吗,也就是说,该将此位归零了吗?MOVR200H到了,R2清零GET2没到,跳过清零程序MOVCAADPTRMOVP0A查表并向数码管十秒位送数POPPSWPOPACCPSW,ACC出栈RET子程序返回STOP清零键按下,跳转至此MOVP30FFHMOVP03FHMOVP13FHMOVP20BFH数码管清零MOV30H00HMOVR000HMOVR10AHMOVR200H工作寄存器初始化CLRTR0计时器0停止计时MOVTH00D8HMOVTL00FEH定时器0预置数AJMPREADDELAY延时10ms子程序MOVR350DD1MOVR4100DD2DJNZR4D2DJNZR3D1RET子程序返回TABDB06H5BH4FH66H6DH7DH07H7FH6FH3FH86H0DBH0CFH0E6H0EDH0FDH87H0FFH0EFH0BFH数码管段选码数表END程序结束
11
f7、程序仿真
将以上程序清单导入先前做好的Proteus仿真电路,汇编之后,按键开始进行仿真。仿真结果如下:
仿真结果描述:按“开始”键,秒表开始计时;按“暂停”键,秒表暂停计时;再按“开始”键,秒表继续计时;按“清零”键,秒表清零。
8、实物制作
81所需元件
89C52单片机×1(型号STC89C52RC)IC座×17段共阴一位数码管×3(型号ArkSM420501K)47K电阻×430pF电容×210uF电容×1(耐压50V)8×47K排阻×312MHz晶振器×1七号电池盒×215V七号干电池×4(型号双鹿高性能碳性电池)按钮×3万能板×1,导线若干
12
f82所需工具
电烙铁,松香,焊锡丝,程序烧录器等。
83焊接
按照仿真电路图r