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

📄 ds12997.lis

📁 本程序经调试好使
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module ds12997.c
                        .area data(ram, con, rel)
 0000           _y::
 0000                   .blkb 2
                        .area idata
 0000 0000              .byte 0,0
                        .area data(ram, con, rel)
 0002                   .blkb 2
                        .area idata
 0002 2E00              .byte 46,0
                        .area data(ram, con, rel)
 0004                   .blkb 2
                        .area idata
 0004 002E              .byte 0,46
                        .area data(ram, con, rel)
 0006                   .blkb 2
                        .area idata
 0006 0000              .byte 0,0
                        .area data(ram, con, rel)
 0008                   .blkb 2
                        .area idata
 0008 2000              .byte 32,0
                        .area data(ram, con, rel)
 000A                   .blkb 2
                        .area idata
 000A 003A              .byte 0,58
                        .area data(ram, con, rel)
 000C                   .blkb 2
                        .area idata
 000C 0000              .byte 0,0
                        .area data(ram, con, rel)
 000E                   .blkb 2
                        .area idata
 000E 3A00              .byte 58,0
                        .area data(ram, con, rel)
 0010                   .blkb 2
                        .area idata
 0010 0020              .byte 0,32
                        .area data(ram, con, rel)
 0012                   .blkb 1
                        .area idata
 0012 20                .byte 32
                        .area data(ram, con, rel)
 0013                   .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\ds12997.c
 0013                   .dbsym e y _y A[19:19]c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\wangqinbo\MYDOCU~1\avrc\ds12997.c
 0000                   .dbfunc e usart_init _usart_init fV
                        .even
 0000           _usart_init::
 0000                   .dbline -1
 0000                   .dbline 114
 0000           ; /******************************************************/
 0000           ; //Title:ATMAGE16 & DS12887加上串口通信显示时钟程序-查询方式
 0000           ; //ICC-AVR : 2009-3-4 17:04:40
 0000           ; // Target : M16
 0000           ; // Crystal: 1.0000Mhz ~8.0000Mhz都好使
 0000           ; //Author  :borlittle
 0000           ; //Function:usart+DS12887 RTC test
 0000           ; //备注          :本程序经调试好使,如果程序不好使,请注意检查硬件连线,内部时钟
 0000           ; //记得要校验准,串口才能发送正确,
 0000           ; // AVR 执行时间:8MHZ ->0.125us  4MHZ->0.25us  //有串口,模拟总线最简版
 0000           ; //               2MHZ->0.5us      *1MHZ->1us ,每句后延时2句
 0000           ; // at89s52  执行时间:11.0592MHZ->2.17us 
 0000           ; //
 0000           ; //
 0000           ; /****************************************************/
 0000           ; 
 0000           ; #include <iom16v.h>        
 0000           ; #include <macros.h>
 0000           ; 
 0000           ; #define uchar unsigned char           //定义无符号字符为 uchar
 0000           ; #define uint  unsigned int       //定义无符号整型
 0000           ; #define Crystal 8000000   //晶振8MHZ 
 0000           ; #define Baud 9600         //波特率
 0000           ; 
 0000           ; uchar y1,y2,y3,y4,y5,y6; //用于调试用,在JTAG仿真器与AVR Studio 中查看是否读取正确
 0000           ; uchar y[19]={0,0,'.',0,0,'.',0,0,' ',0,0,':',0,0,':',0,0,' ',' '}; //09.3.4 17:06:50
 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    -->GND--可以用端口控制以省电降功耗 
 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           ; //定义时间类型,结构体数据类型
 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           ; void port_init(void);
 0000           ; void usart0_init(void);
 0000           ; void init_devices(void);
 0000           ; 
 0000           ; void usart_char_send(uchar i);
 0000           ; void usart_str_send(char *s);
 0000           ; uchar usart_char_receive(void);
 0000           ; 
 0000           ; /*****************串口初始化*********************************/
 0000           ; void usart_init(void) 
 0000           ; {
 0000                   .dbline 115
 0000           ;  UCSRB = 0x00;                     //禁止发送和接收
 0000 2224              clr R2
 0002 2AB8              out 0xa,R2
 0004                   .dbline 116
 0004           ;  UCSRA = 0x02;                     //倍速异步模式USX=1
 0004 82E0              ldi R24,2
 0006 8BB9              out 0xb,R24
 0008                   .dbline 117
 0008           ;  UCSRC = 0x06;                     //0000 0110,UCSZ1=1,UCSZ0=1;8位字符,1位停止位 
 0008 86E0              ldi R24,6
 000A 80BD              out 0x20,R24
 000C                   .dbline 118
 000C           ;  UBRRL=(Crystal/8/(Baud+1))%256;   //若为正常异步模式USX0=0则位(Crystal/16/(Baud+1))%256
 000C 88E6              ldi R24,104
 000E 89B9              out 0x9,R24
 0010                   .dbline 119
 0010           ;  UBRRH=(Crystal/8/(Baud+1))/256;   //参见ATMAGE16使用手册
 0010 20BC              out 0x20,R2
 0012                   .dbline 120
 0012           ;  UCSRB = 0x18;                     //允许发送和接收
 0012 88E1              ldi R24,24
 0014 8AB9              out 0xa,R24
 0016                   .dbline -2
 0016           L1:
 0016                   .dbline 0 ; func end
 0016 0895              ret
 0018                   .dbend
 0018                   .dbfunc e port_init _port_init fV
                        .even
 0018           _port_init::
 0018                   .dbline -1
 0018                   .dbline 124
 0018           ; }
 0018           ; /******************端口初始化*******************************/
 0018           ; void port_init(void) 
 0018           ; {
 0018                   .dbline 125
 0018           ;   DDRB  = 0xFF; 
 0018 8FEF              ldi R24,255
 001A 87BB              out 0x17,R24
 001C                   .dbline 126
 001C           ;  PORTB = 0xFF; //设为输出高电平
 001C 88BB              out 0x18,R24
 001E                   .dbline 128
 001E           ;  
 001E           ;  DDRA  = 0x00; 
 001E 2224              clr R2
 0020 2ABA              out 0x1a,R2
 0022                   .dbline 129
 0022           ;  PORTA = 0x00; //设为高阻态
 0022 2BBA              out 0x1b,R2
 0024                   .dbline 131
 0024           ;   
 0024           ;  PORTD = 0xFF;   //设置RXD0和TXD0
 0024 82BB              out 0x12,R24
 0026                   .dbline 132
 0026           ;  DDRD  = 0x02;
 0026 82E0              ldi R24,2
 0028 81BB              out 0x11,R24
 002A                   .dbline -2
 002A           L2:
 002A                   .dbline 0 ; func end
 002A 0895              ret
 002C                   .dbend
 002C                   .dbfunc e usart_char_send _usart_char_send fV
 002C           ;              i -> R16
                        .even
 002C           _usart_char_send::
 002C                   .dbline -1
 002C                   .dbline 138
 002C           ; 
 002C           ; }
 002C           ; 
 002C           ; //****************发送一个字符******************************
 002C           ; void usart_char_send(uchar i)
 002C           ; {
 002C           L4:
 002C                   .dbline 139
 002C           L5:
 002C                   .dbline 139
 002C           ; while(!(UCSRA&(1<<UDRE)));
 002C 5D9B              sbis 0xb,5
 002E FECF              rjmp L4
 0030                   .dbline 140
 0030           ; UDR=i;
 0030 0CB9              out 0xc,R16
 0032                   .dbline -2
 0032           L3:
 0032                   .dbline 0 ; func end
 0032 0895              ret
 0034                   .dbsym r i 16 c
 0034                   .dbend
 0034                   .dbfunc e usart_str_send _usart_str_send fV
 0034           ;              s -> R20,R21
                        .even
 0034           _usart_str_send::
 0034 0E940000          xcall push_gset1
 0038 A801              movw R20,R16
 003A                   .dbline -1
 003A                   .dbline 144
 003A           ; }
 003A           ; /******************发送一个字符串*************************/
 003A           ; void usart_str_send(char *s) 
 003A           ; {
 003A 05C0              xjmp L9
 003C           L8:
 003C                   .dbline 146
 003C                   .dbline 147
 003C FA01              movw R30,R20
 003E 0081              ldd R16,z+0
 0040 F5DF              xcall _usart_char_send
 0042                   .dbline 148
 0042 4F5F              subi R20,255  ; offset = 1
 0044 5F4F              sbci R21,255
 0046                   .dbline 149
 0046           L9:
 0046                   .dbline 145
 0046           ;  while(*s)
 0046 FA01              movw R30,R20
 0048 2080              ldd R2,z+0
 004A 2220              tst R2
 004C B9F7              brne L8
 004E                   .dbline -2
 004E           L7:
 004E 0E940000          xcall pop_gset1
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbsym r s 20 pc
 0054                   .dbend
 0054                   .dbfunc e usart_send_arry _usart_send_arry fV
 0054           ;              i -> R20
                        .even
 0054           _usart_send_arry::
 0054 0E940000          xcall push_gset1
 0058                   .dbline -1
 0058                   .dbline 153
 0058           ;  {
 0058           ;  usart_char_send(*s); 
 0058           ;  s++;
 0058           ;  }
 0058           ; }
 0058           ; /*****************发送数组数据**************************************/
 0058           ; void usart_send_arry(void)
 0058           ; {
 0058                   .dbline 155
 0058           ; uchar i;
 0058           ; for(i=0;i<19;i++)
 0058 4427              clr R20
 005A 09C0              xjmp L15
 005C           L12:
 005C                   .dbline 156
 005C 80E0              ldi R24,<_y
 005E 90E0              ldi R25,>_y
 0060 E42F              mov R30,R20
 0062 FF27              clr R31
 0064 E80F              add R30,R24
 0066 F91F              adc R31,R25
 0068 0081              ldd R16,z+0
 006A E0DF              xcall _usart_char_send
 006C           L13:
 006C                   .dbline 155
 006C 4395              inc R20
 006E           L15:
 006E                   .dbline 155
 006E 4331              cpi R20,19
 0070 A8F3              brlo L12
 0072                   .dbline -2
 0072           L11:
 0072 0E940000          xcall pop_gset1
 0076                   .dbline 0 ; func end
 0076 0895              ret
 0078                   .dbsym r i 20 c
 0078                   .dbend
 0078                   .dbfunc e usart_char_receive _usart_char_receive fc
                        .even
 0078           _usart_char_receive::
 0078                   .dbline -1
 0078                   .dbline 160
 0078           ; usart_char_send(y[i]);
 0078           ; }
 0078           ; /*****************接收一个字符****************************/
 0078           ; uchar usart_char_receive(void) 
 0078           ; {
 0078           L17:
 0078                   .dbline 161
 0078           L18:
 0078                   .dbline 161
 0078           ; while(!(UCSRA&(1<<RXC)));
 0078 5F9B              sbis 0xb,7
 007A FECF              rjmp L17
 007C                   .dbline 162
 007C           ; return UDR;
 007C 0CB1              in R16,0xc
 007E                   .dbline -2
 007E           L16:
 007E                   .dbline 0 ; func end
 007E 0895              ret
 0080                   .dbend
 0080                   .dbfunc e delay5ms _delay5ms fV
 0080           ;              i -> R16
 0080           ;              j -> R18
                        .even
 0080           _delay5ms::
 0080                   .dbline -1
 0080                   .dbline 168
 0080           ; }

⌨️ 快捷键说明

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