📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\ICC工程\ICC_定时器T1中断实验\main.c
.area vector(rom, abs)
.org 24
0018 0C941D00 jmp _TIMER1_OVF
.area text(rom, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\ICC工程\ICC_定时器T1中断实验\main.c
0000 .dbfunc e T1_Init _T1_Init fV
.even
0000 _T1_Init::
0000 .dbline -1
0000 .dbline 17
0000 ; /*
0000 ; 实验七:
0000 ; 定时器T1中断实验。
0000 ; 1、定时器中断实验。定时器产生10mS周期中断,通过计数让PB1电平产生周期变化。
0000 ; 2、内部1 M晶振。
0000 ; 3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)短路块。
0000 ;
0000 ; AVR mega16学习板
0000 ; www.iccavr.com
0000 ; 2006-04-03
0000 ; */
0000 ;
0000 ; #include "iom8v.h"
0000 ; #include <macros.h>
0000 ; #pragma interrupt_handler TIMER1_OVF: 7
0000 ; /*初始化定时器,产生10mS周期中断*/
0000 ; void T1_Init(void) {
0000 .dbline 19
0000 ;
0000 ; OCR1A = 1250; //计数周期为10mS,F=1M 输出比较器OCR1A
0000 82EE ldi R24,1250
0002 94E0 ldi R25,4
0004 9BBD out 0x2b,R25
0006 8ABD out 0x2a,R24
0008 .dbline 20
0008 ; TIMSK |= (1 << OCIE1A); /*比较中断A允许*/
0008 89B7 in R24,0x39
000A 8061 ori R24,16
000C 89BF out 0x39,R24
000E .dbline 21
000E ; SREG = 0x80;
000E 80E8 ldi R24,128
0010 8FBF out 0x3f,R24
0012 .dbline 22
0012 ; TCCR1A = 0x00; //
0012 2224 clr R2
0014 2FBC out 0x2f,R2
0016 .dbline 23
0016 ; TCCR1B = 0x08; /*定时器工作在CTC计数器模式*/
0016 88E0 ldi R24,8
0018 8EBD out 0x2e,R24
001A .dbline 24
001A ; TCCR1B|= 0x05; /*设置定时器的分频值为8分频*/
001A 8EB5 in R24,0x2e
001C 8560 ori R24,5
001E 8EBD out 0x2e,R24
0020 .dbline -2
0020 L1:
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbend
0022 .dbfunc e main _main fV
.even
0022 _main::
0022 .dbline -1
0022 .dbline 27
0022 ; }
0022 ; void main(void)
0022 ; {
0022 .dbline 29
0022 ;
0022 ; DDRB = 0xFF; /*方向输出*/
0022 8FEF ldi R24,255
0024 87BB out 0x17,R24
0026 .dbline 30
0026 ; PORTB = 0xFF; /*电平设置*/
0026 88BB out 0x18,R24
0028 .dbline 31
0028 ; DDRC = 0x00;
0028 2224 clr R2
002A 24BA out 0x14,R2
002C .dbline 32
002C ; PORTC = 0xFF;
002C 85BB out 0x15,R24
002E .dbline 33
002E ; DDRD = 0x00;
002E 21BA out 0x11,R2
0030 .dbline 34
0030 ; PORTD = 0xFF;
0030 82BB out 0x12,R24
0032 .dbline 36
0032 ;
0032 ; T1_Init();
0032 E6DF xcall _T1_Init
0034 .dbline 37
0034 ; SEI(); /*中断使能*/
0034 7894 sei
0036 L3:
0036 .dbline 39
0036 ;
0036 ; while (1);
0036 L4:
0036 .dbline 39
0036 FFCF xjmp L3
0038 X0:
0038 .dbline -2
0038 L2:
0038 .dbline 0 ; func end
0038 0895 ret
003A .dbend
.area bss(ram, con, rel)
0000 .dbfile C:\DOCUME~1\Administrator\桌面\ICC工程\ICC_定时器T1中断实验\main.c
0000 L7:
0000 .blkb 1
.area text(rom, con, rel)
003A .dbfile C:\DOCUME~1\Administrator\桌面\ICC工程\ICC_定时器T1中断实验\main.c
003A .dbfunc e TIMER1_OVF _TIMER1_OVF fV
003A .dbsym s i L7 c
.even
003A _TIMER1_OVF::
003A 2A92 st -y,R2
003C 8A93 st -y,R24
003E 9A93 st -y,R25
0040 2FB6 in R2,0x3f
0042 2A92 st -y,R2
0044 .dbline -1
0044 .dbline 45
0044 ; }
0044 ;
0044 ; /*定时器T1 TCCR1A组比较匹配中断*/
0044 ;
0044 ; void TIMER1_OVF(void)
0044 ; {
0044 .dbline 49
0044 ;
0044 ; static unsigned char i;
0044 ;
0044 ; if (i >10)
0044 8AE0 ldi R24,10
0046 20900000 lds R2,L7
004A 8215 cp R24,R2
004C 40F4 brsh L8
004E X1:
004E .dbline 50
004E ; {
004E .dbline 51
004E ; PORTB ^= (1 << PB1);
004E 82E0 ldi R24,2
0050 28B2 in R2,0x18
0052 2826 eor R2,R24
0054 28BA out 0x18,R2
0056 .dbline 52
0056 ; i = 0;
0056 2224 clr R2
0058 20920000 sts L7,R2
005C .dbline 53
005C ; }
005C 05C0 xjmp L9
005E L8:
005E .dbline 55
005E ; else
005E ; {
005E .dbline 56
005E ; i ++;
005E 80910000 lds R24,L7
0062 8F5F subi R24,255 ; addi 1
0064 80930000 sts L7,R24
0068 .dbline 57
0068 ; }
0068 L9:
0068 .dbline -2
0068 L6:
0068 .dbline 0 ; func end
0068 2990 ld R2,y+
006A 2FBE out 0x3f,R2
006C 9991 ld R25,y+
006E 8991 ld R24,y+
0070 2990 ld R2,y+
0072 1895 reti
0074 .dbend
0074 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -