历史上的今天
返回首页

历史上的今天

今天是:2025年06月21日(星期六)

2018年06月21日 | AVRmega16通过一个定时器实现多路IO口输出多路可调的PWM

2018-06-21 来源:eefocus

       本人在做舞蹈机器人时,想到了通过一个定时器实现多路IO口输出多路可调的PWM,用于控制舞蹈机器人各部分的舵机。这个方法比较简洁而且实现自己的要求,且易于理解。
      /*角度值:15度500us(10)——215度2500us(50)
 端口A0——A5   B0——B5    C0——C5   */
#include
#include
#define uint unsigned int
#define uchar unsigned char 
#define dt 70
#define sp 18
#pragma interrupt_handler  timer0:10
#pragma interrupt_handler timer1:9
uint base0=0,base1=0;
uchar i,k;
uint j=0;
uchar  s[18]={14,15,14,2,17,13,13,13,5,14,12,5,14,6,8,17,12,14};
uchar  std[18]={14,6,14,2,14,13,13,13,5,5,12,5,14,6,10,17,12,12};
void  chushi()                                                                                                                                      
{
 uchar i;
 for(i=0;i<18;i++)
    s[i]=std[i];
}
void timer_init()  //中断初始化
{                                 
  TCNT1H=0XFF;      //定时器1 初始化
TCNT1L=0XD2;       //0.05ms定时初值,准确
TCCR1B=0X02;       //8分频



    TCCR0=0X02;//计数器0 8分频
    TCNT0=0XD2;//计数器0 50us中断一次
    TIMSK=0X05;//开启中断溢出中断0
    SREG=0X80;//开启总中断 
}
void main()
{
        chushi();
timer_init();
}
void timer0()//每50us中断一次产生占空比可调的pwm
{
  
  TCNT0=0XD2;//计数器0 50us中断一次
  base0++;
if(base0==378)
     {   base0=0;
  PORTA=0xff;
  PORTC=0xff;
     } 
for(i=0;i<12;i++)//A口 s[0]——s[5] C口 s[6]——s[11]端口输出脉冲
  {
    if(i<=5)
    {
          if(base0==s[i])
      PORTA&=~BIT(i); 
    }
    if(i>5)
    {
          if(base0==s[i])
  {
    j=i-6;
      PORTC&=~BIT(j); 
  }
    }
     } 
}




