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

📄 funcs.lis

📁 1.将uC/OS-II操作系统移植到Mega16上 2.建立两个任务
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .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 + -