1 实验目的 通过实验,掌握定时器的使用方法。着重掌握定时中断的使用! 2 实验内容- 使用Mega16单片机的timer0产生1ms间隔的定时中断(建议采用application builder,既可以用Normal工作模式也可以使用CTC模式),(1)在定时中断中实现4位数码管的动态刷新。(2)在1ms的定时中断中设计100mS的时间标志位,在主程序中查询时间标志位,实现LED闪烁。
2、 重新配置TImer0工作在PWM模式,用按键改变PWM的占空比,调节电机转速; 3 实验预习要求仔细阅读教材中定时中断的范例; 4 实验步骤1、启动ICCAVR,创建一个工程文件,配置timer0,实现10ms的定时中断,采用Application Builder来生成初始化代码。注意:本次实验使用的IO口也要初始化,包括数码管驱动所使用的IO,按键等。 2、在定时中断中实现四位数码管的定时刷新(注:要使用上次实验课的HC595的驱动),并在定时中断中实现100ms的时间标志(时标),在主程序中查询时标,实现led(PORTC口任何一个LED都可)闪烁; 3、重新配置TImer0工作在PWM模式,初始占空比设置为10%,然后使用按键INT1(在原理图中为SW8,连接到了单片机的PD3引脚上』来改变占空比,例如每按一次按键,占空比增加10%。 注:实验中要使用的管脚有:PD4、PD5、PD6、PD7、PB0、PB1、PA0,PD3,各管脚连接请参照原理图。
实验三 定时器应用实验
| 1 实验目的 通过实验,掌握定时器的使用方法。着重掌握定时中断的使用! 2 实验内容 1、使用Mega16单片机的timer0产生1ms间隔的定时中断(建议采用application builder,既可以用Normal工作模式也可以使用CTC模式),(1)在定时中断中实现4位数码管的动态刷新。(2)在1ms的定时中断中设计100mS的时间标志位,在主程序中查询时间标志位,实现LED闪烁。 2、重新配置TImer0工作在PWM模式,用按键改变PWM的占空比,调节电机转速; 3 使用Mega16单片机的timer0产生1ms间隔的定时中断(建议采用application builder,既可以用Normal工作模式也可以使用CTC模式),写出采用的工作模式,以及定时器各个寄存器的值。 |
- #include <iom16v.h>
- #include <macros.h>
- void port_init(void)
- {
- PORTA = 0x00;
- DDRA = 0x00;
- PORTB = 0x00;
- DDRB = 0x00;
- PORTC = 0x00; //m103 output only
- DDRC = 0x00;
- PORTD = 0x00;
- DDRD = 0x00;
- }
- //TIMER0 initialize - prescale:8
- // WGM: CTC
- // desired value: 1000Hz
- // actual value: 992.063Hz (-0.8%)
- void timer0_init(void)
- {
- TCCR0 = 0x00; //stop
- TCNT0 = 0x83; //set count计数
- OCR0 = 0x7D; //set compare匹配
- TCCR0 = 0x0A; //start timer
- }
- //call this routine to initialize all peripherals
- void init_devices(void)
- {
- //stop errant interrupts until set up
- CLI(); //disable all interrupts
- port_init();
- timer0_init();
- MCUCR = 0x00;
- GICR = 0x00;
- TIMSK = 0x00; //timer interrupt sources
- SEI(); //re-enable interrupts
- //all peripherals are now initialized
- }
复制代码
4 在定时中断中实现4位数码管的动态刷新。(只写出定时中断相关的代码,本部分要借用上次实验课实现的HC595的驱动函数)
5、在1ms的定时中断中设计1000mS的时间标志位,在主程序中查询时间标志位,秒表功能。(只写定时中断服务程序和实现秒表的功能代码)
完整的Word格式文档51黑下载地址:
实验三 定时器实验.doc
(62 KB, 下载次数: 13)
|