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

📄 rtc.s

📁 360买的双龙M8开发板里CD的程序,正在开发avr板子的学生可以参考一下 
💻 S
字号:
	.module rtc.c
	.area text(rom, con, rel)
	.dbfile E:\icc\iccavr\mega8\mega8\RTC\rtc.c
	.dbfunc e time _time fV
	.even
_time::
	.dbline -1
	.dbline 19
; /******************************************/
; /*           广州天河双龙电子公司         */
; /*           http://www.sl.com.cn         */ 
; /*              实时时钟演示程序          */
; /*            作者:ntzwq@wx88.net         */
; /*               2002年5月12日            */
; /*  目标MCU:MEGA8   晶振:内部RC(INT) 8MHZ */
; /******************************************/
; //说明:ATMEGA8只有在使用内部RC振荡器,T2使用异步时钟的
; //      情况下,外接的32.768KHZ的晶振才起作用。
; #include<iom8v.h>
; #include<macros.h>
; #include"uart.h"
; unsigned char hour;
; unsigned char minute;
; unsigned char second;
; /* 			调整时间 			 */
; void time(void)
; 	 {
	.dbline 20
; 	  if (second<60)
	lds R24,_second
	cpi R24,60
	brsh L2
	.dbline 21
; 	  	  return;
	rjmp L1
L2:
	.dbline 23
; 	  else
; 	    {
	.dbline 24
; 		 second-=60;
	lds R24,_second
	subi R24,60
	sts _second,R24
	.dbline 25
; 		 if (minute<59)
	lds R24,_minute
	cpi R24,59
	brsh L4
	.dbline 26
; 		    minute++;
	subi R24,255    ; addi 1
	sts _minute,R24
	rjmp L5
L4:
	.dbline 28
; 		 else
; 		   {
	.dbline 29
; 		    minute=0;
	clr R2
	sts _minute,R2
	.dbline 30
; 			if (hour<23)
	lds R24,_hour
	cpi R24,23
	brsh L6
	.dbline 31
; 			   hour++;
	subi R24,255    ; addi 1
	sts _hour,R24
	rjmp L7
L6:
	.dbline 33
; 			else
; 			   hour=0;   
	clr R2
	sts _hour,R2
L7:
	.dbline 34
; 		   }	
L5:
	.dbline 35
; 		} 		 	  
	.dbline -2
	.dbline 36
; 	 }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer2_init _timer2_init fV
	.even
_timer2_init::
	.dbline -1
	.dbline 39
; //初始化
; void timer2_init(void)
; {
	.dbline 40
;  TCCR2 = 0x00;
	clr R2
	out 0x25,R2
	.dbline 41
;  ASSR  = 1<<AS2; //异步时钟
	ldi R24,8
	out 0x22,R24
	.dbline 42
;  TCNT2 = 0xE0; //定时时间1秒
	ldi R24,224
	out 0x24,R24
	.dbline 43
;  TCCR2 = (1<<CS22)|(1<<CS21)|(1<<CS20); //分频比1024,0x07
	ldi R24,7
	out 0x25,R24
	.dbline -2
	.dbline 44
; }
L8:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 8
	rjmp _timer2_ovf_isr
	.area text(rom, con, rel)
	.dbfile E:\icc\iccavr\mega8\mega8\RTC\rtc.c
	.dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
	.even
_timer2_ovf_isr::
	st -y,R24
	st -y,R25
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 47
; #pragma interrupt_handler timer2_ovf_isr:iv_TIMER2_OVF
; void timer2_ovf_isr(void)
; {
	.dbline 48
;  TCNT2 = 0xE0;
	ldi R24,224
	out 0x24,R24
	.dbline 49
;  second++;
	lds R24,_second
	subi R24,255    ; addi 1
	sts _second,R24
	.dbline -2
	.dbline 50
; }
L9:
	ld R24,y+
	out 0x3f,R24
	ld R25,y+
	ld R24,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e put_time _put_time fV
	.even
_put_time::
	.dbline -1
	.dbline 52
; void put_time(void)
;  {
	.dbline 53
;   putchar(hour/10+0x30);
	ldi R17,10
	lds R16,_hour
	rcall div8u
	subi R16,208    ; addi 48
	rcall _putchar
	.dbline 54
;   putchar(hour%10+0x30);
	ldi R17,10
	lds R16,_hour
	rcall mod8u
	subi R16,208    ; addi 48
	rcall _putchar
	.dbline 55
;   putchar(':');
	ldi R16,58
	rcall _putchar
	.dbline 56
;   putchar(minute/10+0x30);
	ldi R17,10
	lds R16,_minute
	rcall div8u
	subi R16,208    ; addi 48
	rcall _putchar
	.dbline 57
;   putchar(minute%10+0x30);
	ldi R17,10
	lds R16,_minute
	rcall mod8u
	subi R16,208    ; addi 48
	rcall _putchar
	.dbline 58
;   putchar(':');
	ldi R16,58
	rcall _putchar
	.dbline 59
;   putchar(second/10+0x30);
	ldi R17,10
	lds R16,_second
	rcall div8u
	subi R16,208    ; addi 48
	rcall _putchar
	.dbline 60
;   putchar(second%10+0x30);  
	ldi R17,10
	lds R16,_second
	rcall mod8u
	subi R16,208    ; addi 48
	.dbline -2
	.dbline 61
;  }
L10:
	.dbline 0 ; func end
	rjmp _putchar
	.dbend
	.area vector(rom, abs)
	.org 22
	rjmp _uart0_rx_isr
	.area text(rom, con, rel)
	.dbfile E:\icc\iccavr\mega8\mega8\RTC\rtc.c
	.dbfunc e uart0_rx_isr _uart0_rx_isr fV
;              i -> R20,R21
	.even
_uart0_rx_isr::
	rcall push_lset
	rcall push_gset1
	.dbline -1
	.dbline 65
	.dbline 67
	in R20,0xc
	clr R21
	.dbline 68
	cpi R20,116
	ldi R30,0
	cpc R21,R30
	brne L12
	.dbline 69
	.dbline 70
	rcall _getchar
	ldi R24,10
	mul R24,R16
	mov R24,R0
	subi R24,224
	sts _hour,R24
	.dbline 71
	rcall _getchar
	mov R24,R16
	subi R24,48
	lds R2,_hour
	add R2,R24
	sts _hour,R2
	.dbline 72
	rcall _getchar
	ldi R24,10
	mul R24,R16
	mov R24,R0
	subi R24,224
	sts _minute,R24
	.dbline 73
	rcall _getchar
	mov R24,R16
	subi R24,48
	lds R2,_minute
	add R2,R24
	sts _minute,R2
	.dbline 74
	rcall _getchar
	ldi R24,10
	mul R24,R16
	mov R24,R0
	subi R24,224
	sts _second,R24
	.dbline 75
	rcall _getchar
	mov R24,R16
	subi R24,48
	lds R2,_second
	add R2,R24
	sts _second,R2
	.dbline 76
L12:
	.dbline -2
	.dbline 77
; //UART接收中断 
; #pragma interrupt_handler uart0_rx_isr:iv_USART_RXC
; void uart0_rx_isr(void)
; {
;  unsigned i;
;  i=UDR;
;  if (i=='t')
;    {
;     hour=(getchar()-0x30)*10;
; 	hour=hour+(getchar()-0x30);
; 	minute=(getchar()-0x30)*10;
; 	minute=minute+(getchar()-0x30);
; 	second=(getchar()-0x30)*10;
; 	second=second+(getchar()-0x30);
;    }
; } 
L11:
	rcall pop_gset1
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym r i 20 i
	.dbend
	.dbfunc e main _main fV
;     second_old -> R20
	.even
_main::
	.dbline -1
	.dbline 80
; //main程序
; void main(void)
; {
	.dbline 82
;  unsigned char second_old;
;  uart_init(); 
	rcall _uart_init
	.dbline 83
;  timer2_init();
	rcall _timer2_init
	.dbline 84
;  TIMSK =1<<TOIE2;
	ldi R24,64
	out 0x39,R24
	.dbline 85
;  SEI();
	sei
	rjmp L16
L15:
	.dbline 87
;  while(1)
;    {
	.dbline 88
;     if (second!=second_old)
	lds R2,_second
	cp R2,R20
	breq L18
	.dbline 89
;         {
	.dbline 90
; 		 time();
	rcall _time
	.dbline 91
; 		 second_old=second;
	lds R20,_second
	.dbline 92
; 		 put_time();
	rcall _put_time
	.dbline 93
; 		}
L18:
	.dbline 94
L16:
	.dbline 86
	rjmp L15
X0:
	.dbline -2
	.dbline 95
;    }	
; }
L14:
	.dbline 0 ; func end
	ret
	.dbsym r second_old 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\icc\iccavr\mega8\mega8\RTC\rtc.c
_second::
	.blkb 1
	.dbsym e second _second c
_minute::
	.blkb 1
	.dbsym e minute _minute c
_hour::
	.blkb 1
	.dbsym e hour _hour c

⌨️ 快捷键说明

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