?? rtc.lis
字號:
.module rtc.c
.area data(ram, con, rel)
0000 _mon::
0000 .blkb 2
.area idata
0000 1F1C .byte 31,28
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 1F1E .byte 31,30
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 1F1E .byte 31,30
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 1F1F .byte 31,31
.area data(ram, con, rel)
0008 .blkb 2
.area idata
0008 1E1F .byte 30,31
.area data(ram, con, rel)
000A .blkb 2
.area idata
000A 1E1F .byte 30,31
.area data(ram, con, rel)
000C .dbfile G:\AVR系列\RTC\rtc.c
000C .dbsym e mon _mon A[12:12]c
.area text(rom, con, rel)
0000 .dbfile G:\AVR系列\RTC\rtc.c
0000 .dbfunc e putchar _putchar fV
0000 ; c -> R16
.even
0000 _putchar::
0000 .dbline -1
0000 .dbline 21
0000 ; /******************************************/
0000 ;
0000 ; /* 目標MCU:MEGA8 晶振:內部RC(INT) 8MHZ */
0000 ; /******************************************/
0000 ; //說明:ATMEGA8只有在使用內部RC振蕩器,T2使用異步時鐘的
0000 ; // 情況下,外接的32.768KHZ的晶振才起作用。
0000 ; #include<iom8v.h>
0000 ; #include<macros.h>
0000 ; #define fosc 8000000
0000 ; #define baud 19200
0000 ; unsigned char hour;
0000 ; unsigned char minute;
0000 ; unsigned char second;
0000 ; unsigned char day;
0000 ; unsigned char month;
0000 ; unsigned int year;
0000 ; unsigned char mon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
0000 ;
0000 ; /* 調整時間 */
0000 ; void putchar(unsigned char c)
0000 ; {
0000 L2:
0000 .dbline 22
0000 L3:
0000 .dbline 22
0000 ; while (!(UCSRA&(1<<UDRE)));
0000 5D9B sbis 0xb,5
0002 FECF rjmp L2
0004 .dbline 23
0004 ; UDR=c;
0004 0CB9 out 0xc,R16
0006 .dbline -2
0006 L1:
0006 .dbline 0 ; func end
0006 0895 ret
0008 .dbsym r c 16 c
0008 .dbend
0008 .dbfunc e getchar _getchar fc
.even
0008 _getchar::
0008 .dbline -1
0008 .dbline 27
0008 ; }
0008 ; /* 字符輸入函數 */
0008 ; unsigned char getchar(void)
0008 ; {
0008 L6:
0008 .dbline 28
0008 L7:
0008 .dbline 28
0008 ; while(!(UCSRA& (1<<RXC)));
0008 5F9B sbis 0xb,7
000A FECF rjmp L6
000C .dbline 29
000C ; return UDR;
000C 0CB1 in R16,0xc
000E .dbline -2
000E L5:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
0010 .dbfunc e puts _puts fV
0010 ; s -> R20,R21
.even
0010 _puts::
0010 0E940000 xcall push_gset1
0014 A801 movw R20,R16
0016 .dbline -1
0016 .dbline 33
0016 ; }
0016 ; /* 字符串輸出函數 */
0016 ; void puts(char *s)
0016 ; {
0016 05C0 xjmp L11
0018 L10:
0018 .dbline 35
0018 .dbline 36
0018 FA01 movw R30,R20
001A 0081 ldd R16,z+0
001C F1DF xcall _putchar
001E .dbline 37
001E 4F5F subi R20,255 ; offset = 1
0020 5F4F sbci R21,255
0022 .dbline 38
0022 L11:
0022 .dbline 34
0022 ; while (*s)
0022 FA01 movw R30,R20
0024 2080 ldd R2,z+0
0026 2220 tst R2
0028 B9F7 brne L10
002A .dbline 39
002A ; {
002A ; putchar(*s);
002A ; s++;
002A ; }
002A ; putchar(0x0a);//回車換行
002A 0AE0 ldi R16,10
002C E9DF xcall _putchar
002E .dbline 40
002E ; putchar(0x0d);
002E 0DE0 ldi R16,13
0030 E7DF xcall _putchar
0032 .dbline -2
0032 L9:
0032 0E940000 xcall pop_gset1
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbsym r s 20 pc
0038 .dbend
0038 .dbfunc e uart_init _uart_init fV
.even
0038 _uart_init::
0038 .dbline -1
0038 .dbline 44
0038 ; }
0038 ; /* UART初始化 */
0038 ; void uart_init(void)
0038 ; {
0038 .dbline 46
0038 ; // OSCCAL=read_flash(osc_address);
0038 ; UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允許發送和接收
0038 88E9 ldi R24,152
003A 8AB9 out 0xa,R24
003C .dbline 47
003C ; UBRRL=(fosc/16/(baud+1))%256;
003C 8AE1 ldi R24,26
003E 89B9 out 0x9,R24
0040 .dbline 48
0040 ; UBRRH=(fosc/16/(baud+1))/256;
0040 2224 clr R2
0042 20BC out 0x20,R2
0044 .dbline 49
0044 ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位數據+1位STOP位
0044 86E8 ldi R24,134
0046 80BD out 0x20,R24
0048 .dbline -2
0048 L13:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbend
004A .dbfunc e time _time fV
.even
004A _time::
004A .dbline -1
004A .dbline 53
004A ; }
004A ;
004A ; void time(void)
004A ; {
004A .dbline 54
004A ; if (second<60)
004A 80910400 lds R24,_second
004E 8C33 cpi R24,60
0050 08F4 brsh L15
0052 .dbline 55
0052 ; return;
0052 8AC0 xjmp L14
0054 L15:
0054 .dbline 57
0054 ; else
0054 ; {
0054 .dbline 58
0054 ; second-=60;
0054 80910400 lds R24,_second
0058 8C53 subi R24,60
005A 80930400 sts _second,R24
005E .dbline 59
005E ; if (minute<59)
005E 80910500 lds R24,_minute
0062 8B33 cpi R24,59
0064 20F4 brsh L17
0066 .dbline 60
0066 ; minute++;
0066 8F5F subi R24,255 ; addi 1
0068 80930500 sts _minute,R24
006C 7DC0 xjmp L18
006E L17:
006E .dbline 62
006E ; else
006E ; {
006E .dbline 63
006E ; minute=0;
006E 2224 clr R2
0070 20920500 sts _minute,R2
0074 .dbline 64
0074 ; if (hour<23)
0074 80910600 lds R24,_hour
0078 8731 cpi R24,23
007A 20F4 brsh L19
007C .dbline 65
007C ; hour++;
007C 8F5F subi R24,255 ; addi 1
007E 80930600 sts _hour,R24
0082 72C0 xjmp L20
0084 L19:
0084 .dbline 67
0084 ; else
0084 ; { hour=0;
0084 .dbline 67
0084 2224 clr R2
0086 20920600 sts _hour,R2
008A .dbline 68
008A ; if(day<=mon[month-1])
008A 80E0 ldi R24,<_mon-1
008C 90E0 ldi R25,>_mon-1
008E E0910200 lds R30,_month
0092 FF27 clr R31
0094 E80F add R30,R24
0096 F91F adc R31,R25
0098 2080 ldd R2,z+0
009A 30900300 lds R3,_day
009E 2314 cp R2,R3
00A0 68F1 brlo L21
00A2 .dbline 69
00A2 ; { day++;
00A2 .dbline 69
00A2 832D mov R24,R3
00A4 8F5F subi R24,255 ; addi 1
00A6 80930300 sts _day,R24
00AA .dbline 70
00AA ; if(((((year%4)==0)&&((year%100)!=0))||((year%400)==0))&&(month==4))
00AA 80910000 lds R24,_year
00AE 90910100 lds R25,_year+1
00B2 8370 andi R24,3
00B4 9070 andi R25,0
00B6 8030 cpi R24,0
00B8 8907 cpc R24,R25
00BA 59F4 brne L27
00BC X0:
00BC 24E6 ldi R18,100
00BE 30E0 ldi R19,0
00C0 00910000 lds R16,_year
00C4 10910100 lds R17,_year+1
00C8 0E940000 xcall mod16u
00CC 0030 cpi R16,0
00CE 0107 cpc R16,R17
00D0 61F4 brne L26
00D2 X1:
00D2 L27:
00D2 20E9 ldi R18,400
00D4 31E0 ldi R19,1
00D6 00910000 lds R16,_year
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -