实验三实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[实验三]定时器的应用

[实验目的]

1.结合定时/计数器的应用,更深入的了解AVR中断系统原理,响应过程,以及中断服务

程序的编写。

2.掌握定时器的基本应用,了解定时器的各种用途

[基本实验内容]:

根据需要给出电原理图和程序清单。

1.了解CTC的用途,通过定时器的CTC实现LED的定时闪烁,定时时间1S。

/*****************************************************

Chip type : ATmega16

Program type : Application

Clock frequency : 4.000000 MHz

Memory model : Small

External SRAM size : 0

Data Stack size : 256

*****************************************************/

#include

bit time_1s_ok=0;

int time_counter=0;

interrupt [TIM0_COMP] void timer0_comp_isr(void)

{

if(time_counter>=500)

{time_counter=0;

time_1s_ok=1;

}

}

void main(void)

{

PORTC=0x01; // 显示控制I/O口初始化

DDRC=0x01;

TCCR0=0x0B; //内部时钟,64分频

TCNT0=0x00;

OCR0=0x7C;

//OCR0=0x7c(124),(124+1)/62.5KHz=2ms

TIMSK=0x01; //允许T/C0比较比配中断

#asm("sei")

while (1)

{

if(time_1s_ok){

time_1s_ok=0;

PORTC=~PORTC;

}

};

}

2.阅读器件手册,查阅定时器相关寄存器,通过使用定时器改写P188页的例6.7中的点阵LED箭头移动程序。箭头运动速度保持与原来相同。

/*********************************************

Chip type : ATmega16

Program type : Application

Clock frequency : 4.000000 MHz

Memory model : Small

External SRAM size : 0

Data Stack size : 256

*********************************************/

#include

#define row 12

#define speed 25*8 //移动速度调节

flash unsigned char char_7[row]={0x10,0x38,0x7C,0xFE,0x38,0x38,0x38,0x38,0x 00,0x00,0x00,0x00};

bit time_1ms_ok;

unsigned char dis_buff[8];

interrupt [TIM0_COMP] void timer0_comp_isr(void) // 1ms 中断一次

{

time_1ms_ok = 1;

}

void display(void)

{

static unsigned char i;

PORTC = 0xFF;

PORTA = dis_buff[i];

PORTC = ~(1<

if (++i>= 8 ) i = 0;

}

void main(void)

{

unsigned char move_speed,i,j;

PORTA=0x00;

DDRA=0xFF;

PORTC=0xFF;

DDRC=0xFF;

// Timer/Counter 0 initialization

// Clock source: System Clock,Clock value: 62.500 kHz

// Mode: CTC top=OCR0, OC0 output: Disconnected

TCCR0=0x0B;

TCNT0=0x00; OCR0=0x3D;

TIMSK=0x02; //允许T/C0 CTC中断

#asm("sei") // 开全局中断

for (i=0;i<=8;i++) {dis_buff[i] = char_7[i];}

j = 8;

while (1)

{

if (time_1ms_ok)

{ time_1ms_ok = 0;

display();

if (++move_speed>= speed)

{

move_speed = 0;

for (i=0;i<=6;i++)

{

dis_buff[i] = dis_buff[i+1];

}

if (++j>= row) j = 0;

dis_buff[7] = char_7[j];

}

}

}p

}

相关文档
最新文档