📄 main.lis
字号:
022A CD02A3 jsr _PWMconf
022D A702 ais #2
022F 95 tsx
0230 2050 bra L60
0232 L63:
0232 ; case 0xDE: PWMconf(558);break;
0232 45022E ldhx #558
0235 89 pshx
0236 8B pshh
0237 CD02A3 jsr _PWMconf
023A A702 ais #2
023C 95 tsx
023D 2043 bra L60
023F L64:
023F ; case 0xBE: PWMconf(660);break;
023F 450294 ldhx #660
0242 89 pshx
0243 8B pshh
0244 CD02A3 jsr _PWMconf
0247 A702 ais #2
0249 95 tsx
024A 2036 bra L60
024C L65:
024C ; case 0xED: PWMconf(698);break;
024C 4502BA ldhx #698
024F 89 pshx
0250 8B pshh
0251 CD02A3 jsr _PWMconf
0254 A702 ais #2
0256 95 tsx
0257 2029 bra L60
0259 L66:
0259 ; case 0xDD: PWMconf(784);break;
0259 450310 ldhx #784
025C 89 pshx
025D 8B pshh
025E CD02A3 jsr _PWMconf
0261 A702 ais #2
0263 95 tsx
0264 201C bra L60
0266 L67:
0266 ; case 0xBD: PWMconf(880);break;
0266 450370 ldhx #880
0269 89 pshx
026A 8B pshh
026B CD02A3 jsr _PWMconf
026E A702 ais #2
0270 95 tsx
0271 200F bra L60
0273 L68:
0273 ; case 0xEB: PWMconf(988);break;
0273 4503DC ldhx #988
0276 89 pshx
0277 8B pshh
0278 CD02A3 jsr _PWMconf
027B A702 ais #2
027D 95 tsx
027E 2002 bra L60
0280 L59:
0280 ; default : T1SC|=(1<<5);break;
0280 1A20 bset #5,0x20
0282 L60:
0282 L9:
0282 L5:
0282 L3:
0282 CC0006 jmp L2
0285 X8:
0285 L1:
0285 A702 ais #2
0287 .dbline 0 ; func end
0287 81 rts
0288 ; j -> 0,X
0288 ; u -> 1,X
0288 ; i -> 4,X
0288 _Delay_ms::
0288 A7FE ais #-2
028A 95 tsx
028B ; }}}}}
028B ; void Delay_ms(unsigned char i)
028B ; { unsigned char j;
028B ; unsigned char u;
028B ; for(j=0;j<i;j++)
028B 7F clr ,X
028C 200D bra L75
028E L72:
028E 6F01 clr 1,X
0290 2002 bra L79
0292 L76:
0292 L77:
0292 6C01 inc 1,X
0294 L79:
0294 E601 lda 1,X
0296 A1FA cmp #-6
0298 23F8 bls L76
029A L73:
029A 7C inc ,X
029B L75:
029B F6 lda ,X
029C E104 cmp 4,X
029E 25EE blo L72
02A0 L71:
02A0 A702 ais #2
02A2 .dbline 0 ; func end
02A2 81 rts
02A3 ; Duty -> 2,X
02A3 ; Period -> 4,X
02A3 ; Hz -> 8,X
02A3 _PWMconf::
02A3 A7FA ais #-6
02A5 95 tsx
02A6 ; for(u=0;u<=250;u++) ;
02A6 ; }
02A6 ;
02A6 ;
02A6 ; void PWMconf(unsigned int Hz)
02A6 ; {
02A6 ; unsigned int Period,Duty;
02A6 ; Period=2457600/64/Hz;
02A6 3F00 clr *__r1
02A8 3F00 clr *__r0
02AA E609 lda 9,X
02AC B700 sta *__r3
02AE E608 lda 8,X
02B0 B700 sta *__r2
02B2 4F clra
02B3 87 psha
02B4 A696 lda #-106
02B6 87 psha
02B7 4F clra
02B8 87 psha
02B9 87 psha
02BA B600 lda *__r3
02BC 87 psha
02BD B600 lda *__r2
02BF 87 psha
02C0 B600 lda *__r1
02C2 87 psha
02C3 B600 lda *__r0
02C5 87 psha
02C6 CD0000 jsr __divmod32s
02C9 A704 ais #4
02CB 86 pula
02CC 86 pula
02CD 86 pula
02CE B700 sta *__r2
02D0 86 pula
02D1 B700 sta *__r1
02D3 B600 lda *__r2
02D5 E704 sta 4,X
02D7 B600 lda *__r1
02D9 E705 sta 5,X
02DB ; PWMInit(Period);
02DB 87 psha
02DC E604 lda 4,X
02DE 87 psha
02DF CD03ED jsr _PWMInit
02E2 A702 ais #2
02E4 95 tsx
02E5 ; Duty=Period/1.2;
02E5 E605 lda 5,X
02E7 A401 and #1
02E9 B700 sta *__r1
02EB 4F clra
02EC B700 sta *__r0
02EE B600 lda *__r1
02F0 87 psha
02F1 B600 lda *__r0
02F3 87 psha
02F4 4F clra
02F5 87 psha
02F6 87 psha
02F7 9E6D03 tst 3,SP
02FA 2A06 bpl X15
02FC 9E6302 com 2,SP
02FF 9E6301 com 1,SP
0302 X15:
0302 CD0000 jsr __long_to_SPfloat
0305 86 pula
0306 B700 sta *__r0
0308 86 pula
0309 B700 sta *__r1
030B 86 pula
030C B700 sta *__r2
030E 86 pula
030F B700 sta *__r3
0311 E605 lda 5,X
0313 B700 sta *__r5
0315 E604 lda 4,X
0317 B700 sta *__r4
0319 3400 lsr *__r4
031B 3600 ror *__r5
031D B600 lda *__r5
031F 87 psha
0320 B600 lda *__r4
0322 87 psha
0323 4F clra
0324 87 psha
0325 87 psha
0326 9E6D03 tst 3,SP
0329 2A06 bpl X16
032B 9E6302 com 2,SP
032E 9E6301 com 1,SP
0331 X16:
0331 CD0000 jsr __long_to_SPfloat
0334 4F clra
0335 87 psha
0336 87 psha
0337 87 psha
0338 A640 lda #64
033A 87 psha
033B CD0000 jsr __SPFloat_mul
033E A704 ais #4
0340 B600 lda *__r3
0342 87 psha
0343 B600 lda *__r2
0345 87 psha
0346 B600 lda *__r1
0348 87 psha
0349 B600 lda *__r0
034B 87 psha
034C CD0000 jsr __SPFloat_add
034F A704 ais #4
0351 A69A lda #-102
0353 87 psha
0354 A699 lda #-103
0356 87 psha
0357 87 psha
0358 A63F lda #63
035A 87 psha
035B CD0000 jsr __SPFloat_div
035E A704 ais #4
0360 86 pula
0361 B700 sta *__r0
0363 86 pula
0364 B700 sta *__r1
0366 86 pula
0367 B700 sta *__r2
0369 86 pula
036A B700 sta *__r3
036C 87 psha
036D B600 lda *__r2
036F 87 psha
0370 B600 lda *__r1
0372 87 psha
0373 B600 lda *__r0
0375 87 psha
0376 4F clra
0377 87 psha
0378 87 psha
0379 87 psha
037A A647 lda #71
037C 87 psha
037D CD0000 jsr __SPFloat_cmp_s
0380 A708 ais #8
0382 912C blt L82
0384 B600 lda *__r3
0386 87 psha
0387 B600 lda *__r2
0389 87 psha
038A B600 lda *__r1
038C 87 psha
038D B600 lda *__r0
038F 87 psha
0390 4F clra
0391 87 psha
0392 87 psha
0393 87 psha
0394 A647 lda #71
0396 87 psha
0397 CD0000 jsr __SPFloat_sub
039A A704 ais #4
039C CD0000 jsr __SPFloat_to_long
039F A702 ais #2
03A1 86 pula
03A2 B700 sta *__r4
03A4 86 pula
03A5 AB00 add #0
03A7 E701 sta 1,X
03A9 B600 lda *__r4
03AB A980 adc #-128
03AD F7 sta ,X
03AE 201E bra L83
03B0 L82:
03B0 B600 lda *__r3
03B2 87 psha
03B3 B600 lda *__r2
03B5 87 psha
03B6 B600 lda *__r1
03B8 87 psha
03B9 B600 lda *__r0
03BB 87 psha
03BC CD0000 jsr __SPFloat_to_long
03BF A702 ais #2
03C1 86 pula
03C2 B700 sta *__r0
03C4 86 pula
03C5 B700 sta *__r1
03C7 B600 lda *__r0
03C9 F7 sta ,X
03CA B600 lda *__r1
03CC E701 sta 1,X
03CE L83:
03CE F6 lda ,X
03CF E702 sta 2,X
03D1 E601 lda 1,X
03D3 E703 sta 3,X
03D5 ; T1SC|=(1<<5); //停止定时器1计数器计数
03D5 1A20 bset #5,0x20
03D7 ; //[设置PWM脉宽]
03D7 ; T1CH0H = (Duty>>8); //设置高字节
03D7 E602 lda 2,X
03D9 B726 sta 0x26
03DB ; T1CH0L = Duty; //设置低字节
03DB E603 lda 3,X
03DD B727 sta 0x27
03DF ; T1SC&=~(1<<5); //允许定时器1计数器计数
03DF 1B20 bclr #5,0x20
03E1 ; Delay_ms(190); //延时100ms
03E1 A6BE lda #-66
03E3 87 psha
03E4 CD0288 jsr _Delay_ms
03E7 A701 ais #1
03E9 95 tsx
03EA L80:
03EA A706 ais #6
03EC .dbline 0 ; func end
03EC 81 rts
03ED ; Temp -> 0,X
03ED ; Period -> 4,X
03ED _PWMInit::
03ED A7FE ais #-2
03EF 95 tsx
03F0 ; }
03F0 ;
03F0 ;
03F0 ; /*PWMconf:PWM初始化设置--------------------------------*
03F0 ; * 功 能:PWM脉冲周期、占空比的设置 *
03F0 ; * 参 数:rate=脉宽时钟数,cyc=脉冲周期时钟数 *
03F0 ; * 返 回:无 *
03F0 ; *-----------------------------------------------------*/
03F0 ; void PWMInit(unsigned int Period)
03F0 ; {
03F0 ; unsigned int Temp=Period;
03F0 E604 lda 4,X
03F2 F7 sta ,X
03F3 E605 lda 5,X
03F5 E701 sta 1,X
03F7 ; //不允许溢出中断,不启动计数,分频因子=64,置位TSTOP,TRST
03F7 ; T1SC = 0x36;
03F7 A636 lda #54
03F9 B720 sta 0x20
03FB ; //[设置PWM周期]
03FB ; T1MODH = (Temp>>8);
03FB F6 lda ,X
03FC B723 sta 0x23
03FE ; T1MODL = Period;
03FE E605 lda 5,X
0400 B724 sta 0x24
0402 ; //[初始化设置PWM脉宽为0]
0402 ; T1CH0H = 0x00;
0402 3F26 clr 0x26
0404 ; T1CH0L = 0x00;
0404 3F27 clr 0x27
0406 ; //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
0406 ; T1SC0 = 0x1E;
0406 A61E lda #30
0408 B725 sta 0x25
040A ; //允许定时器1计数寄存器计数
040A ; T1SC &= 0xDF;
040A B620 lda 0x20
040C A4DF and #-33
040E B720 sta 0x20
0410 L84:
0410 A702 ais #2
0412 .dbline 0 ; func end
0412 81 rts
.area bss
0000 _KB_valve2::
0000 .blkb 1
0001 _KB_valve1::
0001 .blkb 1
0002 _i::
0002 .blkb 1
0003 _KB6::
0003 .blkb 1
0004 _KB5::
0004 .blkb 1
0005 _KB4::
0005 .blkb 1
0006 _KB3::
0006 .blkb 1
0007 _KB2::
0007 .blkb 1
0008 _KB1::
0008 .blkb 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -