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

📄 方波生成器.lst

📁 方波发生器程序。AVR单片机程序。MEGA16
💻 LST
📖 第 1 页 / 共 2 页
字号:
    014C F4A1      BNE	0x0161
(0040)     {j = i;//保存本次采样结果
    014D 934000BD  STS	j,R20
(0041)      delay_nms(10);//去按键颤抖
    014F E00A      LDI	R16,0xA
    0150 E010      LDI	R17,0
    0151 DF43      RCALL	_delay_nms
(0042)      if((PIND&0x04)==0)i='A';   
    0152 9982      SBIC	0x10,2
    0153 C002      RJMP	0x0156
    0154 E441      LDI	R20,0x41
    0155 C005      RJMP	0x015B
(0043)      else if((PIND&0x08)==0)i='B';
    0156 9983      SBIC	0x10,3
    0157 C002      RJMP	0x015A
    0158 E442      LDI	R20,0x42
    0159 C001      RJMP	0x015B
(0044)      else i=0x00;	 
    015A 2744      CLR	R20
(0045)      if(i == j) {return i;}
    015B 902000BD  LDS	R2,j
    015D 1542      CP	R20,R2
    015E F411      BNE	0x0161
    015F 2F04      MOV	R16,R20
    0160 C001      RJMP	0x0162
(0046)     }
(0047) return 0x00;
    0161 2700      CLR	R16
    0162 940E0289  CALL	pop_gset1
    0164 9508      RET
