📄 ac15-3.lis
字号:
00DA ; CMD -> R20
.even
00DA _LcdWriteCommand::
00DA 0E940000 xcall push_gset2
00DE 622F mov R22,R18
00E0 402F mov R20,R16
00E2 .dbline -1
00E2 .dbline 111
00E2 ; }
00E2 ;
00E2 ; //********************写命令到LCM子函数********************
00E2 ; void LcdWriteCommand(uchar CMD,uchar Attribc)
00E2 ; {
00E2 .dbline 112
00E2 ; if(Attribc)WaitForEnable();
00E2 6623 tst R22
00E4 09F0 breq L17
00E6 .dbline 112
00E6 1CD0 xcall _WaitForEnable
00E8 L17:
00E8 .dbline 113
00E8 ; LCM_RS_0;LCM_RW_0;_NOP();
00E8 C098 cbi 0x18,0
00EA .dbline 113
00EA C198 cbi 0x18,1
00EC .dbline 113
00EC 0000 nop
00EE .dbline 114
00EE ; DataPort=CMD;_NOP();
00EE 4BBB out 0x1b,R20
00F0 .dbline 114
00F0 0000 nop
00F2 .dbline 115
00F2 ; LCM_EN_1;_NOP();_NOP();LCM_EN_0;
00F2 C29A sbi 0x18,2
00F4 .dbline 115
00F4 0000 nop
00F6 .dbline 115
00F6 0000 nop
00F8 .dbline 115
00F8 C298 cbi 0x18,2
00FA .dbline -2
00FA L16:
00FA 0E940000 xcall pop_gset2
00FE .dbline 0 ; func end
00FE 0895 ret
0100 .dbsym r Attribc 22 c
0100 .dbsym r CMD 20 c
0100 .dbend
0100 .dbfunc e LcdWriteData _LcdWriteData fV
0100 ; dataW -> R20
.even
0100 _LcdWriteData::
0100 0E940000 xcall push_gset1
0104 402F mov R20,R16
0106 .dbline -1
0106 .dbline 120
0106 ; }
0106 ;
0106 ; //*******************写数据到LCM子函数********************
0106 ; void LcdWriteData(uchar dataW)
0106 ; {
0106 .dbline 121
0106 ; WaitForEnable();
0106 0CD0 xcall _WaitForEnable
0108 .dbline 122
0108 ; LCM_RS_1;LCM_RW_0;_NOP();
0108 C09A sbi 0x18,0
010A .dbline 122
010A C198 cbi 0x18,1
010C .dbline 122
010C 0000 nop
010E .dbline 123
010E ; DataPort=dataW;_NOP();
010E 4BBB out 0x1b,R20
0110 .dbline 123
0110 0000 nop
0112 .dbline 124
0112 ; LCM_EN_1;_NOP();_NOP();LCM_EN_0;
0112 C29A sbi 0x18,2
0114 .dbline 124
0114 0000 nop
0116 .dbline 124
0116 0000 nop
0118 .dbline 124
0118 C298 cbi 0x18,2
011A .dbline -2
011A L19:
011A 0E940000 xcall pop_gset1
011E .dbline 0 ; func end
011E 0895 ret
0120 .dbsym r dataW 20 c
0120 .dbend
0120 .dbfunc e WaitForEnable _WaitForEnable fV
0120 ; val -> R16
.even
0120 _WaitForEnable::
0120 .dbline -1
0120 .dbline 129
0120 ; }
0120 ;
0120 ; //*******************检测LCD忙信号子函数*********************
0120 ; void WaitForEnable(void)
0120 ; {
0120 .dbline 131
0120 ; uchar val;
0120 ; DataPort=0xff;
0120 8FEF ldi R24,255
0122 8BBB out 0x1b,R24
0124 .dbline 132
0124 ; LCM_RS_0;LCM_RW_1;_NOP();
0124 C098 cbi 0x18,0
0126 .dbline 132
0126 C19A sbi 0x18,1
0128 .dbline 132
0128 0000 nop
012A .dbline 133
012A ; LCM_EN_1;_NOP();_NOP();
012A C29A sbi 0x18,2
012C .dbline 133
012C 0000 nop
012E .dbline 133
012E 0000 nop
0130 .dbline 134
0130 ; DDRA=0x00;
0130 2224 clr R2
0132 2ABA out 0x1a,R2
0134 .dbline 135
0134 ; val=PINA;
0134 09B3 in R16,0x19
0136 01C0 xjmp L22
0138 L21:
0138 .dbline 136
0138 09B3 in R16,0x19
013A L22:
013A .dbline 136
013A ; while(val&Busy)val=PINA;
013A 07FD sbrc R16,7
013C FDCF rjmp L21
013E .dbline 137
013E ; LCM_EN_0;
013E C298 cbi 0x18,2
0140 .dbline 138
0140 ; DDRA=0xff;
0140 8FEF ldi R24,255
0142 8ABB out 0x1a,R24
0144 .dbline -2
0144 L20:
0144 .dbline 0 ; func end
0144 0895 ret
0146 .dbsym r val 16 c
0146 .dbend
0146 .dbfunc e port_init _port_init fV
.even
0146 _port_init::
0146 .dbline -1
0146 .dbline 143
0146 ; }
0146 ;
0146 ; /********************端口初始化******************/
0146 ; void port_init(void)
0146 ; {
0146 .dbline 144
0146 ; PORTA = 0x00;
0146 2224 clr R2
0148 2BBA out 0x1b,R2
014A .dbline 145
014A ; DDRA = 0xFF;
014A 8FEF ldi R24,255
014C 8ABB out 0x1a,R24
014E .dbline 146
014E ; PORTB = 0x00;
014E 28BA out 0x18,R2
0150 .dbline 147
0150 ; DDRB = 0xFF;
0150 87BB out 0x17,R24
0152 .dbline 148
0152 ; PORTC = 0x00;
0152 25BA out 0x15,R2
0154 .dbline 149
0154 ; DDRC = 0x03;
0154 83E0 ldi R24,3
0156 84BB out 0x14,R24
0158 .dbline 150
0158 ; PORTD = 0xFF;
0158 8FEF ldi R24,255
015A 82BB out 0x12,R24
015C .dbline 151
015C ; DDRD = 0x00;
015C 21BA out 0x11,R2
015E .dbline -2
015E L24:
015E .dbline 0 ; func end
015E 0895 ret
0160 .dbend
0160 .dbfunc e scan_key _scan_key fc
0160 ; temp -> R16
.even
0160 _scan_key::
0160 .dbline -1
0160 .dbline 156
0160 ; }
0160 ;
0160 ; /*******************扫描按键******************/
0160 ; uchar scan_key(void)
0160 ; {
0160 .dbline 158
0160 ; uchar temp;
0160 ; temp=PIND;
0160 00B3 in R16,0x10
0162 .dbline 159
0162 ; return temp;
0162 .dbline -2
0162 L25:
0162 .dbline 0 ; func end
0162 0895 ret
0164 .dbsym r temp 16 c
0164 .dbend
0164 .dbfunc e i2c_Read _i2c_Read fc
0164 ; temp -> R20
0164 ; RomAddress -> R16
.even
0164 _i2c_Read::
0164 0E940000 xcall push_gset1
0168 .dbline -1
0168 .dbline 167
0168 ; }
0168 ;
0168 ; /******************************************
0168 ; I2C总线读一个字节
0168 ; 如果读失败返回0
0168 ; *******************************************/
0168 ; unsigned char i2c_Read(unsigned char RomAddress)
0168 ; {
0168 .dbline 169
0168 ; unsigned char temp;
0168 ; Start();
0168 84EA ldi R24,164
016A 86BF out 0x36,R24
016C .dbline 170
016C L27:
016C .dbline 170
016C L28:
016C .dbline 170
016C ; Wait();
016C 26B6 in R2,0x36
016E 27FE sbrs R2,7
0170 FDCF rjmp L27
0172 .dbline 170
0172 .dbline 170
0172 .dbline 171
0172 ; if (TestAck()!=START) return 0;
0172 81B1 in R24,0x1
0174 887F andi R24,248
0176 8830 cpi R24,8
0178 11F0 breq L30
017A .dbline 171
017A 0027 clr R16
017C 40C0 xjmp L26
017E L30:
017E .dbline 172
017E ; Write8Bit(wr_device_add);
017E .dbline 172
017E 80EA ldi R24,160
0180 83B9 out 0x3,R24
0182 .dbline 172
0182 84E8 ldi R24,132
0184 86BF out 0x36,R24
0186 .dbline 172
0186 .dbline 172
0186 .dbline 173
0186 L32:
0186 .dbline 173
0186 L33:
0186 .dbline 173
0186 ; Wait();
0186 26B6 in R2,0x36
0188 27FE sbrs R2,7
018A FDCF rjmp L32
018C .dbline 173
018C .dbline 173
018C .dbline 174
018C ; if (TestAck()!=MT_SLA_ACK) return 0;
018C 81B1 in R24,0x1
018E 887F andi R24,248
0190 8831 cpi R24,24
0192 11F0 breq L35
0194 .dbline 174
0194 0027 clr R16
0196 33C0 xjmp L26
0198 L35:
0198 .dbline 175
0198 ; Write8Bit(RomAddress);
0198 .dbline 175
0198 03B9 out 0x3,R16
019A .dbline 175
019A 84E8 ldi R24,132
019C 86BF out 0x36,R24
019E .dbline 175
019E .dbline 175
019E .dbline 176
019E L37:
019E .dbline 176
019E L38:
019E .dbline 176
019E ; Wait();
019E 26B6 in R2,0x36
01A0 27FE sbrs R2,7
01A2 FDCF rjmp L37
01A4 .dbline 176
01A4 .dbline 176
01A4 .dbline 177
01A4 ; if (TestAck()!=MT_DATA_ACK) return 0;
01A4 81B1 in R24,0x1
01A6 887F andi R24,248
01A8 8832 cpi R24,40
01AA 11F0 breq L40
01AC .dbline 177
01AC 0027 clr R16
01AE 27C0 xjmp L26
01B0 L40:
01B0 .dbline 178
01B0 ; Start();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -