📄 pcf8591.lst
字号:
(0004) 目 的: 建立PCF8591测试程序
(0005)
(0006) 目标系统: 基于AVR单片机
(0007)
(0008) 应用软件: ICCAVR
(0009)
(0010) 版 本: Version 1.0
(0011)
(0012) 圆版时间: 2005-06-25
(0013)
(0014) 开发人员: SEE(中文名不告诉你~怕你骂我)
(0015)
(0016) 说 明: 若用于商业用途,请保留此段文字或注明代码来源
(0017)
(0018) 深 圳 微 雪 电 子 保 留 所 有 的 版 权
(0019) *********************************************************************/
(0020)
(0021) /*01010101010101010101010101010101010101010101010101010101010101010101
(0022) ----------------------------------------------------------------------
(0023) 版本更新记录:
(0024) 版 本: Version 1.1
(0025) 圆版时间: 2005-03-25
(0026) ----------------------------------------------------------------------
(0027) 接入模块: PCF8591
(0028) 接口说明: 见程序
(0029) ----------------------------------------------------------------------
(0030) 注意事项:
(0031) *
(0032) ----------------------------------------------------------------------
(0033) 10101010101010101010101010101010101010101010101010101010101010101010*/
(0034)
(0035) #include <iom16v.h>
(0036)
(0037) #define WR_DADR 0x90 //write device-address
(0038) #define RD_DADR 0x91 //read device-address
(0039) #include "D:\ICC_H\PCF8591.H"
(0040)
(0041) #define DISP_DDR DDRA
(0042) #define DISP_PORT PORTA
(0043)
(0044) /*--------------------------------------------------------------------
(0045) 函数名称:
(0046) 函数功能:
(0047) 注意事项:
(0048) 提示说明:
(0049) 输 入:
(0050) 返 回:
(0051) --------------------------------------------------------------------*/
(0052) void errDisp()
(0053) {
(0054) DISP_PORT = 0X55;
_errDisp:
021A E585 LDI R24,0x55
021B BB8B OUT 0x1B,R24
(0055) delay50ms(4);
021C E004 LDI R16,4
021D E010 LDI R17,0
021E DFC4 RCALL _delay50ms
(0056) DISP_PORT = 0X00;
021F 2422 CLR R2
0220 BA2B OUT 0x1B,R2
(0057) delay50ms(4);
0221 E004 LDI R16,4
0222 E010 LDI R17,0
0223 DFBF RCALL _delay50ms
(0058) DISP_PORT = 0XAA;
0224 EA8A LDI R24,0xAA
0225 BB8B OUT 0x1B,R24
(0059) delay50ms(4);
0226 E004 LDI R16,4
0227 E010 LDI R17,0
0228 DFBA RCALL _delay50ms
(0060) DISP_PORT = 0X00;
0229 2422 CLR R2
022A BA2B OUT 0x1B,R2
(0061) delay50ms(4);
022B E004 LDI R16,4
022C E010 LDI R17,0
(0062) }
022D CFB5 RJMP _delay50ms
(0063) /*--------------------------------------------------------------------
(0064) 函数全称:
(0065) 函数功能:
(0066) 注意事项:最好不要将 TWBR 的值改太小,否则可能出错
(0067) 提示说明:假设系统时钟为16M,则TWI波特率=CLK/(16+2*(TWBR)*4)=400K
(0068) 输 入:
(0069) 返 回:
(0070) --------------------------------------------------------------------*/
(0071) void twi_init() //TWI(I2C)初始化
(0072) {
(0073) TWBR = 0X12; //设置TWI波特率
_twi_init:
022E E182 LDI R24,0x12
022F B980 OUT 0x00,R24
(0074) TWSR &= 0XFC; //设置TWI预分频 为 1
0230 B181 IN R24,0x01
0231 7F8C ANDI R24,0xFC
0232 B981 OUT 0x01,R24
(0075) }
0233 9508 RET
_main:
t --> Y+2
DAval --> R20
pGetDat --> R22
0234 9723 SBIW R28,3
(0076) /*--------------------------------------------------------------------
(0077) 函数名称:
(0078) 函数功能:
(0079) 注意事项:
(0080) 提示说明:
(0081) 输 入:
(0082) 返 回:
(0083) --------------------------------------------------------------------*/
(0084) void main()
(0085) {
(0086) uint8 DAval=0,t;
0235 2744 CLR R20
(0087) uint8 *pGetDat=&t; //随便给"pGetDat"一个地址以防内存错误
0236 01BE MOVW R22,R28
0237 5F6E SUBI R22,0xFE
0238 4F7F SBCI R23,0xFF
(0088)
(0089) DISP_DDR = 0XFF;
0239 EF8F LDI R24,0xFF
023A BB8A OUT 0x1A,R24
(0090) twi_init();
023B DFF2 RCALL _twi_init
023C C00F RJMP 0x024C
(0091)
(0092) while(1)
(0093) {
(0094) PCF8591_getAD(MODE0,CHNL0,pGetDat);
023D 8379 STD Y+1,R23
023E 8368 STD Y+0,R22
023F 2722 CLR R18
0240 2700 CLR R16
0241 DFB7 RCALL _PCF8591_getAD
(0095) DISP_PORT = *pGetDat;
0242 01FB MOVW R30,R22
0243 8020 LDD R2,Z+0
0244 BA2B OUT 0x1B,R2
(0096) PCF8591_setDA(DAval++);
0245 2E24 MOV R2,R20
0246 5F4F SUBI R20,0xFF
0247 2D02 MOV R16,R2
0248 DFC4 RCALL _PCF8591_setDA
(0097) delay50ms(4);
0249 E004 LDI R16,4
024A E010 LDI R17,0
024B DF97 RCALL _delay50ms
024C CFF0 RJMP 0x023D
(0098) }
(0099) }
FILE: <library>
024D 9623 ADIW R28,3
024E 9508 RET
push_arg4:
024F 933A ST R19,-Y
0250 932A ST R18,-Y
push_arg2:
0251 931A ST R17,-Y
0252 930A ST R16,-Y
0253 9508 RET
div32u:
0254 94E8 BCLR 6
0255 C001 RJMP 0x0257
mod32u:
0256 9468 BSET 6
0257 D02F RCALL long_div_prolog
0258 24CC CLR R12
0259 C008 RJMP 0x0262
div32s:
025A 94E8 BCLR 6
025B C001 RJMP 0x025D
mod32s:
025C 9468 BSET 6
025D D029 RCALL long_div_prolog
025E FD37 SBRC R19,7
025F D053 RCALL neg_R16_R19
0260 FDB7 SBRC R27,7
0261 D05A RCALL neg_R24_R27
0262 2477 CLR R7
0263 2488 CLR R8
0264 2499 CLR R9
0265 24AA CLR R10
0266 24BB CLR R11
0267 D041 RCALL tst_R16_R19
0268 F0C1 BEQ 0x0281
0269 D044 RCALL tst_R24_R27
026A F0B1 BEQ 0x0281
026B E2E8 LDI R30,0x28
026C 0F00 LSL R16
026D 1F11 ROL R17
026E 1F22 ROL R18
026F 1F33 ROL R19
0270 1C77 ROL R7
0271 1C88 ROL R8
0272 1C99 ROL R9
0273 1CAA ROL R10
0274 1CBB ROL R11
0275 1688 CP R8,R24
0276 0699 CPC R9,R25
0277 06AA CPC R10,R26
0278 06BB CPC R11,R27
0279 F028 BCS 0x027F
027A 1A88 SUB R8,R24
027B 0A99 SBC R9,R25
027C 0AAA SBC R10,R26
027D 0ABB SBC R11,R27
027E 9503 INC R16
027F 95EA DEC R30
0280 F759 BNE 0x026C
0281 F426 BRTC 0x0286
0282 2D08 MOV R16,R8
0283 2D19 MOV R17,R9
0284 2D2A MOV R18,R10
0285 2D3B MOV R19,R11
0286 C013 RJMP long_div_epilog
long_div_prolog:
0287 927A ST R7,-Y
0288 928A ST R8,-Y
0289 929A ST R9,-Y
028A 92AA ST R10,-Y
028B 92BA ST R11,-Y
028C 92CA ST R12,-Y
028D 93EA ST R30,-Y
028E 938A ST R24,-Y
028F 939A ST R25,-Y
0290 93AA ST R26,-Y
0291 93BA ST R27,-Y
0292 858B LDD R24,Y+11
0293 859C LDD R25,Y+12
0294 85AD LDD R26,Y+13
0295 85BE LDD R27,Y+14
0296 2EC3 MOV R12,R19
0297 F00E BRTS 0x0299
0298 26CB EOR R12,R27
0299 9508 RET
long_div_epilog:
029A FCC7 SBRC R12,7
029B D017 RCALL neg_R16_R19
029C 91B9 LD R27,Y+
029D 91A9 LD R26,Y+
029E 9199 LD R25,Y+
029F 9189 LD R24,Y+
02A0 91E9 LD R30,Y+
02A1 90C9 LD R12,Y+
02A2 90B9 LD R11,Y+
02A3 90A9 LD R10,Y+
02A4 9099 LD R9,Y+
02A5 9089 LD R8,Y+
02A6 9079 LD R7,Y+
02A7 9624 ADIW R28,4
02A8 9508 RET
tst_R16_R19:
02A9 2FE0 MOV R30,R16
02AA 2BE1 OR R30,R17
02AB 2BE2 OR R30,R18
02AC 2BE3 OR R30,R19
02AD 9508 RET
tst_R24_R27:
02AE 2FE8 MOV R30,R24
02AF 2BE9 OR R30,R25
02B0 2BEA OR R30,R26
02B1 2BEB OR R30,R27
02B2 9508 RET
neg_R16_R19:
02B3 9500 COM R16
02B4 9510 COM R17
02B5 9520 COM R18
02B6 9530 COM R19
02B7 5F0F SUBI R16,0xFF
02B8 4F1F SBCI R17,0xFF
02B9 4F2F SBCI R18,0xFF
02BA 4F3F SBCI R19,0xFF
02BB 9508 RET
neg_R24_R27:
02BC 9580 COM R24
02BD 9590 COM R25
02BE 95A0 COM R26
02BF 95B0 COM R27
02C0 5F8F SUBI R24,0xFF
02C1 4F9F SBCI R25,0xFF
02C2 4FAF SBCI R26,0xFF
02C3 4FBF SBCI R27,0xFF
02C4 9508 RET
empy32s:
empy32u:
02C5 940E031E CALL long_prolog
02C7 927F PUSH R7
02C8 940E0337 CALL tstzero1
02CA F139 BEQ 0x02F2
02CB 2477 CLR R7
02CC 940E033D CALL tstzero2
02CE F419 BNE 0x02D2
02CF 018C MOVW R16,R24
02D0 019D MOVW R18,R26
02D1 C020 RJMP 0x02F2
02D2 9F08 MUL R16,R24
02D3 2CB0 MOV R11,R0
02D4 2CA1 MOV R10,R1
02D5 9F28 MUL R18,R24
02D6 2C90 MOV R9,R0
02D7 2C81 MOV R8,R1
02D8 9F18 MUL R17,R24
02D9 0CA0 ADD R10,R0
02DA 1C91 ADC R9,R1
02DB 1C87 ADC R8,R7
02DC 9F09 MUL R16,R25
02DD 0CA0 ADD R10,R0
02DE 1C91 ADC R9,R1
02DF 1C87 ADC R8,R7
02E0 9F19 MUL R17,R25
02E1 0C90 ADD R9,R0
02E2 1C81 ADC R8,R1
02E3 9F0A MUL R16,R26
02E4 0C90 ADD R9,R0
02E5 1C81 ADC R8,R1
02E6 9F38 MUL R19,R24
02E7 0C80 ADD R8,R0
02E8 9F29 MUL R18,R25
02E9 0C80 ADD R8,R0
02EA 9F1A MUL R17,R26
02EB 0C80 ADD R8,R0
02EC 9F0B MUL R16,R27
02ED 0C80 ADD R8,R0
02EE 2D0B MOV R16,R11
02EF 2D1A MOV R17,R10
02F0 2D29 MOV R18,R9
02F1 2D38 MOV R19,R8
02F2 907F POP R7
02F3 940C032C JMP long_epilog
pop_gset2:
02F5 E0E2 LDI R30,2
02F6 940C02FF JMP pop
pop_gset4:
02F8 E0E8 LDI R30,0x8
02F9 940C02FF JMP pop
push_gset1:
02FB 935A ST R21,-Y
02FC 934A ST R20,-Y
02FD 9508 RET
pop_gset1:
02FE E0E1 LDI R30,1
pop:
02FF 9149 LD R20,Y+
0300 9159 LD R21,Y+
0301 FDE0 SBRC R30,0
0302 9508 RET
0303 9169 LD R22,Y+
0304 9179 LD R23,Y+
0305 FDE1 SBRC R30,1
0306 9508 RET
0307 90A9 LD R10,Y+
0308 90B9 LD R11,Y+
0309 FDE2 SBRC R30,2
030A 9508 RET
030B 90C9 LD R12,Y+
030C 90D9 LD R13,Y+
030D FDE3 SBRC R30,3
030E 9508 RET
030F 90E9 LD R14,Y+
0310 90F9 LD R15,Y+
0311 9508 RET
push_gset2:
0312 937A ST R23,-Y
0313 936A ST R22,-Y
0314 940C02FB JMP push_gset1
push_gset3:
0316 92BA ST R11,-Y
0317 92AA ST R10,-Y
0318 940C0312 JMP push_gset2
push_gset4:
031A 92DA ST R13,-Y
031B 92CA ST R12,-Y
031C 940C0316 JMP push_gset3
long_prolog:
031E 928A ST R8,-Y
031F 929A ST R9,-Y
0320 92AA ST R10,-Y
0321 92BA ST R11,-Y
0322 93EA ST R30,-Y
0323 938A ST R24,-Y
0324 939A ST R25,-Y
0325 93AA ST R26,-Y
0326 93BA ST R27,-Y
0327 8589 LDD R24,Y+9
0328 859A LDD R25,Y+10
0329 85AB LDD R26,Y+11
032A 85BC LDD R27,Y+12
032B 9508 RET
long_epilog:
032C 91B9 LD R27,Y+
032D 91A9 LD R26,Y+
032E 9199 LD R25,Y+
032F 9189 LD R24,Y+
0330 91E9 LD R30,Y+
0331 90B9 LD R11,Y+
0332 90A9 LD R10,Y+
0333 9099 LD R9,Y+
0334 9089 LD R8,Y+
0335 9624 ADIW R28,4
0336 9508 RET
tstzero1:
0337 27EE CLR R30
0338 2BE0 OR R30,R16
0339 2BE1 OR R30,R17
033A 2BE2 OR R30,R18
033B 2BE3 OR R30,R19
033C 9508 RET
tstzero2:
033D 27EE CLR R30
033E 2BE8 OR R30,R24
033F 2BE9 OR R30,R25
0340 2BEA OR R30,R26
0341 2BEB OR R30,R27
0342 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -