📄 main.s
字号:
.module main.c
.area text
; Kb -> 0,X
_main::
ais #-1
tsx
; /*-----------------------------------------------------*
; *工 程 名:
; *硬件连接:
; *程序描述: SD-HC08 模板生成
; */
; /*[头文件]*/
; #include "GP32C.h" //映像寄存器地址头文件
; #include "DJC.H"
; void Delay_ms(unsigned char i);
; void PWMInit(unsigned int Period); //PWM初始化
; void PWMconf(unsigned int Period); //PWM设置
; /*[主函数]*/
;
; void main(){
; unsigned char Kb;
; DDRD=0xff;
lda #-1
sta 0x7
; DDRB=0xff;
lda #-1
sta 0x5
; PTB=0x0f;
lda #15
sta 0x1
; asm("CLI");
CLI
bra L3
L2:
; while(1){
; Kb=KB_Scan();
jsr _KB_Scan
tsx
sta *__r1
sta ,X
; if(Kb==0xff)Kb=KB_ScanD();
cmp #-1
bne L5
jsr _KB_ScanD
tsx
sta *__r1
sta ,X
L5:
; PTB=~Kb;
lda ,X
coma
sta 0x1
; PTD=0x0;
clr 0x3
; if(Kb==0xff){
lda ,X
cmp #-1
bne L7
; operate(Kb);
psha
jsr _operate
ais #1
tsx
; }
L7:
L3:
bra L2
X0:
L1:
ais #1
.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) //延时ims
; { unsigned char j;
; unsigned char u;
; for(j=0;j<i;j++)
clr ,X
bra L13
L10:
clr 1,X
bra L17
L14:
L15:
inc 1,X
L17:
lda 1,X
cmp #-6
bls L14
L11:
inc ,X
L13:
lda ,X
cmp 4,X
blo L10
L9:
ais #2
.dbline 0 ; func end
rts
.area lit
_tone_feq::
.word 262
.word 294
.word 330
.word 349
.word 392
.word 440
.word 494
.word 0
.word 0
.word 0
.word 523
.word 558
.word 660
.word 698
.word 784
.word 880
.word 988
.word 0
.word 0
.word 0
.word 1046
.word 1175
.word 1318
.word 1397
.word 1568
.word 1760
.word 1976
.word 0
.area text
; tone -> 0,X
; KB_valve -> 4,X
_operate::
ais #-2
tsx
; for(u=0;u<=250;u++) ;
; }
;
; const unsigned int tone_feq[]= {
; 262,294,330,349,392,440,494,0,0,0,
; 523,558,660,698,784,880,988,0,0,0,
; 1046,1175,1318,1397,1568,1760,1976,0
; };
;
; void operate(unsigned char KB_valve){
; unsigned int tone;
; tone=tone_feq[KB_valve];
clr *__r0
lda 4,X
sta *__r1
lsl *__r1
rol *__r0
lda *__r1
add #<_tone_feq
sta *__r1
lda *__r0
adc #>_tone_feq
sta *__r0
ldhx *__r0
lda 1,x
sta 2,SP
lda ,x
tsx
sta ,X
; PWMconf(tone);
lda 1,X
psha
lda ,X
psha
jsr _PWMconf
ais #2
; T1SC&=~(1<<TSTOPBit);
bclr #5,0x20
; Delay_ms(20);
lda #20
psha
jsr _Delay_ms
ais #1
tsx
; T1SC|=(1<<TSTOPBit);
bset #5,0x20
L18:
ais #2
.dbline 0 ; func end
rts
; Duty -> 0,X
; Period -> 4,X
_PWMconf::
ais #-2
tsx
; }
;
; void PWMconf(unsigned int Period){
; unsigned int Duty;
; Duty=2457600/Period;
clr *__r1
clr *__r0
lda 5,X
sta *__r3
lda 4,X
sta *__r2
clra
psha
lda #-128
psha
lda #37
psha
clra
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 ,X
lda *__r1
sta 1,X
; PWMInit(Duty);
psha
lda ,X
psha
jsr _PWMInit
ais #2
tsx
; Duty=Duty/2;
lsr ,X
ror 1,X
; T1SC|=(1<<5); //停止定时器1计数器计数
bset #5,0x20
; T1CH0H = (Duty>>8); //设置高字节
lda ,X
sta 0x26
; T1CH0L = Duty; //设置低字节
lda 1,X
sta 0x27
; T1SC|=(1<<TSTOPBit); //允许定时器1计数器计数
bset #5,0x20
; Delay_ms(10); //延时10ms
lda #10
psha
jsr _Delay_ms
ais #1
tsx
L19:
ais #2
.dbline 0 ; func end
rts
; Temp -> 0,X
; Period -> 4,X
_PWMInit::
ais #-2
tsx
; }
;
; void PWMInit(unsigned int Period)
; {
; unsigned int Temp=Period;
lda 4,X
sta ,X
lda 5,X
sta 1,X
; //不允许溢出中断,不启动计数,分频因子=1,置位TSTOP,TRST
; T1SC =0b01100000;
lda #96
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 = 0b00011110;
lda #30
sta 0x25
L20:
ais #2
.dbline 0 ; func end
rts
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -