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

📄 main.lst

📁 AVR试验板程序,有LED,键盘和串口的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
    00F7 2433      CLR	R3
    00F8 2628      EOR	R2,R24
    00F9 2639      EOR	R3,R25
    00FA BA22      OUT	0x12,R2
    00FB 9508      RET
(0169) }
(0170) 
(0171) void flash_led_type4(void)                    //PD口的跑马灯显示  流水
(0172) {
(0173) unsigned char tmp_PD;
(0174) tmp_PD=PIND;
_flash_led_type4:
  tmp_PD               --> R16
    00FC B300      IN	R16,0x10
(0175) tmp_PD|=0XFC;
    00FD 6F0C      ORI	R16,0xFC
(0176) led_ch++;
    00FE 91800060  LDS	R24,led_ch
    0100 5F8F      SUBI	R24,0xFF
    0101 93800060  STS	led_ch,R24
(0177) if (led_ch==0X87) led_ch=0X80;
    0103 3887      CPI	R24,0x87
    0104 F419      BNE	0x0108
    0105 E880      LDI	R24,0x80
    0106 93800060  STS	led_ch,R24
(0178) switch (led_ch)
    0108 91000060  LDS	R16,led_ch
    010A 2711      CLR	R17
    010B 3801      CPI	R16,0x81
    010C E0E0      LDI	R30,0
    010D 071E      CPC	R17,R30
    010E F0A9      BEQ	0x0124
    010F 3802      CPI	R16,0x82
    0110 E0E0      LDI	R30,0
    0111 071E      CPC	R17,R30
    0112 F0A1      BEQ	0x0127
    0113 3803      CPI	R16,0x83
    0114 E0E0      LDI	R30,0
    0115 071E      CPC	R17,R30
    0116 F0A1      BEQ	0x012B
    0117 3804      CPI	R16,0x84
    0118 E0E0      LDI	R30,0
    0119 071E      CPC	R17,R30
    011A F0A1      BEQ	0x012F
    011B 3805      CPI	R16,0x85
    011C E0E0      LDI	R30,0
    011D 071E      CPC	R17,R30
    011E F0A1      BEQ	0x0133
    011F 3806      CPI	R16,0x86
    0120 E0E0      LDI	R30,0
    0121 071E      CPC	R17,R30
    0122 F0A1      BEQ	0x0137
    0123 C015      RJMP	0x0139
(0179) {
(0180) 
(0181) case 0X81: PORTD=~(0X78); break;     //0111 10  00 代码
    0124 E887      LDI	R24,0x87
    0125 BB82      OUT	0x12,R24
    0126 C012      RJMP	0x0139
(0182) case 0X82: PORTD=~(0XD4); break;     //1011 01  00 代码
    0127 E28B      LDI	R24,0x2B
    0128 EF9F      LDI	R25,0xFF
    0129 BB82      OUT	0x12,R24
    012A C00E      RJMP	0x0139
(0183) case 0X83: PORTD=~(0XCC); break;     //1100 11  00 代码
    012B E383      LDI	R24,0x33
    012C EF9F      LDI	R25,0xFF
    012D BB82      OUT	0x12,R24
    012E C00A      RJMP	0x0139
(0184) case 0X84: PORTD=~(0XCC); break;     //1100 11  00 代码
    012F E383      LDI	R24,0x33
    0130 EF9F      LDI	R25,0xFF
    0131 BB82      OUT	0x12,R24
    0132 C006      RJMP	0x0139
(0185) case 0X85: PORTD=~(0XD4); break;     //1011 01  00 代码
    0133 E28B      LDI	R24,0x2B
    0134 EF9F      LDI	R25,0xFF
    0135 BB82      OUT	0x12,R24
    0136 C002      RJMP	0x0139
(0186) case 0X86: PORTD=~(0X78); break;     //0111 10  00 代码
    0137 E887      LDI	R24,0x87
    0138 BB82      OUT	0x12,R24
    0139 9508      RET
(0187) }                 
(0188) }
(0189) 
(0190) 
(0191) void delay30ms(void)                          //延时30毫秒的子程序
(0192) {
(0193) unsigned int tmp_delay_cn;
(0194) for (tmp_delay_cn=0;tmp_delay_cn<300;tmp_delay_cn++)
_delay30ms:
  tmp_delay_cn         --> R16
    013A 2700      CLR	R16
    013B 2711      CLR	R17
    013C C002      RJMP	0x013F
    013D 5F0F      SUBI	R16,0xFF
    013E 4F1F      SBCI	R17,0xFF
    013F 320C      CPI	R16,0x2C
    0140 E0E1      LDI	R30,1
    0141 071E      CPC	R17,R30
    0142 F3D0      BCS	0x013D
    0143 9508      RET
(0195) ;
(0196) }
(0197) 
(0198) 
(0199) unsigned char check_key_pressed(void)         //检查是否有键盘按下
(0200) {
(0201) unsigned char key_tem;
(0202) key_tem=PINA &= ~(0XC3);
_check_key_pressed:
  key_tem              --> R16
    0144 B389      IN	R24,0x19
    0145 738C      ANDI	R24,0x3C
    0146 BB89      OUT	0x19,R24
    0147 2F08      MOV	R16,R24
(0203) if(key_tem!=0X3C)
    0148 338C      CPI	R24,0x3C
    0149 F011      BEQ	0x014C
(0204) return 1;
    014A E001      LDI	R16,1
    014B C001      RJMP	0x014D
(0205) else
(0206) return 0;
    014C 2700      CLR	R16
    014D 9508      RET
_find_key_code:
  uuu                  --> R20
    014E 940E01C6  CALL	push_gset1
(0207) }
(0208) 
(0209) 
(0210) unsigned char find_key_code(void)
(0211) {
(0212) unsigned char uuu;
(0213) if(check_key_pressed()==1)
    0150 DFF3      RCALL	_check_key_pressed
    0151 3001      CPI	R16,1
    0152 F441      BNE	0x015B
(0214) {
(0215)  delay30ms();                                //延时去抖动
    0153 DFE6      RCALL	_delay30ms
(0216)  if(check_key_pressed()==1)
    0154 DFEF      RCALL	_check_key_pressed
    0155 3001      CPI	R16,1
    0156 F421      BNE	0x015B
(0217)   {
(0218)   uuu=(PINA & 0X3C);
    0157 B349      IN	R20,0x19
    0158 734C      ANDI	R20,0x3C
(0219)   return uuu;                   //屏蔽最高和最低两位
    0159 2F04      MOV	R16,R20
    015A C001      RJMP	0x015C
(0220)   }
(0221) }
(0222) return 0XC3;
    015B EC03      LDI	R16,0xC3
    015C 940E01C9  CALL	pop_gset1
    015E 9508      RET
_timer0_ovf_isr:
    015F 940E01DD  CALL	push_lset
    0161 940E01C6  CALL	push_gset1
(0223) }
(0224) 
(0225) #pragma interrupt_handler timer0_ovf_isr:10  //
(0226) void timer0_ovf_isr(void)
(0227) {
(0228)  TCNT0 = 0xB2;                               //计数器初始值重载
    0163 EB82      LDI	R24,0xB2
    0164 BF82      OUT	0x32,R24
(0229)  if (tmp_cn_0==100)                           //固定时间产生变化
    0165 91800064  LDS	R24,tmp_cn_0
    0167 3684      CPI	R24,0x64
    0168 F009      BEQ	0x016A
    0169 C03E      RJMP	0x01A8
(0230)  {
(0231)    switch (key_code)                         //根据按下的键盘产生一定的闪灯花样
    016A 91400062  LDS	R20,key_code
    016C 2755      CLR	R21
    016D 324C      CPI	R20,0x2C
    016E E0E0      LDI	R30,0
    016F 075E      CPC	R21,R30
    0170 F0C9      BEQ	0x018A
    0171 E28C      LDI	R24,0x2C
    0172 E090      LDI	R25,0
    0173 1784      CP	R24,R20
    0174 0795      CPC	R25,R21
    0175 F02C      BLT	0x017B
    0176 314C      CPI	R20,0x1C
    0177 E0E0      LDI	R30,0
    0178 075E      CPC	R21,R30
    0179 F071      BEQ	0x0188
    017A C015      RJMP	0x0190
    017B 3344      CPI	R20,0x34
    017C E0E0      LDI	R30,0
    017D 075E      CPC	R21,R30
    017E F069      BEQ	0x018C
    017F 3344      CPI	R20,0x34
    0180 E0E0      LDI	R30,0
    0181 075E      CPC	R21,R30
    0182 F06C      BLT	0x0190
    0183 3348      CPI	R20,0x38
    0184 E0E0      LDI	R30,0
    0185 075E      CPC	R21,R30
    0186 F039      BEQ	0x018E
    0187 C008      RJMP	0x0190
(0232)    {
(0233)    case 0X1C: flash_led_type4(); break;      
    0188 DF73      RCALL	_flash_led_type4
    0189 C007      RJMP	0x0191
(0234)    case 0X2c: flash_led_type3(); break;      
    018A DF69      RCALL	_flash_led_type3
    018B C005      RJMP	0x0191
(0235)    case 0X34: flash_led_type2(); break;      
    018C DF56      RCALL	_flash_led_type2
    018D C003      RJMP	0x0191
(0236)    case 0X38: flash_led_type1(); break;     
    018E DF43      RCALL	_flash_led_type1
    018F C001      RJMP	0x0191
(0237)    default:   flash_led_type4(); break;
    0190 DF6B      RCALL	_flash_led_type4
(0238)    }                 
(0239)  
(0240)  disp_led(LED_INDEX[tmp_led_index]);        //循环显示8段数字LED
    0191 E584      LDI	R24,0x54
    0192 E090      LDI	R25,0
    0193 91E00061  LDS	R30,tmp_led_index
    0195 27FF      CLR	R31
    0196 0FE8      ADD	R30,R24
    0197 1FF9      ADC	R31,R25
    0198 9104      LPM	R16,0(Z)
    0199 DF04      RCALL	_disp_led
(0241)  tmp_led_index++;
    019A 91800061  LDS	R24,tmp_led_index
    019C 5F8F      SUBI	R24,0xFF
    019D 93800061  STS	tmp_led_index,R24
(0242)  if (tmp_led_index==10) tmp_led_index=0;    //LED计数器归零
    019F 308A      CPI	R24,0xA
    01A0 F419      BNE	0x01A4
    01A1 2422      CLR	R2
    01A2 92200061  STS	tmp_led_index,R2
(0243)  
(0244)  tmp_cn_0=0;                                //临时计数器0归零
    01A4 2422      CLR	R2
    01A5 92200064  STS	tmp_cn_0,R2
(0245)  }
    01A7 C005      RJMP	0x01AD
(0246)  else
(0247)  {
(0248)  tmp_cn_0=tmp_cn_0+1;                       //临时计数器递增
    01A8 91800064  LDS	R24,tmp_cn_0
    01AA 5F8F      SUBI	R24,0xFF
    01AB 93800064  STS	tmp_cn_0,R24
(0249)  }
    01AD 940E01C9  CALL	pop_gset1
    01AF 940E01F4  CALL	pop_lset
    01B1 9518      RETI
(0250) }
(0251) 
(0252) 
(0253) //****************** MAIN 程序的入口*************************//
(0254) 
(0255) void main()
(0256) {
(0257) unsigned char tmp_key_code;
(0258) init_devices();
_main:
  tmp_key_code         --> R20
    01B2 DF0F      RCALL	_init_devices
    01B3 C008      RJMP	0x01BC
(0259) while(1)
(0260) {
(0261)   start_adc_0();                             //循环进行ADC转换
    01B4 DEDC      RCALL	_start_adc_0
(0262)   
(0263)   tmp_key_code=find_key_code() & 0X3C;              //判断是否按下键盘
    01B5 DF98      RCALL	_find_key_code
    01B6 2F40      MOV	R20,R16
    01B7 734C      ANDI	R20,0x3C
(0264)   
(0265)   if (tmp_key_code!=0x3c) key_code=tmp_key_code;    
FILE: <library>
    01B8 334C      CPI	R20,0x3C
    01B9 F011      BEQ	0x01BC
    01BA 93400062  STS	key_code,R20
    01BC CFF7      RJMP	0x01B4
    01BD 9508      RET
push_gset5:
    01BE 92FA      ST	R15,-Y
    01BF 92EA      ST	R14,-Y
push_gset4:
    01C0 92DA      ST	R13,-Y
    01C1 92CA      ST	R12,-Y
push_gset3:
    01C2 92BA      ST	R11,-Y
    01C3 92AA      ST	R10,-Y
push_gset2:
    01C4 937A      ST	R23,-Y
    01C5 936A      ST	R22,-Y
push_gset1:
    01C6 935A      ST	R21,-Y
    01C7 934A      ST	R20,-Y
    01C8 9508      RET
pop_gset1:
    01C9 E0E1      LDI	R30,1
pop:
    01CA 9149      LD	R20,Y+
    01CB 9159      LD	R21,Y+
    01CC FDE0      SBRC	R30,0
    01CD 9508      RET
    01CE 9169      LD	R22,Y+
    01CF 9179      LD	R23,Y+
    01D0 FDE1      SBRC	R30,1
    01D1 9508      RET
    01D2 90A9      LD	R10,Y+
    01D3 90B9      LD	R11,Y+
    01D4 FDE2      SBRC	R30,2
    01D5 9508      RET
    01D6 90C9      LD	R12,Y+
    01D7 90D9      LD	R13,Y+
    01D8 FDE3      SBRC	R30,3
    01D9 9508      RET
    01DA 90E9      LD	R14,Y+
    01DB 90F9      LD	R15,Y+
    01DC 9508      RET
push_lset:
    01DD 93FA      ST	R31,-Y
    01DE 93EA      ST	R30,-Y
    01DF 93BA      ST	R27,-Y
    01E0 93AA      ST	R26,-Y
    01E1 939A      ST	R25,-Y
    01E2 938A      ST	R24,-Y
    01E3 933A      ST	R19,-Y
    01E4 932A      ST	R18,-Y
    01E5 931A      ST	R17,-Y
    01E6 930A      ST	R16,-Y
    01E7 929A      ST	R9,-Y
    01E8 928A      ST	R8,-Y
    01E9 927A      ST	R7,-Y
    01EA 926A      ST	R6,-Y
    01EB 925A      ST	R5,-Y
    01EC 924A      ST	R4,-Y
    01ED 923A      ST	R3,-Y
    01EE 922A      ST	R2,-Y
    01EF 921A      ST	R1,-Y
    01F0 920A      ST	R0,-Y
    01F1 B60F      IN	R0,0x3F
    01F2 920A      ST	R0,-Y
    01F3 9508      RET
pop_lset:
    01F4 9009      LD	R0,Y+
    01F5 BE0F      OUT	0x3F,R0
    01F6 9009      LD	R0,Y+
    01F7 9019      LD	R1,Y+
    01F8 9029      LD	R2,Y+
    01F9 9039      LD	R3,Y+
    01FA 9049      LD	R4,Y+
    01FB 9059      LD	R5,Y+
    01FC 9069      LD	R6,Y+
    01FD 9079      LD	R7,Y+
    01FE 9089      LD	R8,Y+
    01FF 9099      LD	R9,Y+
    0200 9109      LD	R16,Y+
    0201 9119      LD	R17,Y+
    0202 9129      LD	R18,Y+
    0203 9139      LD	R19,Y+
    0204 9189      LD	R24,Y+
    0205 9199      LD	R25,Y+
    0206 91A9      LD	R26,Y+
    0207 91B9      LD	R27,Y+
    0208 91E9      LD	R30,Y+
    0209 91F9      LD	R31,Y+
    020A 9508      RET

⌨️ 快捷键说明

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