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

📄 ds1302.lis

📁 结合温度传感器的实现测温度的C程序 这个小项目用到了比较多的AVR单片机的资源 是个不错的学习例程
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module ds1302.c
                        .area text(rom, con, rel)
 0000                   .dbfile D:\时钟芯片\1302\1302-162\ds1302.c
 0000                   .dbfunc e delay _delay fV
 0000           ;              a -> R20
 0000           ;              n -> R16
                        .even
 0000           _delay::
 0000 00D0              rcall push_gset1
 0002                   .dbline -1
 0002                   .dbline 9
 0002           ; 
 0002           ; #include <io8515v.h>
 0002           ; #include <macros.h>
 0002           ; #include <162-1302.h>
 0002           ; /************************************************
 0002           ;                        延时程序
 0002           ; ************************************************/
 0002           ; void delay(uchar n)
 0002           ; {
 0002                   .dbline 11
 0002           ; uchar a;
 0002           ; for(a=0;a<n;a++)
 0002 4427              clr R20
 0004 01C0              rjmp L5
 0006           L2:
 0006                   .dbline 12
 0006           L3:
 0006                   .dbline 11
 0006 4395              inc R20
 0008           L5:
 0008                   .dbline 11
 0008 4017              cp R20,R16
 000A E8F3              brlo L2
 000C                   .dbline -2
 000C           L1:
 000C 00D0              rcall pop_gset1
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbsym r a 20 c
 0010                   .dbsym r n 16 c
 0010                   .dbend
 0010                   .dbfunc e write_data _write_data fV
 0010           ;           temp -> R20
 0010           ;              i -> R22
 0010           ;           data -> R10
 0010           ;           addr -> R22
                        .even
 0010           _write_data::
 0010 00D0              rcall push_gset3
 0012 A22E              mov R10,R18
 0014 602F              mov R22,R16
 0016                   .dbline -1
 0016                   .dbline 18
 0016           ;   ;
 0016           ; }
 0016           ; /****************************************************
 0016           ;                       写一个字节
 0016           ; ****************************************************/
 0016           ; void write_data(uchar addr,uchar data)
 0016           ; {
 0016                   .dbline 20
 0016           ; unsigned char i,temp;
 0016           ;  T_DDR|=T_IO;
 0016 A69A              sbi 0x14,6
 0018                   .dbline 21
 0018           ; T_PORT&=~T_RST;
 0018 AF98              cbi 0x15,7
 001A                   .dbline 22
 001A           ; T_PORT&=~T_CLK;         
 001A AD98              cbi 0x15,5
 001C                   .dbline 23
 001C           ;   asm("nop");
 001C 0000              nop
 001E                   .dbline 24
 001E           ;   asm("nop");
 001E 0000              nop
 0020                   .dbline 25
 0020           ;   asm("nop");
 0020 0000              nop
 0022                   .dbline 26
 0022           ;   asm("nop");
 0022 0000              nop
 0024                   .dbline 27
 0024           ; T_PORT|=T_RST;                  //时钟信号低时拉高RST初始化
 0024 AF9A              sbi 0x15,7
 0026                   .dbline 28
 0026           ;   temp=addr;
 0026 462F              mov R20,R22
 0028                   .dbline 29
 0028           ;   for(i=0;i<8;i++) 
 0028 6627              clr R22
 002A 0FC0              rjmp L10
 002C           L7:
 002C                   .dbline 30
 002C           ;   { 
 002C                   .dbline 31
 002C           ;   if(temp&(1<<i))  
 002C 01E0              ldi R16,1
 002E 162F              mov R17,R22
 0030 00D0              rcall lsl8
 0032 242E              mov R2,R20
 0034 2022              and R2,R16
 0036 11F0              breq L11
 0038                   .dbline 32
 0038           ;               T_PORT |=T_IO ;  
 0038 AE9A              sbi 0x15,6
 003A 01C0              rjmp L12
 003C           L11:
 003C                   .dbline 34
 003C           ;   else 
 003C           ;           T_PORT &=~T_IO ;
 003C AE98              cbi 0x15,6
 003E           L12:
 003E                   .dbline 35
 003E 0000              nop
 0040                   .dbline 36
 0040 0000              nop
 0042                   .dbline 37
 0042 AD9A              sbi 0x15,5
 0044                   .dbline 38
 0044 0000              nop
 0046                   .dbline 39
 0046 AD98              cbi 0x15,5
 0048                   .dbline 40
 0048           L8:
 0048                   .dbline 29
 0048 6395              inc R22
 004A           L10:
 004A                   .dbline 29
 004A 6830              cpi R22,8
 004C 78F3              brlo L7
 004E                   .dbline 41
 004E           ;   asm("nop");
 004E           ;   asm("nop");
 004E           ;   T_PORT |=T_CLK;             //时钟上升沿写入数据
 004E           ;   asm("nop");
 004E           ;   T_PORT &=~T_CLK;             //时钟拉低电平 
 004E           ;   }
 004E           ;   temp=data;
 004E 4A2D              mov R20,R10
 0050                   .dbline 42
 0050           ;     for(i=0;i<8;i++) 
 0050 6627              clr R22
 0052 0FC0              rjmp L16
 0054           L13:
 0054                   .dbline 43
 0054           ;   { 
 0054                   .dbline 44
 0054           ;   if(temp&(1<<i))  
 0054 01E0              ldi R16,1
 0056 162F              mov R17,R22
 0058 00D0              rcall lsl8
 005A 242E              mov R2,R20
 005C 2022              and R2,R16
 005E 11F0              breq L17
 0060                   .dbline 45
 0060           ;           T_PORT |=T_IO ;  
 0060 AE9A              sbi 0x15,6
 0062 01C0              rjmp L18
 0064           L17:
 0064                   .dbline 47
 0064           ;   else 
 0064           ;           T_PORT &=~T_IO ; 
 0064 AE98              cbi 0x15,6
 0066           L18:
 0066                   .dbline 48
 0066 0000              nop
 0068                   .dbline 49
 0068 0000              nop
 006A                   .dbline 50
 006A AD9A              sbi 0x15,5
 006C                   .dbline 51
 006C 0000              nop
 006E                   .dbline 52
 006E AD98              cbi 0x15,5
 0070                   .dbline 53
 0070           L14:
 0070                   .dbline 42
 0070 6395              inc R22
 0072           L16:
 0072                   .dbline 42
 0072 6830              cpi R22,8
 0074 78F3              brlo L13
 0076                   .dbline 54
 0076           ;   asm("nop");
 0076           ;   asm("nop"); 
 0076           ;   T_PORT |=T_CLK;             //时钟上升沿写入数据
 0076           ;    asm("nop");
 0076           ;   T_PORT &=~T_CLK;             //时钟拉低电平 
 0076           ;   } 
 0076           ;   T_PORT&=~T_RST;             //禁止DS1302 
 0076 AF98              cbi 0x15,7
 0078                   .dbline -2
 0078           L6:
 0078 00D0              rcall pop_gset3
 007A                   .dbline 0 ; func end
 007A 0895              ret
 007C                   .dbsym r temp 20 c
 007C                   .dbsym r i 22 c
 007C                   .dbsym r data 10 c
 007C                   .dbsym r addr 22 c
 007C                   .dbend
 007C                   .dbfunc e read_data _read_data fc
 007C           ;              k -> R20
 007C           ;           temp -> R22
 007C           ;              i -> R10
 007C           ;           addr -> R20
                        .even
 007C           _read_data::
 007C 00D0              rcall push_gset3
 007E 402F              mov R20,R16
 0080                   .dbline -1
 0080                   .dbline 61
 0080           ; }
 0080           ; 
 0080           ; /***************************************************
 0080           ;                       读一个字节
 0080           ; ***************************************************/
 0080           ; uchar read_data(uchar addr)
 0080           ; {
 0080                   .dbline 63
 0080           ; uchar i,temp,k;
 0080           ; temp=0;
 0080 6627              clr R22
 0082                   .dbline 64
 0082           ; T_DDR|=T_IO;

⌨️ 快捷键说明

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