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

📄 main.s

📁 这是我自己在做实验设计时做的,用摩托罗拉飞思卡尔做的一个多功能电子钟
💻 S
📖 第 1 页 / 共 2 页
字号:
	.module main.c
	.area data
_Time::
	.blkb 2
	.area idata
	.word 2000
	.area data
	.blkb 1
	.area idata
	.byte 1
	.area data
	.blkb 1
	.area idata
	.byte 1
	.area data
	.blkb 1
	.area idata
	.byte 12
	.area data
	.blkb 1
	.area idata
	.byte 0
	.area data
	.blkb 1
	.area idata
	.byte 0
	.area data
_Alarm::
	.blkb 2
	.area idata
	.word 2000
	.area data
	.blkb 1
	.area idata
	.byte 1
	.area data
	.blkb 1
	.area idata
	.byte 1
	.area data
	.blkb 1
	.area idata
	.byte 7
	.area data
	.blkb 1
	.area idata
	.byte 30
	.area data
	.blkb 1
	.area idata
	.byte 0
	.area data
_LCD_buff::
	.blkb 32
	.area idata
	.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
	.byte 32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32
	.area data
_Timer_5sec_trigger::
	.blkb 1
	.area idata
	.byte 0
	.area data
_Timer_5sec_counter::
	.blkb 1
	.area idata
	.byte 0
	.area data
_Alarm_counter::
	.blkb 1
	.area idata
	.byte 0
	.area data
_Alarm_enable_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data
_Alarm_trigger::
	.blkb 1
	.area idata
	.byte 0
	.area data
_Select_key_is_pressed_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data
_Up_Modify_key_is_pressed_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data
_Down_Modify_key_is_pressed_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data
_Normal_show_time::
	.blkb 1
	.area idata
	.byte 1
	.area data
_Time_fresh::
	.blkb 1
	.area idata
	.byte 1
	.area data
_Minute_second_integral_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data
_Integral_counter::
	.blkb 1
	.area idata
	.byte 0
	.area data
	.area text
;              j -> 7,X
;              i -> 8,X
_main::
	ais #-9
	tsx
; /*-----------------------------------------------------*
; *工 程 名:	                                
; *硬件连接:                                
; *程序描述: SD-HC08 模板生成                            
; */
; /*[头文件]*/
; #include "GP32C.h"                //映像寄存器地址头文件
; #include "userdefine.h"
; #include "KB.h" 
; 
; #define TSTOPBit   5      //定时器计数停止位
; #define TOFBit     7      //定时器溢出标志位
; 
; extern void lcdshow(unsigned char *str);
; extern void Lcd_show_cursor(char x,char y);
; 
; void Time_Var2char(Time_Struct Time);
; void Timer1init(void);
; void Year_adjust(void);
; void Month_adjust(void);
; void Day_adjust(void);
; void Hour_adjust(void);
; void Minute_adjust(void);
; void A_Year_adjust(void);
; void A_Month_adjust(void);
; void A_Day_adjust(void);
; void A_Hour_adjust(void);
; void A_Minute_adjust(void);
; void Alarm_handle(void);
; void Alarm_play(void);
; void Alarm_Off(void);
; void swap(char *m,char *n);
; 
; 
; Time_Struct Time={2000,1,1,12,0,0};
; Time_Struct Alarm={2000,1,1,7,30,0};
; unsigned char LCD_buff[32]="                                ";
; char Timer_5sec_trigger=0;
; char Timer_5sec_counter=0,Alarm_counter=0;
; char Alarm_enable_flag=0,Alarm_trigger=0;
; char Select_key_is_pressed_flag=0,Up_Modify_key_is_pressed_flag=0,Down_Modify_key_is_pressed_flag=0;
; char Normal_show_time=1,Time_fresh=1,Alarm_fresh;
; char Minute_second_integral_flag=0,Integral_counter=0;
; 
; /*[主函数]*/
; void main()
;   {  
;      char i,j=0;
	clr 7,X
;  	 asm("SEI");               //关总中断
	SEI
;      Timer1init();             //调定时器1初始化子程序
	jsr _Timer1init
;      KB_Init();
	jsr _KB_Init
;      INTKBSCR&= ~(1<<IntBit); //开放键盘中断(IMASKk=1)
	bclr #1,0x1a
;      Alarm_Off();
	jsr _Alarm_Off
	tsx
; 	 asm("CLI");               //开总中断
	CLI
	jmp L5
L4:
;      while(1)
; 	 {
; 	 	j++;
	inc 7,X
	jmp L8
L7:
; 	 	while(1)
; 		{
;             if(Normal_show_time&&Time_fresh)
	lda *_Normal_show_time
	beq L10
	lda *_Time_fresh
	beq L10
; 	     	{
; 	     		Alarm_counter++;
	inc *_Alarm_counter
; 	     		for(i=11;i<16;i++)
	lda #11
	sta 8,X
	bra L15
L12:
	clr *__r0
	lda 8,X
	add #<_LCD_buff
	sta *__r1
	lda *__r0
	adc #>_LCD_buff
	sta *__r0
	lda #32
	ldhx *__r0
	sta ,x
	tsx
L13:
	inc 8,X
L15:
	lda 8,X
	cmp #16
	blo L12
; 	   			{
; 	   			 	LCD_buff[i]=' ';
; 	   			}
; 	     		Time_Var2char(Time);
	sthx *__r0
	ldhx #_Time
	lda ,x
	sta *__r4
	lda 1,x
	sta *__r5
	lda 2,x
	sta *__r6
	lda 3,x
	sta *__r7
	lda 4,x
	sta *__r8
	lda 5,x
	sta *__r9
	lda 6,x
	sta *__r10
	ldhx *__r0
	lda *__r4
	sta ,x
	lda *__r5
	sta 1,x
	lda *__r6
	sta 2,x
	lda *__r7
	sta 3,x
	lda *__r8
	sta 4,x
	lda *__r9
	sta 5,x
	lda *__r10
	sta 6,x
	tsx
	pshx
	pshh
	jsr _Time_Var2char
	ais #2
; 	     		lcdshow((unsigned char *)LCD_buff);
	lda #<_LCD_buff
	psha
	lda #>_LCD_buff
	psha
	jsr _lcdshow
	ais #2
	tsx
; 	     		Time_fresh=0;
	clr *_Time_fresh
; 	     	} 
L10:
; 	     	if(!Normal_show_time&&Alarm_fresh)
	lda *_Normal_show_time
	bne L16
	lda *_Alarm_fresh
	beq L16
; 	     	{
; 	     		Alarm_fresh=0;
	clr *_Alarm_fresh
; 	     		Time_Var2char(Alarm);
	sthx *__r0
	ldhx #_Alarm
	lda ,x
	sta *__r4
	lda 1,x
	sta *__r5
	lda 2,x
	sta *__r6
	lda 3,x
	sta *__r7
	lda 4,x
	sta *__r8
	lda 5,x
	sta *__r9
	lda 6,x
	sta *__r10
	ldhx *__r0
	lda *__r4
	sta ,x
	lda *__r5
	sta 1,x
	lda *__r6
	sta 2,x
	lda *__r7
	sta 3,x
	lda *__r8
	sta 4,x
	lda *__r9
	sta 5,x
	lda *__r10
	sta 6,x
	tsx
	pshx
	pshh
	jsr _Time_Var2char
	ais #2
; 	     		lcdshow((unsigned char *)LCD_buff);
	lda #<_LCD_buff
	psha
	lda #>_LCD_buff
	psha
	jsr _lcdshow
	ais #2
	tsx
; 	     	}
L16:
; 			if(Alarm_trigger)
	lda *_Alarm_trigger
	beq L18
; 	     	{
; 	     		if(Alarm_counter<20)
	lda *_Alarm_counter
	cmp #20
	bhs L20
; 	     		Alarm_play();
	jsr _Alarm_play
	tsx
	bra L21
L20:
; 	     		else 
; 	     		{
; 	     			Alarm_trigger=0;
	clr *_Alarm_trigger
; 	     			Alarm_counter=0;
	clr *_Alarm_counter
; 	     			Alarm_Off();
	jsr _Alarm_Off
	tsx
; 	     		}
L21:
; 	     	}
L18:
; 	     	if(Minute_second_integral_flag)
	lda *_Minute_second_integral_flag
	beq L22
; 	     	{
; 	     		if(Integral_counter<5)
	lda *_Integral_counter
	cmp #5
	bhs L24
; 	     		Alarm_play();
	jsr _Alarm_play
	tsx
	bra L25
L24:
; 	     		else 
; 	     		{
; 	     			Minute_second_integral_flag=0;
	clr *_Minute_second_integral_flag
; 	     			Integral_counter=0;
	clr *_Integral_counter
; 	     			Alarm_Off();
	jsr _Alarm_Off
	tsx
; 	     		}
L25:
; 	     	}
L22:
; 	   		if(Timer_5sec_trigger)
	lda *_Timer_5sec_trigger
	bne X13
	jmp L26
X13:
; 	   		{
; 	   				if(Timer_5sec_counter>5)
	lda *_Timer_5sec_counter
	cmp #5
	bls L28
; 	   			 	{
; 	   			 		
; 	   			 		Timer_5sec_trigger=0;
	clr *_Timer_5sec_trigger
; 	   					Timer_5sec_counter=0;
	clr *_Timer_5sec_counter
; 	   					Select_key_is_pressed_flag=0;
	clr *_Select_key_is_pressed_flag
; 	   					Normal_show_time=1;
	lda #1
	sta *_Normal_show_time
; 	   					break;
	jmp L9
L28:
; 	   				}
; 	   				if(Select_key_is_pressed_flag==0)
	lda *_Select_key_is_pressed_flag
	bne L30
; 	   				{
; 	   					Timer_5sec_trigger=0;
	clr *_Timer_5sec_trigger
; 	   					Timer_5sec_counter=0;
	clr *_Timer_5sec_counter
; 	   					break;
	jmp L9
L30:
; 	   				}
; 	   				switch(Select_key_is_pressed_flag%11)
	clr *__r0
	lda *_Select_key_is_pressed_flag
	sta *__rlo
	mov *__r0,*__rhi
	lda #11
	psha
	clra
	psha
	jsr __divmod16s
	pula
	sta 5,X
	pula
	sta 6,X
	lda 5,X
	bne X0
	lda 6,X
	beq L35
X0:
	lda 5,X
	bne X1
	lda 6,X
	cmp #1
	beq L36
X1:
	lda 5,X
	bne X2
	lda 6,X
	cmp #2
	beq L37
X2:
	lda 5,X
	bne X3
	lda 6,X
	cmp #3
	beq L38
X3:
	lda 5,X
	bne X4
	lda 6,X
	cmp #4
	beq L39
X4:
	lda 5,X
	bne X5
	lda 6,X
	cmp #5
	beq L40
X5:
	lda 5,X
	bne X6
	lda 6,X
	cmp #6
	beq L41
X6:
	lda 5,X
	bne X7
	lda 6,X
	cmp #7
	beq L42
X7:
	lda 5,X
	bne X8
	lda 6,X
	cmp #8
	beq L43
X8:
	lda 5,X
	bne X9
	lda 6,X
	cmp #9
	beq L44
X9:
	lda 5,X
	bne X10
	lda 6,X
	cmp #10
	beq L45
X10:
	bra L33
X11:
; 	   				{
L35:
; 	   					case 0:Year_adjust();break;
	jsr _Year_adjust
	tsx
	bra L33
L36:
; 	   					case 1:Year_adjust();break;
	jsr _Year_adjust
	tsx
	bra L33
L37:
; 	   					case 2:Month_adjust();break;
	jsr _Month_adjust
	tsx
	bra L33
L38:
; 	   					case 3:Day_adjust();break;
	jsr _Day_adjust
	tsx
	bra L33
L39:
; 	   					case 4:Hour_adjust();break;
	jsr _Hour_adjust
	tsx
	bra L33
L40:
; 	   					case 5:Minute_adjust();break;
	jsr _Minute_adjust
	tsx
	bra L33
L41:
; 	   					case 6:A_Year_adjust();break;
	jsr _A_Year_adjust
	tsx
	bra L33
L42:
; 	   					case 7:A_Month_adjust();break;
	jsr _A_Month_adjust
	tsx
	bra L33
L43:
; 	   					case 8:A_Day_adjust();break;
	jsr _A_Day_adjust
	tsx
	bra L33
L44:
; 	   					case 9:A_Hour_adjust();break;
	jsr _A_Hour_adjust
	tsx
	bra L33
L45:
; 	   					case 10:A_Minute_adjust();break;
	jsr _A_Minute_adjust
	tsx
; 	   					default: ;break;
L33:
; 	   				}
; 	   		
; 	   		} //end if
L26:
L8:
	jmp L7
L9:
L5:
	jmp L4
X12:
L3:
	ais #9
	.dbline 0 ; func end
	rts
;            tmp -> 0,X
;        tmpchar -> 2,X
;              i -> 3,X
;           Time -> 6,X
_Time_Var2char::
	ais #-4
	tsx
;      	}//end while
;      }//end while
;   }// end main
;   
;   
; void Time_Var2char(Time_Struct Time)
; {
; 	unsigned char i,tmpchar;
; 	unsigned short int tmp;
; 	tmp=Time.year;
	lda 6,X
	ldx 7,X
	psha
	pulh
	lda 1,x
	sta 2,SP
	lda ,x
	tsx
	sta ,X
; 	for(i=0;i<4;i++)
	clr 3,X
	bra L50
L47:
	lda 1,X
	sta *__rlo
	lda ,X
	sta *__rhi
	lda #10
	psha
	clra
	psha
	jsr __divmod16u
	pula
	sta *__r0
	pula
	add #48
	sta *__r1
	lda *__r0
	adc #0
	clr *__r2
	lda 3,X
	add #<_LCD_buff
	sta *__r3
	lda *__r2
	adc #>_LCD_buff
	sta *__r2
	lda *__r1
	ldhx *__r2
	sta ,x
	tsx
	lda 1,X
	sta *__rlo
	lda ,X
	sta *__rhi
	lda #10
	psha
	clra
	psha
	jsr __divmod16u
	ais #2
	lda *__rhi
	sta ,X
	lda *__rlo
	sta 1,X
L48:
	inc 3,X
L50:
	lda 3,X
	cmp #4
	blo L47
; 	{
; 		LCD_buff[i]=tmp%10+48;
; 		tmp=tmp/10;
; 	}
; 	swap(&LCD_buff[0],&LCD_buff[3]);
	ldhx #_LCD_buff+3
	pshx
	pshh
	ldhx #_LCD_buff
	pshx
	pshh
	jsr _swap
	ais #4
; 	swap(&LCD_buff[1],&LCD_buff[2]);
	ldhx #_LCD_buff+2
	pshx
	pshh
	ldhx #_LCD_buff+1
	pshx
	pshh
	jsr _swap
	ais #4
	tsx
; 	LCD_buff[i]='-';
	clr *__r0
	lda 3,X
	add #<_LCD_buff
	sta *__r1
	lda *__r0
	adc #>_LCD_buff
	sta *__r0
	lda #45
	ldhx *__r0
	sta ,x
	tsx
; 	tmpchar=Time.month;
	lda 7,X
	add #2
	sta *__r1
	lda 6,X
	adc #0
	sta *__r0
	ldhx *__r0
	lda ,x
	tsx
	sta 2,X
; 	for(i=5;i<7;i++)
	lda #5
	sta 3,X
	bra L57
L54:
	lda 2,X
	ldx #10
	clrh
	div
	pshh
	pula
	tsx
	add #48
	sta *__r1
	clr *__r2
	lda 3,X
	add #<_LCD_buff
	sta *__r3
	lda *__r2
	adc #>_LCD_buff
	sta *__r2
	lda *__r1
	ldhx *__r2
	sta ,x
	tsx
	lda 2,X
	ldx #10
	clrh
	div
	tsx
	sta 2,X
L55:
	inc 3,X
L57:
	lda 3,X
	cmp #7
	blo L54
; 	{
; 		LCD_buff[i]=tmpchar%10+48;
; 		tmpchar=tmpchar/10;
; 	}
; 	swap(&LCD_buff[6],&LCD_buff[5]);
	ldhx #_LCD_buff+5
	pshx
	pshh
	ldhx #_LCD_buff+6
	pshx
	pshh
	jsr _swap
	ais #4
	tsx
; 	LCD_buff[i]='-';
	clr *__r0
	lda 3,X
	add #<_LCD_buff
	sta *__r1
	lda *__r0
	adc #>_LCD_buff
	sta *__r0
	lda #45
	ldhx *__r0
	sta ,x
	tsx
; 	tmpchar=Time.day;
	lda 7,X
	add #3
	sta *__r1
	lda 6,X
	adc #0
	sta *__r0
	ldhx *__r0
	lda ,x
	tsx
	sta 2,X
; 	for(i=8;i<10;i++)
	lda #8
	sta 3,X
	bra L63
L60:
	lda 2,X
	ldx #10
	clrh
	div
	pshh
	pula
	tsx
	add #48
	sta *__r1
	clr *__r2
	lda 3,X
	add #<_LCD_buff
	sta *__r3
	lda *__r2
	adc #>_LCD_buff
	sta *__r2
	lda *__r1
	ldhx *__r2
	sta ,x
	tsx
	lda 2,X
	ldx #10
	clrh
	div
	tsx
	sta 2,X
L61:
	inc 3,X
L63:
	lda 3,X
	cmp #10
	blo L60
; 	{
; 		LCD_buff[i]=tmpchar%10+48;
; 		tmpchar=tmpchar/10;
; 	}
; 	swap(&LCD_buff[9],&LCD_buff[8]);
	ldhx #_LCD_buff+8
	pshx
	pshh
	ldhx #_LCD_buff+9
	pshx
	pshh
	jsr _swap
	ais #4
	tsx
; 	tmpchar=Time.hour;
	lda 7,X
	add #4
	sta *__r1
	lda 6,X
	adc #0
	sta *__r0
	ldhx *__r0
	lda ,x
	tsx
	sta 2,X
; 	for(i=16;i<18;i++)
	lda #16
	sta 3,X
	bra L69
L66:
	lda 2,X
	ldx #10
	clrh
	div
	pshh
	pula
	tsx
	add #48
	sta *__r1
	clr *__r2
	lda 3,X
	add #<_LCD_buff
	sta *__r3
	lda *__r2
	adc #>_LCD_buff
	sta *__r2
	lda *__r1
	ldhx *__r2
	sta ,x
	tsx
	lda 2,X
	ldx #10
	clrh
	div
	tsx
	sta 2,X
L67:
	inc 3,X
L69:
	lda 3,X
	cmp #18
	blo L66
; 	{
; 		LCD_buff[i]=tmpchar%10+48;
; 		tmpchar=tmpchar/10;
; 	}
; 	swap(&LCD_buff[17],&LCD_buff[16]);
	ldhx #_LCD_buff+16
	pshx
	pshh
	ldhx #_LCD_buff+17
	pshx
	pshh
	jsr _swap
	ais #4
	tsx
; 	LCD_buff[i]=':';
	clr *__r0
	lda 3,X
	add #<_LCD_buff
	sta *__r1
	lda *__r0
	adc #>_LCD_buff
	sta *__r0
	lda #58
	ldhx *__r0
	sta ,x
	tsx
; 	tmpchar=Time.min;
	lda 7,X
	add #5
	sta *__r1
	lda 6,X
	adc #0
	sta *__r0
	ldhx *__r0
	lda ,x
	tsx
	sta 2,X
; 	for(i=19;i<21;i++)
	lda #19
	sta 3,X
	bra L75
L72:
	lda 2,X
	ldx #10
	clrh
	div
	pshh
	pula
	tsx
	add #48
	sta *__r1
	clr *__r2
	lda 3,X
	add #<_LCD_buff
	sta *__r3
	lda *__r2
	adc #>_LCD_buff
	sta *__r2
	lda *__r1
	ldhx *__r2
	sta ,x
	tsx
	lda 2,X
	ldx #10
	clrh
	div
	tsx
	sta 2,X
L73:
	inc 3,X
L75:
	lda 3,X
	cmp #21
	blo L72
; 	{
; 		LCD_buff[i]=tmpchar%10+48;
; 		tmpchar=tmpchar/10;
; 	}
; 	swap(&LCD_buff[20],&LCD_buff[19]);
	ldhx #_LCD_buff+19
	pshx
	pshh
	ldhx #_LCD_buff+20
	pshx
	pshh
	jsr _swap
	ais #4
	tsx
; 	LCD_buff[i]=':';
	clr *__r0
	lda 3,X
	add #<_LCD_buff
	sta *__r1
	lda *__r0
	adc #>_LCD_buff
	sta *__r0
	lda #58
	ldhx *__r0
	sta ,x
	tsx
; 	tmpchar=Time.sec;
	lda 7,X
	add #6
	sta *__r1
	lda 6,X
	adc #0
	sta *__r0
	ldhx *__r0
	lda ,x
	tsx
	sta 2,X
; 	for(i=22;i<24;i++)
	lda #22
	sta 3,X
	bra L81
L78:
	lda 2,X
	ldx #10
	clrh
	div
	pshh
	pula
	tsx
	add #48
	sta *__r1
	clr *__r2
	lda 3,X
	add #<_LCD_buff
	sta *__r3
	lda *__r2
	adc #>_LCD_buff
	sta *__r2
	lda *__r1
	ldhx *__r2
	sta ,x
	tsx
	lda 2,X
	ldx #10

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -