1、定时器/计数器应用实验一设计性试验2012 年 11 月 14 日星期三 第三四节课一、实验目的1、掌握定时器/计数器定时功能的使用方法。2、掌握定时器/计数器的中断、查询使用方法。3、掌握 Proteus 软件与 Keil 软件的使用方法。4、掌握单片机系统的硬件和软件设计方法。二、设计要求1、用 Proteus 软件画出电路原理图,单片机的定时器/计数器以查询方式工作,在 P1.0 口线上产生周期为 200S 的连续方波,在 P 1.0 口线上接示波器观察波形。2、用 Proteus 软件画出电路原理图,单片机的定时器/计数器以中断方式工作,在 P1.1 口线上产生周期为 240S 的连续
2、方波,在 P 1.1 口线上接示波器观察波形。三、电路原理图开 始系 统 初 始 化装 计 数 初 值 并启 动 定 时 器定 时 ?时 间 到 重 装 计 数初 值输 出 取 反结 束清 除 溢 出标 志NY四、实验程序流程框图和程序清单及实验结果/*设计要求:(a)单片机的定时器/计数器以查询方式工作,在 P1.0 口线上产生周期为 200us 的连续方波编写:吕小洋说明:用定时器 1 的方式 1 以查询方式工作时间:2012 年 11 月 10 日*/ORG 0000HSTART: LJMP MAINORG 0100HMAIN: MOV SP, #2FHCLR EA ;关总中断CLR E
3、T1 ;禁止定时器 1 中断MOV TMOD, #00010000B ;设置定时器 1 为工作方式 1MOV TH1, #0FFH ;设置计数初值MOV TL1, #9CHSETB TR1 ;启动定时器LOOP: JNB TF1, LOOP ;查询计数是否溢出MOV TH1, #0FFH ;重置计数初值MOV TL1, #9CHCLR TF1 ;清除计数溢出标志CPL P1.0 ;输出取反LJMP LOOP ;重复取反ENDTMOD初 始 化计 数 初 值初 始 化中 断 初 始 化启 动 定 时 器等 待 中 断输 出 取 反中 断 返 回开 始开 始/*设计要求:(b)单片机的定时器/计数
4、器以查询方式工作,在 P1.0 口线上产生周期为 200us 的连续方波编写:吕小洋说明:用定时器 0 的免装初值方式 2 以中断方式工作时间:2012 年 11 月 10 日*/ORG 0000HSTART: LJMP MAINORG 000BHLJMP TTC0ORG 0100HMAIN: MOV SP, #2FHSETB EA ;开总中断SETB ET0 ;定时器 0 允许中断MOV TMOD, #02H ;设置 T0 为工作方式 2MOV TH0, #88H ;设置计数初值MOV TL0, #88H SETB TR0 ;启动定时器HERE: LJMP HERE ;等待中断/*中断服务程
5、序*/ORG 0200HTTC0: CPL P1.0 ;输出取反RETI ;中断返回END五、实验总结通过本次试验,我掌握了定时器/计数器定时功能的使用方法,能够利用定时器产生特定脉宽的波形,掌握了定时器/计数器的中断、查询使用方法。同时掌握了单片机系统的硬件和软件设计方法。加强了自己的编程能力。开 始中 断 初 始 化TMOD初 始 化计 数 初 值初 始 化启 动 定 时 器 T0定 时 ?时 间 到 输 出 取 反清 除 溢 出 标 志并 关 T0启 动 定 时 器 T1定 时 ?时 间 到 输 出 取 反重 装 T1计 数 初 值清 除 溢 出 标 志并 关 T1启 动 定 时 器 T
6、0结 束YNYN六、思考题1、在 P1.0 口线上产生周期为 500 微秒,占空比为 2:5 的连续矩形波。/*(1)定时器 0 定时 200us 以查询方式、方式 2 工作,定时器 1 定时 300us 以查询方式、方式 1 工作*/ORG 0000HSTART: LJMP MAINORG 0100HMAIN: MOV SP, #2FHCLR EA ;关总中断CLR ET0 ;禁止定时器 0 中断CLR ET1 ;禁止定时器 1 中断MOV TMOD, #00010010B ;设置工作方式MOV TH0, #37H ;设置 T0 的计数初值MOV TL0, #37HMOV TH1, #0FE
7、H ;设置 T1 的计数初值MOV TL1, #0D4HSETB TR0 ;启动定时器 0LOOP: JNB TF0, LOOP ;查询计数是否溢出CPL P1.0 ;输出取反CLR TF0 ;清除 T0 计数溢出标志CLR TR0 ;关定时器 0SETB TR1 ;启动定时器 1LOOP1: JNB TF1, LOOP1CPL P1.0 ;输出取反MOV TH1, #0FEH ;重装计数初值MOV TL1, #0D4HCLR TF1 ;清除 T1 计数溢出标志CLR TR1 ;关闭定时器 1SETB TR0 ;启动定时器 0LJMP LOOP ;重复循环END开 始中 断 初 始 化TMOD
8、初 始 化计 数 初 值初 始 化启 动 定 时 器 T0等 待 中 断输 出 取 反中 断 返 回开 始关 闭 定 时 器 T0开 启 定 时 器 T1输 出 取 反中 断 返 回开 始关 闭 定 时 器 T1开 启 定 时 器 T0重 装 定 时 器 T1计 数 初 值/*(2)定时器 0 定时 200us 以中断方式、方式 2 工作,定时器 1 定时 300us 以中断方式工作*/ORG 0000HSTART: LJMP MAINORG 000BHLJMP TTC0ORG 001BHLJMP TTC1ORG 0100HMAIN: MOV SP, #2FHSETB EA ;开总中断SETB
9、 ET0 ;允许定时器 0 中断SETB ET1 ;允许定时器 1 中断MOV TMOD, #00010010B ;设置 T0、T1 都为工作方式 1MOV TH0, #38H ;设置 T0 的计数初值MOV TL0, #38HMOV TH1, #0FEH ;设置 T1 的计数初值MOV TL1, #0D4HSETB TR0 ;启动定时器 0HERE: SJMP HEREORG 0200HTTC0: CPL P1.0 ;输出取反CLR TR0 ;关定时器 0SETB TR1 ;启动定时器 1RETIORG 0300HTTC1: CPL P1.0 ;输出取反MOV TH1, #0FEH ;重装计
10、数初值MOV TL1, #0D4HCLR TR1 ;关闭定时器 1SETB TR0 ;启动定时器 0RETIEND开 始中 断 初 始 化TMOD初 始 化计 数 初 值初 始 化启 动 定 时 器 T0定 时 ?时 间 到 输 出 取 反清 除 溢 出 标 志并 关 T0启 动 定 时 器 T1重 装 定 时 器 T0计 数 初 值输 出 取 反中 断 返 回开 始关 闭 定 时 器 T1开 启 定 时 器 T0重 装 定 时 器 T1计 数 初 值/*(3)定时器 0 定时 200us 以查询方式工作,定时器 1 定时 300us 以中断方式工作*/ORG 0000HSTART: LJMP
11、 MAINORG 001BHLJMP TTC1ORG 0100HMAIN: MOV SP, #2FHSETB EA ;开总中断CLR ET0 ;禁止定时器 0 中断SETB ET1 ;允许定时器 1 中断MOV TMOD, #00010001B ;设置 T0、T1 都为工作方式 1MOV TH0, #0FFH ;设置 T0 的计数初值MOV TL0, #38HMOV TH1, #0FEH ;重装 T1 计数初值MOV TL1, #0D4HSETB TR0 ;启动定时器 0LOOP: JNB TF0, LOOP ;查询 T0 计数是否溢出CPL P1.0 ;输出取反CLR TF0 ;清除 T0 计数溢出标志CLR TR0 ;关定时器 0MOV TH0, #0FFH ;重装 T0 计数初值MOV TL0, #38HSETB TR1 ;启动定时器 1LJMP LOOPTTC1: CPL P1.0 ;输出取反CLR TR1 ;关闭定时器 1SETB TR0 ;启动定时器 0MOV TH1, #0FEH ;重装 T1 计数初值MOV TL1, #0D4HRETIEND