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

📄 m16t1.s

📁 AVR程序
💻 S
字号:
	.module M16T1.c
	.area text(rom, con, rel)
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\..\ICC_H\SOFTWARE.h
	.dbfunc e ChangeIntToHex _ChangeIntToHex fV
;            dec -> R20,R21
	.even
_ChangeIntToHex::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 136
; /*******************************************************************
;                       实验十一
; 实验名称: 定时器1中断实验
; 实验目的: 学习AVR单片机的定时器功能
; 实验现象: 定时器每秒加一,0到255循环,通过数码管显示计数值
; 环	  境: ICCAVR6.31A
; 设 计 者: shinea8868
; 说    明: 部分程序原型源自网络,经本人修改调试可用,请尊重知识产权,如
; 	  	  作商业用途请保留本段文字
; 完成日期: 2007年4月10日
; *******************************************************************/
; 
; #include <iom16v.h>
; #include <macros.h>
; #include "..\ICC_H\SOFTWARE.h"
; 
; uchar TimerCnt = 0;						//定时器1计数个数
; uchar disp[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
; 
; /*-----------------------------------------------------------------
;     延时程序计算方法
; 	计数个数j = 延时时间/6*晶振频率 - 1
; 函数名称: void DelayMs(uchar i)
; 函数功能: 毫秒延时
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void DelayMs(uchar i)
; {
;  	uchar j;
; 	while(i--)
; 	{
; 	 	j = 167;//1mhz 1ms延时
; 	    while(j--);
; 	}
; }
; 
; /*-----------------------------------------------------------------
; 函数名称: void SPIMasterInit(void) 
; 函数功能: SPI初始化为主机
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void SPIMasterInit(void) 
; {
; // 	MOSI,MISO,SCK等都需要设计的数据方向定义
; 	DDRB |= (1<<PB5) | (1<<PB7);		// 设置MOSI 和SCK 为输出,其他为输入 M16
; //	DDRB |= (1<<PB2) | (1<<PB3);		// 设置MOSI 和SCK 为输出,其他为输入 M64
; //	SPI控制寄存器
; //	SPIE SPE DORD MSTR CPOL CPHA SPR1 SPR0
; //	SPIE  中断使能  SPE SPI使能 DORD 数据次序 1为LSB首先发送,0为MSB首先发送
; //	MSTR  主从选择 1为主,0为从MSTR置位时选择主机模式,否则为从机.如果MSTR为"1",
; //  SS配置为输入,但被拉低,则MSTR 被清零,寄存器SPSR 的SPIF 置位.用户必须重新设置
; //	MSTR 进入主机模式。
; //	CPOL: 时钟极性见ATMEGA16L(中文)P130
; //	CPHA: 时钟相位
; //	SPR1, SPR0: SPI 时钟速率选择1 与0  SPR1 和SPR0 对从机没有影响。
; //  使能SPI 主机模式,设置时钟速率为fck/128 */
; 	SPCR  = (1<<SPE) | (1<<MSTR) | (1<<SPR1) | (1<<SPR0);		
; }
; /*-----------------------------------------------------------------
; 函数名称: void SPIMasterTransmit(unsigned char i) 
; 函数功能: SPI数据发送
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void SPIMasterTransmit(uchar TranData) 
; {	
; 	SPDR = TranData;					// 启动数据传输 
; 	while (!(SPSR & (1<<SPIF)));		// 等待传输结束 
; }
; /*-----------------------------------------------------------------
; 函数名称: void SPI595Out(unsigned char i)  
; 函数功能: 通过74HC595输出数据
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void SPI595Out(unsigned char i) 
; {
; 	PORTB &= ~(1 << 4);					//准备锁存
; 	SPIMasterTransmit(i);
; 	PORTB |= (1 << 4);					//锁存数据
; }
; /*-----------------------------------------------------------------
; 函数名称: void Timer1Init(void)
; 函数功能: 定时器1初始化  256预分频 定时一秒 
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void Timer1Init(void)
; {
;  	TCCR1B = 0x00; 	 			  //关定时器
;  	TCNT1H = 0xF0; 				  //设置定时初值
;  	TCNT1L = 0xBE;
;  	OCR1AH = 0x0F;
;  	OCR1AL = 0x42;
;  	OCR1BH = 0x0F;
;  	OCR1BL = 0x42;
;  	ICR1H  = 0x0F;
;  	ICR1L  = 0x42;
;  	TCCR1A = 0x00;
;  	TCCR1B = 0x04; 		  		  //开始计数
; }
; 
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
;  	TCNT1H = 0xF0; 		  		  //重新装载计数值
;  	TCNT1L = 0xBE; 
;  	TimerCnt++;
; }
; /*-----------------------------------------------------------------
; 函数名称: void InitDevices(void) 
; 函数功能: 初始化各种信息
; 参    数: 
; 返 回 值: 无
; -----------------------------------------------------------------*/
; void InitDevices(void)
; {
;   	CLI(); 			   					//关全部中断
; 	SPIMasterInit();   					//SPI初始化为主机
;  	Timer1Init();
; 
;  	TIMSK = 0x04; 				  		 //timer interrupt sources
;  	SEI(); 		 	   					 //开中断
; }
; 
; void main(void) 
; {
;  	uchar temp;
; 	DDRA = 0x00;						//方向输入
; 	PORTA = 0xFF;						//打开上拉
; 	DDRB = 0xFF;						//方向输出
; 	PORTB = 0xF0;						//电平设置
; 	DDRC = 0x00;
; 	PORTC = 0xFF;
	.dbline 137
; 	DDRD = 0xFF;
	movw R30,R20
	ldd R2,z+0
	clr R3
	ldi R17,10
	mov R16,R2
	xcall mod8u
	mov R4,R16
	ldi R17,10
	mov R16,R2
	xcall div8u
	mov R24,R16
	andi R24,#0x0F
	swap R24
	or R24,R4
	movw R30,R20
	std z+0,R24
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r dec 20 pc
	.dbend
	.dbfunc e ChangeHexToInt _ChangeHexToInt fV
;            hex -> R16,R17
	.even
_ChangeHexToInt::
	.dbline -1
	.dbline 166
; 	PORTD = 0xFF;
; 	InitDevices();
; 	while (1) 
; 	{
; 		if( TimerCnt > 9)
; 		{
; 		 	if( TimerCnt > 99)
; 			{
; 			 	DDRB  = 0xff;
; 				PORTB = 0xff;
; 				temp  = TimerCnt / 100;
; 		 		SPI595Out(disp[temp]);
; 				PORTB = 0xfb;
; 				DelayMs(1);
; 				PORTB = 0xff;
; 				temp  = TimerCnt%100/10;
; 				SPI595Out(disp[temp]);
; 				PORTB = 0xfd;
; 				DelayMs(1);
; 				PORTB = 0xff;
; 				temp  = TimerCnt%10;
; 				SPI595Out(disp[temp]);
; 				PORTB = 0xfe;
; 			}
; 			else
; 			{
; 			 	DDRB  = 0xff;
; 				PORTB = 0xff;
; 				temp  = TimerCnt/10;
	.dbline 167
; 			 	SPI595Out(disp[temp]);
	movw R30,R16
	ldd R2,z+0
	clr R3
	mov R24,R2
	swap R24
	andi R24,#0x0F
	ldi R25,10
	mul R25,R24
	mov R24,R2
	andi R24,15
	mov R2,R0
	add R2,R24
	std z+0,R2
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbsym r hex 16 pc
	.dbend
	.dbfunc e Delay _Delay fV
;              i -> R16
	.even
_Delay::
	.dbline -1
	.dbline 180
; 				PORTB = 0xfd;
; 				DelayMs(1);
; 				PORTB = 0xff;
; 				temp  = TimerCnt%10;
; 				SPI595Out(disp[temp]);
; 				PORTB = 0xfe;
; 			}
; 		}
; 		else
; 		{
; 		 	DDRB  = 0xff;
; 			PORTB = 0xfe;
; 		 	SPI595Out(disp[TimerCnt]);
	.dbline 182
; 		}
; 		DelayMs(1);
	ldi R16,200
L4:
	.dbline 183
L5:
	.dbline 183
; 	}
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L4
	.dbline -2
L3:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\..\ICC_H\SOFTWARE.h
_TimerCnt::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\..\ICC_H\SOFTWARE.h
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
	.dbsym e TimerCnt _TimerCnt c
_disp::
	.blkb 2
	.area idata
	.byte 192,249
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
	.blkb 2
	.area idata
	.byte 164,176
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
	.blkb 2
	.area idata
	.byte 153,146
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
	.blkb 2
	.area idata
	.byte 130,248
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
	.blkb 2
	.area idata
	.byte 128,144
	.area data(ram, con, rel)
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
	.dbsym e disp _disp A[10:10]c
	.area text(rom, con, rel)
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
	.dbfunc e DelayMs _DelayMs fV
;              j -> R20
;              i -> R16
	.even
_DelayMs::
	xcall push_gset1
	.dbline -1
	.dbline 29
	xjmp L9
L8:
	.dbline 32
	.dbline 33
	ldi R20,167
L11:
	.dbline 34
L12:
	.dbline 34
	mov R2,R20
	clr R3
	subi R20,1
	tst R2
	brne L11
	.dbline 35
L9:
	.dbline 31
	mov R2,R16
	clr R3
	subi R16,1
	tst R2
	brne L8
	.dbline -2
L7:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r i 16 c
	.dbend
	.dbfunc e SPIMasterInit _SPIMasterInit fV
	.even
_SPIMasterInit::
	.dbline -1
	.dbline 45
	.dbline 47
	in R24,0x17
	ori R24,160
	out 0x17,R24
	.dbline 59
	ldi R24,83
	out 0xd,R24
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SPIMasterTransmit _SPIMasterTransmit fV
;       TranData -> R16
	.even
_SPIMasterTransmit::
	.dbline -1
	.dbline 68
	.dbline 69
	out 0xf,R16
L16:
	.dbline 70
L17:
	.dbline 70
	sbis 0xe,7
	rjmp L16
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbsym r TranData 16 c
	.dbend
	.dbfunc e SPI595Out _SPI595Out fV
;              i -> R20
	.even
_SPI595Out::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 79
	.dbline 80
	cbi 0x18,4
	.dbline 81
	mov R16,R20
	xcall _SPIMasterTransmit
	.dbline 82
	sbi 0x18,4
	.dbline -2
L19:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e Timer1Init _Timer1Init fV
	.even
_Timer1Init::
	.dbline -1
	.dbline 91
	.dbline 92
	clr R2
	out 0x2e,R2
	.dbline 93
	ldi R24,240
	out 0x2d,R24
	.dbline 94
	ldi R24,190
	out 0x2c,R24
	.dbline 95
	ldi R24,15
	out 0x2b,R24
	.dbline 96
	ldi R24,66
	out 0x2a,R24
	.dbline 97
	ldi R24,15
	out 0x29,R24
	.dbline 98
	ldi R24,66
	out 0x28,R24
	.dbline 99
	ldi R24,15
	out 0x27,R24
	.dbline 100
	ldi R24,66
	out 0x26,R24
	.dbline 101
	out 0x2f,R2
	.dbline 102
	ldi R24,4
	out 0x2e,R24
	.dbline -2
L20:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 32
	jmp _timer1_ovf_isr
	.area text(rom, con, rel)
	.dbfile F:\job\M16学习板\定时器中断实验(实验十一)\M16T1.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	st -y,R24
	st -y,R25
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 107
	.dbline 108
	ldi R24,240
	out 0x2d,R24
	.dbline 109
	ldi R24,190
	out 0x2c,R24
	.dbline 110
	lds R24,_TimerCnt
	subi R24,255    ; addi 1
	sts _TimerCnt,R24
	.dbline -2
L21:
	ld R24,y+
	out 0x3f,R24
	ld R25,y+
	ld R24,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e InitDevices _InitDevices fV
	.even
_InitDevices::
	.dbline -1
	.dbline 119
	.dbline 120
	cli
	.dbline 121
	xcall _SPIMasterInit
	.dbline 122
	xcall _Timer1Init
	.dbline 124
	ldi R24,4
	out 0x39,R24
	.dbline 125
	sei
	.dbline -2
L22:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
;           temp -> R20
	.even
_main::
	.dbline -1
	.dbline 129
	.dbline 131
	clr R2
	out 0x1a,R2
	.dbline 132
	ldi R24,255
	out 0x1b,R24
	.dbline 133
	out 0x17,R24
	.dbline 134
	ldi R24,240
	out 0x18,R24
	.dbline 135
	out 0x14,R2
	.dbline 136
	ldi R24,255
	out 0x15,R24
	.dbline 137
	out 0x11,R24
	.dbline 138
	out 0x12,R24
	.dbline 139
	xcall _InitDevices
	xjmp L25
L24:
	.dbline 141
	.dbline 142
	ldi R24,9
	lds R2,_TimerCnt
	cp R24,R2
	brlo X1
	xjmp L27
X1:
	.dbline 143
	.dbline 144
	ldi R24,99
	cp R24,R2
	brlo X2
	xjmp L29
X2:
	.dbline 145
	.dbline 146
	ldi R24,255
	out 0x17,R24
	.dbline 147
	out 0x18,R24
	.dbline 148
	ldi R17,100
	mov R16,R2
	xcall div8u
	mov R20,R16
	.dbline 149
	ldi R24,<_disp
	ldi R25,>_disp
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI595Out
	.dbline 150
	ldi R24,251
	out 0x18,R24
	.dbline 151
	ldi R16,1
	xcall _DelayMs
	.dbline 152
	ldi R24,255
	out 0x18,R24
	.dbline 153
	ldi R17,100
	lds R16,_TimerCnt
	xcall mod8u
	ldi R17,10
	xcall div8u
	mov R20,R16
	.dbline 154
	ldi R24,<_disp
	ldi R25,>_disp
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI595Out
	.dbline 155
	ldi R24,253
	out 0x18,R24
	.dbline 156
	ldi R16,1
	xcall _DelayMs
	.dbline 157
	ldi R24,255
	out 0x18,R24
	.dbline 158
	ldi R17,10
	lds R16,_TimerCnt
	xcall mod8u
	mov R20,R16
	.dbline 159
	ldi R24,<_disp
	ldi R25,>_disp
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI595Out
	.dbline 160
	ldi R24,254
	out 0x18,R24
	.dbline 161
	xjmp L28
L29:
	.dbline 163
	.dbline 164
	ldi R24,255
	out 0x17,R24
	.dbline 165
	out 0x18,R24
	.dbline 166
	ldi R17,10
	lds R16,_TimerCnt
	xcall div8u
	mov R20,R16
	.dbline 167
	ldi R24,<_disp
	ldi R25,>_disp
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI595Out
	.dbline 168
	ldi R24,253
	out 0x18,R24
	.dbline 169
	ldi R16,1
	xcall _DelayMs
	.dbline 170
	ldi R24,255
	out 0x18,R24
	.dbline 171
	ldi R17,10
	lds R16,_TimerCnt
	xcall mod8u
	mov R20,R16
	.dbline 172
	ldi R24,<_disp
	ldi R25,>_disp
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI595Out
	.dbline 173
	ldi R24,254
	out 0x18,R24
	.dbline 174
	.dbline 175
	xjmp L28
L27:
	.dbline 177
	.dbline 178
	ldi R24,255
	out 0x17,R24
	.dbline 179
	ldi R24,254
	out 0x18,R24
	.dbline 180
	ldi R24,<_disp
	ldi R25,>_disp
	lds R30,_TimerCnt
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI595Out
	.dbline 181
L28:
	.dbline 182
	ldi R16,1
	xcall _DelayMs
	.dbline 183
L25:
	.dbline 140
	xjmp L24
X0:
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -