找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5273|回复: 0
收起左侧

AVR单片机定时器1 CTC模式A实验程序

[复制链接]
ID:26188 发表于 2015-6-23 15:08 | 显示全部楼层 |阅读模式
/*AVR定时器1CTC模式A实验      天津第四项目部宿舍  */

#include <iom16v.h>
#define uchar unsigned char
#define uint unsigned int
#define set_bit(a,b)  a|=(1<<b)
#define clr_bit(a,b)  a&=(1<<b)
#define get_bit(a,b)  a&(1<<b)
uint i;
#pragma interrupt_handler time1ctc_a_isr:7
void time1ctc_a_isr()//定时计数器1CTC中断A通道
{

PORTC^=0x20;//输出方波T=8*2=16毫秒
     

}
#pragma interrupt_handler time1ctc_b_isr:8
void time1ctc_b_isr()//定时计数器1CTC中断B通道
{

PORTC^=0x04;//输出方波T=8*2=16毫秒

}
void int_time1ctc_a_b()//定时器1设置初始化
{
   SREG=0x80;//开启全局中断
   
   
    TCNT1=0;//这里我采用RC震荡8M时钟,1024分频,一个数是7.8125微秒

  TCCR1A=0x40;//工作在CTC模式,开启A通道,关闭B通道,在外部引脚OC1A/OC1B体现为取反事件,
  TCCR1B=0x0D;//CTC模式,内部8M1024分频,
  OCR1A=6000;//CTC精度A通道
  /*在这里一定要注意A通道和B通道不能同时开启,否则有两种情况,第一OCR1A>OCR1B时出现很不正常的现象,两个中断好像都发生了*/
  /*怎么可能呢,当TCNT1=OCR1A时就会吧TCNT1清零,也就是说OCR1B永远不会触发中断,但是他的引脚确实是动了,而且与A通道的正好相反,*/
  /*是什么原因?我分析过,但是无果,所以要注意AB通道同时开启的后果是不可知的,还有一种情况就是OCR1A<OCR1B,这种情况就和我分析的*/
  /*一样了,OCR1A中的中断永远不会执行,只会执行OCR1B的中断,因为他要比前者小,还有几次输出为高电平,所以我认为在同时开启AB通道时是不稳定的,*/
  /*第一种原因真是令人费解!!!!!!20110418  */
   TIMSK=0x10;//开启定时器比较匹配输出A通道中断
  
}
void main()
{
DDRD=0xff;
DDRC=0xff;
PORTC=0;
int_time1ctc_a_b();
while(1);


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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