4682|0

367

帖子

0

TA的资源

裸片初长成(高级)

楼主
 

基于TC1的16位PWM输出程序 [复制链接]

/******************************************** * TC1产生16位双路PWM * * 实验内容:由TC1产生两路独立的16位PWM输出 * * 实验环境:本站M16学习板 * * 日 期:2007年08月16日 * * 作 者:tonghe * * 版 本:V1.0 * * 修改日期:2007年08月16日 * * 芯 片:M16 * * 工作频率:内部8M * * 编 译 器:ICCAVR 6.31A * * 输 出:PD4输出PWMB,PD5输出PWMA * * 产生的PWM频率为8M/65536约122HZ * ********************************************/ #include <iom16v.h> #include <macros.h> //延时函数:入口time 需延时的MS数 void delay_ms(unsigned int time) { unsigned char c; for(;time;time--) { for(c=220;c;c--) { ; } } } //端口初始化 void port_init(void) { PORTA = 0xFF; DDRA = 0x00; PORTB = 0xFF; DDRB = 0xFF; PORTC = 0x00; DDRC = 0x00; PORTD = 0x00; DDRD = 0x30; } //TC1初始化 void timer1_init(void) { TCCR1A = 0xA2; //两路PWM,匹配清零 TCCR1B = 0x19; //快速PWM模式,位数可调,预分频1 ICR1 = 0xFFFF; //计数上限值,此数为16位PWM } //器件初始化 void init_devices(void) { port_init(); //端口初始化 timer1_init(); //TC1初始化 MCUCR = 0x00; GICR = 0x00; } //主函数 void main(void) { unsigned int a=32768,b=32768; init_devices(); //器件初始化 OCR1A=a; //匹配初值 OCR1B=b; while(1) { a-=10; //两个值向不同方向变化 b+=10; //PWMA宽度减小,PWMB宽度增加 if(a<=20) //上下限 { a=65530; b=5; } OCR1A=a; OCR1B=b; delay_ms(20); }
此帖出自单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表