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

📄 rtc.lis

📁 AtMega169芯片连接RTC的测试程序
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -