📄 ac15-1.lst
字号:
0118 BB84 OUT 0x14,R24
(0134) PORTD = 0xFF;
0119 EF8F LDI R24,0xFF
011A BB82 OUT 0x12,R24
(0135) DDRD = 0x00;
011B BA21 OUT 0x11,R2
011C 9508 RET
(0136) }
(0137) /*************************************/
(0138) char com_data;
(0139) uchar cnt;
(0140) void delay_iic(int n);
(0141) uchar rd_24c01(char a);
(0142) void wr_24c01(char a,char b);
(0143) /******************扫描按键***************/
(0144) uchar scan_key(void)
(0145) {
(0146) uchar temp;
(0147) temp=PIND;
_scan_key:
temp --> R16
011D B300 IN R16,0x10
(0148) return temp;
011E 9508 RET
_delay:
i --> R20
j --> R22
k --> R16
011F 940E034B CALL push_gset2
(0149) }
(0150) /***************延时子函数******************/
(0151) void delay(uint k)
(0152) {
(0153) uint i,j;
(0154) for(i=0;i<k;i++)
0121 2744 CLR R20
0122 2755 CLR R21
0123 C00B RJMP 0x012F
(0155) {for(j=0;j<121;j++)
0124 2766 CLR R22
0125 2777 CLR R23
0126 C002 RJMP 0x0129
0127 5F6F SUBI R22,0xFF
0128 4F7F SBCI R23,0xFF
0129 3769 CPI R22,0x79
012A E0E0 LDI R30,0
012B 077E CPC R23,R30
012C F3D0 BCS 0x0127
012D 5F4F SUBI R20,0xFF
012E 4F5F SBCI R21,0xFF
012F 1740 CP R20,R16
0130 0751 CPC R21,R17
0131 F390 BCS 0x0124
0132 940E033C CALL pop_gset2
0134 9508 RET
(0156) {;}}
(0157) }
(0158) /*****************启动读写时序子函数******************/
(0159) void start(void)
(0160) {DDRC=0x03;
_start:
0135 E083 LDI R24,3
0136 BB84 OUT 0x14,R24
(0161) SDA_1;Some_NOP();
0137 9AA9 SBI 0x15,1
0138 0000 NOP
0139 0000 NOP
013A 0000 NOP
013B 0000 NOP
013C 0000 NOP
013D 0000 NOP
013E 0000 NOP
013F 0000 NOP
(0162) SCL_1;Some_NOP();
0140 9AA8 SBI 0x15,0
0141 0000 NOP
0142 0000 NOP
0143 0000 NOP
0144 0000 NOP
0145 0000 NOP
0146 0000 NOP
0147 0000 NOP
0148 0000 NOP
(0163) SDA_0;Some_NOP();
0149 98A9 CBI 0x15,1
014A 0000 NOP
014B 0000 NOP
014C 0000 NOP
014D 0000 NOP
014E 0000 NOP
014F 0000 NOP
0150 0000 NOP
0151 0000 NOP
(0164) SCL_0;Some_NOP();
0152 98A8 CBI 0x15,0
0153 0000 NOP
0154 0000 NOP
0155 0000 NOP
0156 0000 NOP
0157 0000 NOP
0158 0000 NOP
0159 0000 NOP
015A 0000 NOP
015B 9508 RET
(0165) }
(0166) //********************停止操作子函数*********************
(0167) void stop(void)
(0168) { DDRC=0x03;
_stop:
015C E083 LDI R24,3
015D BB84 OUT 0x14,R24
(0169) SDA_0;Some_NOP();
015E 98A9 CBI 0x15,1
015F 0000 NOP
0160 0000 NOP
0161 0000 NOP
0162 0000 NOP
0163 0000 NOP
0164 0000 NOP
0165 0000 NOP
0166 0000 NOP
(0170) SCL_1;Some_NOP();
0167 9AA8 SBI 0x15,0
0168 0000 NOP
0169 0000 NOP
016A 0000 NOP
016B 0000 NOP
016C 0000 NOP
016D 0000 NOP
016E 0000 NOP
016F 0000 NOP
(0171) SDA_1;Some_NOP();
0170 9AA9 SBI 0x15,1
0171 0000 NOP
0172 0000 NOP
0173 0000 NOP
0174 0000 NOP
0175 0000 NOP
0176 0000 NOP
0177 0000 NOP
0178 0000 NOP
0179 9508 RET
(0172) }
(0173) //************应答子函数*************
(0174) void ack(void)
(0175) { DDRC=0x03;
_ack:
017A E083 LDI R24,3
017B BB84 OUT 0x14,R24
(0176) SCL_1;Some_NOP();
017C 9AA8 SBI 0x15,0
017D 0000 NOP
017E 0000 NOP
017F 0000 NOP
0180 0000 NOP
0181 0000 NOP
0182 0000 NOP
0183 0000 NOP
0184 0000 NOP
(0177) SCL_0;Some_NOP();
0185 98A8 CBI 0x15,0
0186 0000 NOP
0187 0000 NOP
0188 0000 NOP
0189 0000 NOP
018A 0000 NOP
018B 0000 NOP
018C 0000 NOP
018D 0000 NOP
018E 9508 RET
_shift8:
j --> R20
i --> R22
a --> R16
018F 940E034B CALL push_gset2
(0178) }
(0179) //*************写入8位子函数*************
(0180) void shift8(char a)
(0181) {
(0182) uchar i,j;
(0183) DDRC=0x03;
0191 E083 LDI R24,3
0192 BB84 OUT 0x14,R24
(0184) com_data=a;
0193 93000061 STS com_data,R16
(0185) for(i=0;i<8;i++)
0195 2766 CLR R22
0196 C01F RJMP 0x01B6
(0186) {
(0187) j=com_data&0x80;
0197 91400061 LDS R20,com_data
0199 7840 ANDI R20,0x80
(0188) if(j==0)SDA_0;
019A F411 BNE 0x019D
019B 98A9 CBI 0x15,1
019C C001 RJMP 0x019E
(0189) else SDA_1;
019D 9AA9 SBI 0x15,1
(0190)
(0191) SCL_1;Some_NOP();
019E 9AA8 SBI 0x15,0
019F 0000 NOP
01A0 0000 NOP
01A1 0000 NOP
01A2 0000 NOP
01A3 0000 NOP
01A4 0000 NOP
01A5 0000 NOP
01A6 0000 NOP
(0192) SCL_0;Some_NOP();
01A7 98A8 CBI 0x15,0
01A8 0000 NOP
01A9 0000 NOP
01AA 0000 NOP
01AB 0000 NOP
01AC 0000 NOP
01AD 0000 NOP
01AE 0000 NOP
01AF 0000 NOP
(0193) com_data=com_data<<1;
01B0 90200061 LDS R2,com_data
01B2 0C22 LSL R2
01B3 92200061 STS com_data,R2
01B5 9563 INC R22
01B6 3068 CPI R22,0x8
01B7 F2F8 BCS 0x0197
01B8 940E033C CALL pop_gset2
01BA 9508 RET
_rd_24c01:
command --> R20
i --> R20
a --> R22
01BB 940E034B CALL push_gset2
01BD 2F60 MOV R22,R16
(0194) }
(0195) }
(0196) //**************读24C01A中a地址单元的数据************
(0197) uchar rd_24c01(char a)
(0198) {
(0199) uchar i,command;
(0200) DDRC=0x03;
01BE E083 LDI R24,3
01BF BB84 OUT 0x14,R24
(0201) SDA_1;Some_NOP();
01C0 9AA9 SBI 0x15,1
01C1 0000 NOP
01C2 0000 NOP
01C3 0000 NOP
01C4 0000 NOP
01C5 0000 NOP
01C6 0000 NOP
01C7 0000 NOP
01C8 0000 NOP
(0202) SCL_0;Some_NOP();
01C9 98A8 CBI 0x15,0
01CA 0000 NOP
01CB 0000 NOP
01CC 0000 NOP
01CD 0000 NOP
01CE 0000 NOP
01CF 0000 NOP
01D0 0000 NOP
01D1 0000 NOP
(0203) start();
01D2 DF62 RCALL _start
(0204) command=160;
01D3 EA40 LDI R20,0xA0
(0205) shift8(command);
01D4 2F04 MOV R16,R20
01D5 DFB9 RCALL _shift8
(0206) ack();
01D6 DFA3 RCALL _ack
(0207) shift8(a);
01D7 2F06 MOV R16,R22
01D8 DFB6 RCALL _shift8
(0208) ack();
01D9 DFA0 RCALL _ack
(0209) start();
01DA DF5A RCALL _start
(0210) command=161;
01DB EA41 LDI R20,0xA1
(0211) shift8(command);
01DC 2F04 MOV R16,R20
01DD DFB1 RCALL _shift8
(0212) ack();
01DE DF9B RCALL _ack
(0213)
(0214) SDA_1;Some_NOP();
01DF 9AA9 SBI 0x15,1
01E0 0000 NOP
01E1 0000 NOP
01E2 0000 NOP
01E3 0000 NOP
01E4 0000 NOP
01E5 0000 NOP
01E6 0000 NOP
01E7 0000 NOP
(0215) for(i=0;i<8;i++)
01E8 2744 CLR R20
01E9 C026 RJMP 0x0210
(0216) {
(0217) DDRC=0x01;
01EA E081 LDI R24,1
01EB BB84 OUT 0x14,R24
(0218) com_data=com_data<<1;
01EC 90200061 LDS R2,com_data
01EE 0C22 LSL R2
01EF 92200061 STS com_data,R2
(0219) SCL_1;Some_NOP();
01F1 9AA8 SBI 0x15,0
01F2 0000 NOP
01F3 0000 NOP
01F4 0000 NOP
01F5 0000 NOP
01F6 0000 NOP
01F7 0000 NOP
01F8 0000 NOP
01F9 0000 NOP
(0220) if(PIN_SDA==0)com_data&=0xfe;
01FA 9999 SBIC 0x13,1
01FB C005 RJMP 0x0201
01FC 2D82 MOV R24,R2
01FD 7F8E ANDI R24,0xFE
01FE 93800061 STS com_data,R24
0200 C005 RJMP 0x0206
(0221) else com_data|=0x01;
0201 91800061 LDS R24,com_data
0203 6081 ORI R24,1
0204 93800061 STS com_data,R24
(0222) SCL_0;Some_NOP();
0206 98A8 CBI 0x15,0
0207 0000 NOP
0208 0000 NOP
0209 0000 NOP
020A 0000 NOP
020B 0000 NOP
020C 0000 NOP
020D 0000 NOP
020E 0000 NOP
020F 9543 INC R20
0210 3048 CPI R20,0x8
0211 F2C0 BCS 0x01EA
(0223) }
(0224) stop();
0212 DF49 RCALL _stop
(0225) return(com_data);
0213 91000061 LDS R16,com_data
0215 940E033C CALL pop_gset2
0217 9508 RET
_wr_24c01:
command --> R10
b --> R20
a --> R22
0218 940E0349 CALL push_gset3
021A 2F42 MOV R20,R18
021B 2F60 MOV R22,R16
(0226) }
(0227) //********将RAM中b地址单元的数据写入24C01A中a地址单元中***********
(0228) void wr_24c01(char a,char b)
(0229) {
(0230) uchar command;
(0231) DDRC=0x03;
021C E083 LDI R24,3
021D BB84 OUT 0x14,R24
(0232) SDA_1;Some_NOP();
021E 9AA9 SBI 0x15,1
021F 0000 NOP
0220 0000 NOP
0221 0000 NOP
0222 0000 NOP
0223 0000 NOP
0224 0000 NOP
0225 0000 NOP
0226 0000 NOP
(0233) SCL_0;Some_NOP();
0227 98A8 CBI 0x15,0
0228 0000 NOP
0229 0000 NOP
022A 0000 NOP
022B 0000 NOP
022C 0000 NOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -