📄 训练项目五:定时器.s
字号:
.module _训练项目五:定时器.c
.area data(ram, con, rel)
_count::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
_led_coder:
.blkb 2
.area idata
.byte 254,253
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 252,251
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 250,249
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 248,247
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 246,245
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 244,243
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 242,241
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 240,239
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 238,237
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 236,235
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 234,233
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 232,231
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 230,229
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 228,227
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 226,225
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 224,223
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 222,221
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 220,219
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 218,217
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 216,215
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 214,213
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 212,211
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 210,209
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 208,207
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 206,205
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 204,203
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 202,201
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 200,199
.area data(ram, con, rel)
.blkb 2
.area idata
.byte 198,197
.area data(ram, con, rel)
.blkb 1
.area idata
.byte 196
.area data(ram, con, rel)
.area text(rom, con, rel)
.even
_init::
; /****************************************************************************
; ** File Name: 定时器
; ** Createed By: Wangchangsong
; ** Create Date: 07/26/2008
; ** Version: 1.0
; ** Descriptions: led display
; **
; **---------------------------------------------------------------------------
; ** Modified By:
; ** Modified Date:
; ** Version:
; ** Descriptions:
; **
; ****************************************************************************/
;
; #include <iom128v.h>
; #include <macros.h>
;
; unsigned int count = 0;
; static unsigned char led_coder[] = {0xfe,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,
; 0xf4,0xf3,0xf2,0xf1,0xf0,0xef,0xee,0xed,0xec,0xeb,0xea,0xe9,0xe8,0xe7,0xe6,0xe5,0xe4,
; 0xe3,0xe2,0xe1,0xe0,0xdf,0xde,0xdd,0xdc,0xdb,0xda,0xd9,0xd8,0xd7,0xd6,0xd5,0xd4,0xd3,
; 0xd2,0xd1,0xd0,0xcf,0xce,0xcd,0xcc,0xcb,0xca,0xc9,0xc8,0xc7,0xc6,0xc5,0xc4};
;
; /****************************************************************************
; ** Function Name: init
; ** Descriptions: initialization
; ** Input Parameters: void
; ** Output parameters: void
; ** Returned Value: void
; **---------------------------------------------------------------------------
; ****************************************************************************/
;
; void init() /* 初始化 */
; { SREG = 0x80; /* 状态寄存器,全局中断允许 */
ldi R24,128
out 0x3f,R24
; DDRB = 0xFF; /* PB口作为输出口 */
ldi R24,255
out 0x17,R24
; TCCR1A = 0; /* 16位定时器/计数器控制寄存器A,
clr R2
out 0x2f,R2
; 引脚为通用I/O口 */
; TCNT1H = 0xff; /* 16位定时器/计数器的寄存器 */
out 0x2d,R24
; TCNT1L = 0xff; /* 16位定时器/计数器的寄存器 */
out 0x2c,R24
; TIMSK = 0x04; /* 中断屏蔽寄存器,T/C1溢出中断允许 */
ldi R24,4
out 0x37,R24
; TCCR1B = 0x02; /* 16位定时器/计数器控制寄存器B,
ldi R24,2
out 0x2e,R24
L1:
.dbline 0 ; func end
ret
.even
_main::
; CLK/8(来自预分频器) */
; }
;
; /****************************************************************************
; ** Function Name: main
; ** Descriptions:
; ** Input Parameters: void
; ** Output parameters: void
; ** Returned Value: void
; **---------------------------------------------------------------------------
; ****************************************************************************/
;
; void main(void)
; {
; init();
xcall _init
L3:
;
; while(1) /* 死循环 */
; {;}
L4:
xjmp L3
X0:
L2:
.dbline 0 ; func end
ret
.area vector(rom, abs)
.org 56
jmp _timer
.area text(rom, con, rel)
.even
_timer::
st -y,R2
st -y,R3
st -y,R24
st -y,R25
st -y,R26
st -y,R30
st -y,R31
in R2,0x3f
st -y,R2
; }
;
; #pragma interrupt_handler timer:15
; /* 请查阅中断向量相关资料,
; 程序中15为中断向量号 */
;
; /****************************************************************************
; ** Function Name: timer
; ** Descriptions:
; ** Input Parameters: count
; ** Output parameters: void
; ** Returned Value: void
; **---------------------------------------------------------------------------
; ****************************************************************************/
;
; void timer()
; {
; PORTB = led_coder[count];
ldi R24,<_led_coder
ldi R25,>_led_coder
lds R30,_count
lds R31,_count+1
add R30,R24
adc R31,R25
ldd R2,z+0
out 0x18,R2
; if(count<59)
lds R24,_count
lds R25,_count+1
cpi R24,59
ldi R30,0
cpc R25,R30
brsh L7
X1:
; count+=1;
adiw R24,1
sts _count+1,R25
sts _count,R24
xjmp L8
L7:
; else count = 0;
clr R2
clr R3
sts _count+1,R3
sts _count,R2
L8:
L6:
.dbline 0 ; func end
ld R2,y+
out 0x3f,R2
ld R31,y+
ld R30,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R3,y+
ld R2,y+
reti
; }
;
; /****************************************************************************
; END FILE
; ****************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -