⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 训练项目五:定时器.s

📁 长沙理工自己的实验程序
💻 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 + -