?? funcs.lis
字號:
.module funcs.c
.area text(rom, con, rel)
0000 .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII/AVR_PQ1A.h
0000 .dbfunc e Delayus _Delayus fV
0000 ; i -> R20,R21
0000 ; US -> R22,R23
.even
0000 _Delayus::
0000 0E940000 xcall push_gset2
0004 B801 movw R22,R16
0006 .dbline -1
0006 .dbline 29
0006 ;
0006 ; #ifndef OS_MASTER_FILE
0006 ; #include "includes.h"
0006 ; #include "AVR_PQ1A.h"
0006 ; #endif
0006 ;
0006 ; #pragma data:code
0006 ; const SEGMENT[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,
0006 ; 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
0006 ; #pragma data:data
0006 ; /*******************************************
0006 ; 函數名稱: DS1302_init
0006 ; 功 能: 初始化DS1302的數據接口
0006 ; 參 數: 無
0006 ; 返回值 : 無
0006 ; /********************************************/
0006 ; void DS1302_portinit(void)
0006 ; {
0006 ; DDRB|=BIT(RTC_CLK)|BIT(RTC_DATA)|BIT(RTC_CS);//將時鐘端(RTC_CLK)數據端(RTC_DATA)片選端(RTC_CS)設置為輸出
0006 ; }
0006 ; /*******************************************
0006 ; 函數名稱: DS1302_writeB
0006 ; 功 能: 向DS1302寫入一個字節數據(沒有RST操作)
0006 ; 參 數: byte--要寫入的數據
0006 ; 返回值 : 無
0006 ; /********************************************/
0006 ; void DS1302_writeB(uchar byte)
0006 ; {
0006 ; uchar i;
0006 .dbline 31
0006 ; for(i=0;i<8;i++) //8位數據計數
0006 ; {
0006 05E0 ldi R16,5
0008 10E0 ldi R17,0
000A 9B01 movw R18,R22
000C 0E940000 xcall empy16s
0010 B801 movw R22,R16
0012 7695 lsr R23
0014 6795 ror R22
0016 7695 lsr R23
0018 6795 ror R22
001A .dbline 32
001A 4427 clr R20
001C 5527 clr R21
001E 02C0 xjmp L6
0020 L3:
0020 .dbline 32
0020 L4:
0020 .dbline 32
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 L6:
0024 .dbline 32
0024 ; PORTB&=~BIT(RTC_CLK); //拉低時鐘端
0024 4617 cp R20,R22
0026 5707 cpc R21,R23
0028 D8F3 brlo L3
002A .dbline -2
002A .dbline 33
002A ; if(byte&0x01) //當前位是否是1
002A L2:
002A 0E940000 xcall pop_gset2
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r i 20 i
0030 .dbsym r US 22 i
0030 .dbend
0030 .dbfunc e Delayms _Delayms fV
0030 ; i -> R20,R21
0030 ; j -> R22,R23
0030 ; MS -> R16,R17
.even
0030 _Delayms::
0030 0E940000 xcall push_gset2
0034 .dbline -1
0034 .dbline 41
0034 ; {
0034 ; PORTB|=BIT(RTC_DATA); //當前位是1,拉高數據端
0034 ; }
0034 ; else
0034 ; {
0034 ; PORTB&=~BIT(RTC_DATA); //當前位是0,拉低數據端
0034 ; }
0034 ; Delayus(10); //調整時鐘和脈沖寬度
0034 .dbline 43
0034 ; PORTB|=BIT(RTC_CLK); //時鐘上升沿(DS1302采樣數據)
0034 ; byte>>=1; //數據右移1位,為送出新數據位做準備
0034 4427 clr R20
0036 5527 clr R21
0038 0BC0 xjmp L11
003A L8:
003A .dbline 44
003A 6627 clr R22
003C 7727 clr R23
003E 02C0 xjmp L15
0040 L12:
0040 .dbline 44
0040 L13:
0040 .dbline 44
0040 6F5F subi R22,255 ; offset = 1
0042 7F4F sbci R23,255
0044 L15:
0044 .dbline 44
0044 6537 cpi R22,117
0046 E4E0 ldi R30,4
0048 7E07 cpc R23,R30
004A D0F3 brlo L12
004C L9:
004C .dbline 43
004C 4F5F subi R20,255 ; offset = 1
004E 5F4F sbci R21,255
0050 L11:
0050 .dbline 43
0050 4017 cp R20,R16
0052 5107 cpc R21,R17
0054 90F3 brlo L8
0056 .dbline -2
0056 .dbline 45
0056 ; }
0056 ; }
0056 L7:
0056 0E940000 xcall pop_gset2
005A .dbline 0 ; func end
005A 0895 ret
005C .dbsym r i 20 i
005C .dbsym r j 22 i
005C .dbsym r MS 16 i
005C .dbend
005C .dbfunc e Board_init _Board_init fV
.even
005C _Board_init::
005C .dbline -1
005C .dbline 53
005C ; /*******************************************
005C ; 函數名稱: DS1302_readB
005C ; 功 能: 從DS1302讀出一個字節數據(沒有RST操作)
005C ; 參 數: 無
005C ; 返回值 : byte--讀出的數據
005C ; /********************************************/
005C ; uchar DS1302_readB(void)
005C ; {
005C .dbline 54
005C ; uchar i,byte=0;
005C 2224 clr R2
005E 2DB8 out 0xd,R2
0060 .dbline 56
0060 ; DDRB&=~BIT(RTC_DATA); //將數據端口設置為輸入
0060 ; PORTB&=~BIT(RTC_DATA); //無上拉電阻
0060 8FEF ldi R24,255
0062 8ABB out 0x1a,R24
0064 .dbline 57
0064 ; for(i=0;i<8;i++) //8位數據計數
0064 87BB out 0x17,R24
0066 .dbline 58
0066 ; {
0066 84BB out 0x14,R24
0068 .dbline 59
0068 ; byte>>=1; //保存讀入的數據位
0068 81BB out 0x11,R24
006A .dbline 61
006A ; PORTB|=BIT(RTC_CLK); //時鐘上升沿
006A ; Delayus(10); //延時,調整時鐘脈沖寬度
006A 8BB3 in R24,0x1b
006C 8266 ori R24,98
006E 8BBB out 0x1b,R24
0070 .dbline 62
0070 ; PORTB&=~BIT(RTC_CLK); //時鐘下降沿,DS1302輸出數據位
0070 AE98 cbi 0x15,6
0072 .dbline 63
0072 ; Delayus(10); //等待數據變化(MEGA16太快,必須等待DS1302的數據位輸出,否則不能正確讀出)
0072 8FEF ldi R24,255
0074 88BB out 0x18,R24
0076 .dbline 64
0076 ; if(PINB&BIT(RTC_DATA)) //當前位是否是高電平
0076 05E0 ldi R16,5
0078 10E0 ldi R17,0
007A C2DF xcall _Delayus
007C .dbline 65
007C ; {
007C DA9A sbi 0x1b,2
007E .dbline 66
007E ; byte|=BIT(PB7); //是高電平就將返回數據的當前位置1
007E 0FE0 ldi R16,15
0080 10E0 ldi R17,0
0082 BEDF xcall _Delayus
0084 .dbline 67
0084 ; }
0084 DA98 cbi 0x1b,2
0086 .dbline 69
0086 ; else
0086 ; {
0086 2224 clr R2
0088 28BA out 0x18,R2
008A .dbline 70
008A ; byte&=~BIT(PB7); //是低電平就將返回數據的當前位置0
008A 05E0 ldi R16,5
008C 10E0 ldi R17,0
008E B8DF xcall _Delayus
0090 .dbline 71
0090 ; }
0090 DB9A sbi 0x1b,3
0092 .dbline 72
0092 ; }
0092 0FE0 ldi R16,15
0094 10E0 ldi R17,0
0096 B4DF xcall _Delayus
0098 .dbline 73
0098 ; DDRB|=BIT(RTC_DATA); //最后將數據端口設置為輸出
0098 DB98 cbi 0x1b,3
009A .dbline 75
009A ; return byte; //返回讀出的數據
009A ; }
009A 8FEF ldi R24,255
009C 88BB out 0x18,R24
009E .dbline 76
009E ; /*******************************************
009E 05E0 ldi R16,5
00A0 10E0 ldi R17,0
00A2 AEDF xcall _Delayus
00A4 .dbline 77
00A4 ; 函數名稱: DS1302_writeD
00A4 DC9A sbi 0x1b,4
00A6 .dbline 78
00A6 ; 功 能: 向DS1302的某個地址寫入一個字節數據
00A6 0FE0 ldi R16,15
00A8 10E0 ldi R17,0
00AA AADF xcall _Delayus
00AC .dbline 79
00AC ; 參 數: addr--地址值(寄存器或RAM)
00AC DC98 cbi 0x1b,4
00AE .dbline 81
00AE ; data--要寫入的地址
00AE ; 返回值 : 無
00AE 80EF ldi R24,240
00B0 82BB out 0x12,R24
00B2 .dbline 82
00B2 ; /********************************************/
00B2 05E0 ldi R16,5
00B4 10E0 ldi R17,0
00B6 A4DF xcall _Delayus
00B8 .dbline 83
00B8 ; void DS1302_writeD(uchar addr,uchar data)
00B8 DF9A sbi 0x1b,7
00BA .dbline 84
00BA ; {
00BA 05E0 ldi R16,5
00BC 10E0 ldi R17,0
00BE A0DF xcall _Delayus
00C0 .dbline 85
00C0 ; PORTC&=~BIT(RTC_CS); //拉低片選端
00C0 DF98 cbi 0x1b,7
00C2 .dbline -2
00C2 .dbline 86
00C2 ; PORTB&=~BIT(RTC_CLK); //拉低時鐘端
00C2 L16:
00C2 .dbline 0 ; func end
00C2 0895 ret
00C4 .dbend
.area code(ram, con, rel)
0000 .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII/AVR_PQ1A.h
.area lit(rom, con, rel)
0000 _SEGMENT::
0000 3F00 .word 63
0002 0600 .word 6
0004 5B00 .word 91
0006 4F00 .word 79
0008 6600 .word 102
000A 6D00 .word 109
000C 7D00 .word 125
000E 0700 .word 7
0010 7F00 .word 127
0012 6F00 .word 111
0014 7700 .word 119
0016 7C00 .word 124
0018 3900 .word 57
001A 5E00 .word 94
001C 7900 .word 121
001E 7100 .word 113
0020 .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\funcs.c
0020 .dbsym e SEGMENT _SEGMENT A[32:16]I
.area data(ram, con, rel)
0000 .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\funcs.c
.area text(rom, con, rel)
00C4 .dbfile C:\icc\examples.avr\AVR_PQ1A_DEMO\21_uCOSII\funcs.c
00C4 .dbfunc e DS1302_portinit _DS1302_portinit fV
.even
00C4 _DS1302_portinit::
00C4 .dbline -1
00C4 .dbline 18
00C4 .dbline 19
00C4 87B3 in R24,0x17
00C6 806A ori R24,160
00C8 87BB out 0x17,R24
00CA .dbline -2
00CA .dbline 20
00CA L17:
00CA .dbline 0 ; func end
00CA 0895 ret
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -