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

📄 一般按键.lst

📁 ICC mega8例子
💻 LST
字号:
__start:
__text_start:
      1B E5CF      LDI	R28,0x5F
      1C E0D4      LDI	R29,4
      1D BFCD      OUT	0x3D,R28
      1E BFDE      OUT	0x3E,R29
      1F 51CE      SUBI	R28,0x1E
      20 40D0      SBCI	R29,0
      21 EA0A      LDI	R16,0xAA
      22 8308      STD	Y+0,R16
      23 2400      CLR	R0
      24 E6E0      LDI	R30,0x60
      25 E0F0      LDI	R31,0
      26 E010      LDI	R17,0
      27 36E0      CPI	R30,0x60
      28 07F1      CPC	R31,R17
      29 F011      BEQ	0x002C
      2A 9201      ST	R0,Z+
      2B CFFB      RJMP	0x0027
      2C 8300      STD	Z+0,R16
      2D E3E6      LDI	R30,0x36
      2E E0F0      LDI	R31,0
      2F E6A0      LDI	R26,0x60
      30 E0B0      LDI	R27,0
      31 E010      LDI	R17,0
      32 E000      LDI	R16,0
      33 BF0B      OUT	0x3B,R16
      34 33E6      CPI	R30,0x36
      35 07F1      CPC	R31,R17
      36 F021      BEQ	0x003B
      37 95C8      LPM
      38 9631      ADIW	R30,1
      39 920D      ST	R0,X+
      3A CFF9      RJMP	0x0034
      3B D062      RCALL	_main
_exit:
      3C CFFF      RJMP	_exit
FILE: E:\xiaozhiyong2009\设计资料\项目设计\mega8_C语言常用程序\ICCAVR_mega8_一般按键\一般按键.c
(0001) //ICC-AVR application builder : 2009-3-10 17:31:43
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004) 
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) 
(0008) void port_init(void)
(0009) {
(0010)  PORTB = 0x00;
_port_init:
      3D 2422      CLR	R2
      3E BA28      OUT	0x18,R2
(0011)  DDRB  = 0x00;
      3F BA27      OUT	0x17,R2
(0012)  PORTC = 0x00; //m103 output only
      40 BA25      OUT	0x15,R2
(0013)  DDRC  = 0x00;
      41 BA24      OUT	0x14,R2
(0014)  PORTD = 0x00;
      42 BA22      OUT	0x12,R2
(0015)  DDRD  = 0x00;
      43 BA21      OUT	0x11,R2
      44 9508      RET
(0016) }
(0017) 
(0018) //call this routine to initialize all peripherals
(0019) void init_devices(void)
(0020) {
(0021)  //stop errant interrupts until set up
(0022)  CLI(); //disable all interrupts
_init_devices:
      45 94F8      BCLR	7
(0023)  port_init();
      46 DFF6      RCALL	_port_init
(0024) 
(0025)  MCUCR = 0x00;
      47 2422      CLR	R2
      48 BE25      OUT	0x35,R2
(0026)  GICR  = 0x00;
      49 BE2B      OUT	0x3B,R2
(0027)  TIMSK = 0x00; //timer interrupt sources
      4A BE29      OUT	0x39,R2
(0028)  SEI(); //re-enable interrupts
      4B 9478      BSET	7
      4C 9508      RET
(0029)  //all peripherals are now initialized
(0030) }
(0031) 
(0032) /************************************
(0033) 用    途:微秒级延时程序
(0034) Taget   :mega8
(0035) crystal :8M
(0036) 介    绍:在8M的晶振上进行us级的延时
(0037) 入口参数:
(0038) *************************************/
(0039) void delay_us(int time)
(0040) {
(0041)     do
(0042)     {
(0043)         time--;
_delay_us:
  time                 --> R16
      4D 5001      SUBI	R16,1
      4E 4010      SBCI	R17,0
(0044)     } 
(0045)     while (time > 1);
      4F E081      LDI	R24,1
      50 E090      LDI	R25,0
      51 1780      CP	R24,R16
      52 0791      CPC	R25,R17
      53 F3CC      BLT	0x004D
      54 9508      RET
_show_2_digit:
  i                    --> Y,+1
  digi                 --> R10
      55 92AA      ST	R10,-Y
      56 2EA0      MOV	R10,R16
(0046) }
(0047) 
(0048) 
(0049) /************************************
(0050) 用    途:两位数码管显示一个数
(0051) Taget   :mega8
(0052) crystal :8M
(0053) 介    绍:共阳数码管
(0054) 	  	 1-PC1(片选)
(0055) 		 2-PC0
(0056) 		 -----
(0057) 		 a-PB0(数据)
(0058) 		 b-PB1
(0059) 		 ...
(0060) 		 h-PB6
(0061) 		 DP-PB7
(0062) 入口参数:要显示的数,十进制表示
(0063) *************************************/
(0064) const unsigned char num[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
(0065) 	   			0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
(0066) void show_2_digit(unsigned char digi)
(0067) {
(0068)  unsigned char i;
(0069)  DDRC=0xff;
      57 EF8F      LDI	R24,0xFF
      58 BB84      OUT	0x14,R24
(0070)  DDRB=0xff;
      59 BB87      OUT	0x17,R24
(0071)  PORTC=0;//关片选
      5A 2422      CLR	R2
      5B BA25      OUT	0x15,R2
(0072)  PORTB=~num[(unsigned char )(digi/10)];//显示十位
      5C E02A      LDI	R18,0xA
      5D E030      LDI	R19,0
      5E 2D0A      MOV	R16,R10
      5F 2711      CLR	R17
      60 D048      RCALL	div16s
      61 2FE0      MOV	R30,R16
      62 27FF      CLR	R31
      63 E286      LDI	R24,0x26
      64 E090      LDI	R25,0
      65 0FE8      ADD	R30,R24
      66 1FF9      ADC	R31,R25
      67 9024      LPM	R2,0(Z)
      68 9420      COM	R2
      69 BA28      OUT	0x18,R2
(0073)  PORTC=(0x1<<1);//开十位的显示
      6A E082      LDI	R24,2
      6B BB85      OUT	0x15,R24
(0074)  delay_us(200);
      6C EC08      LDI	R16,0xC8
      6D E010      LDI	R17,0
      6E DFDE      RCALL	_delay_us
(0075)  PORTC=0;//关显示
      6F 2422      CLR	R2
      70 BA25      OUT	0x15,R2
(0076)  PORTB=~num[(unsigned char )(digi%10)];//显示个位
      71 E02A      LDI	R18,0xA
      72 E030      LDI	R19,0
      73 2D0A      MOV	R16,R10
      74 2711      CLR	R17
      75 D02F      RCALL	mod16s
      76 2FE0      MOV	R30,R16
      77 27FF      CLR	R31
      78 E286      LDI	R24,0x26
      79 E090      LDI	R25,0
      7A 0FE8      ADD	R30,R24
      7B 1FF9      ADC	R31,R25
      7C 9024      LPM	R2,0(Z)
      7D 9420      COM	R2
      7E BA28      OUT	0x18,R2
(0077)  PORTC=(0x1<<0);//开个位的显示
      7F E081      LDI	R24,1
      80 BB85      OUT	0x15,R24
(0078)  delay_us(200);
      81 EC08      LDI	R16,0xC8
      82 E010      LDI	R17,0
      83 DFC9      RCALL	_delay_us
(0079)  PORTC=0x0;//关显示
      84 2422      CLR	R2
      85 BA25      OUT	0x15,R2
      86 90A9      LD	R10,Y+
      87 9508      RET
(0080) }
(0081) 
(0082) /************************************
(0083) 用    途:单键扫描程序
(0084) Taget   :mega8
(0085) crystal :8M
(0086) 介    绍:用的是D的前四个口,共有四个按键
(0087) 入口参数:
(0088) 出口参数:为0表示没有按键(1,2,3,4)
(0089) *************************************/
(0090) unsigned char key_scan()
(0091) {
(0092)  unsigned char k,j=0;
_key_scan:
  j                    --> R16
  k                    --> R18
      88 2700      CLR	R16
(0093)  PORTD|=0x0f;
      89 B382      IN	R24,0x12
      8A 608F      ORI	R24,0xF
      8B BB82      OUT	0x12,R24
(0094)  k=PIND;
      8C B320      IN	R18,0x10
(0095)  k=k&0x0f;
      8D 702F      ANDI	R18,0xF
(0096)  if(k==0x0e)
      8E 302E      CPI	R18,0xE
      8F F411      BNE	0x0092
(0097)   j=1;
      90 E001      LDI	R16,1
      91 C00B      RJMP	0x009D
(0098)  else if(k==0x0d)
      92 302D      CPI	R18,0xD
      93 F411      BNE	0x0096
(0099)   j=2;
      94 E002      LDI	R16,2
      95 C007      RJMP	0x009D
(0100)  else if(k==0x0b)
      96 302B      CPI	R18,0xB
      97 F411      BNE	0x009A
(0101)   j=3;
      98 E003      LDI	R16,3
      99 C003      RJMP	0x009D
(0102)  else if (k==0x07)
      9A 3027      CPI	R18,7
      9B F409      BNE	0x009D
(0103)   j=4;
      9C E004      LDI	R16,4
(0104)  return j;
      9D 9508      RET
(0105) }
(0106) 
(0107) void main()
(0108) {
(0109)  port_init();
_main:
      9E DF9E      RCALL	_port_init
(0110)  init_devices();
      9F DFA5      RCALL	_init_devices
      A0 C002      RJMP	0x00A3
(0111)  
(0112)  while(1)
(0113)  {
(0114)   show_2_digit(key_scan());
FILE: <library>
      A1 DFE6      RCALL	_key_scan
      A2 DFB2      RCALL	_show_2_digit
      A3 CFFD      RJMP	0x00A1
      A4 9508      RET
mod16s:
      A5 9468      BSET	6
      A6 92DA      ST	R13,-Y
      A7 2ED1      MOV	R13,R17
      A8 C004      RJMP	0x00AD
div16s:
      A9 94E8      BCLR	6
      AA 92DA      ST	R13,-Y
      AB 2ED1      MOV	R13,R17
      AC 26D3      EOR	R13,R19
      AD FF17      SBRS	R17,7
      AE C004      RJMP	0x00B3
      AF 9510      COM	R17
      B0 9500      COM	R16
      B1 5F0F      SUBI	R16,0xFF
      B2 4F1F      SBCI	R17,0xFF
      B3 FF37      SBRS	R19,7
      B4 C004      RJMP	0x00B9
      B5 9530      COM	R19
      B6 9520      COM	R18
      B7 5F2F      SUBI	R18,0xFF
      B8 4F3F      SBCI	R19,0xFF
      B9 D00B      RCALL	xdiv16u
      BA FED7      SBRS	R13,7
      BB C004      RJMP	0x00C0
      BC 9510      COM	R17
      BD 9500      COM	R16
      BE 5F0F      SUBI	R16,0xFF
      BF 4F1F      SBCI	R17,0xFF
      C0 90D9      LD	R13,Y+
      C1 9508      RET
mod16u:
      C2 9468      BSET	6
      C3 C001      RJMP	xdiv16u
div16u:
      C4 94E8      BCLR	6
xdiv16u:
      C5 92EA      ST	R14,-Y
      C6 92FA      ST	R15,-Y
      C7 938A      ST	R24,-Y
      C8 24EE      CLR	R14
      C9 24FF      CLR	R15
      CA E180      LDI	R24,0x10
      CB 0F00      LSL	R16
      CC 1F11      ROL	R17
      CD 1CEE      ROL	R14
      CE 1CFF      ROL	R15
      CF 16E2      CP	R14,R18
      D0 06F3      CPC	R15,R19
      D1 F018      BCS	0x00D5
      D2 1AE2      SUB	R14,R18
      D3 0AF3      SBC	R15,R19
      D4 9503      INC	R16
      D5 958A      DEC	R24
      D6 F7A1      BNE	0x00CB
      D7 F416      BRTC	0x00DA
      D8 2D0E      MOV	R16,R14
      D9 2D1F      MOV	R17,R15
      DA 9189      LD	R24,Y+
      DB 90F9      LD	R15,Y+
      DC 90E9      LD	R14,Y+
      DD 9508      RET

⌨️ 快捷键说明

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