📄 rtc.lis
字号:
.module rtc.c
.area text(rom, con, rel)
0000 .dbfile C:\TDdownload\zxy\169demo\169RTC\rtc.c
.area data(ram, con, rel)
0000 .dbfile C:\TDdownload\zxy\169demo\169RTC\rtc.c
0000 _i::
0000 .blkb 2
.area idata
0000 0000 .word 0
.area data(ram, con, rel)
0002 .dbfile C:\TDdownload\zxy\169demo\169RTC\rtc.c
0002 .dbsym e i _i i
0002 _j::
0002 .blkb 2
.area idata
0002 0000 .word 0
.area data(ram, con, rel)
0004 .dbfile C:\TDdownload\zxy\169demo\169RTC\rtc.c
0004 .dbsym e j _j i
0004 _k::
0004 .blkb 2
.area idata
0004 0000 .word 0
.area data(ram, con, rel)
0006 .dbfile C:\TDdownload\zxy\169demo\169RTC\rtc.c
0006 .dbsym e k _k i
.area text(rom, con, rel)
0000 .dbfile C:\TDdownload\zxy\169demo\169RTC\rtc.c
0000 .dbfunc e portE_B _portE_B fV
.even
0000 _portE_B::
0000 .dbline -1
0000 .dbline 31
0000 ; // **************************************************************
0000 ; // *** 广 州 天 河 双 龙 电 子 公 司 ***
0000 ; // *** http://www.sl.com.cn ***
0000 ; // *** 实验: RTC ***
0000 ; // *** 作者:zxy@sl.com.cn ***
0000 ; // *** 2006年3月28日 ***
0000 ; // *** 目标MCU:MEGA169 晶振:内部(INT)8MHZ ***
0000 ; // **************************************************************
0000 ; //此实验需具备AD转换知识
0000 ; //通过按键修改时钟值,S1为选位键,S2为增1,S4为减1
0000 ; #include <iom169v.h>
0000 ; #include <macros.h>
0000 ; //键值定义,以目标实验板际测取键值范围为准
0000 ; #define s1 (adc_old<0x03)
0000 ; //200h
0000 ; #define s2 ((adc_old>0x180)&&(adc_old<0x220))
0000 ; //2a6h
0000 ; #define s3 ((adc_old>0x290)&&(adc_old<0x2CF))
0000 ; //2fbh
0000 ; #define s4 ((adc_old>0x2D0)&&(adc_old<0x310))
0000 ; //326h
0000 ; #define s5 ((adc_old>0x310)&&(adc_old<0x345))
0000 ; extern const unsigned char seg_table[16];
0000 ; extern unsigned char led_buff[3];
0000 ; extern void delay_ms(unsigned int time);
0000 ; extern void display(void);
0000 ; unsigned int adc_rel;//AD转换结果
0000 ; unsigned int i=0,j=0,k=0;
0000 ; //E、B口初始化
0000 ; void portE_B(void)
0000 ; {
0000 .dbline 32
0000 ; DDRE=0xff;//E、B口初始化
0000 8FEF ldi R24,255
0002 8DB9 out 0xd,R24
0004 .dbline 33
0004 ; PORTE=0xff;
0004 8EB9 out 0xe,R24
0006 .dbline 34
0006 ; DDRB|=0xf0;
0006 84B1 in R24,0x4
0008 806F ori R24,240
000A 84B9 out 0x4,R24
000C .dbline 35
000C ; PORTD|=0xf0;
000C 8BB1 in R24,0xb
000E 806F ori R24,240
0010 8BB9 out 0xb,R24
0012 .dbline -2
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbend
0014 .dbfunc e adc_init _adc_init fV
.even
0014 _adc_init::
0014 .dbline -1
0014 .dbline 39
0014 ; }
0014 ; //ADC初始化
0014 ; void adc_init(void)
0014 ; {
0014 .dbline 40
0014 ; ADCSRA = 0x00; //设置前,先关闭ADC
0014 2224 clr R2
0016 20927A00 sts 122,R2
001A .dbline 41
001A ; ADMUX =(1<<REFS0)|(1<<MUX0);//选择内部AVCC为基准,单端输入口为ADC0
001A 81E4 ldi R24,65
001C 80937C00 sts 124,R24
0020 .dbline 42
0020 ; ACSR =(1<<ACD);//关闭模拟比较器,禁止位P148
0020 80E8 ldi R24,128
0022 80BF out 0x30,R24
0024 .dbline 43
0024 ; ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//ADC时钟64分频
0024 8EEC ldi R24,206
0026 80937A00 sts 122,R24
002A .dbline -2
002A L2:
002A .dbline 0 ; func end
002A 0895 ret
002C .dbend
002C .dbfunc e timer2_init _timer2_init fV
.even
002C _timer2_init::
002C .dbline -1
002C .dbline 47
002C ; }
002C ; //定时器初始化
002C ; void timer2_init(void)
002C ; {
002C .dbline 48
002C ; TIMSK2 = 0x00;
002C 2224 clr R2
002E 20927000 sts 112,R2
0032 .dbline 49
0032 ; ASSR = 1<<AS2; //异步时钟
0032 88E0 ldi R24,8
0034 8093B600 sts 182,R24
0038 .dbline 50
0038 ; TCNT2 = 0xE0; //定时时间1秒
0038 80EE ldi R24,224
003A 8093B200 sts 178,R24
003E .dbline 51
003E ; TCCR2A = (1<<CS22)|(1<<CS21)|(1<<CS20); //分频比1024,0x07
003E 87E0 ldi R24,7
0040 8093B000 sts 176,R24
0044 .dbline 52
0044 ; SEI();
0044 7894 sei
0046 .dbline -2
0046 L3:
0046 .dbline 0 ; func end
0046 0895 ret
0048 .dbend
.area vector(rom, abs)
.org 76
004C 0C942400 jmp _adc_isr
.area text(rom, con, rel)
0048 .dbfile C:\TDdownload\zxy\169demo\169RTC\rtc.c
.area vector(rom, abs)
.org 20
0014 0C943E00 jmp _int_isr
.area text(rom, con, rel)
0048 .dbfile C:\TDdownload\zxy\169demo\169RTC\rtc.c
0048 .dbfunc e adc_isr _adc_isr fV
.even
0048 _adc_isr::
0048 8A93 st -y,R24
004A 9A93 st -y,R25
004C 8FB7 in R24,0x3f
004E 8A93 st -y,R24
0050 .dbline -1
0050 .dbline 58
0050 ; }
0050 ;
0050 ; #pragma interrupt_handler adc_isr:20 int_isr:6
0050 ; //ADC完成中断
0050 ; void adc_isr(void)
0050 ; {
0050 .dbline 59
0050 ; adc_rel=ADC&0x3ff;
0050 80917800 lds R24,120
0054 90917900 lds R25,120+1
0058 9370 andi R25,3
005A 90930300 sts _adc_rel+1,R25
005E 80930200 sts _adc_rel,R24
0062 .dbline 60
0062 ; ADMUX=(1<<REFS0)|(1<<MUX0);//选择内部AVCC为基准
0062 81E4 ldi R24,65
0064 80937C00 sts 124,R24
0068 .dbline 61
0068 ; ADCSRA|=(1<<ADSC);//启动AD转换
0068 80917A00 lds R24,122
006C 8064 ori R24,64
006E 80937A00 sts 122,R24
0072 .dbline -2
0072 L4:
0072 .dbline 0 ; func end
0072 8991 ld R24,y+
0074 8FBF out 0x3f,R24
0076 9991 ld R25,y+
0078 8991 ld R24,y+
007A 1895 reti
007C .dbend
007C .dbfunc e int_isr _int_isr fV
007C ; n -> <dead>
.even
007C _int_isr::
007C 2A92 st -y,R2
007E 3A92 st -y,R3
0080 8A93 st -y,R24
0082 9A93 st -y,R25
0084 EA93 st -y,R30
0086 FA93 st -y,R31
0088 2FB6 in R2,0x3f
008A 2A92 st -y,R2
008C .dbline -1
008C .dbline 65
008C ; }
008C ; //定时器中断
008C ; void int_isr(void)
008C ; { int n;
008C .dbline 66
008C ; TCNT2 = 0xE0;
008C 80EE ldi R24,224
008E 8093B200 sts 178,R24
0092 .dbline 67
0092 ; led_buff[0]=seg_table[i]; //个位
0092 80E0 ldi R24,<_seg_table
0094 90E0 ldi R25,>_seg_table
0096 E0910000 lds R30,_i
009A F0910100 lds R31,_i+1
009E E80F add R30,R24
00A0 F91F adc R31,R25
00A2 2490 lpm R2,Z
00A4 20920000 sts _led_buff,R2
00A8 .dbline 68
00A8 ; led_buff[1]=seg_table[j]; //十位
00A8 E0910200 lds R30,_j
00AC F0910300 lds R31,_j+1
00B0 E80F add R30,R24
00B2 F91F adc R31,R25
00B4 2490 lpm R2,Z
00B6 20920100 sts _led_buff+1,R2
00BA .dbline 69
00BA ; led_buff[2]=seg_table[k]; //百位
00BA E0910400 lds R30,_k
00BE F0910500 lds R31,_k+1
00C2 E80F add R30,R24
00C4 F91F adc R31,R25
00C6 2490 lpm R2,Z
00C8 20920200 sts _led_buff+2,R2
00CC .dbline 70
00CC ; i++;
00CC 80910000 lds R24,_i
00D0 90910100 lds R25,_i+1
00D4 0196 adiw R24,1
00D6 90930100 sts _i+1,R25
00DA 80930000 sts _i,R24
00DE .dbline 71
00DE ; if(i==10) //十进位
00DE 8A30 cpi R24,10
00E0 E0E0 ldi R30,0
00E2 9E07 cpc R25,R30
00E4 81F5 brne L8
00E6 X0:
00E6 .dbline 72
00E6 ; {
00E6 .dbline 73
00E6 ; i=0;
00E6 2224 clr R2
00E8 3324 clr R3
00EA 30920100 sts _i+1,R3
00EE 20920000 sts _i,R2
00F2 .dbline 74
00F2 ; j++;
00F2 80910200 lds R24,_j
00F6 90910300 lds R25,_j+1
00FA 0196 adiw R24,1
00FC 90930300 sts _j+1,R25
0100 80930200 sts _j,R24
0104 .dbline 75
0104 ; if(j==6) //六进位
0104 8630 cpi R24,6
0106 E0E0 ldi R30,0
0108 9E07 cpc R25,R30
010A E9F4 brne L10
010C X1:
010C .dbline 76
010C ; {
010C .dbline 77
010C ; j=0;
010C 30920300 sts _j+1,R3
0110 20920200 sts _j,R2
0114 .dbline 78
0114 ; k++;
0114 80910400 lds R24,_k
0118 90910500 lds R25,_k+1
011C 0196 adiw R24,1
011E 90930500 sts _k+1,R25
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -