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

📄 ds12997.lis

📁 本程序经调试好使
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module ds12997.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\ds12997.c
 0000                   .dbfunc e delay5ms _delay5ms fV
 0000           ;              i -> R16
 0000           ;              j -> R18
                        .even
 0000           _delay5ms::
 0000                   .dbline -1
 0000                   .dbline 98
 0000           ; /******************************************************/
 0000           ; // AVR 执行时间:8MHZ ->0.125us  4MHZ->0.25us  //无串口,模拟总线最简版
 0000           ; //               2MHZ->0.5us      *1MHZ->1us ,每句后延时2句
 0000           ; //51  执行时间:11.0592MHZ->2.17us 
 0000           ; //
 0000           ; //
 0000           ; /****************************************************/
 0000           ; 
 0000           ; #include <iom16v.h>        //2009-2-27-12-44 bf.1MHZ->2us
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define uchar unsigned char           //定义无符号字符为 uchar
 0000           ; #define uint  unsigned int       //定义无符号整型
 0000           ; 
 0000           ; uchar y1,y2,y3,y4,y5,y6;
 0000           ; 
 0000           ; /**********************接口定义*********************************/
 0000           ; //GND <--   MOT                  VCC  -->VCC
 0000           ; //                    .                  SQW
 0000           ; //                    .                  .
 0000           ; //PA_0<--     AD0            .     
 0000           ; //PA_1<--     AD1                .
 0000           ; //PA_2<--     AD2        IRQ   -->PB_0
 0000           ; //PA_3<--     AD3        REET  -->VCC
 0000           ; //PA_4<--     AD4                DS    -->PB_1
 0000           ; //PA_5<--     AD5                .
 0000           ; //PA_6<--     AD6                R/W   -->PB_2
 0000           ; //PA_7<--     AD7                AS    -->PB_3
 0000           ; //                GND            CS    -->PB_4 
 0000           ; /*********************引脚说明***********************************/
 0000           ; //DS12887       16    器件
 0000           ; //数据线       PA口    数据地址公用总线
 0000           ; //DS_IRQ        PB0    时间中断     
 0000           ; //DS_DS         PB1    数据选通
 0000           ; //DS_RW               PB2        读写控制
 0000           ; //DS_AS                       PB3        地址选通
 0000           ; //DS_CS         PB4      芯片片选
 0000           ; //DS_MOT        GND    模式选择
 0000           ; 
 0000           ; /*******************数据地址定义*************************************/
 0000           ; #define       DS12887_Second          0x00    //秒
 0000           ; #define       DS12887_Minute          0x02    //分
 0000           ; #define       DS12887_Hour            0x04    //时
 0000           ; #define       DS12887_Week            0x06    //星期
 0000           ; #define       DS12887_Day                 0x07        //日
 0000           ; #define       DS12887_Month           0x08    //月
 0000           ; #define       DS12887_Year            0x09    //年
 0000           ; 
 0000           ; //引脚电平定义
 0000           ; #define P_DS_1 PORTB|=BIT(PB1)                //DS_DS为1
 0000           ; #define P_DS_0 PORTB&=~BIT(PB1)               //DS_DS为0
 0000           ; #define D_DS_1 DDRB |=BIT(PB1)      //设为输出
 0000           ; 
 0000           ; #define P_RW_1  PORTB|=BIT(PB2)           //DS_RW为1
 0000           ; #define P_RW_0  PORTB&=~BIT(PB2)      //DS_RW为0
 0000           ; #define D_RW_1   DDRB |=BIT(PB2)    //设为输出
 0000           ; 
 0000           ; #define P_AS_1 PORTB|=BIT(PB3)                //DS_AS为1
 0000           ; #define P_AS_0 PORTB&=~BIT(PB3)       //DS_AS为0
 0000           ; #define D_AS_1  DDRB |=BIT(PB3)     //设为输出
 0000           ; 
 0000           ; #define P_CS_1 PORTB|=BIT(PB4)     //DS_CS为1
 0000           ; #define P_CS_0 PORTB&=~BIT(PB4)          //DS_CS为0                           
 0000           ; #define D_CS_1  DDRB |=BIT(PB4)     //设为输出
 0000           ; 
 0000           ;                       
 0000           ; //数据端口定义
 0000           ; #define AD_DDR DDRA                   //AD(地址/数据服用线)的输入/输出控制
 0000           ; #define AD_PORT PORTA                 //AD(地址/数据服用线)的输出电平控制
 0000           ; #define AD_PIN PINA                   //AD(地址/数据服用线)的输入电平控制
 0000           ; 
 0000           ; #define s1us_NOP();  _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
 0000           ; #define s2us_NOP();  s1us_NOP();s1us_NOP(); //延时等待2us
 0000           ; //定义时间类型,结构体数据类型
 0000           ; typedef struct _SYSTEMTIME_
 0000           ; {
 0000           ;       unsigned  char Second;
 0000           ;       unsigned  char Minute;
 0000           ;       unsigned  char Hour;
 0000           ;       unsigned  char Week;
 0000           ;       unsigned  char Day;
 0000           ;       unsigned  char Month;
 0000           ;       unsigned  char Year;
 0000           ;       unsigned  char DateString[9];
 0000           ;       unsigned  char TimeString[9];
 0000           ; }SYSTEMTIME;                  
 0000           ; 
 0000           ; /***********************函数声明*****************************/
 0000           ; void DS12887_Init(void);                                                                                      //DS12887初始化
 0000           ; void DS12887_Write( uchar Address,  uchar Value);             //DS12887指定地址写入数据
 0000           ; uchar DS12887_Read(uchar Address);                                    //DS12887指定地址中读出数据     
 0000           ; void DS12887_SetTime( uchar Address,  uchar Value);   //设置时间函数
 0000           ; void DS12887_GetTime(SYSTEMTIME *Time);                                                               //读出时间
 0000           ; void delay_8nus(uchar n);
 0000           ; 
 0000           ; /*********************延时5000+0us 函数定义**********/
 0000           ; void delay5ms(void)
 0000           ; {
 0000                   .dbline 100
 0000           ;     uchar i,j;
 0000           ;     for(i=185;i>0;i--)
 0000 09EB              ldi R16,185
 0002 07C0              xjmp L5
 0004           L2:
 0004                   .dbline 101
 0004 2CE0              ldi R18,12
 0006 01C0              xjmp L9
 0008           L6:
 0008                   .dbline 101
 0008           L7:
 0008                   .dbline 101
 0008 2A95              dec R18
 000A           L9:
 000A                   .dbline 101
 000A 2224              clr R2
 000C 2216              cp R2,R18
 000E E0F3              brlo L6
 0010           L3:
 0010                   .dbline 100
 0010 0A95              dec R16
 0012           L5:
 0012                   .dbline 100
 0012 2224              clr R2
 0014 2016              cp R2,R16
 0016 B0F3              brlo L2
 0018                   .dbline -2
 0018           L1:
 0018                   .dbline 0 ; func end
 0018 0895              ret
 001A                   .dbsym r i 16 c
 001A                   .dbsym r j 18 c
 001A                   .dbend
 001A                   .dbfunc e delay_1ms _delay_1ms fV
 001A           ;              i -> R16,R17
                        .even
 001A           _delay_1ms::
 001A                   .dbline -1
 001A                   .dbline 105
 001A           ;     for(j=12;j>0;j--);
 001A           ; }
 001A           ; /*****************延时1秒子函数*******************/
 001A           ; void delay_1ms(void)
 001A           ; {
 001A                   .dbline 107
 001A           ;  uint i;
 001A           ; for(i=1;i<(8*143-2);i++) //8为晶振频率
 001A 01E0              ldi R16,1
 001C 10E0              ldi R17,0
 001E 02C0              xjmp L14
 0020           L11:
 0020                   .dbline 108
 0020           L12:
 0020                   .dbline 107
 0020 0F5F              subi R16,255  ; offset = 1
 0022 1F4F              sbci R17,255
 0024           L14:
 0024                   .dbline 107
 0024 0637              cpi R16,118
 0026 E4E0              ldi R30,4
 0028 1E07              cpc R17,R30
 002A D0F3              brlo L11
 002C                   .dbline -2
 002C           L10:
 002C                   .dbline 0 ; func end
 002C 0895              ret
 002E                   .dbsym r i 16 i
 002E                   .dbend
 002E                   .dbfunc e delay_nms _delay_nms fV
 002E           ;              i -> R20,R21
 002E           ;              n -> R22,R23
                        .even
 002E           _delay_nms::
 002E 0E940000          xcall push_gset2
 0032 B801              movw R22,R16
 0034                   .dbline -1
 0034                   .dbline 112
 0034           ; ;
 0034           ; }
 0034           ; /****************延时N毫秒子函数****************/
 0034           ; void delay_nms(uint n)
 0034           ; {
 0034                   .dbline 114
 0034           ; uint i;
 0034           ; for(i=0;i<n;i++)
 0034 4427              clr R20
 0036 5527              clr R21
 0038 03C0              xjmp L19
 003A           L16:
 003A                   .dbline 115
 003A EFDF              xcall _delay_1ms
 003C           L17:
 003C                   .dbline 114
 003C 4F5F              subi R20,255  ; offset = 1
 003E 5F4F              sbci R21,255
 0040           L19:
 0040                   .dbline 114
 0040 4617              cp R20,R22
 0042 5707              cpc R21,R23
 0044 D0F3              brlo L16
 0046                   .dbline -2
 0046           L15:
 0046 0E940000          xcall pop_gset2
 004A                   .dbline 0 ; func end
 004A 0895              ret
 004C                   .dbsym r i 20 i
 004C                   .dbsym r n 22 i
 004C                   .dbend
 004C                   .dbfunc e delay_8nus _delay_8nus fV
 004C           ;              i -> R22,R23
 004C           ;              k -> R20,R21
 004C           ;              n -> R16
                        .even
 004C           _delay_8nus::
 004C 0E940000          xcall push_gset2
 0050                   .dbline -1
 0050                   .dbline 119
 0050           ; delay_1ms();
 0050           ; }
 0050           ; /****************精确延时微妙级,8MHZ,0.25us/step***********/
 0050           ; void delay_8nus(uchar n)
 0050           ; {
 0050                   .dbline 121
 0050           ;   uint i,k;
 0050           ;   i=n;
 0050 602F              mov R22,R16
 0052 7727              clr R23
 0054                   .dbline 122
 0054           ;   for(k=i;k>0;k--)
 0054 AB01              movw R20,R22
 0056 03C0              xjmp L24
 0058           L21:
 0058                   .dbline 123
 0058                   .dbline 124
 0058 0000              nop
 005A                   .dbline 125
 005A           L22:
 005A                   .dbline 122
 005A 4150              subi R20,1
 005C 5040              sbci R21,0
 005E           L24:
 005E                   .dbline 122
 005E 4030              cpi R20,0
 0060 4507              cpc R20,R21
 0062 D1F7              brne L21
 0064           X0:
 0064                   .dbline -2
 0064           L20:
 0064 0E940000          xcall pop_gset2
 0068                   .dbline 0 ; func end
 0068 0895              ret
 006A                   .dbsym r i 22 i
 006A                   .dbsym r k 20 i
 006A                   .dbsym r n 16 c
 006A                   .dbend
 006A                   .dbfunc e DS12887_Write _DS12887_Write fV
 006A           ;          Value -> R18
 006A           ;        Address -> R16
                        .even
 006A           _DS12887_Write::
 006A                   .dbline -1
 006A                   .dbline 129
 006A           ;   {
 006A           ;    _NOP();
 006A           ;     }
 006A           ; }
 006A           ; /*******DS12887指定地址写入数据 ,严格按照INTERL的时序,程序**********/
 006A           ; void DS12887_Write( uchar Address, uchar Value)
 006A           ; {
 006A                   .dbline 131
 006A           ;       
 006A           ;       P_AS_0; 
 006A C398              cbi 0x18,3
 006C                   .dbline 132
 006C           ;     _NOP(); 
 006C 0000              nop
 006E                   .dbline 133
 006E           ;     _NOP();     
 006E 0000              nop
 0070                   .dbline 134
 0070           ;     P_DS_1; 
 0070 C19A              sbi 0x18,1
 0072                   .dbline 135
 0072           ;       _NOP(); 
 0072 0000              nop
 0074                   .dbline 136
 0074           ;     _NOP();
 0074 0000              nop
 0076                   .dbline 137
 0076           ;     P_RW_1;            //给出读信号 
 0076 C29A              sbi 0x18,2
 0078                   .dbline 138
 0078           ;     _NOP(); 
 0078 0000              nop
 007A                   .dbline 139
 007A           ;     _NOP();    
 007A 0000              nop
 007C                   .dbline 140
 007C           ;     P_AS_1;            //锁存信号高电平 
 007C C39A              sbi 0x18,3
 007E                   .dbline 141

⌨️ 快捷键说明

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