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