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

📄 main.s

📁 飞思卡尔的电子钟和电子琴的课程设计,包括源代码
💻 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 + -