📄 delay.lis
字号:
.module Delay.c
.area text
; j -> 0,X
; u -> 1,X
; i -> 4,X
0000 _Delay_ms::
0000 A7FE ais #-2
0002 95 tsx
0003 ; /*Delay_ms:毫秒级延时函数------------------------------*
0003 ; *功 能:延时函数 *
0003 ; *参 数:i=延时时间(ms) (i取值范围:1-255) *
0003 ; *返 回:无 *
0003 ; *-----------------------------------------------------*/
0003 ; #include "GP32C.H" //包含头文件
0003 ; #include "KB.h" //键盘中断头文件
0003 ; extern void PWMInit(unsigned int ); //PWM初始化
0003 ; extern void PWMmusic(unsigned int );
0003 ; extern void Delay_ms(unsigned char ); //延时
0003 ; unsigned int Period;
0003 ;
0003 ;
0003 ;
0003 ; void Delay_ms(unsigned char i)
0003 ; { unsigned char j;
0003 ; unsigned char u;
0003 ; for(j=0;j<i;j++)
0003 7F clr ,X
0004 200D bra L5
0006 L2:
0006 6F01 clr 1,X
0008 2002 bra L9
000A L6:
000A L7:
000A 6C01 inc 1,X
000C L9:
000C E601 lda 1,X
000E A1FA cmp #-6
0010 23F8 bls L6
0012 L3:
0012 7C inc ,X
0013 L5:
0013 F6 lda ,X
0014 E104 cmp 4,X
0016 25EE blo L2
0018 L1:
0018 A702 ais #2
001A .dbline 0 ; func end
001A 81 rts
001B ; Period -> 2,X
001B ; KB_valve -> 4,X
001B _hmusic::
001B A7FB ais #-5
001D 95 tsx
001E ; for(u=0;u<=250;u++) ;
001E ; }
001E ;
001E ;
001E ;
001E ; void hmusic()
001E ; { unsigned int Period; //PWM周期
001E ; unsigned char KB_valve;
001E ; KB_Init();
001E CD0000 jsr _KB_Init
0021 ; KB_valve=KB_Scan(); //扫描键值
0021 CD0000 jsr _KB_Scan
0024 95 tsx
0025 B700 sta *__r1
0027 E704 sta 4,X
0029 ; KB_valve=KB_Def(KB_valve); //键值转化为定义值
0029 87 psha
002A CD0000 jsr _KB_Def
002D A701 ais #1
002F 95 tsx
0030 B700 sta *__r1
0032 E704 sta 4,X
0034 ;
0034 ;
0034 ; switch(KB_valve)
0034 7F clr ,X
0035 E701 sta 1,X
0037 F6 lda ,X
0038 2606 bne X0
003A E601 lda 1,X
003C A131 cmp #49
003E 2738 beq L14
0040 X0:
0040 F6 lda ,X
0041 2606 bne X1
0043 E601 lda 1,X
0045 A132 cmp #50
0047 273C beq L15
0049 X1:
0049 F6 lda ,X
004A 2606 bne X2
004C E601 lda 1,X
004E A133 cmp #51
0050 2740 beq L16
0052 X2:
0052 F6 lda ,X
0053 2606 bne X3
0055 E601 lda 1,X
0057 A134 cmp #52
0059 2744 beq L17
005B X3:
005B F6 lda ,X
005C 2606 bne X4
005E E601 lda 1,X
0060 A135 cmp #53
0062 2748 beq L18
0064 X4:
0064 F6 lda ,X
0065 2606 bne X5
0067 E601 lda 1,X
0069 A136 cmp #54
006B 274C beq L19
006D X5:
006D F6 lda ,X
006E 2606 bne X6
0070 E601 lda 1,X
0072 A137 cmp #55
0074 2750 beq L20
0076 X6:
0076 2059 bra L11
0078 X7:
0078 ; {
0078 L14:
0078 ; case '1':PWMmusic(1046);break;
0078 450416 ldhx #1046
007B 89 pshx
007C 8B pshh
007D CD018D jsr _PWMmusic
0080 A702 ais #2
0082 95 tsx
0083 204C bra L12
0085 L15:
0085 ; case '2':PWMmusic(1175);break;
0085 450497 ldhx #1175
0088 89 pshx
0089 8B pshh
008A CD018D jsr _PWMmusic
008D A702 ais #2
008F 95 tsx
0090 203F bra L12
0092 L16:
0092 ; case '3':PWMmusic(1318);break;
0092 450526 ldhx #1318
0095 89 pshx
0096 8B pshh
0097 CD018D jsr _PWMmusic
009A A702 ais #2
009C 95 tsx
009D 2032 bra L12
009F L17:
009F ; case '4':PWMmusic(1397);break;
009F 450575 ldhx #1397
00A2 89 pshx
00A3 8B pshh
00A4 CD018D jsr _PWMmusic
00A7 A702 ais #2
00A9 95 tsx
00AA 2025 bra L12
00AC L18:
00AC ; case '5':PWMmusic(1568);break;
00AC 450620 ldhx #1568
00AF 89 pshx
00B0 8B pshh
00B1 CD018D jsr _PWMmusic
00B4 A702 ais #2
00B6 95 tsx
00B7 2018 bra L12
00B9 L19:
00B9 ; case '6':PWMmusic(1760);break;
00B9 4506E0 ldhx #1760
00BC 89 pshx
00BD 8B pshh
00BE CD018D jsr _PWMmusic
00C1 A702 ais #2
00C3 95 tsx
00C4 200B bra L12
00C6 L20:
00C6 ; case '7':PWMmusic(1976);break;
00C6 4507B8 ldhx #1976
00C9 89 pshx
00CA 8B pshh
00CB CD018D jsr _PWMmusic
00CE A702 ais #2
00D0 95 tsx
00D1 L11:
00D1 L12:
00D1 L10:
00D1 A705 ais #5
00D3 .dbline 0 ; func end
00D3 81 rts
00D4 ; Period -> 2,X
00D4 ; KB_valve -> 4,X
00D4 _Lmusic::
00D4 A7FB ais #-5
00D6 95 tsx
00D7 ;
00D7 ; }
00D7 ;
00D7 ; }
00D7 ;
00D7 ;
00D7 ; void Lmusic()
00D7 ; { unsigned int Period; //PWM周期
00D7 ; unsigned char KB_valve;
00D7 ; KB_Init();
00D7 CD0000 jsr _KB_Init
00DA ; KB_valve=KB_Scan(); //扫描键值
00DA CD0000 jsr _KB_Scan
00DD 95 tsx
00DE B700 sta *__r1
00E0 E704 sta 4,X
00E2 ; KB_valve=KB_Def(KB_valve); //键值转化为定义值
00E2 87 psha
00E3 CD0000 jsr _KB_Def
00E6 A701 ais #1
00E8 95 tsx
00E9 B700 sta *__r1
00EB E704 sta 4,X
00ED ;
00ED ;
00ED ; switch(KB_valve)
00ED 7F clr ,X
00EE E701 sta 1,X
00F0 F6 lda ,X
00F1 2606 bne X8
00F3 E601 lda 1,X
00F5 A131 cmp #49
00F7 2738 beq L25
00F9 X8:
00F9 F6 lda ,X
00FA 2606 bne X9
00FC E601 lda 1,X
00FE A132 cmp #50
0100 273C beq L26
0102 X9:
0102 F6 lda ,X
0103 2606 bne X10
0105 E601 lda 1,X
0107 A133 cmp #51
0109 2740 beq L27
010B X10:
010B F6 lda ,X
010C 2606 bne X11
010E E601 lda 1,X
0110 A134 cmp #52
0112 2744 beq L28
0114 X11:
0114 F6 lda ,X
0115 2606 bne X12
0117 E601 lda 1,X
0119 A135 cmp #53
011B 2748 beq L29
011D X12:
011D F6 lda ,X
011E 2606 bne X13
0120 E601 lda 1,X
0122 A136 cmp #54
0124 274C beq L30
0126 X13:
0126 F6 lda ,X
0127 2606 bne X14
0129 E601 lda 1,X
012B A137 cmp #55
012D 2750 beq L31
012F X14:
012F 2059 bra L22
0131 X15:
0131 ; {
0131 L25:
0131 ; case '1':PWMmusic(262);break;
0131 450106 ldhx #262
0134 89 pshx
0135 8B pshh
0136 CD018D jsr _PWMmusic
0139 A702 ais #2
013B 95 tsx
013C 204C bra L23
013E L26:
013E ; case '2':PWMmusic(294);break;
013E 450126 ldhx #294
0141 89 pshx
0142 8B pshh
0143 CD018D jsr _PWMmusic
0146 A702 ais #2
0148 95 tsx
0149 203F bra L23
014B L27:
014B ; case '3':PWMmusic(330);break;
014B 45014A ldhx #330
014E 89 pshx
014F 8B pshh
0150 CD018D jsr _PWMmusic
0153 A702 ais #2
0155 95 tsx
0156 2032 bra L23
0158 L28:
0158 ; case '4':PWMmusic(349);break;
0158 45015D ldhx #349
015B 89 pshx
015C 8B pshh
015D CD018D jsr _PWMmusic
0160 A702 ais #2
0162 95 tsx
0163 2025 bra L23
0165 L29:
0165 ; case '5':PWMmusic(392);break;
0165 450188 ldhx #392
0168 89 pshx
0169 8B pshh
016A CD018D jsr _PWMmusic
016D A702 ais #2
016F 95 tsx
0170 2018 bra L23
0172 L30:
0172 ; case '6':PWMmusic(440);break;
0172 4501B8 ldhx #440
0175 89 pshx
0176 8B pshh
0177 CD018D jsr _PWMmusic
017A A702 ais #2
017C 95 tsx
017D 200B bra L23
017F L31:
017F ; case '7':PWMmusic(494);break;
017F 4501EE ldhx #494
0182 89 pshx
0183 8B pshh
0184 CD018D jsr _PWMmusic
0187 A702 ais #2
0189 95 tsx
018A L22:
018A L23:
018A L21:
018A A705 ais #5
018C .dbline 0 ; func end
018C 81 rts
018D ; Duty -> 0,X
018D ; Period -> 2,X
018D ; HZ -> 6,X
018D _PWMmusic::
018D A7FC ais #-4
018F 95 tsx
0190 ;
0190 ; }
0190 ;
0190 ; }
0190 ;
0190 ;
0190 ;
0190 ;
0190 ; void PWMmusic(unsigned int HZ)
0190 ; {
0190 ; unsigned int Period; //PWM周期
0190 ; unsigned int Duty; //PWM占空比
0190 ; Period=(2457600/64)/HZ;
0190 3F00 clr *__r1
0192 3F00 clr *__r0
0194 E607 lda 7,X
0196 B700 sta *__r3
0198 E606 lda 6,X
019A B700 sta *__r2
019C 4F clra
019D 87 psha
019E A696 lda #-106
01A0 87 psha
01A1 4F clra
01A2 87 psha
01A3 87 psha
01A4 B600 lda *__r3
01A6 87 psha
01A7 B600 lda *__r2
01A9 87 psha
01AA B600 lda *__r1
01AC 87 psha
01AD B600 lda *__r0
01AF 87 psha
01B0 CD0000 jsr __divmod32s
01B3 A704 ais #4
01B5 86 pula
01B6 86 pula
01B7 86 pula
01B8 B700 sta *__r2
01BA 86 pula
01BB B700 sta *__r1
01BD B600 lda *__r2
01BF E702 sta 2,X
01C1 B600 lda *__r1
01C3 E703 sta 3,X
01C5 ; PWMInit(Period);
01C5 87 psha
01C6 E602 lda 2,X
01C8 87 psha
01C9 CD0000 jsr _PWMInit
01CC A702 ais #2
01CE 95 tsx
01CF ; Duty=Period/2;
01CF E603 lda 3,X
01D1 B700 sta *__r1
01D3 E602 lda 2,X
01D5 B700 sta *__r0
01D7 3400 lsr *__r0
01D9 3600 ror *__r1
01DB B600 lda *__r0
01DD F7 sta ,X
01DE B600 lda *__r1
01E0 E701 sta 1,X
01E2 ;
01E2 ;
01E2 ;
01E2 ; T1SC|=(1<<5); //停止定时器1计数器计数
01E2 1A20 bset #5,0x20
01E4 ; //[设置PWM脉宽]
01E4 ; T1CH0H = (Duty>>8); //设置高字节
01E4 F6 lda ,X
01E5 B726 sta 0x26
01E7 ; T1CH0L = Duty; //设置低字节
01E7 E601 lda 1,X
01E9 B727 sta 0x27
01EB ; T1SC&=~(1<<5); //允许定时器1计数器计数
01EB 1B20 bclr #5,0x20
01ED ; Delay_ms(10); //延时10ms
01ED A60A lda #10
01EF 87 psha
01F0 CD0000 jsr _Delay_ms
01F3 A701 ais #1
01F5 95 tsx
01F6 L32:
01F6 A704 ais #4
01F8 .dbline 0 ; func end
01F8 81 rts
.area bss
0000 _Period::
0000 .blkb 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -