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

📄 dianziqin.s

📁 很好的avr单片机入门程序
💻 S
字号:
	.module dianziqin.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\dianziqin.c
	.dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\delay.h
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 7
; /* 1MHz 下延时程序*/
; 
; #ifndef DELAY_H_H
; #define DELAY_H_H
; 
; void delay_1ms(void)             //1ms 延时
; {
	.dbline 16
;   unsigned int i;
;  /* 
;   for(i=1;i<140;i++)   //1MHz
;   ;
; 
;   for(i=1331;i>0;i--)   // 8MHz
; ;
;  */
;  for(i=0;i<2;i++)   //1MHz,24us
	clr R16
	clr R17
	xjmp L5
L2:
	.dbline 17
; ;
L3:
	.dbline 16
	subi R16,255  ; offset = 1
	sbci R17,255
L5:
	.dbline 16
	cpi R16,2
	ldi R30,0
	cpc R17,R30
	brlo L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              n -> R10,R11
	.even
_delay::
	xcall push_xgset300C
	movw R10,R16
	.dbline -1
	.dbline 21
; }
; 
; void delay(unsigned int n)
; {
	.dbline 22
;  unsigned int i=0;
	clr R20
	clr R21
	.dbline 23
;  for(i=0;i<n;i++)
	xjmp L10
L7:
	.dbline 24
;  delay_1ms();
	xcall _delay_1ms
L8:
	.dbline 23
	subi R20,255  ; offset = 1
	sbci R21,255
L10:
	.dbline 23
	cp R20,R10
	cpc R21,R11
	brlo L7
X1:
	.dbline -2
L6:
	.dbline 0 ; func end
	xjmp pop_xgset300C
	.dbsym r i 20 i
	.dbsym r n 10 i
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;              i -> R20,R21
;              n -> R16,R17
	.even
_delay_ms::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 28
; }
; 
; void delay_ms(int n)
; {
	.dbline 30
;  int i;
;  for(i=0;i<n;i++)
	clr R20
	clr R21
	xjmp L15
L12:
	.dbline 31
;  {
	.dbline 32
;   for(i=0;i<140;i++)
	clr R20
	clr R21
L16:
	.dbline 33
;   ;
L17:
	.dbline 32
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 32
	cpi R20,140
	ldi R30,0
	cpc R21,R30
	brlt L16
X2:
	.dbline 34
;  }
L13:
	.dbline 30
	subi R20,255  ; offset = 1
	sbci R21,255
L15:
	.dbline 30
	cp R20,R16
	cpc R21,R17
	brlt L12
X3:
	.dbline -2
L11:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 I
	.dbsym r n 16 I
	.dbend
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\delay.h
_count::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\delay.h
	.dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\dianziqin.c
	.dbsym e count _count c
	.area lit(rom, con, rel)
_music_key::
	.byte 39,35
	.byte 31,0
	.byte 29,26
	.byte 23,0
	.byte 21
	.dbsym e music_key _music_key A[9:9]kc
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\dianziqin.c
	.dbfunc e scan_key _scan_key fc
;         intKey -> R22
;              i -> R20
;            tmp -> R10
	.even
_scan_key::
	xcall push_xgsetF00C
	.dbline -1
	.dbline 12
; /*模拟电子琴,0、1、2、4、5、6、8 分别模拟do re mi fa so la xi*/
; 
; #include <iom128v.h>
; #include <macros.h>
; #include "delay.h"
; 
; char count=0x00;
; char sound_signal;//定义音符大小 
; char sound_pace;//定义节拍大小 
; const char music_key[]={0x27,0x23,0x1f,0x00,0x1d,0x1a,0x17,0x00,0x15};
; char scan_key()
; {
	.dbline 13
;  char i=0;
	clr R20
	.dbline 14
;  char tmp=0x00;
	clr R10
	.dbline 15
;  char intKey=0x00;
	clr R22
	.dbline 16
;  DDRB=0x8f;
	ldi R24,143
	out 0x17,R24
	.dbline 17
;  PORTB=0xf8;
	ldi R24,248
	out 0x18,R24
	.dbline 19
;   
;  for(i=0;i<3;i++)
	xjmp L24
L21:
	.dbline 20
;  {
	.dbline 21
;  PORTB=~(1<<i);
	ldi R16,1
	mov R17,R20
	xcall lsl8
	mov R2,R16
	com R2
	out 0x18,R2
	.dbline 22
;  delay(10);    //等待低电平稳定
	ldi R16,10
	ldi R17,0
	xcall _delay
	.dbline 23
;  tmp=PINB&0xf0;
	in R24,0x16
	andi R24,240
	mov R10,R24
	.dbline 24
;  if(tmp!=0xf0)  //有键按下,延时10ms去抖
	cpi R24,240
	breq L25
X4:
	.dbline 25
;  {
	.dbline 26
;  delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 27
;  tmp=PINB&0xf0;
	in R24,0x16
	andi R24,240
	mov R10,R24
	.dbline 28
;  }
L25:
	.dbline 29
;  if(tmp!=0xf0) //确有键按下
	mov R24,R10
	cpi R24,240
	brne X13
	xjmp L27
X13:
X5:
	.dbline 30
;  {
	.dbline 31
;  tmp&=0xf0;
	andi R24,240
	mov R10,R24
	.dbline 32
;  switch(tmp)
	clr R11
	movw R24,R10
	cpi R24,176
	ldi R30,0
	cpc R25,R30
	breq L34
X6:
	ldi R24,176
	cp R24,R10
	cpc R25,R11
	brlt L37
X7:
L36:
	movw R24,R10
	cpi R24,112
	ldi R30,0
	cpc R25,R30
	breq L35
X8:
	xjmp L29
L37:
	movw R24,R10
	cpi R24,208
	ldi R30,0
	cpc R25,R30
	breq L33
X9:
	cpi R24,208
	ldi R30,0
	cpc R25,R30
	brlt L29
X10:
L38:
	movw R24,R10
	cpi R24,224
	ldi R30,0
	cpc R25,R30
	breq L32
X11:
	xjmp L29
L32:
	.dbline 35
;  {
;   case 0xe0: 
;   	   intKey=12-4*(3-i);
	ldi R24,3
	sub R24,R20
	lsl R24
	lsl R24
	ldi R22,12
	sub R22,R24
	.dbline 36
; 	   break;
	xjmp L30
L33:
	.dbline 38
;   case 0xd0:   //1 or 5
;   	   intKey=13-4*(3-i);
	ldi R24,3
	sub R24,R20
	lsl R24
	lsl R24
	ldi R22,13
	sub R22,R24
	.dbline 39
; 	   break;
	xjmp L30
L34:
	.dbline 41
;   case 0xb0:
;   	   intKey=14-4*(3-i);
	ldi R24,3
	sub R24,R20
	lsl R24
	lsl R24
	ldi R22,14
	sub R22,R24
	.dbline 42
; 	   break;
	xjmp L30
L35:
	.dbline 44
;   case 0x70:
;   	   intKey=15-4*(3-i);
	ldi R24,3
	sub R24,R20
	lsl R24
	lsl R24
	ldi R22,15
	sub R22,R24
	.dbline 45
; 	   break;
	xjmp L30
L29:
	.dbline 47
;   default:
;   	   intKey=0xf0;
	ldi R22,240
	.dbline 48
; 	   break;
L30:
	.dbline 50
;  }
;  return intKey;
	mov R16,R22
	xjmp L20
L27:
	.dbline 52
;  }
;  }
L22:
	.dbline 19
	inc R20
L24:
	.dbline 19
	cpi R20,3
	brsh X14
	xjmp L21
X14:
X12:
	.dbline 53
;  return 0xf0;
	ldi R16,240
	.dbline -2
L20:
	.dbline 0 ; func end
	xjmp pop_xgsetF00C
	.dbsym r intKey 22 c
	.dbsym r i 20 c
	.dbsym r tmp 10 c
	.dbend
	.area vector(rom, abs)
	.org 48
	jmp _timer1_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\dianziqin.c
	.dbfunc e timer1_isr _timer1_isr fV
	.even
_timer1_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 58
; }
; 
; #pragma interrupt_handler timer1_isr:13
; void timer1_isr()       // 50ms
; { 
	.dbline 59
;   count=count+1;
	lds R24,_count
	subi R24,255    ; addi 1
	sts _count,R24
	.dbline 60
;   TCNT1=0x00;
	clr R2
	clr R3
	out 0x2d,R3
	out 0x2c,R2
	.dbline -2
L39:
	.dbline 0 ; func end
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	reti
	.dbend
	.dbfunc e main _main fV
;         intKey -> R10
;            key -> R20
	.even
_main::
	.dbline -1
	.dbline 64
;  
; }
; void main()
; {
	.dbline 66
; 
;  char key=0x00;
	clr R20
	.dbline 67
;  char intKey=0x00;
	clr R10
	.dbline 68
;  DDRB=0x8f;
	ldi R24,143
	out 0x17,R24
	.dbline 69
;  PORTB=0xf8;
	ldi R24,248
	out 0x18,R24
	.dbline 71
;  
;   TCNT1H=0x00;
	clr R2
	out 0x2d,R2
	.dbline 72
;   TCNT1L=0x00;
	out 0x2c,R2
	.dbline 73
;   OCR1AH=0x00;
	out 0x2b,R2
	.dbline 74
;   OCR1AL=0x30;
	ldi R24,48
	out 0x2a,R24
	.dbline 75
;   TIMSK=0x10;
	ldi R24,16
	out 0x37,R24
	.dbline 76
;   TCCR1A=0x00;
	out 0x2f,R2
	.dbline 77
;   SEI();
	sei
	xjmp L42
L41:
	.dbline 80
;  
;  while(1)
;  {
	.dbline 82
; 
;  key=scan_key();
	xcall _scan_key
	mov R20,R16
	.dbline 83
;  if(key!=0xf0)  //有键按下
	cpi R16,240
	breq L44
X15:
	.dbline 84
;  {
	.dbline 85
;   TCCR1B=0x05;
	ldi R24,5
	out 0x2e,R24
	xjmp L47
L46:
	.dbline 86
;   while(count!=4){
	.dbline 88
; 
;   PORTB^=0x80;
	ldi R24,128
	ldi R25,0
	in R2,0x18
	clr R3
	eor R2,R24
	eor R3,R25
	out 0x18,R2
	.dbline 89
;   delay(music_key[key]);}
	ldi R24,<_music_key
	ldi R25,>_music_key
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	elpm R16,Z
	clr R17
	xcall _delay
	.dbline 89
L47:
	.dbline 86
	lds R24,_count
	cpi R24,4
	brne L46
X16:
	.dbline 90
;  }
L44:
	.dbline 91
;   TCCR1B=0x00;
	clr R2
	out 0x2e,R2
	.dbline 92
;    count=0;
	sts _count,R2
	.dbline 93
;  }
L42:
	.dbline 79
	xjmp L41
X17:
	.dbline -2
L40:
	.dbline 0 ; func end
	ret
	.dbsym r intKey 10 c
	.dbsym r key 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\AVR程序\电子琴\dianziqin.c
_sound_pace::
	.blkb 1
	.dbsym e sound_pace _sound_pace c
_sound_signal::
	.blkb 1
	.dbsym e sound_signal _sound_signal c
;  /*
;  char tmp;
;  DDRB=0x0f;
;  PORTB=0xfe;
;  DDRA=0xff;
;  PORTA=0xff;
;  while(1){
;  tmp=PINB&0xf0;
;  if(tmp==0xd0)
;  PORTA=0x00;
;  }*/
; }

⌨️ 快捷键说明

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