单片机ATmega128输出PWM信号吗

作者&投稿:贺固 (若有异议请与网页底部的电邮联系)
单片机ATmega128有6路分辨率可编程(2 到16 位)的PWM,可以输出3对频率可调的PWM波形。

可以输出..单片机随便一个口都可以输出PWM

ATmega32、ATmega64、ATmega128 这三种单片机可以同时输出两种不同频率的PWM信号吗。~

频率随程序可以变,但同时输出2种频率,是不行的。你想想都知道啦。

#include //头文件
#define uchar unsigned char
#define uint unsigned int
sbit KEY1= P3^4; //定义按钮
sbit KEY2= P3^5; //定义按钮
sbit PWM= P1^7;//PWM输出的管脚定义
#define PERIOD 1000 //pwm周期
#define MIN_POSITIVE 100 //最小占空比100/1000
#define MAX_POSITIVE 900 //最大占空比900/1000
#define STEP 10 //步长

uint POSITIVE=MIN_POSITIVE;

void delay(uint i)//延时函数
{
while(--i);
}

void init_timer0()//设置定时器
{
TMOD=0X01;
TL0=(POSITIVE-PERIOD)%256;//具体怎么实现的你看一下51单片机定时器的东西,TLO,THO。
TH0=(POSITIVE-PERIOD)/256;
ET0=1;
}


void init_timer1() // 初始化定时器
{
TMOD|=0X10;
TL1=(0-POSITIVE)%256;
TH1=(0-POSITIVE)/256;
ET1=1;
EA=1;
}

void TIMER0_ISR(void)interrupt 1 //中断响应函数
{
TL0=(POSITIVE-PERIOD)%256;
TH0=(POSITIVE-PERIOD)/256;
TR0=0;
TR1=1;
PWM=0;
}

void TIMER1_ISR(void)interrupt 3 //中断响应函数
{
TL1=(0-POSITIVE)%256;
TH1=(0-POSITIVE)/256;
TR1=0;
TR0=1;
PWM=1;
}

void key_scan() 按钮扫描函数
{
uint step=0;
step=(PERIOD-MIN_POSITIVE-100)/STEP;
KEY1=1;
KEY2=1;
if(KEY1==0||KEY2==0)
{
delay(100);
if(KEY1==0)
{
POSITIVE+=step;
if(POSITIVE>MAX_POSITIVE)
POSITIVE=MAX_POSITIVE;
}
if(KEY2==0)
{
POSITIVE-=step;
if(POSITIVE<MIN_POSITIVE)
POSITIVE=MIN_POSITIVE;
}
while(KEY1==0||KEY2==0);
}
}

void main() //主函数
{
init_timer0();
init_timer1();
TR0=1;
while(1)key_scan();
}
//这里的意思就是高电平使用一个定时器,低电平使用一个定时器,其实可以使用一个定时器就可以完成这个任务。他的左右只是1ms响应一个中断,然后计数。
/****************************************/
#include
#define TIMER0_COUNT 0xFC18 //每秒中端1000次
unsigned long int m,a;

static void timer0_isr(void) interrupt 1 using 1
{
TR0=0;
TL0=(TIMER0_COUNT & 0x00FF);
TH0=(TIMER0_COUNT >> 8);
TR0=1;
m++;
}
static void timer0_initialize(void)
{
EA=0; /* 设定系统不接受所有的中断 */
m=0;
TR0=0; /* 关闭Timer0 */
TMOD =0x01; /* 设定计时器0为16位的工作模式 */
TL0=(TIMER0_COUNT & 0x00FF); /* 设定TL0的数值 */
TH0=(TIMER0_COUNT >> 8); /* 设定TH0的数值 */
PT0=0; /* 设定计时器0有比较高的优先级 */
ET0=1; /* 设定接受Timer0的中断 */
TR0=1; /* 启动Timer0 */
EA=1; /* 设定系统接受中断 */
}

void main (void)
{
timer0_initialize();
P2_0=0;
P2_1=1;
P3_0=0;
P3_1=1;

a=25;
while(1)
{
if(m==a)
{
P2_2=0;
P3_2=0;
}
if(m==50)
{
P2_2=1;
P3_2=1;
m=0;
}
}
}
/****************************************/
这是我之前写的程序,你看看吧。希望对你有帮助,这个好理解点

Atmega128的外设特点
答:– 两个具有独立的预分频器和比较器功能的8 位定时器/ 计数器– 两个具有预分频器、比较功能和捕捉功能的16 位定时器/ 计数器– 具有独立预分频器的实时时钟计数器–两路8 位PWM– 6路分辨率可编程(1 到16 位)的PWM– 输出比较调制器– 8路10 位ADC8 个单端通道7 个差分通道2 个具有可编...

atmega128 开发板怎么用?准备学习
答:ATmega128最小系统板是由一片ATmega128构成的最小可运行的基本系统板(图4.5),它包括上电复位电路、电源指示、外部16MHz晶体、ISP下载接口和JTAG接口,ATmega128所有外部引脚均通过低部四面的DIP双排插针引出。只要连接+5V和地接通电源,用户就可以通过ISP接口将编写好的程序下载到最小系统板上的ATmega128...

Mega128A芯片解密哪里可以做?
答:–输出比较调制器 –8路10位ADC8个单端通道7个差分通道2个具有可编程增益(1x, 10x, 或200x)的差分通道 –面向字节的两线接口 –两个可编程的串行USART –可工作于主机/从机模式的SPI串行接口 –具有独立片内振荡器的可编程看门狗定时器 –片内模拟比较器 •特殊的处理器特点 –上电复位...

...跟着吴鉴鹰单片机开发板学完了51和AVR(ATmega128)单片机,下一步干嘛...
答:下一步当然是学32位单片机ARM,建议不要学16位单 片机

我想ATmega16开发板知识,不知道应该从哪里入手好,应该怎么学习呢?请...
答:ATmega128最小系统板是由一片ATmega128构成的最小可运行的基本系统板(图4.5),它包括上电复位电路、电源指示、外部16MHz晶体、ISP下载接口和JTAG接口,ATmega128所有外部引脚均通过低部四面的DIP双排插针引出。只要连接+5V和地接通电源,用户就可以通过ISP接口将编写好的程序下载到最小系统板上的ATmega128...