怎样设计一个周期为10s,占空比为50%的方波输出信号?
1个回答
展开全部
不知道是不是用的51系列,如果是51:
用C语言实现的,先要定义好定时器的初值
不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期
机器周期=12/n(n指晶振频率),假设你要定时的时间为M
那么定时的初值为:
M/机器周期=初值;
TH0=(65536-初值)%256;
TL0=(65536-初值)/256;
将(65536-初值)所得的值化成16进制,其高位就是TH0的值,低位为TL0的值,数值65536代表可以计数65536us。
假设中断时间为1ms,也即
65536-1000=64536化为16进制为:0xFC18
TH0=0xFC;
TL0=0X18;
这样的话中断部分程序:
#include<reg51.h>
sbit P0_0=P0^0; //输出方波端口
unsigned int num,count;
void main()
{
TMOD=0x1; //T0,工作方式1
TH0=0xFC; //1ms定时
TL0=0X18;
TR0=1; //开启T0定时器
ET0=1; //允许T0定时器中断
EA=1; //开启总中断允许
P0_0=0;
num=0; //被显示的数置0
while(1) //一直调用显示,等待T0中断修改显示数据
{
if (num ==0)
P0_0=1;
if (num ==1)
P0_0=0;
}
}
void time0(void) interrupt 1
{
TH0=0xFC; //1ms定时
TL0=0X18;
count++;
if (count ==1000)
num = !num;
}
用C语言实现的,先要定义好定时器的初值
不管你使用多大的晶振,使用51单片机,一般都是12分频出来,也就可以得出一个机器周期
机器周期=12/n(n指晶振频率),假设你要定时的时间为M
那么定时的初值为:
M/机器周期=初值;
TH0=(65536-初值)%256;
TL0=(65536-初值)/256;
将(65536-初值)所得的值化成16进制,其高位就是TH0的值,低位为TL0的值,数值65536代表可以计数65536us。
假设中断时间为1ms,也即
65536-1000=64536化为16进制为:0xFC18
TH0=0xFC;
TL0=0X18;
这样的话中断部分程序:
#include<reg51.h>
sbit P0_0=P0^0; //输出方波端口
unsigned int num,count;
void main()
{
TMOD=0x1; //T0,工作方式1
TH0=0xFC; //1ms定时
TL0=0X18;
TR0=1; //开启T0定时器
ET0=1; //允许T0定时器中断
EA=1; //开启总中断允许
P0_0=0;
num=0; //被显示的数置0
while(1) //一直调用显示,等待T0中断修改显示数据
{
if (num ==0)
P0_0=1;
if (num ==1)
P0_0=0;
}
}
void time0(void) interrupt 1
{
TH0=0xFC; //1ms定时
TL0=0X18;
count++;
if (count ==1000)
num = !num;
}
光点科技
2023-08-15 广告
2023-08-15 广告
通常情况下,我们会按照结构模型把系统产生的数据分为三种类型:结构化数据、半结构化数据和非结构化数据。结构化数据,即行数据,是存储在数据库里,可以用二维表结构来逻辑表达实现的数据。最常见的就是数字数据和文本数据,它们可以某种标准格式存在于文件...
点击进入详情页
本回答由光点科技提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询