LGT8F08A用T0产生PWM(基于IAR)
本帖最后由 xsh2005105326 于 2012-4-23 23:12 编辑IAR版本为5.11B,代码见附件
//#include <iom164p.h>
//#include <iolgt8f0xa.h>
#include <iolgt8f0xa_full.h>
#include<intrinsics.h>
#define u8 unsigned char
#define u16 unsigned int
void port_init(void);
void delay_nms(u16 n);
void time0_init(void);
void main(void)
{
u8 i,temp;
port_init();
time0_init();
while(1)
{
temp = 0x03;
for(i=0;i<8;i++)
{
PORTA = temp;
delay_nms(10);
temp<<=1;
}
}
}
/******************************************************************************
函 数 名:void port_init(void)
功 能:IO初始化
说 明:
参 数:
返 回 值:
*******************************************************************************/
void port_init(void)
{
PORTA=0x00;
DDRA=0xFF;
PORTC|=0x40;
DDRC = 0x40;//PC6 for output
}
/******************************************************************************
函 数 名:void time0_init(void)
功 能:T0初始化
说 明:
参 数:
返 回 值:
*******************************************************************************/
void time0_init(void)
{
TCCR0A = 0x40;
TCCR0B = 0x02;//FPWM,F=CLK/8;
TCNT0 = 0x11;
OCR0A = 0xdd;//编程手册是OCR0
}
/******************************************************************************
函 数 名:void delay_nms(u16 n)
功 能:延时
说 明:
参 数:
返 回 值:
*******************************************************************************/
void delay_nms(u16 n)
{
u16 i;
for(;n>0;n--)
{
for(i=0;i<10;i++)
{
__delay_cycles(8000);
}
}
}
代码中OCR0A = 0xdd;//编程手册是OCR0
在头文件里面定义的是OCR0A,但是手册里面却是OCR0,不解。
同时T0相应几个寄存器的地址我也搞不明白,如下图
谁能解释下?
-------------------------------------------
------------------------------------------
我上面的代码不能改变占空比及频率(只能通过分配来改)。 mark 关注... PWM有CTC,快速PWM,相位修正PWM三个输出模式,如果是CTC模式那就只能是方波,只能调频率。 logicgreen 发表于 2012-4-23 23:15 static/image/common/back.gif
PWM有CTC,快速PWM,相位修正PWM三个输出模式,如果是CTC模式那就只能是方波,只能调频率。 ...
嗯,谢谢回复,只是我上面红色的字体部分还是不太明白。晚上回去再试试 本帖最后由 LGT 于 2012-4-24 09:54 编辑
1. OCR0是我们没有统一, OCR0和OCR0A是指同一个寄存器。 我们会统一为OCR0A (与164A一致)。多谢提醒。
2. 楼主所指的地址是不是指一个寄存器有两个地址? 比如OCR0 :$47($27) ?
I/O空间是同时映射到数据存储空间的。 地址$27是OCR0在I/O空间的地址, 用IN/OUT访问时的地址
地址$47是OCR0在数据存储器空间的地址, 用LD/ST访问的地址
如果是使用C编程, 可以不用考虑这个地址区别。 LGT 发表于 2012-4-24 09:45 static/image/common/back.gif
1. OCR0是我们没有统一, OCR0和OCR0A是指同一个寄存器。 我们会统一为OCR0。多谢提醒。
2. 楼主所指的地址 ...
{:lol:} 谢谢您的解答
页:
[1]