標(biāo)題: AVR單片機(jī)定時(shí)器1 CTC模式A實(shí)驗(yàn)程序 [打印本頁]

作者: hujia    時(shí)間: 2015-6-23 15:08
標(biāo)題: AVR單片機(jī)定時(shí)器1 CTC模式A實(shí)驗(yàn)程序
/*AVR定時(shí)器1CTC模式A實(shí)驗(yàn)      天津第四項(xiàng)目部宿舍  */

#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()//定時(shí)計(jì)數(shù)器1CTC中斷A通道
{

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

}
#pragma interrupt_handler time1ctc_b_isr:8
void time1ctc_b_isr()//定時(shí)計(jì)數(shù)器1CTC中斷B通道
{

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

}
void int_time1ctc_a_b()//定時(shí)器1設(shè)置初始化
{
   SREG=0x80;//開啟全局中斷
   
   
    TCNT1=0;//這里我采用RC震蕩8M時(shí)鐘,1024分頻,一個(gè)數(shù)是7.8125微秒

  TCCR1A=0x40;//工作在CTC模式,開啟A通道,關(guān)閉B通道,在外部引腳OC1A/OC1B體現(xiàn)為取反事件,
  TCCR1B=0x0D;//CTC模式,內(nèi)部8M1024分頻,
  OCR1A=6000;//CTC精度A通道
  /*在這里一定要注意A通道和B通道不能同時(shí)開啟,否則有兩種情況,第一OCR1A>OCR1B時(shí)出現(xiàn)很不正常的現(xiàn)象,兩個(gè)中斷好像都發(fā)生了*/
  /*怎么可能呢,當(dāng)TCNT1=OCR1A時(shí)就會(huì)吧TCNT1清零,也就是說OCR1B永遠(yuǎn)不會(huì)觸發(fā)中斷,但是他的引腳確實(shí)是動(dòng)了,而且與A通道的正好相反,*/
  /*是什么原因?我分析過,但是無果,所以要注意AB通道同時(shí)開啟的后果是不可知的,還有一種情況就是OCR1A<OCR1B,這種情況就和我分析的*/
  /*一樣了,OCR1A中的中斷永遠(yuǎn)不會(huì)執(zhí)行,只會(huì)執(zhí)行OCR1B的中斷,因?yàn)樗惹罢咝。有幾次輸出為高電平,所以我認(rèn)為在同時(shí)開啟AB通道時(shí)是不穩(wěn)定的,*/
  /*第一種原因真是令人費(fèi)解。。。。!20110418  */
   TIMSK=0x10;//開啟定時(shí)器比較匹配輸出A通道中斷
  
}
void main()
{
DDRD=0xff;
DDRC=0xff;
PORTC=0;
int_time1ctc_a_b();
while(1);







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1