定时器输出PWM实验

单片机实验

27人已加入

描述

定时器输出PWM 实验

一. 实验目的
利用定时器控制产生占空比可变的PWM 波。
二. 实验设备及器件
IBM PC 机 一台
DP-51PROC 单片机综合仿真实验仪 一台
示波器 一台
三. 实验内容
编写一段程序,用P1.0 口输出PWM 波,用D1 区的按键KEY1 和KEY2 实现占
空比的增加和降低。用示波器查看P1.0 口的输出波形。
四. 实验要求
学会使用单片机的定时器产生250Hz 的PWM 波。
五. 实验步骤
1. 用导线连接A2 区的P11 与D1 区的KEY1。
2. 用导线连接A2 区的P12 与D1 区的KEY2。
3. 将示波器的探针连接到A2 区的P10。
4. 用示波器观测P1.0 口的PWM 波形。
六. 实验预习要求
认真阅读本节的实验内容,提前做好实验准备工作。
七. 实验参考程序
PWMH DATA 30H ;高电平脉冲的个数
PWM DATA 31H ;PWM周期
COUNTER DATA 32H
TEMP DATA 33H
ORG 8000H
AJMP MAIN
ORG 800BH
AJMP INTT0
ORG 8100H
MAIN:
MOV SP,#60H ;给堆栈指针赋初值
MOV PWMH,#02H
MOV COUNTER,#01H

MOV PWM,#15H
MOV TMOD,#02H ;定时器0 在模式2 下工作
MOV TL0,#38H ;定时器每200us 产生一次溢出
MOV TH0,#38H ;自动重装的值
SETB ET0 ;使能定时器0 中断
SETB EA ;使能总中断
SETB TR0 ;开始计时
KSCAN:
JNB P1.1,K1CHECK ;扫描KEY1,
JNB P1.2,K2CHECK ;扫描KEY2,如果按下KEY2,跳转到KEY2 处理
程序
SJMP KSCAN
K1CHECK:
JB P1.1,K1HANDLE ;去抖动,按下KEY1,跳转到KEY1 处理程序
SJMP K1HANDLE
K1HANDLE:
MOV A,PWMH
CJNE A,PWM,K1H0 ;判断是否到达上边界
SJMP KSCAN ;是,则不进行任何操作
K1H0:
MOV A,PWMH
INC A
CJNE A,PWM,K1H1 ;如果在加1 后到达最大值
CLR TR0 ;定时器停止
SETB P1.0 ;置P1.0 为高电平
SJMP K1H2
K1H1:
CJNE A,#02H,K1H2 ;如果加1 后到达下边界
SETB TR0 ;重开定时器
K1H2:
INC PWMH ;增加占空比
SJMP KSCAN
K2CHECK:
JB P1.2,K2HANDLE ;去抖动,按下KEY2,跳转到KEY2 处理程序
SJMP K1HANDLE
K2HANDLE:
MOV A,PWMH
CJNE A,#01H,K2H0 ;判断是否到达下边界
SJMP KSCAN ;是,则不进行任何操作
K2H0:
MOV A,PWMH
MOV TEMP,PWM
DEC A

CJNE A,#01H,K2H1 ;如果在减1 后到达下边界
CLR TR0 ;定时器停止
CLR P1.0 ;置P1.0 为低电平
SJMP K2H2
K2H1:
DEC TEMP
CJNE A,TEMP,K2H2 ;如果到达上边界
SETB TR0 ;启动定时器
K2H2:
DEC PWMH ;降低占空比
SJMP KSCAN
INTT0:
PUSH PSW ;现场保护
PUSH ACC
INC COUNTER ;计数值加1
MOV A,COUNTER
CJNE A,PWMH,INTT01 ;如果等于高电平脉冲数
CLR P1.0 ;P1.0 变为低电平
INTT01:
CJNE A,PWM,INTT02 ;如果等于周期数
MOV COUNTER,#01H ;计数器复位
SETB P1.0 ;置P1.0 为高电平
INTT02:
POP ACC ;出栈
POP PSW
RETI;
END
八. 实验思考题
(1)请用户思考一下,用另一种方式实现定时器产生PWM 波。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分