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

📄 jhd12864.lis

📁 ds1302事实时钟+12864液晶显示 4094
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .module jhd12864.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\AVR实验\ds1302+12864时钟\jhd12864.c
 0000                   .dbfunc e delayms _delayms fI
 0000           ;              i -> R16,R17
                        .even
 0000           _delayms::
 0000                   .dbline -1
 0000                   .dbline 5
 0000           ; #include "jhd12864.h"
 0000           ; 
 0000           ; 
 0000           ; delayms()
 0000           ; {  unsigned int i=0;
 0000                   .dbline 5
 0000 0027              clr R16
 0002 1127              clr R17
 0004 02C0              rjmp L3
 0006           L2:
 0006                   .dbline 7
 0006           ;    while(i!=1140)
 0006           ;    {
 0006                   .dbline 8
 0006           ;    i++;
 0006 0F5F              subi R16,255  ; offset = 1
 0008 1F4F              sbci R17,255
 000A                   .dbline 9
 000A           ;    }
 000A           L3:
 000A                   .dbline 6
 000A 0437              cpi R16,116
 000C E4E0              ldi R30,4
 000E 1E07              cpc R17,R30
 0010 D1F7              brne L2
 0012           X0:
 0012                   .dbline -2
 0012           L1:
 0012                   .dbline 0 ; func end
 0012 0895              ret
 0014                   .dbsym r i 16 i
 0014                   .dbend
 0014                   .dbfunc e delay_1ms _delay_1ms fV
 0014           ;              j -> R20,R21
 0014           ;              t -> R10,R11
                        .even
 0014           _delay_1ms::
 0014 00D0              rcall push_xgset300C
 0016 5801              movw R10,R16
 0018                   .dbline -1
 0018                   .dbline 13
 0018           ; }
 0018           ; 
 0018           ; void delay_1ms(unsigned int t)
 0018           ; { 
 0018                   .dbline 14
 0018           ;   unsigned int j=0;
 0018 4427              clr R20
 001A 5527              clr R21
 001C 03C0              rjmp L7
 001E           L6:
 001E                   .dbline 16
 001E           ;   while(j<t)
 001E           ;   {
 001E                   .dbline 17
 001E           ;     delayms();
 001E F0DF              rcall _delayms
 0020                   .dbline 18
 0020           ;       j++;
 0020 4F5F              subi R20,255  ; offset = 1
 0022 5F4F              sbci R21,255
 0024                   .dbline 19
 0024           ;       }
 0024           L7:
 0024                   .dbline 15
 0024 4A15              cp R20,R10
 0026 5B05              cpc R21,R11
 0028 D0F3              brlo L6
 002A           X1:
 002A                   .dbline -2
 002A           L5:
 002A                   .dbline 0 ; func end
 002A 00C0              rjmp pop_xgset300C
 002C                   .dbsym r j 20 i
 002C                   .dbsym r t 10 i
 002C                   .dbend
 002C                   .dbfunc e W_1byte _W_1byte fV
 002C           ;         H_data -> R22,R23
 002C           ;           S_ID -> R10,R11
 002C           ;         L_data -> R20,R21
 002C           ;         W_data -> R12
 002C           ;             RS -> R14
 002C           ;             RW -> R20
                        .even
 002C           _W_1byte::
 002C 00D0              rcall push_xgsetF0FC
 002E E22E              mov R14,R18
 0030 402F              mov R20,R16
 0032 CA84              ldd R12,y+10
 0034                   .dbline -1
 0034                   .dbline 39
 0034           ; }
 0034           ; 
 0034           ; 
 0034           ; 
 0034           ; 
 0034           ; /*******************************************************************
 0034           ; 函 数 名:W_1byte
 0034           ; 入口参数:RW、RS、W_data
 0034           ; 出口参数:无
 0034           ; 建立日期:2007年3月3日
 0034           ; 修改日期:
 0034           ; 函数作用:写一个字节的数据到12864液晶,包括指令和数据
 0034           ; 说    明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶;
 0034           ;                (一般RW都设为0,即只向液晶写数据,不读数据)
 0034           ;           RS=1,写入的是数据;RS=0,写入的是指令;
 0034           ;                 一般模式:RW=0,RS=1;写数据
 0034           ;                                       RW=0,RS=0;写指令
 0034           ; ********************************************************************/
 0034           ; void W_1byte(uchar RW, uchar RS, uchar W_data)
 0034           ; {
 0034                   .dbline 40
 0034           ;       uint H_data,L_data,S_ID = 0xf8;  //11111RWRS0
 0034 88EF              ldi R24,248
 0036 90E0              ldi R25,0
 0038 5C01              movw R10,R24
 003A                   .dbline 41
 003A           ;       if(RW == 0)
 003A 4423              tst R20
 003C 19F4              brne L10
 003E           X2:
 003E                   .dbline 42
 003E           ;       {
 003E                   .dbline 43
 003E           ;               S_ID &=~ 0x04;
 003E 8B7F              andi R24,251
 0040 5C01              movw R10,R24
 0042                   .dbline 44
 0042           ;       }
 0042 03C0              rjmp L11
 0044           L10:
 0044                   .dbline 46
 0044           ;       else                                    //if(RW==1)    ????
 0044           ;       {
 0044                   .dbline 47
 0044           ;               S_ID |= 0X04;
 0044 C501              movw R24,R10
 0046 8460              ori R24,4
 0048 5C01              movw R10,R24
 004A                   .dbline 48
 004A           ;       }
 004A           L11:
 004A                   .dbline 49
 004A           ;       if(RS == 0)
 004A EE20              tst R14
 004C 21F4              brne L12
 004E           X3:
 004E                   .dbline 50
 004E           ;       {
 004E                   .dbline 51
 004E           ;               S_ID &=~ 0x02;
 004E C501              movw R24,R10
 0050 8D7F              andi R24,253
 0052 5C01              movw R10,R24
 0054                   .dbline 52
 0054           ;       }
 0054 03C0              rjmp L13
 0056           L12:
 0056                   .dbline 54
 0056           ;       else                                    //if(RS==1)   ?????
 0056           ;       {
 0056                   .dbline 55
 0056           ;               S_ID |= 0X02;
 0056 C501              movw R24,R10
 0058 8260              ori R24,2
 005A 5C01              movw R10,R24
 005C                   .dbline 56
 005C           ;       }
 005C           L13:
 005C                   .dbline 57
 005C           ;       H_data = W_data;
 005C 6C2D              mov R22,R12
 005E 7727              clr R23
 0060                   .dbline 58
 0060           ;       H_data &= 0xf0;                 //屏蔽低4位的数据
 0060 607F              andi R22,240
 0062 7070              andi R23,0
 0064                   .dbline 59
 0064           ;       L_data = W_data;                //xxxx0000格式
 0064 4C2D              mov R20,R12
 0066 5527              clr R21
 0068                   .dbline 60
 0068           ;       L_data &= 0x0f;                 //屏蔽高4位的数据
 0068 4F70              andi R20,15
 006A 5070              andi R21,0
 006C                   .dbline 61
 006C           ;       L_data <<= 4;                   //xxxx0000格式
 006C 440F              lsl R20
 006E 551F              rol R21
 0070 440F              lsl R20
 0072 551F              rol R21
 0074 440F              lsl R20
 0076 551F              rol R21
 0078 440F              lsl R20
 007A 551F              rol R21
 007C                   .dbline 62
 007C           ;       Set_CS();
 007C AD9A              sbi 0x15,5
 007E                   .dbline 63
 007E           ;       Write_8bits(S_ID);              //发送S_ID
 007E 8501              movw R16,R10
 0080 06D0              rcall _Write_8bits
 0082                   .dbline 64
 0082           ;       Write_8bits(H_data);    //发送H_data
 0082 8B01              movw R16,R22
 0084 04D0              rcall _Write_8bits
 0086                   .dbline 65
 0086           ;       Write_8bits(L_data);    //发送L_data
 0086 8A01              movw R16,R20
 0088 02D0              rcall _Write_8bits
 008A                   .dbline 68
 008A           ;       //Write_8bits(W_data);
 008A           ;       
 008A           ;       Clr_CS();       
 008A AD98              cbi 0x15,5
 008C                   .dbline -2
 008C           L9:
 008C                   .dbline 0 ; func end
 008C 00C0              rjmp pop_xgsetF0FC
 008E                   .dbsym r H_data 22 i
 008E                   .dbsym r S_ID 10 i
 008E                   .dbsym r L_data 20 i
 008E                   .dbsym r W_data 12 c
 008E                   .dbsym r RS 14 c
 008E                   .dbsym r RW 20 c
 008E                   .dbend
 008E                   .dbfunc e Write_8bits _Write_8bits fV
 008E           ;      Temp_data -> R12,R13
 008E           ;              i -> R20,R21
 008E           ;         W_bits -> R10,R11
                        .even
 008E           _Write_8bits::
 008E 00D0              rcall push_xgset303C
 0090 5801              movw R10,R16
 0092                   .dbline -1
 0092                   .dbline 82
 0092           ; }
 0092           ; 
 0092           ; 
 0092           ; /********************************************************************
 0092           ; 函 数 名:Write_8bits
 0092           ; 入口参数:W_bits
 0092           ; 出口参数:无
 0092           ; 建立日期:2007年3月3日
 0092           ; 修改日期:
 0092           ; 函数作用:负责串行输出8个bit位
 0092           ; 说    明:
 0092           ; ********************************************************************/
 0092           ; void Write_8bits(uint W_bits)
 0092           ; {
 0092                   .dbline 85
 0092           ;       uint i,Temp_data;
 0092           ; //    feed_dog;
 0092           ;       for(i=0; i<8; i++)
 0092 4427              clr R20
 0094 5527              clr R21
 0096 13C0              rjmp L18
 0098           L15:
 0098                   .dbline 86
 0098           ;       {
 0098                   .dbline 87
 0098           ;               Temp_data = W_bits;
 0098 6501              movw R12,R10
 009A                   .dbline 88
 009A           ;               Temp_data <<= i;
 009A 9A01              movw R18,R20
 009C 8601              movw R16,R12
 009E 00D0              rcall lsl16
 00A0 6801              movw R12,R16
 00A2                   .dbline 89
 00A2           ;               if((Temp_data&0x80)==0)
 00A2 07FD              sbrc R16,7
 00A4 02C0              rjmp L19
 00A6           X4:
 00A6                   .dbline 90
 00A6           ;               {
 00A6                   .dbline 91
 00A6           ;                       Clr_SID();
 00A6 AE98              cbi 0x15,6
 00A8                   .dbline 92
 00A8           ;               }
 00A8 01C0              rjmp L20
 00AA           L19:
 00AA                   .dbline 94
 00AA           ;               else
 00AA           ;               {
 00AA                   .dbline 95
 00AA           ;                       Set_SID();
 00AA AE9A              sbi 0x15,6
 00AC                   .dbline 96
 00AC           ;               } 
 00AC           L20:
 00AC                   .dbline 97
 00AC           ;               asm("nop");
 00AC 0000              nop
 00AE                   .dbline 98
 00AE           ;               Set_SCLK();
 00AE AF9A              sbi 0x15,7
 00B0                   .dbline 99
 00B0           ;               asm("nop");
 00B0 0000              nop
 00B2                   .dbline 100
 00B2           ;               asm("nop");
 00B2 0000              nop
 00B4                   .dbline 101
 00B4           ;               Clr_SCLK();
 00B4 AF98              cbi 0x15,7
 00B6                   .dbline 102
 00B6           ;               asm("nop");
 00B6 0000              nop
 00B8                   .dbline 103
 00B8           ;               Clr_SID();
 00B8 AE98              cbi 0x15,6
 00BA                   .dbline 104
 00BA           ;       }
 00BA           L16:
 00BA                   .dbline 85
 00BA 4F5F              subi R20,255  ; offset = 1
 00BC 5F4F              sbci R21,255
 00BE           L18:
 00BE                   .dbline 85

⌨️ 快捷键说明

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