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

📄 main.lis

📁 基于HC908GP32的电子琴程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -