找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 6007|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

AVR單片機(jī)定時(shí)器1 CTC模式A實(shí)驗(yàn)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:26188 發(fā)表于 2015-6-23 15:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
/*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);


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表