void timer1(void)
{
   
     TCNT1H=0XFF;
TCNT1L=0XD2;      //重装初值

base1++;
if(base1==378)
     {   base1=0;
PORTB=0xff;

for(k=12;k<18;k++)   //B  口S[12]——s[17]
{
        if(base1==s[k])
{

推荐阅读

史海拾趣

Data Device Corporation公司的发展小趣事

DDC始终坚持以客户为中心的经营理念,不断倾听客户需求,为客户提供优质的产品和服务。为了保持技术领先地位,DDC不断投入研发,推动产品创新。同时,DDC还建立了完善的客户服务体系,确保客户在使用过程中能够得到及时、有效的支持。这些举措使得DDC在客户中赢得了良好的口碑,为公司的发展奠定了坚实的基础。

AntennaHome公司的发展小趣事

随着5G技术的快速发展,电子行业迎来了新的变革。AntennaHome公司面临着来自行业内外的巨大挑战。为了应对这一变革,公司加大了对5G天线技术的研发力度,同时积极调整产品结构和市场策略。经过一段时间的努力,公司成功推出了多款适应5G时代需求的新型天线产品,为公司的持续发展奠定了坚实的基础。

American Technical Ceramics (ATC)公司的发展小趣事

随着公司产品的不断升级和优化,AntennaHome逐渐引起了国际大厂的注意。一家知名通信设备制造商看中了公司产品的技术优势和稳定性能,主动提出合作意向。经过多轮谈判,双方达成了合作协议,AntennaHome的产品开始进入国际市场,公司的业务规模也随之迅速扩大。

Crane Connectors公司的发展小趣事

Crane Connectors公司自创立之初,便致力于电子连接器技术的研发与创新。面对激烈的市场竞争,公司不断投入研发资源,推出了一系列具有自主知识产权的新型连接器产品。这些产品凭借出色的性能、稳定性和可靠性,迅速获得了市场的认可,为公司赢得了大量订单。随着技术的不断升级和产品的持续优化,Crane Connectors逐渐在电子连接器领域树立了良好的品牌形象,实现了市场的快速扩张。

First Sensor公司的发展小趣事

在日益严峻的环保形势下,Crane Connectors公司积极响应国家环保政策,将绿色环保理念融入企业的生产经营活动中。公司采用环保材料和节能技术,减少生产过程中的污染物排放和资源消耗。同时,公司还加强废弃物的回收和处理工作,实现资源的循环利用。这些环保举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

Elite公司的发展小趣事

进入21世纪后,电子行业迎来了新的发展机遇和挑战。面对行业内的激烈竞争和技术的快速迭代,Elite意识到必须加快转型升级步伐。公司开始涉足智能家居、物联网等新兴市场领域,并成功推出了一系列具有竞争力的产品。这些新产品不仅为公司带来了新的增长点,也进一步巩固了Elite在电子行业的领先地位。

问答坊 | AI 解惑

用PIC单片机实现的IC卡读写器

详细介绍PIC单片机使用SPI方式与IC卡进行数据传输的原理和电路设计,以及使用USART方式与PC机进行串行异步通信的工作原理;介绍PIC单片机听SPI方式和USART方式的设置方法。…

查看全部问答>

TJA1020 LIN 收发器手册

TJA1020 是LIN 主/从协议控制器和LIN Local Interconnect Network 物理总线之间的接口主要用作为车辆中的副网络使用的波特率可从2.4 到20Kbits/s协议控制器向TXD 引脚输入的传输数据流通过LIN 收发器转换成总线信号并由收发器控制回转速率和波形以 ...…

查看全部问答>

低能耗无线技术在医疗领域的应用

介绍 在分析应用技术被市场采纳比重的时候,处于人类科学前沿的医疗器械市场,总是显得保守和谨慎。当其他工业和消费类市场沉浸于无线连接、网络及英特网的潜在应用时,医疗领域仍继续采用传统的已经测试使用的技术。然而诸如人口老龄化、高涨的医 ...…

查看全部问答>

WINCE下面ST16C554串口驱动开发

平台:AU1250(MIPS) 系统:WINCE 5.0 开发基于AU1250+WINCE 5.0下面的ST16C554驱动,做过类似的项目的朋友加我: QQ:525074092 MSN: zhaozw1975@hotmail.com …

查看全部问答>

BinFS和Multi-BIN

大家几年前搞的东东,我现在才弄,而且还有很多不懂,真是惭愧。 我有几个问题想请教各位大虾。 1.采用Multi-Bin方式启动WinCE,Bootloader是否只能用eBoot。 2.若不是,其他的Bootloader势必要解决BinFS格式化的问题,请问哪位有BinFS文件系统 ...…

查看全部问答>

关于unsigned char和unicode转换的问题

我定义了一个uchar[1]数组,其中uchar[0]保存一个汉字unicode编码值的高8位,uchar[1]保存这个汉字unicode编码值的低8位, 请问如何把这两个字节合并出一个完整的汉字unicode编码值?…

查看全部问答>

PC机USB驱动求解?

我在网上发现针对不同的USB产品,需要开发不同的驱动; 我是做上位机程序的,我只需要通过USB传输通信数据(采集温度数据),想请教: 1) 一些USB芯片生产商或代理商会提供上位机的USB驱动吗(例如 philips,周立功会提供USB驱动吗); 2) 例如需要自己做 ...…

查看全部问答>

wince contact和calendar的数据读取

小弟刚接触wince,需要读取这两项数据发送,请问有什么办法可以获得, 先谢过了…

查看全部问答>

如何采用Verilog实例化带参数(generic)的VHDL模块

请教一个问题:Verilog中实例化一个带参数的VHDL模块:VHDL模块如下:entity x is  generic(a,b : integer);  port(  ...Verilog调用采用如下两种方式:方式1:  genvar i,j;  generate  & ...…

查看全部问答>

求M16与光强传感器TSL2561,怎么去设置读写地址

写M16与光强传感器TSL2561的程序,该怎么去设置TSL2561的读写地址(TSL2561_WR,TSL2561_RD)我看有用51的程序是自己设置的,不知道在m16上怎么设置,下面是TSL2561资料上的程序,不知道怎么去设置TSL2561_WR,TSL2561_RD的地址,求指教 void TSL2 ...…

查看全部问答>