设计性试验
2012年11月14日星期三 第三四节课
一、实验目的
1、掌握定时器/计数器定时功能的使用方法。 2、掌握定时器/计数器的中断、查询使用方法。 3、掌握Proteus软件与Keil软件的使用方法。 4、掌握单片机系统的硬件和软件设计方法。 二、设计要求
1、用Proteus软件画出电路原理图,单片机的定时器/计数器以查询方式工作,在P1.0口线上产生周期为200μS的连续方波,在P 1.0口线上接示波器观察波形。 2、用Proteus软件画出电路原理图,单片机的定时器/计数器以中断方式工作,在P1.1口线上产生周期为240μS的连续方波,在P 1.1口线上接示波器观察波形。 三、电路原理图
四、实验程序流程框图和程序清单及实验结果
/*********
设计要求:(a)单片机的定时器/计数器以查询方式工作, 在P1.0口线上产生周期为200us的连续方波 编写:吕小洋
说明:用定时器1的方式1以查询方式工作 时间:2012年11月10日 ***************/
ORG
0000H MAIN 0100H SP, EA ET1
#2FH
;关总中断
;禁止定时器1中断
START: LJMP
ORG
开始MAIN: MOV
CLR CLR MOV MOV MOV SETB
系统初始化TMOD, #00010000B ;设置定时器1为工作方式1 TH1, TL1, TR1 TF1, TH1, TL1, TF1 P1.0 LOOP
#0FFH ;设置计数初值 #9CH
;启动定时器 ;查询计数是否溢出
装计数初值并启动定时器定时时间到 ?Y重装计数初值清除溢出标志输出取反NLOOP: JNB
MOV MOV CLR CPL LJMP END
LOOP
#0FFH ;重置计数初值 #9CH
;清除计数溢出标志 ;输出取反 ;重复取反
/*********
设计要求:(b)单片机的定时器/计数器以查询方式工作, 在P1.0口线上产生周期为200us的连续方波 编写:吕小洋
说明:用定时器0的免装初值方式2以中断方式工作 时间:2012年11月10日
结束开始TMOD初始化***************/
ORG
0000H MAIN 000BH TTC0 0100H SP, EA ET0
#2FH
;开总中断
;定时器0允许中断
START: LJMP
ORG LJMP ORG
MAIN: MOV
SETB SETB MOV MOV MOV SETB
TMOD, #02H ;设置T0为工作方式2 TH0, TL0, TR0 HERE
#88H #88H
;设置计数初值
;启动定时器 ;等待中断
HERE: LJMP
/****中断服务程序****/
ORG
0200H P1.0
;输出取反 ;中断返回
TTC0: CPL
RETI END
五、实验总结
通过本次试验,我掌握了定时器/计数器定时功能的使用方法,能够利用定时器产生特定脉宽的波形,掌握了定时器/计数器的中断、查询使用方法。同时掌握了单片机系统的硬件和软件设计方法。加强了自己的编程能力。 六、思考题
1、在P1.0口线上产生周期为500微秒,占空比为2:5的连续矩形波。
开始/**(1)定时器0定时200us以查询方式、方式2工作, 定时器1定时300us以查询方式、方式1工作******/ ORG 0000H START: LJMP MAIN
中断初始化TMOD初始化计数初值初始化启动定时器T0定时时间到 ?YN ORG 0100H MAIN: MOV SP, #2FH
CLR EA ;关总中断
CLR ET0 ;禁止定时器0中断 CLR ET1 ;禁止定时器1中断 MOV TMOD, #00010010B ;设置工作方式 MOV TH0, #37H ;设置T0的计数初值 MOV TL0, #37H
MOV TH1, #0FEH ;设置T1的计数初值 MOV TL1, #0D4H
SETB TR0 ;启动定时器0 LOOP: JNB TF0, LOOP ;查询计数是否溢出 CPL P1.0 ;输出取反
CLR TF0 ;清除T0计数溢出标志 CLR TR0 ;关定时器0 SETB TR1 ;启动定时器1 LOOP1: JNB TF1, LOOP1
CPL P1.0 ;输出取反 MOV TH1, #0FEH ;重装计数初值 MOV TL1, #0D4H
CLR TF1 ;清除T1计数溢出标志 CLR TR1 ;关闭定时器1
SETB TR0 ;启动定时器0 LJMP LOOP ;重复循环 END
/******(2)定时器0定时200us以中断方式、方式2工作,
定时器1定时300us以中断方式工作******/
ORG 0000H START: LJMP MAIN ORG 000BH LJMP TTC0
等待中断开始中断初始化TMOD初始化计数初值初始化启动定时器T0 ORG 001BH LJMP TTC1 ORG 0100H MAIN: MOV SP, #2FH
SETB EA ;开总中断
SETB ET0 ;允许定时器0中断 开始输出取反关闭定时器T0开启定时器T1中断返回开始输出取反 SETB ET1 ;允许定时器1中断 重装定时器T1计数初值关闭定时器T1 MOV TMOD, #00010010B ;设置T0、T1都为工作方式1 MOV TH0, #38H ;设置T0的计数初值
开启定时器T0 MOV TL0, #38H
MOV TH1, #0FEH ;设置T1的计数初值 MOV TL1, #0D4H
SETB TR0 ;启动定时器0
中断返回HERE: SJMP HERE ORG 0200H
TTC0: CPL P1.0 ;输出取反 CLR TR0 ;关定时器0 SETB TR1 ;启动定时器1 RETI ORG 0300H
TTC1: CPL P1.0 ;输出取反 MOV TH1, #0FEH ;重装计数初值 MOV TL1, #0D4H
CLR TR1 ;关闭定时器1 SETB TR0 ;启动定时器0 RETI END
/******(3)定时器0定时200us以查询方式工作,
定时器1定时300us以中断方式工作******/ ORG 0000H START: LJMP MAIN ORG 001BH LJMP TTC1 ORG 0100H MAIN: MOV SP, #2FH
开始中断初始化TMOD初始化计数初值初始化启动定时器T0定时时间到 ?输出取反清除溢出标志并关T0重装定时器T0计数初值启动定时器T1 SETB EA ;开总中断
CLR ET0 ;禁止定时器0中断 SETB ET1 ;允许定时器1中断 MOV MOV MOV MOV MOV SETB LOOP: JNB CPL CLR CLR MOV MOV SETB LJMP TTC1: CPL CLR SETB MOV MOV TMOD, #00010001B ;设置T0、T1都为工作方式1 TH0, #0FFH ;设置T0的计数初值 TL0, #38H
TH1, #0FEH ;重装T1计数初值 TL1, #0D4H
TR0 ;启动定时器0
TF0, LOOP ;查询T0计数是否溢出 P1.0 ;输出取反
TF0 ;清除T0计数溢出标志 TR0 ;关定时器0 TH0, #0FFH ;重装T0计数初值 TL0, #38H
TR1 ;启动定时器1 LOOP
P1.0 ;输出取反 TR1 ;关闭定时器1 TR0 ;启动定时器0 TH1, #0FEH ;重装T1计数初值 TL1, #0D4H
RETI END
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务