搜索
bottom↓
回复: 5

LGT8F08A用T0产生PWM(基于IAR)

[复制链接]

出0入0汤圆

发表于 2012-4-23 23:08:17 | 显示全部楼层 |阅读模式
本帖最后由 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相应几个寄存器的地址我也搞不明白,如下图


谁能解释下?
-------------------------------------------
------------------------------------------
我上面的代码不能改变占空比及频率(只能通过分配来改)。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2012-4-23 23:11:58 | 显示全部楼层
mark 关注...

出0入0汤圆

发表于 2012-4-23 23:15:43 | 显示全部楼层
PWM有CTC,快速PWM,相位修正PWM三个输出模式,如果是CTC模式那就只能是方波,只能调频率。

出0入0汤圆

 楼主| 发表于 2012-4-24 08:33:45 | 显示全部楼层
logicgreen 发表于 2012-4-23 23:15
PWM有CTC,快速PWM,相位修正PWM三个输出模式,如果是CTC模式那就只能是方波,只能调频率。 ...

嗯,谢谢回复,只是我上面红色的字体部分还是不太明白。晚上回去再试试

出0入0汤圆

发表于 2012-4-24 09:45:01 | 显示全部楼层
本帖最后由 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编程, 可以不用考虑这个地址区别。

出0入0汤圆

 楼主| 发表于 2012-4-24 09:53:01 | 显示全部楼层
LGT 发表于 2012-4-24 09:45
1. OCR0是我们没有统一, OCR0和OCR0A是指同一个寄存器。 我们会统一为OCR0。多谢提醒。
2. 楼主所指的地址 ...

谢谢您的解答
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-13 01:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表