(0048) }
(0049) 
(0050) void init_timer0(void)
(0051) {
(0052)  DDRB|=0x08;//OC0匹配输出
_init_timer0:
    0165 9ABB      SBI	0x17,3
(0053)  TCNT0=0x00;//清除定时器值
    0166 2422      CLR	R2
    0167 BE22      OUT	0x32,R2
(0054)  TCCR0=0x6d;//快速PWM模式,匹配时OC0清零,top时置数,系统时钟1024分频                                                              频,输出比较匹配清除定时器值
    0168 E68D      LDI	R24,0x6D
    0169 BF83      OUT	0x33,R24
(0055)  
(0056) 
(0057)  OCR0=0x80;//OCR0置初值,占空比50%
    016A E880      LDI	R24,0x80
    016B BF8C      OUT	0x3C,R24
    016C 9508      RET
_F_set:
    016D 940E0286  CALL	push_gset1
    016F 9722      SBIW	R28,2
(0058)  
(0059) }
(0060) 
(0061) 
(0062) void F_set(void)
(0063) {
(0064)  static unsigned char i;
(0065)  if(i!=5)i++;
    0170 918000BE  LDS	R24,i
    0172 3085      CPI	R24,5
    0173 F021      BEQ	0x0178
    0174 5F8F      SUBI	R24,0xFF
    0175 938000BE  STS	i,R24
    0177 C003      RJMP	0x017B
(0066)  else i=1;
    0178 E081      LDI	R24,1
    0179 938000BE  STS	i,R24
(0067)  switch(i)//频率选择
    017B 914000BE  LDS	R20,i
    017D 2755      CLR	R21
    017E 3041      CPI	R20,1
    017F E0E0      LDI	R30,0
    0180 075E      CPC	R21,R30
    0181 F089      BEQ	0x0193
    0182 3042      CPI	R20,2
    0183 E0E0      LDI	R30,0
    0184 075E      CPC	R21,R30
    0185 F0B9      BEQ	0x019D
    0186 3043      CPI	R20,3
    0187 E0E0      LDI	R30,0
    0188 075E      CPC	R21,R30
    0189 F0E9      BEQ	0x01A7
    018A 3044      CPI	R20,4
    018B E0E0      LDI	R30,0
    018C 075E      CPC	R21,R30
    018D F119      BEQ	0x01B1
    018E 3045      CPI	R20,5
    018F E0E0      LDI	R30,0
    0190 075E      CPC	R21,R30
    0191 F149      BEQ	0x01BB
    0192 C031      RJMP	0x01C4
(0068) 		  {
(0069) 		   case 1:
(0070) 		   {
(0071) 		    TCCR0=0x6d;
    0193 E68D      LDI	R24,0x6D
    0194 BF83      OUT	0x33,R24
(0072) 		    LCD_write_string(6,0,"   28HZ");
    0195 EB85      LDI	R24,0xB5
    0196 E090      LDI	R25,0
    0197 8399      STD	Y+1,R25
    0198 8388      STD	Y+0,R24
    0199 2722      CLR	R18
    019A E006      LDI	R16,6
    019B DF73      RCALL	_LCD_write_string
(0073) 		    break;
    019C C027      RJMP	0x01C4
(0074) 		   } //1024分频,F=28HZ
(0075) 		   case 2:
(0076) 		   {
(0077) 		    TCCR0=0x6c;
    019D E68C      LDI	R24,0x6C
    019E BF83      OUT	0x33,R24
(0078) 		    LCD_write_string(6,0,"  112HZ");
    019F EA8D      LDI	R24,0xAD
    01A0 E090      LDI	R25,0
    01A1 8399      STD	Y+1,R25
    01A2 8388      STD	Y+0,R24
    01A3 2722      CLR	R18
    01A4 E006      LDI	R16,6
    01A5 DF69      RCALL	_LCD_write_string
(0079) 		    break; 
    01A6 C01D      RJMP	0x01C4
(0080) 		   }// 256分频,F=112HZ
(0081) 		   case 3:
(0082) 		   {
(0083) 		    TCCR0=0x6b;
    01A7 E68B      LDI	R24,0x6B
    01A8 BF83      OUT	0x33,R24
(0084) 			LCD_write_string(6,0,"  450HZ");
    01A9 EA85      LDI	R24,0xA5
    01AA E090      LDI	R25,0
    01AB 8399      STD	Y+1,R25
    01AC 8388      STD	Y+0,R24
    01AD 2722      CLR	R18
    01AE E006      LDI	R16,6
    01AF DF5F      RCALL	_LCD_write_string
(0085) 			break;
    01B0 C013      RJMP	0x01C4
(0086) 		   } //  64分频,F=450HZ
(0087) 		   case 4:
(0088) 		   {
(0089) 		    TCCR0=0x6a;
    01B1 E68A      LDI	R24,0x6A
    01B2 BF83      OUT	0x33,R24
(0090) 			LCD_write_string(6,0," 7200HZ");
    01B3 E98D      LDI	R24,0x9D
    01B4 E090      LDI	R25,0
    01B5 8399      STD	Y+1,R25
    01B6 8388      STD	Y+0,R24
    01B7 2722      CLR	R18
    01B8 E006      LDI	R16,6
    01B9 DF55      RCALL	_LCD_write_string
(0091) 			break;
    01BA C009      RJMP	0x01C4
(0092) 		   } //   8分频,F=7200HZ
(0093) 		   case 5:
(0094) 		   {
(0095) 		    TCCR0=0x69;
    01BB E689      LDI	R24,0x69
    01BC BF83      OUT	0x33,R24
(0096) 			LCD_write_string(6,0,"28800HZ");
    01BD E985      LDI	R24,0x95
    01BE E090      LDI	R25,0
    01BF 8399      STD	Y+1,R25
    01C0 8388      STD	Y+0,R24
    01C1 2722      CLR	R18
    01C2 E006      LDI	R16,6
    01C3 DF4B      RCALL	_LCD_write_string
(0097) 			break;
(0098) 		   } //  无分频,F=28800HZ		    
(0099) 		   default:break;
    01C4 9622      ADIW	R28,2
    01C5 940E0289  CALL	pop_gset1
    01C7 9508      RET
_R_set:
    01C8 940E0286  CALL	push_gset1
    01CA 9722      SBIW	R28,2
(0100) 		  }
(0101)  
(0102)  
(0103)  
(0104) }
(0105) 
(0106) void R_set(void)
(0107) {
(0108)  static unsigned char i;
(0109)  if(i!=9)i++;
    01CB 918000BF  LDS	R24,i+1
    01CD 3089      CPI	R24,0x9
    01CE F021      BEQ	0x01D3
    01CF 5F8F      SUBI	R24,0xFF
    01D0 938000BF  STS	i+1,R24
    01D2 C003      RJMP	0x01D6
(0110)  else i=1;
    01D3 E081      LDI	R24,1
    01D4 938000BF  STS	i+1,R24
(0111)  switch(i)//频率选择
    01D6 914000BF  LDS	R20,i+1
    01D8 2755      CLR	R21
    01D9 3041      CPI	R20,1
    01DA E0E0      LDI	R30,0
    01DB 075E      CPC	R21,R30
    01DC F141      BEQ	0x0205
    01DD 3042      CPI	R20,2
    01DE E0E0      LDI	R30,0
    01DF 075E      CPC	R21,R30
    01E0 F171      BEQ	0x020F
    01E1 3043      CPI	R20,3
    01E2 E0E0      LDI	R30,0
    01E3 075E      CPC	R21,R30
    01E4 F409      BNE	0x01E6
    01E5 C033      RJMP	0x0219
    01E6 3044      CPI	R20,4
    01E7 E0E0      LDI	R30,0
    01E8 075E      CPC	R21,R30
    01E9 F409      BNE	0x01EB
    01EA C038      RJMP	0x0223
    01EB 3045      CPI	R20,5
    01EC E0E0      LDI	R30,0
    01ED 075E      CPC	R21,R30
    01EE F409      BNE	0x01F0
    01EF C03D      RJMP	0x022D
    01F0 3046      CPI	R20,6
    01F1 E0E0      LDI	R30,0
    01F2 075E      CPC	R21,R30
    01F3 F409      BNE	0x01F5
    01F4 C042      RJMP	0x0237
    01F5 3047      CPI	R20,7
    01F6 E0E0      LDI	R30,0
    01F7 075E      CPC	R21,R30
    01F8 F409      BNE	0x01FA
    01F9 C047      RJMP	0x0241
    01FA 3048      CPI	R20,0x8
    01FB E0E0      LDI	R30,0
    01FC 075E      CPC	R21,R30
    01FD F409      BNE	0x01FF
    01FE C04C      RJMP	0x024B
    01FF 3049      CPI	R20,0x9
    0200 E0E0      LDI	R30,0
    0201 075E      CPC	R21,R30
    0202 F409      BNE	0x0204
    0203 C051      RJMP	0x0255
    0204 C059      RJMP	0x025E
(0112) 		  {
(0113) 		   case 1:
(0114) 		   {
(0115) 		    OCR0=0x0a;//占空比10%
    0205 E08A      LDI	R24,0xA
    0206 BF8C      OUT	0x3C,R24
(0116) 		    LCD_write_string(13,0,"10%");
    0207 E981      LDI	R24,0x91
    0208 E090      LDI	R25,0
    0209 8399      STD	Y+1,R25
    020A 8388      STD	Y+0,R24
    020B 2722      CLR	R18
    020C E00D      LDI	R16,0xD
    020D DF01      RCALL	_LCD_write_string
(0117) 		    break;
    020E C04F      RJMP	0x025E
(0118) 		   } 
(0119) 		   case 2:
(0120) 		   {
(0121) 		    OCR0=0x14;//占空比20%
    020F E184      LDI	R24,0x14
    0210 BF8C      OUT	0x3C,R24
(0122) 		    LCD_write_string(13,0,"20%");
    0211 E88D      LDI	R24,0x8D
    0212 E090      LDI	R25,0
    0213 8399      STD	Y+1,R25
    0214 8388      STD	Y+0,R24
    0215 2722      CLR	R18
    0216 E00D      LDI	R16,0xD
    0217 DEF7      RCALL	_LCD_write_string
(0123) 		    break; 
    0218 C045      RJMP	0x025E
(0124) 		   }
(0125) 		   case 3:
(0126) 		   {
(0127) 		    OCR0=0x1e;//占空比30%
    0219 E18E      LDI	R24,0x1E
    021A BF8C      OUT	0x3C,R24
(0128) 			LCD_write_string(13,0,"30%");
    021B E889      LDI	R24,0x89
    021C E090      LDI	R25,0
    021D 8399      STD	Y+1,R25
    021E 8388      STD	Y+0,R24
    021F 2722      CLR	R18
    0220 E00D      LDI	R16,0xD
    0221 DEED      RCALL	_LCD_write_string
(0129) 			break;
    0222 C03B      RJMP	0x025E
(0130) 		   } 
(0131) 		   case 4:
(0132) 		   {
(0133) 		    OCR0=0x28;//占空比40%
    0223 E288      LDI	R24,0x28
    0224 BF8C      OUT	0x3C,R24
(0134) 			LCD_write_string(13,0,"40%");
    0225 E885      LDI	R24,0x85
    0226 E090      LDI	R25,0
    0227 8399      STD	Y+1,R25
    0228 8388      STD	Y+0,R24
    0229 2722      CLR	R18
    022A E00D      LDI	R16,0xD
    022B DEE3      RCALL	_LCD_write_string
(0135) 			break;
    022C C031      RJMP	0x025E
(0136) 		   } 
(0137) 		   case 5:
(0138) 		   {
(0139) 		    OCR0=0x80;//占空比50%
    022D E880      LDI	R24,0x80
    022E BF8C      OUT	0x3C,R24
(0140) 			LCD_write_string(13,0,"50%");
    022F E881      LDI	R24,0x81
    0230 E090      LDI	R25,0
    0231 8399      STD	Y+1,R25
    0232 8388      STD	Y+0,R24
    0233 2722      CLR	R18
    0234 E00D      LDI	R16,0xD
    0235 DED9      RCALL	_LCD_write_string
(0141) 			break;
    0236 C027      RJMP	0x025E
(0142) 		   }
(0143) 		   case 6:
(0144) 		   {
(0145) 		    OCR0=0x3c;//占空比60%
    0237 E38C      LDI	R24,0x3C
    0238 BF8C      OUT	0x3C,R24
(0146) 			LCD_write_string(13,0,"60%");
    0239 E78D      LDI	R24,0x7D
    023A E090      LDI	R25,0
    023B 8399      STD	Y+1,R25
    023C 8388      STD	Y+0,R24
    023D 2722      CLR	R18
    023E E00D      LDI	R16,0xD
    023F DECF      RCALL	_LCD_write_string
(0147) 			break;
    0240 C01D      RJMP	0x025E
(0148) 		   } 	
(0149) 		   case 7:
(0150) 		   {
(0151) 		    OCR0=0x46;//占空比70%
    0241 E486      LDI	R24,0x46
    0242 BF8C      OUT	0x3C,R24
(0152) 			LCD_write_string(13,0,"70%");
    0243 E789      LDI	R24,0x79
    0244 E090      LDI	R25,0
    0245 8399      STD	Y+1,R25
    0246 8388      STD	Y+0,R24
    0247 2722      CLR	R18
    0248 E00D      LDI	R16,0xD
    0249 DEC5      RCALL	_LCD_write_string
(0153) 			break;
    024A C013      RJMP	0x025E
(0154) 		   } 	
(0155) 		   case 8:
(0156) 		   {
(0157) 		    OCR0=0x50;//占空比80%
    024B E580      LDI	R24,0x50
    024C BF8C      OUT	0x3C,R24
(0158) 			LCD_write_string(13,0,"80%");
    024D E785      LDI	R24,0x75
    024E E090      LDI	R25,0
    024F 8399      STD	Y+1,R25
    0250 8388      STD	Y+0,R24
    0251 2722      CLR	R18
    0252 E00D      LDI	R16,0xD
    0253 DEBB      RCALL	_LCD_write_string
(0159) 			break;
    0254 C009      RJMP	0x025E
(0160) 		   } 	
(0161) 		   case 9:
(0162) 		   {
(0163) 		    OCR0=0x5a;//占空比90%
    0255 E58A      LDI	R24,0x5A
    0256 BF8C      OUT	0x3C,R24
(0164) 			LCD_write_string(13,0,"90%");
    0257 E781      LDI	R24,0x71
    0258 E090      LDI	R25,0
    0259 8399      STD	Y+1,R25
    025A 8388      STD	Y+0,R24
    025B 2722      CLR	R18
    025C E00D      LDI	R16,0xD
    025D DEB1      RCALL	_LCD_write_string
(0165) 			break;
(0166) 		   } 		 		    
(0167) 		   default:break;
    025E 9622      ADIW	R28,2
    025F 940E0289  CALL	pop_gset1
    0261 9508      RET
_main:
  key                  --> R20
    0262 9722      SBIW	R28,2
(0168) 		  }
(0169) 
(0170) }
(0171) 
(0172) void main(void)
(0173) {
(0174)  uchar key;
(0175)  
(0176)  LCD_init();//液晶初始化
    0263 DE40      RCALL	_LCD_init
(0177)  init_timer0();
    0264 DF00      RCALL	_init_timer0
(0178)  LCD_write_string(0,0,"F_out:   28HZ50%");
    0265 E680      LDI	R24,0x60
    0266 E090      LDI	R25,0
    0267 8399      STD	Y+1,R25
    0268 8388      STD	Y+0,R24
    0269 2722      CLR	R18
    026A 2700      CLR	R16
    026B DEA3      RCALL	_LCD_write_string
    026C C008      RJMP	0x0275
(0179)  while(1)
(0180)   {
(0181)    key=get_key();
    026D DEC3      RCALL	_get_key
    026E 2F40      MOV	R20,R16
(0182)    if(key=='A')F_set();
    026F 3401      CPI	R16,0x41
    0270 F409      BNE	0x0272
    0271 DEFB      RCALL	_F_set
(0183)    if(key=='B')R_set();
FILE: <library>
    0272 3442      CPI	R20,0x42
    0273 F409      BNE	0x0275
    0274 DF53      RCALL	_R_set
    0275 CFF7      RJMP	0x026D
    0276 9622      ADIW	R28,2
    0277 9508      RET
pop_gset2:
    0278 E0E2      LDI	R30,2
    0279 940C028A  JMP	pop
pop_gset3:
    027B E0E4      LDI	R30,4
    027C 940C028A  JMP	pop
push_gset5:
    027E 92FA      ST	R15,-Y
    027F 92EA      ST	R14,-Y
push_gset4:
    0280 92DA      ST	R13,-Y
    0281 92CA      ST	R12,-Y
push_gset3:
    0282 92BA      ST	R11,-Y
    0283 92AA      ST	R10,-Y
push_gset2:
    0284 937A      ST	R23,-Y
    0285 936A      ST	R22,-Y
push_gset1:
    0286 935A      ST	R21,-Y
    0287 934A      ST	R20,-Y
    0288 9508      RET
pop_gset1:
    0289 E0E1      LDI	R30,1
pop:
    028A 9149      LD	R20,Y+
    028B 9159      LD	R21,Y+
    028C FDE0      SBRC	R30,0
    028D 9508      RET
    028E 9169      LD	R22,Y+
    028F 9179      LD	R23,Y+
    0290 FDE1      SBRC	R30,1
    0291 9508      RET
    0292 90A9      LD	R10,Y+
    0293 90B9      LD	R11,Y+
    0294 FDE2      SBRC	R30,2
    0295 9508      RET
    0296 90C9      LD	R12,Y+
    0297 90D9      LD	R13,Y+
    0298 FDE3      SBRC	R30,3
    0299 9508      RET
    029A 90E9      LD	R14,Y+
    029B 90F9      LD	R15,Y+
    029C 9508      RET

⌨️ 快捷键说明

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