📄 训练项目五:定时器.lis
字号:
.module _训练项目五:定时器.c
.area data(ram, con, rel)
0000 _count::
0000 .blkb 2
.area idata
0000 0000 .word 0
.area data(ram, con, rel)
0002 _led_coder:
0002 .blkb 2
.area idata
0002 FEFD .byte 254,253
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 FCFB .byte 252,251
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 FAF9 .byte 250,249
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 F8F7 .byte 248,247
.area data(ram, con, rel)
000A .blkb 2
.area idata
000A F6F5 .byte 246,245
.area data(ram, con, rel)
000C .blkb 2
.area idata
000C F4F3 .byte 244,243
.area data(ram, con, rel)
000E .blkb 2
.area idata
000E F2F1 .byte 242,241
.area data(ram, con, rel)
0010 .blkb 2
.area idata
0010 F0EF .byte 240,239
.area data(ram, con, rel)
0012 .blkb 2
.area idata
0012 EEED .byte 238,237
.area data(ram, con, rel)
0014 .blkb 2
.area idata
0014 ECEB .byte 236,235
.area data(ram, con, rel)
0016 .blkb 2
.area idata
0016 EAE9 .byte 234,233
.area data(ram, con, rel)
0018 .blkb 2
.area idata
0018 E8E7 .byte 232,231
.area data(ram, con, rel)
001A .blkb 2
.area idata
001A E6E5 .byte 230,229
.area data(ram, con, rel)
001C .blkb 2
.area idata
001C E4E3 .byte 228,227
.area data(ram, con, rel)
001E .blkb 2
.area idata
001E E2E1 .byte 226,225
.area data(ram, con, rel)
0020 .blkb 2
.area idata
0020 E0DF .byte 224,223
.area data(ram, con, rel)
0022 .blkb 2
.area idata
0022 DEDD .byte 222,221
.area data(ram, con, rel)
0024 .blkb 2
.area idata
0024 DCDB .byte 220,219
.area data(ram, con, rel)
0026 .blkb 2
.area idata
0026 DAD9 .byte 218,217
.area data(ram, con, rel)
0028 .blkb 2
.area idata
0028 D8D7 .byte 216,215
.area data(ram, con, rel)
002A .blkb 2
.area idata
002A D6D5 .byte 214,213
.area data(ram, con, rel)
002C .blkb 2
.area idata
002C D4D3 .byte 212,211
.area data(ram, con, rel)
002E .blkb 2
.area idata
002E D2D1 .byte 210,209
.area data(ram, con, rel)
0030 .blkb 2
.area idata
0030 D0CF .byte 208,207
.area data(ram, con, rel)
0032 .blkb 2
.area idata
0032 CECD .byte 206,205
.area data(ram, con, rel)
0034 .blkb 2
.area idata
0034 CCCB .byte 204,203
.area data(ram, con, rel)
0036 .blkb 2
.area idata
0036 CAC9 .byte 202,201
.area data(ram, con, rel)
0038 .blkb 2
.area idata
0038 C8C7 .byte 200,199
.area data(ram, con, rel)
003A .blkb 2
.area idata
003A C6C5 .byte 198,197
.area data(ram, con, rel)
003C .blkb 1
.area idata
003C C4 .byte 196
.area data(ram, con, rel)
.area text(rom, con, rel)
.even
0000 _init::
0000 ; /****************************************************************************
0000 ; ** File Name: 定时器
0000 ; ** Createed By: Wangchangsong
0000 ; ** Create Date: 07/26/2008
0000 ; ** Version: 1.0
0000 ; ** Descriptions: led display
0000 ; **
0000 ; **---------------------------------------------------------------------------
0000 ; ** Modified By:
0000 ; ** Modified Date:
0000 ; ** Version:
0000 ; ** Descriptions:
0000 ; **
0000 ; ****************************************************************************/
0000 ;
0000 ; #include <iom128v.h>
0000 ; #include <macros.h>
0000 ;
0000 ; unsigned int count = 0;
0000 ; static unsigned char led_coder[] = {0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,
0000 ; 0xf4,0xf3,0xf2,0xf1,0xf0,0xef,0xee,0xed,0xec,0xeb,0xea,0xe9,0xe8,0xe7,0xe6,0xe5,0xe4,
0000 ; 0xe3,0xe2,0xe1,0xe0,0xdf,0xde,0xdd,0xdc,0xdb,0xda,0xd9,0xd8,0xd7,0xd6,0xd5,0xd4,0xd3,
0000 ; 0xd2,0xd1,0xd0,0xcf,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8,0xc7,0xc6,0xc5,0xc4};
0000 ;
0000 ; /****************************************************************************
0000 ; ** Function Name: init
0000 ; ** Descriptions: initialization
0000 ; ** Input Parameters: void
0000 ; ** Output parameters: void
0000 ; ** Returned Value: void
0000 ; **---------------------------------------------------------------------------
0000 ; ****************************************************************************/
0000 ;
0000 ; void init() /* 初始化 */
0000 ; { SREG = 0x80; /* 状态寄存器,全局中断允许 */
0000 80E8 ldi R24,128
0002 8FBF out 0x3f,R24
0004 ; DDRB = 0xFF; /* PB口作为输出口 */
0004 8FEF ldi R24,255
0006 87BB out 0x17,R24
0008 ; TCCR1A = 0; /* 16位定时器/计数器控制寄存器A,
0008 2224 clr R2
000A 2FBC out 0x2f,R2
000C ; 引脚为通用I/O口 */
000C ; TCNT1H = 0xff; /* 16位定时器/计数器的寄存器 */
000C 8DBD out 0x2d,R24
000E ; TCNT1L = 0xff; /* 16位定时器/计数器的寄存器 */
000E 8CBD out 0x2c,R24
0010 ; TIMSK = 0x04; /* 中断屏蔽寄存器,T/C1溢出中断允许 */
0010 84E0 ldi R24,4
0012 87BF out 0x37,R24
0014 ; TCCR1B = 0x02; /* 16位定时器/计数器控制寄存器B,
0014 82E0 ldi R24,2
0016 8EBD out 0x2e,R24
0018 L1:
0018 .dbline 0 ; func end
0018 0895 ret
.even
001A _main::
001A ; CLK/8(来自预分频器) */
001A ; }
001A ;
001A ; /****************************************************************************
001A ; ** Function Name: main
001A ; ** Descriptions:
001A ; ** Input Parameters: void
001A ; ** Output parameters: void
001A ; ** Returned Value: void
001A ; **---------------------------------------------------------------------------
001A ; ****************************************************************************/
001A ;
001A ; void main(void)
001A ; {
001A ; init();
001A F2DF xcall _init
001C L3:
001C ;
001C ; while(1) /* 死循环 */
001C ; {;}
001C L4:
001C FFCF xjmp L3
001E X0:
001E L2:
001E .dbline 0 ; func end
001E 0895 ret
.area vector(rom, abs)
.org 56
0038 0C941000 jmp _timer
.area text(rom, con, rel)
.even
0020 _timer::
0020 2A92 st -y,R2
0022 3A92 st -y,R3
0024 8A93 st -y,R24
0026 9A93 st -y,R25
0028 AA93 st -y,R26
002A EA93 st -y,R30
002C FA93 st -y,R31
002E 2FB6 in R2,0x3f
0030 2A92 st -y,R2
0032 ; }
0032 ;
0032 ; #pragma interrupt_handler timer:15
0032 ; /* 请查阅中断向量相关资料,
0032 ; 程序中15为中断向量号 */
0032 ;
0032 ; /****************************************************************************
0032 ; ** Function Name: timer
0032 ; ** Descriptions:
0032 ; ** Input Parameters: count
0032 ; ** Output parameters: void
0032 ; ** Returned Value: void
0032 ; **---------------------------------------------------------------------------
0032 ; ****************************************************************************/
0032 ;
0032 ; void timer()
0032 ; {
0032 ; PORTB = led_coder[count];
0032 80E0 ldi R24,<_led_coder
0034 90E0 ldi R25,>_led_coder
0036 E0910000 lds R30,_count
003A F0910100 lds R31,_count+1
003E E80F add R30,R24
0040 F91F adc R31,R25
0042 2080 ldd R2,z+0
0044 28BA out 0x18,R2
0046 ; if(count<59)
0046 80910000 lds R24,_count
004A 90910100 lds R25,_count+1
004E 8B33 cpi R24,59
0050 E0E0 ldi R30,0
0052 9E07 cpc R25,R30
0054 30F4 brsh L7
0056 X1:
0056 ; count+=1;
0056 0196 adiw R24,1
0058 90930100 sts _count+1,R25
005C 80930000 sts _count,R24
0060 06C0 xjmp L8
0062 L7:
0062 ; else count = 0;
0062 2224 clr R2
0064 3324 clr R3
0066 30920100 sts _count+1,R3
006A 20920000 sts _count,R2
006E L8:
006E L6:
006E .dbline 0 ; func end
006E 2990 ld R2,y+
0070 2FBE out 0x3f,R2
0072 F991 ld R31,y+
0074 E991 ld R30,y+
0076 A991 ld R26,y+
0078 9991 ld R25,y+
007A 8991 ld R24,y+
007C 3990 ld R3,y+
007E 2990 ld R2,y+
0080 1895 reti
0082 ; }
0082 ;
0082 ; /****************************************************************************
0082 ; END FILE
0082 ; ****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -