📄 main.s
字号:
.module main.c
.area text
_main::
ais #-2
tsx
jmp L3
L2:
; /*-----------------------------------------------------*
; *工 程 名:
; *硬件连接:
; *程序描述: SD-HC08 模板生成
; */
; /*[头文件]*/
; #include "GP32C.h" //映像寄存器地址头文件
; #include "KB.h"
; void PWMInit(unsigned int); //PWM初始化
; void PWMconf(unsigned int); //PWM设置
; void Delay_ms(unsigned char );
; unsigned char KB1,KB2,KB3,KB4,KB5,KB6,i,KB_valve1,KB_valve2;
; //DDRA=0xFF;PTA=0xFF;
; /*[主函数]*/
; void main()
; {
; while(1)
; {
; KB_Init();
jsr _KB_Init
; T1SC0=0x0e;
lda #14
sta 0x25
; KB_valve1=KB_Scan1();
jsr _KB_Scan1
sta *__r1
sta *_KB_valve1
; KB_valve2=KB_Scan2();
jsr _KB_Scan2
tsx
sta *__r1
sta *_KB_valve2
; if((KB_valve1!=0xff)||(KB_valve2!=0xff)) //有键按下
lda *_KB_valve1
cmp #-1
bne L7
lda *_KB_valve2
cmp #-1
bne X9
jmp L5
X9:
L7:
; {
; KB1=KB_valve1;
mov *_KB_valve1,*_KB1
; KB2=KB_valve2;
mov *_KB_valve2,*_KB2
; KB1&=0b00001000;
lda *_KB1
and #8
sta *_KB1
; KB2&=0b00001000;
lda *_KB2
and #8
sta *_KB2
; if(KB1==0||KB2==0) //L或H按下
lda *_KB1
beq L10
lda *_KB2
beq X10
jmp L8
X10:
L10:
; {
; KB3=KB5=KB_valve1;
mov *_KB_valve1,*_KB5
mov *_KB_valve1,*_KB3
; KB4=KB6=KB_valve2;
mov *_KB_valve2,*_KB6
mov *_KB_valve2,*_KB4
; KB3&=0b00010000;
lda *_KB3
and #16
sta *_KB3
; KB4&=0b00010000;
lda *_KB4
and #16
sta *_KB4
; KB5&=0b00100000;
lda *_KB5
and #32
sta *_KB5
; KB6&=0b00100000;
lda *_KB6
and #32
sta *_KB6
; if(KB3==0||KB4==0) //L按下
lda *_KB3
beq L13
lda *_KB4
beq X11
jmp L11
X11:
L13:
; {
lda *_KB_valve1
cmp #-26
beq L16
lda *_KB_valve2
cmp #-26
bne L14
L16:
; if((KB_valve1==0xE6)||(KB_valve2==0xE6))PWMconf(262);
ldhx #262
pshx
pshh
jsr _PWMconf
ais #2
tsx
L14:
lda *_KB_valve1
cmp #-34
beq L19
lda *_KB_valve2
cmp #-34
bne L17
L19:
; if((KB_valve1==0xDE)||(KB_valve2==0xDE))PWMconf(294);
ldhx #294
pshx
pshh
jsr _PWMconf
ais #2
tsx
L17:
lda *_KB_valve1
cmp #-66
beq L22
lda *_KB_valve2
cmp #-66
bne L20
L22:
; if((KB_valve1==0xBE)||(KB_valve2==0xBE))PWMconf(330);
ldhx #330
pshx
pshh
jsr _PWMconf
ais #2
tsx
L20:
lda *_KB_valve1
cmp #-27
beq L25
lda *_KB_valve2
cmp #-27
bne L23
L25:
; if((KB_valve1==0xE5)||(KB_valve2==0xE5))PWMconf(349);
ldhx #349
pshx
pshh
jsr _PWMconf
ais #2
tsx
L23:
lda *_KB_valve1
cmp #-35
beq L28
lda *_KB_valve2
cmp #-35
bne L26
L28:
; if((KB_valve1==0xDD)||(KB_valve2==0xDD))PWMconf(392);
ldhx #392
pshx
pshh
jsr _PWMconf
ais #2
tsx
L26:
lda *_KB_valve1
cmp #-67
beq L31
lda *_KB_valve2
cmp #-67
bne L29
L31:
; if((KB_valve1==0xBD)||(KB_valve2==0xBD))PWMconf(440);
ldhx #440
pshx
pshh
jsr _PWMconf
ais #2
tsx
L29:
lda *_KB_valve1
cmp #-29
beq L34
lda *_KB_valve2
cmp #-29
bne L32
L34:
; if((KB_valve1==0xE3)||(KB_valve2==0xE3))PWMconf(494);
ldhx #494
pshx
pshh
jsr _PWMconf
ais #2
tsx
L32:
; }
L11:
; if(KB5==0||KB6==0) //H按下
lda *_KB5
beq L37
lda *_KB6
beq X12
jmp L9
X12:
L37:
; {
lda *_KB_valve1
cmp #-18
beq L40
lda *_KB_valve2
cmp #-18
bne L38
L40:
; if((KB_valve1==0xEE)||(KB_valve2==0xEE))PWMconf(1046);
ldhx #1046
pshx
pshh
jsr _PWMconf
ais #2
tsx
L38:
lda *_KB_valve1
cmp #-42
beq L43
lda *_KB_valve2
cmp #-42
bne L41
L43:
; if((KB_valve1==0xD6)||(KB_valve2==0xD6))PWMconf(1175);
ldhx #1175
pshx
pshh
jsr _PWMconf
ais #2
tsx
L41:
lda *_KB_valve1
cmp #-66
beq L46
lda *_KB_valve2
cmp #-66
bne L44
L46:
; if((KB_valve1==0xBE)||(KB_valve2==0xBE))PWMconf(1318);
ldhx #1318
pshx
pshh
jsr _PWMconf
ais #2
tsx
L44:
lda *_KB_valve1
cmp #-19
beq L49
lda *_KB_valve2
cmp #-19
bne L47
L49:
; if((KB_valve1==0xED)||(KB_valve2==0xED))PWMconf(1397);
ldhx #1397
pshx
pshh
jsr _PWMconf
ais #2
tsx
L47:
lda *_KB_valve1
cmp #-43
beq L52
lda *_KB_valve2
cmp #-43
bne L50
L52:
; if((KB_valve1==0xD5)||(KB_valve2==0xD5))PWMconf(1568);
ldhx #1568
pshx
pshh
jsr _PWMconf
ais #2
tsx
L50:
lda *_KB_valve1
cmp #-67
beq L55
lda *_KB_valve2
cmp #-67
bne L53
L55:
; if((KB_valve1==0xBD)||(KB_valve2==0xBD))PWMconf(1760);
ldhx #1760
pshx
pshh
jsr _PWMconf
ais #2
tsx
L53:
lda *_KB_valve1
cmp #-21
beq L58
lda *_KB_valve2
cmp #-21
beq X13
jmp L9
X13:
L58:
; if((KB_valve1==0xEB)||(KB_valve2==0xEB))PWMconf(1976);
ldhx #1976
pshx
pshh
jsr _PWMconf
ais #2
tsx
; }}
jmp L9
L8:
; else
; {
; switch(KB_valve1)
clr ,X
lda *_KB_valve1
sta 1,X
lda ,X
bne X0
lda 1,X
cmp #-35
bne X14
jmp L66
X14:
X0:
lda ,X
bne X1
lda 1,X
cmp #-34
beq L63
X1:
lda 1,X
sta *__r1
lda ,X
sta *__r0
ldhx *__r0
cphx #222
tsx
bgt L70
L69:
lda ,X
bne X2
lda 1,X
cmp #-67
beq L67
X2:
lda ,X
bne X3
lda 1,X
cmp #-66
beq L64
X3:
jmp L59
L70:
lda ,X
bne X4
lda 1,X
cmp #-21
beq L68
X4:
lda ,X
bne X5
lda 1,X
cmp #-19
beq L65
X5:
lda ,X
bne X6
lda 1,X
cmp #-18
beq L62
X6:
bra L59
X7:
; {
L62:
; case 0xEE: PWMconf(523);break;
ldhx #523
pshx
pshh
jsr _PWMconf
ais #2
tsx
bra L60
L63:
; case 0xDE: PWMconf(558);break;
ldhx #558
pshx
pshh
jsr _PWMconf
ais #2
tsx
bra L60
L64:
; case 0xBE: PWMconf(660);break;
ldhx #660
pshx
pshh
jsr _PWMconf
ais #2
tsx
bra L60
L65:
; case 0xED: PWMconf(698);break;
ldhx #698
pshx
pshh
jsr _PWMconf
ais #2
tsx
bra L60
L66:
; case 0xDD: PWMconf(784);break;
ldhx #784
pshx
pshh
jsr _PWMconf
ais #2
tsx
bra L60
L67:
; case 0xBD: PWMconf(880);break;
ldhx #880
pshx
pshh
jsr _PWMconf
ais #2
tsx
bra L60
L68:
; case 0xEB: PWMconf(988);break;
ldhx #988
pshx
pshh
jsr _PWMconf
ais #2
tsx
bra L60
L59:
; default : T1SC|=(1<<5);break;
bset #5,0x20
L60:
L9:
L5:
L3:
jmp L2
X8:
L1:
ais #2
.dbline 0 ; func end
rts
; j -> 0,X
; u -> 1,X
; i -> 4,X
_Delay_ms::
ais #-2
tsx
; }}}}}
; void Delay_ms(unsigned char i)
; { unsigned char j;
; unsigned char u;
; for(j=0;j<i;j++)
clr ,X
bra L75
L72:
clr 1,X
bra L79
L76:
L77:
inc 1,X
L79:
lda 1,X
cmp #-6
bls L76
L73:
inc ,X
L75:
lda ,X
cmp 4,X
blo L72
L71:
ais #2
.dbline 0 ; func end
rts
; Duty -> 2,X
; Period -> 4,X
; Hz -> 8,X
_PWMconf::
ais #-6
tsx
; for(u=0;u<=250;u++) ;
; }
;
;
; void PWMconf(unsigned int Hz)
; {
; unsigned int Period,Duty;
; Period=2457600/64/Hz;
clr *__r1
clr *__r0
lda 9,X
sta *__r3
lda 8,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 4,X
lda *__r1
sta 5,X
; PWMInit(Period);
psha
lda 4,X
psha
jsr _PWMInit
ais #2
tsx
; Duty=Period/1.2;
lda 5,X
and #1
sta *__r1
clra
sta *__r0
lda *__r1
psha
lda *__r0
psha
clra
psha
psha
tst 3,SP
bpl X15
com 2,SP
com 1,SP
X15:
jsr __long_to_SPfloat
pula
sta *__r0
pula
sta *__r1
pula
sta *__r2
pula
sta *__r3
lda 5,X
sta *__r5
lda 4,X
sta *__r4
lsr *__r4
ror *__r5
lda *__r5
psha
lda *__r4
psha
clra
psha
psha
tst 3,SP
bpl X16
com 2,SP
com 1,SP
X16:
jsr __long_to_SPfloat
clra
psha
psha
psha
lda #64
psha
jsr __SPFloat_mul
ais #4
lda *__r3
psha
lda *__r2
psha
lda *__r1
psha
lda *__r0
psha
jsr __SPFloat_add
ais #4
lda #-102
psha
lda #-103
psha
psha
lda #63
psha
jsr __SPFloat_div
ais #4
pula
sta *__r0
pula
sta *__r1
pula
sta *__r2
pula
sta *__r3
psha
lda *__r2
psha
lda *__r1
psha
lda *__r0
psha
clra
psha
psha
psha
lda #71
psha
jsr __SPFloat_cmp_s
ais #8
blt L82
lda *__r3
psha
lda *__r2
psha
lda *__r1
psha
lda *__r0
psha
clra
psha
psha
psha
lda #71
psha
jsr __SPFloat_sub
ais #4
jsr __SPFloat_to_long
ais #2
pula
sta *__r4
pula
add #0
sta 1,X
lda *__r4
adc #-128
sta ,X
bra L83
L82:
lda *__r3
psha
lda *__r2
psha
lda *__r1
psha
lda *__r0
psha
jsr __SPFloat_to_long
ais #2
pula
sta *__r0
pula
sta *__r1
lda *__r0
sta ,X
lda *__r1
sta 1,X
L83:
lda ,X
sta 2,X
lda 1,X
sta 3,X
; T1SC|=(1<<5); //停止定时器1计数器计数
bset #5,0x20
; //[设置PWM脉宽]
; T1CH0H = (Duty>>8); //设置高字节
lda 2,X
sta 0x26
; T1CH0L = Duty; //设置低字节
lda 3,X
sta 0x27
; T1SC&=~(1<<5); //允许定时器1计数器计数
bclr #5,0x20
; Delay_ms(190); //延时100ms
lda #-66
psha
jsr _Delay_ms
ais #1
tsx
L80:
ais #6
.dbline 0 ; func end
rts
; Temp -> 0,X
; Period -> 4,X
_PWMInit::
ais #-2
tsx
; }
;
;
; /*PWMconf:PWM初始化设置--------------------------------*
; * 功 能:PWM脉冲周期、占空比的设置 *
; * 参 数:rate=脉宽时钟数,cyc=脉冲周期时钟数 *
; * 返 回:无 *
; *-----------------------------------------------------*/
; void PWMInit(unsigned int Period)
; {
; unsigned int Temp=Period;
lda 4,X
sta ,X
lda 5,X
sta 1,X
; //不允许溢出中断,不启动计数,分频因子=64,置位TSTOP,TRST
; T1SC = 0x36;
lda #54
sta 0x20
; //[设置PWM周期]
; T1MODH = (Temp>>8);
lda ,X
sta 0x23
; T1MODL = Period;
lda 5,X
sta 0x24
; //[初始化设置PWM脉宽为0]
; T1CH0H = 0x00;
clr 0x26
; T1CH0L = 0x00;
clr 0x27
; //设为PWM模式,不允许输出比较中断,输出低电平,不带缓冲
; T1SC0 = 0x1E;
lda #30
sta 0x25
; //允许定时器1计数寄存器计数
; T1SC &= 0xDF;
lda 0x20
and #-33
sta 0x20
L84:
ais #2
.dbline 0 ; func end
rts
.area bss
_KB_valve2::
.blkb 1
_KB_valve1::
.blkb 1
_i::
.blkb 1
_KB6::
.blkb 1
_KB5::
.blkb 1
_KB4::
.blkb 1
_KB3::
.blkb 1
_KB2::
.blkb 1
_KB1::
.blkb 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -