?? ds12997.lis
字號:
.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 + -