📄 delay.s
字号:
.module Delay.c
.area text
; j -> 0,X
; u -> 1,X
; i -> 4,X
_Delay_ms::
ais #-2
tsx
; /*Delay_ms:毫秒级延时函数------------------------------*
; *功 能:延时函数 *
; *参 数:i=延时时间(ms) (i取值范围:1-255) *
; *返 回:无 *
; *-----------------------------------------------------*/
; #include "GP32C.H" //包含头文件
; #include "KB.h" //键盘中断头文件
; extern void PWMInit(unsigned int ); //PWM初始化
; extern void PWMmusic(unsigned int );
; extern void Delay_ms(unsigned char ); //延时
; unsigned int Period;
;
;
;
; void Delay_ms(unsigned char i)
; { unsigned char j;
; unsigned char u;
; for(j=0;j<i;j++)
clr ,X
bra L5
L2:
clr 1,X
bra L9
L6:
L7:
inc 1,X
L9:
lda 1,X
cmp #-6
bls L6
L3:
inc ,X
L5:
lda ,X
cmp 4,X
blo L2
L1:
ais #2
.dbline 0 ; func end
rts
; Period -> 2,X
; KB_valve -> 4,X
_hmusic::
ais #-5
tsx
; for(u=0;u<=250;u++) ;
; }
;
;
;
; void hmusic()
; { unsigned int Period; //PWM周期
; unsigned char KB_valve;
; KB_Init();
jsr _KB_Init
; KB_valve=KB_Scan(); //扫描键值
jsr _KB_Scan
tsx
sta *__r1
sta 4,X
; KB_valve=KB_Def(KB_valve); //键值转化为定义值
psha
jsr _KB_Def
ais #1
tsx
sta *__r1
sta 4,X
;
;
; switch(KB_valve)
clr ,X
sta 1,X
lda ,X
bne X0
lda 1,X
cmp #49
beq L14
X0:
lda ,X
bne X1
lda 1,X
cmp #50
beq L15
X1:
lda ,X
bne X2
lda 1,X
cmp #51
beq L16
X2:
lda ,X
bne X3
lda 1,X
cmp #52
beq L17
X3:
lda ,X
bne X4
lda 1,X
cmp #53
beq L18
X4:
lda ,X
bne X5
lda 1,X
cmp #54
beq L19
X5:
lda ,X
bne X6
lda 1,X
cmp #55
beq L20
X6:
bra L11
X7:
; {
L14:
; case '1':PWMmusic(1046);break;
ldhx #1046
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L12
L15:
; case '2':PWMmusic(1175);break;
ldhx #1175
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L12
L16:
; case '3':PWMmusic(1318);break;
ldhx #1318
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L12
L17:
; case '4':PWMmusic(1397);break;
ldhx #1397
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L12
L18:
; case '5':PWMmusic(1568);break;
ldhx #1568
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L12
L19:
; case '6':PWMmusic(1760);break;
ldhx #1760
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L12
L20:
; case '7':PWMmusic(1976);break;
ldhx #1976
pshx
pshh
jsr _PWMmusic
ais #2
tsx
L11:
L12:
L10:
ais #5
.dbline 0 ; func end
rts
; Period -> 2,X
; KB_valve -> 4,X
_Lmusic::
ais #-5
tsx
;
; }
;
; }
;
;
; void Lmusic()
; { unsigned int Period; //PWM周期
; unsigned char KB_valve;
; KB_Init();
jsr _KB_Init
; KB_valve=KB_Scan(); //扫描键值
jsr _KB_Scan
tsx
sta *__r1
sta 4,X
; KB_valve=KB_Def(KB_valve); //键值转化为定义值
psha
jsr _KB_Def
ais #1
tsx
sta *__r1
sta 4,X
;
;
; switch(KB_valve)
clr ,X
sta 1,X
lda ,X
bne X8
lda 1,X
cmp #49
beq L25
X8:
lda ,X
bne X9
lda 1,X
cmp #50
beq L26
X9:
lda ,X
bne X10
lda 1,X
cmp #51
beq L27
X10:
lda ,X
bne X11
lda 1,X
cmp #52
beq L28
X11:
lda ,X
bne X12
lda 1,X
cmp #53
beq L29
X12:
lda ,X
bne X13
lda 1,X
cmp #54
beq L30
X13:
lda ,X
bne X14
lda 1,X
cmp #55
beq L31
X14:
bra L22
X15:
; {
L25:
; case '1':PWMmusic(262);break;
ldhx #262
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L23
L26:
; case '2':PWMmusic(294);break;
ldhx #294
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L23
L27:
; case '3':PWMmusic(330);break;
ldhx #330
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L23
L28:
; case '4':PWMmusic(349);break;
ldhx #349
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L23
L29:
; case '5':PWMmusic(392);break;
ldhx #392
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L23
L30:
; case '6':PWMmusic(440);break;
ldhx #440
pshx
pshh
jsr _PWMmusic
ais #2
tsx
bra L23
L31:
; case '7':PWMmusic(494);break;
ldhx #494
pshx
pshh
jsr _PWMmusic
ais #2
tsx
L22:
L23:
L21:
ais #5
.dbline 0 ; func end
rts
; Duty -> 0,X
; Period -> 2,X
; HZ -> 6,X
_PWMmusic::
ais #-4
tsx
;
; }
;
; }
;
;
;
;
; void PWMmusic(unsigned int HZ)
; {
; unsigned int Period; //PWM周期
; unsigned int Duty; //PWM占空比
; Period=(2457600/64)/HZ;
clr *__r1
clr *__r0
lda 7,X
sta *__r3
lda 6,X
sta *__r2
clra
psha
lda #-106
psha
clra
psha
psha
lda *__r3
psha
lda *__r2
psha
lda *__r1
psha
lda *__r0
psha
jsr __divmod32s
ais #4
pula
pula
pula
sta *__r2
pula
sta *__r1
lda *__r2
sta 2,X
lda *__r1
sta 3,X
; PWMInit(Period);
psha
lda 2,X
psha
jsr _PWMInit
ais #2
tsx
; Duty=Period/2;
lda 3,X
sta *__r1
lda 2,X
sta *__r0
lsr *__r0
ror *__r1
lda *__r0
sta ,X
lda *__r1
sta 1,X
;
;
;
; T1SC|=(1<<5); //停止定时器1计数器计数
bset #5,0x20
; //[设置PWM脉宽]
; T1CH0H = (Duty>>8); //设置高字节
lda ,X
sta 0x26
; T1CH0L = Duty; //设置低字节
lda 1,X
sta 0x27
; T1SC&=~(1<<5); //允许定时器1计数器计数
bclr #5,0x20
; Delay_ms(10); //延时10ms
lda #10
psha
jsr _Delay_ms
ais #1
tsx
L32:
ais #4
.dbline 0 ; func end
rts
.area bss
_Period::
.blkb 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -