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

📄 main.s

📁 meg16 的所有功能实例
💻 S
字号:
	.module main.c
	.area data(ram, con, rel)
_BitTab::
	.blkb 2
	.area idata
	.byte 254,253
	.area data(ram, con, rel)
	.blkb 2
	.area idata
	.byte 251,247
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
	.dbsym e BitTab _BitTab A[4:4]c
_DispTab::
	.blkb 2
	.area idata
	.byte 63,6
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
	.blkb 2
	.area idata
	.byte 91,'O
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
	.blkb 2
	.area idata
	.byte 'f,'m
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
	.blkb 2
	.area idata
	.byte 125,7
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
	.blkb 2
	.area idata
	.byte 127,'o
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
	.dbsym e DispTab _DispTab A[10:10]c
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
	.dbfunc e INT0_Init _INT0_Init fV
	.even
_INT0_Init::
	.dbline -1
	.dbline 51
; /****************************************Copyright (c)**************************************************
; **                               ADEmbed Development Co.,LTD.                                    
; **                                 http://www.adembed.com
; **--------------File Info-------------------------------------------------------------------------------
; ** File name:			main.c
; ** Last modified Date:  2008-12-13
; ** Last Version:		1.0
; ** Descriptions:		Nixie Light Test.
; ** 
; **------------------------------------------------------------------------------------------------------
; ** Created by:			junbolu
; ** Created date:		2008-12-13
; ** Version:				1.0
; ** Descriptions:		
; **
; **------------------------------------------------------------------------------------------------------
; ** Modified by:
; ** Modified date:
; ** Version:
; ** Descriptions:
; **
; **------------------------------------------------------------------------------------------------------
; **ICC-AVR application builder : 2008-12-13
; **Target : M16
; **Crystal: 7.3728Mhz
; **PA0~PA7口接LED的段码
; **PB0~PB3口接LED的位选
; **描述:这是一个秒表实验,最大支持99.99秒。由按键K0完成启动计时和停止计时。
; **涉及知识点:
; **          T/C0的CTC工作模式
; **          INT0的下降沿中断工作模式
; *******************************************************************************************************/
; #include<iom16v.h>
; #include<macros.h>
; 
; #define		fose	7372800
; 
; #define 	START   0
; #define 	STOP	1
; #define 	CLEAR   3
; unsigned char Nixie_State;
; unsigned int time_10ms;
; unsigned char DISP_NUM;							//显示的位数
; unsigned char BitTab[]={0xFE,0xFD,0xFB,0xF7};	//三位位选码
; unsigned char DispTab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //LED字形码
; unsigned char DISP_DATA[4];		//显示的数字
; 
; void Display(void);
; 
; void INT0_Init()
; {
	.dbline 52
;  GIFR |=0X40;              //清楚标志位
	in R24,0x3a
	ori R24,64
	out 0x3a,R24
	.dbline 54
;  //MCUCR|=0X03; 			   //上升沿触发中断	
;  MCUCR|=0X02;MCUCR&=~0X01; //下降沿触发中断	
	in R24,0x35
	ori R24,2
	out 0x35,R24
	.dbline 54
	in R24,0x35
	andi R24,254
	out 0x35,R24
	.dbline 55
;  GICR |=0X40;  			   //使能外部中断0
	in R24,0x3b
	ori R24,64
	out 0x3b,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 4
	jmp _int0_isr
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
	.dbfunc e int0_isr _int0_isr fV
	.even
_int0_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 60
; }
; 
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
	.dbline 62
;  
;  if((PIND&0x04)!=0x00)  //读取按键状态
	sbis 0x10,2
	rjmp L3
	.dbline 63
;     {
	.dbline 64
; 	return;
	xjmp L2
L3:
	.dbline 66
; 	}
;  if(Nixie_State ==STOP)
	lds R24,_Nixie_State
	cpi R24,1
	brne L5
	.dbline 67
;  	{
	.dbline 68
; 	time_10ms = 0;
	clr R2
	clr R3
	sts _time_10ms+1,R3
	sts _time_10ms,R2
	.dbline 69
; 	Nixie_State = START;
	sts _Nixie_State,R2
	.dbline 70
; 	}
	xjmp L6
L5:
	.dbline 72
	.dbline 73
	ldi R24,1
	sts _Nixie_State,R24
	.dbline 74
L6:
	.dbline -2
L2:
	ld R2,y+
	out 0x3f,R2
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e Display _Display fV
	.even
_Display::
	.dbline -1
	.dbline 81
;  else
;  	{
; 	Nixie_State = STOP;
; 	}
;  	
; }
; 
; //显示函数,DISP_NUM决定显示哪个LED
; //采用共阴LED动态显示方法,定时中断函数里面调用
; void Display(void)		
; {
	.dbline 82
;  PORTA=0x00;					   			//清除显示再位选
	clr R2
	out 0x1b,R2
	.dbline 83
;  PORTB=BitTab[DISP_NUM];					//PB口接位选
	ldi R24,<_BitTab
	ldi R25,>_BitTab
	lds R30,_DISP_NUM
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x18,R2
	.dbline 84
;  PORTA=DispTab[DISP_DATA[DISP_NUM]];		//PA口接LED的段码
	ldi R24,<_DISP_DATA
	ldi R25,>_DISP_DATA
	lds R30,_DISP_NUM
	clr R31
	add R30,R24
	adc R31,R25
	ldd R30,z+0
	clr R31
	ldi R24,<_DispTab
	ldi R25,>_DispTab
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x1b,R2
	.dbline 86
;  
;  if(DISP_NUM==1)
	lds R24,_DISP_NUM
	cpi R24,1
	brne L8
	.dbline 87
;     PORTA|=0x80;		//PA口接LED的段码 
	sbi 0x1b,7
L8:
	.dbline 89
	lds R24,_DISP_NUM
	subi R24,255    ; addi 1
	sts _DISP_NUM,R24
	.dbline 90
	cpi R24,4
	brne L10
	.dbline 91
	clr R2
	sts _DISP_NUM,R2
L10:
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 76
	jmp _timer0comp
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
	.dbfunc e timer0comp _timer0comp fV
	.even
_timer0comp::
	xcall push_lset
	.dbline -1
	.dbline 96
;  
;  DISP_NUM++;			//先显示低位,再显示高位
;  if(DISP_NUM==4)
;     DISP_NUM=0;
; }
; 
; #pragma interrupt_handler timer0comp:20
; void timer0comp (void)
; {
	.dbline 97
;  if(Nixie_State == START)
	lds R2,_Nixie_State
	tst R2
	brne L13
	.dbline 98
;      {
	.dbline 99
; 	 if(time_10ms<9999)
	lds R24,_time_10ms
	lds R25,_time_10ms+1
	cpi R24,15
	ldi R30,39
	cpc R25,R30
	brsh L15
	.dbline 100
; 	 	 {
	.dbline 101
; 		 time_10ms++;
	adiw R24,1
	sts _time_10ms+1,R25
	sts _time_10ms,R24
	.dbline 102
; 		 } 
L15:
	.dbline 103
; 	 }
L13:
	.dbline 107
;  
;  
;  
;  DISP_DATA[0]=time_10ms/1000;
	ldi R18,1000
	ldi R19,3
	lds R16,_time_10ms
	lds R17,_time_10ms+1
	xcall div16u
	sts _DISP_DATA,R16
	.dbline 108
;  DISP_DATA[1]=(time_10ms/100)-(DISP_DATA[0]*10);
	mov R2,R16
	ldi R24,10
	mul R24,R2
	movw R2,R0
	ldi R18,100
	ldi R19,0
	lds R16,_time_10ms
	lds R17,_time_10ms+1
	xcall div16u
	movw R4,R16
	sub R4,R2
	sbc R5,R3
	sts _DISP_DATA+1,R4
	.dbline 109
;  DISP_DATA[3]=time_10ms%10;
	ldi R18,10
	ldi R19,0
	lds R16,_time_10ms
	lds R17,_time_10ms+1
	xcall mod16u
	sts _DISP_DATA+3,R16
	.dbline 110
;  DISP_DATA[2]=((time_10ms%100)-DISP_DATA[3])/10;
	ldi R18,100
	ldi R19,0
	lds R16,_time_10ms
	lds R17,_time_10ms+1
	xcall mod16u
	movw R2,R16
	lds R4,_DISP_DATA+3
	clr R5
	sub R2,R4
	sbc R3,R5
	ldi R18,10
	ldi R19,0
	movw R16,R2
	xcall div16u
	sts _DISP_DATA+2,R16
	.dbline 112
;  
;  Display();
	xcall _Display
	.dbline -2
L12:
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 116
; } 
; 
; void main(void)
; {
	.dbline 117
;  DDRA=0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 118
;  PORTA=0X00;
	clr R2
	out 0x1b,R2
	.dbline 119
;  DDRB=0X0F;
	ldi R24,15
	out 0x17,R24
	.dbline 120
;  PORTB=0X00;
	out 0x18,R2
	.dbline 123
;  
;  //按键0端口初始化
;  DDRD &=~0x04;	   	//设置PD2为输入   	   						
	cbi 0x11,2
	.dbline 124
;  PORTD|=0x04;		//设置PD2为上拉
	sbi 0x12,2
	.dbline 126
;  
;  INT0_Init();                 //TART初始化
	xcall _INT0_Init
	.dbline 129
;  
;  //t/c0初始化(10ms)
;  TCCR0=0X0d;
	ldi R24,13
	out 0x33,R24
	.dbline 130
;  TCNT0=0X00;
	clr R2
	out 0x32,R2
	.dbline 131
;  OCR0=0X48;
	ldi R24,72
	out 0x3c,R24
	.dbline 132
;  TIMSK=0X02;
	ldi R24,2
	out 0x39,R24
	.dbline 134
;  
;  time_10ms=0;
	clr R3
	sts _time_10ms+1,R3
	sts _time_10ms,R2
	.dbline 137
;  
;  //asm("sei");
;  SEI();                       //全局中断使能
	sei
	.dbline 139
;  
;  Nixie_State = STOP;
	ldi R24,1
	sts _Nixie_State,R24
	.dbline 140
;  for(;;)
L22:
	.dbline 141
	.dbline 143
	.dbline 140
	.dbline 140
	xjmp L22
X0:
	.dbline -2
L21:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\数码管秒表系统\main.c
_DISP_DATA::
	.blkb 4
	.dbsym e DISP_DATA _DISP_DATA A[4:4]c
_DISP_NUM::
	.blkb 1
	.dbsym e DISP_NUM _DISP_NUM c
_time_10ms::
	.blkb 2
	.dbsym e time_10ms _time_10ms i
_Nixie_State::
	.blkb 1
	.dbsym e Nixie_State _Nixie_State c

⌨️ 快捷键说明

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