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

📄 1602_duoji.lst

📁 用avr的m16产生pwm波控制舵机的程序!
💻 LST
📖 第 1 页 / 共 4 页
字号:
(0133) 			   k=((read_data(0x81))&0xf0);
(0134) 			   LCD_write_char(0,k+48);
(0135) 				 break;//0
(0136) 			  }
(0137) 		       
(0138) 				//else goto ret;
(0139) 		case 2 :dout=PINC;j=((dout&0x80)==0x80);
(0140) 		      if(j)
(0141) 			  { t++;
(0142) 			    write_data(0x80,((read_data(0x81))&0x0f)|(t<<4));
(0143) 				LCD_set_xy(2,1);
(0144) 				k=(read_data(0x81));
(0145) 				k=(k>>4);
(0146) 				LCD_write_char(0,k+48);
(0147) 				break;
(0148) 			  }
(0149) 				//else goto ret;
(0150) 		case 4 :dout=PINC;j=((dout&0x80)==0x80);
(0151) 		      if(j)
(0152) 			  { t++;
(0153) 			   write_data(0x82,((read_data(0x83))&0xf0)|t);
(0154) 			   LCD_set_xy(4,1);
(0155) 			   k=((read_data(0x83))&0xf0);
(0156) 			   LCD_write_char(0,k+48);
(0157) 				break;
(0158) 			  }
(0159) 		case 5 :dout=PINC;j=((dout&0x80)==0x80);
(0160) 		      if(j)
(0161) 			  { t++;
(0162) 			    write_data(0x82,((read_data(0x83))&0x0f)|(t<<4));
(0163) 				LCD_set_xy(5,1);
(0164) 				k=(read_data(0x83));
(0165) 				k=(k>>4);
(0166) 				LCD_write_char(0,k+48);
(0167) 				break;
(0168) 			  }
(0169) 		case 7 :dout=PINC;j=((dout&0x80)==0x80);
(0170) 		      if(j)
(0171) 			  { t++;
(0172) 			    write_data(0x84,((read_data(0x85))&0xf0)|t);
(0173) 				LCD_set_xy(7,1);
(0174) 				k=((read_data(0x85))&0xf0);
(0175) 			   LCD_write_char(0,k+48);
(0176) 				break;
(0177) 			  }
(0178) 		case 8 :dout=PINC;j=((dout&0x80)==0x80);
(0179) 		      if(j)
(0180) 			  { t++;
(0181) 			    write_data(0x84,((read_data(0x85))&0x0f)|(t<<4));
(0182) 				LCD_set_xy(8,1);
(0183) 				k=(read_data(0x85));
(0184) 				k=(k>>4);
(0185) 				LCD_write_char(0,k+48);
(0186) 				break;
(0187) 			  }
(0188) 		case 10 :dout=PINC;j=((dout&0x80)==0x80);
(0189) 		      if(j)
(0190) 			  { t++;
(0191) 			   write_data(0x86,((read_data(0x87))&0xf0)|t);
(0192) 			   LCD_set_xy(10,1);
(0193) 				k=((read_data(0x87))&0xf0);
(0194) 			   LCD_write_char(0,k+48);
(0195) 				break;
(0196) 			  }
(0197) 		case 11 :dout=PINC;j=((dout&0x80)==0x80);
(0198) 		      if(j)
(0199) 			  { t++;
(0200) 			   write_data(0x86,((read_data(0x87))&0x0f)|(t<<4));
(0201) 			   LCD_set_xy(11,1);
(0202) 				k=(read_data(0x87));
(0203) 				k=(k>>4);
(0204) 				LCD_write_char(0,k+48);
(0205) 				break;
(0206) 			  }
(0207) 		case 13 :dout=PINC;j=((dout&0x80)==0x80);
(0208) 		      if(j)
(0209) 			  { t++;
(0210) 			   write_data(0x88,((read_data(0x89))&0xf0)|t);
(0211) 			   LCD_set_xy(13,1);
(0212) 				k=((read_data(0x89))&0xf0);
(0213) 			   LCD_write_char(0,k+48);
(0214) 				break;
(0215) 			  }
(0216) 		case 14 :dout=PINC;j=((dout&0x80)==0x80);
(0217) 		      if(j)
(0218) 			  { t++;
(0219) 			  write_data(0x88,((read_data(0x89))&0x0f)|(t<<4));
(0220) 			  LCD_set_xy(14,1);
(0221) 				k=(read_data(0x89));
(0222) 				k=(k>>4);
(0223) 				LCD_write_char(0,k+48);
(0224) 				break;
(0225) 			  }
(0226) 	   else break;
(0227) 	  }
(0228) }*/
(0229) void main(void)
(0230)   {
(0231)      volatile char aa=20,i=0,dout;
    0275 E184      LDI	R24,0x14
    0276 8789      STD	Y+9,R24
    0277 2422      CLR	R2
    0278 862A      STD	Y+10,R2
(0232)      OSCCAL=0X95;
    0279 E985      LDI	R24,0x95
    027A BF81      OUT	0x31,R24
(0233) 	 /********************************************/
(0234) 	 CLI();
    027B 94F8      BCLR	7
(0235) 	 PORTD=0x00;
    027C BA22      OUT	0x12,R2
(0236) 	 DDRD |= LCD_DATA | LCD_RW;
    027D B381      IN	R24,0x11
    027E 6F88      ORI	R24,0xF8
    027F BB81      OUT	0x11,R24
(0237) 	 DDRD |= LCD_RS   | LCD_EN;
    0280 B381      IN	R24,0x11
    0281 6380      ORI	R24,0x30
    0282 BB81      OUT	0x11,R24
(0238) 	 PORTA = 0xc7;//端口设置
    0283 EC87      LDI	R24,0xC7
    0284 BB8B      OUT	0x1B,R24
(0239)      DDRA  = 0xff;
    0285 EF8F      LDI	R24,0xFF
    0286 BB8A      OUT	0x1A,R24
(0240) 	// PORTC  = 0x00;
(0241)      //DDRC  = 0xff;
(0242) 	 init_1302();
    0287 940E03DB  CALL	_init_1302
(0243) 	 init_1302();
    0289 940E03DB  CALL	_init_1302
(0244) 	 init_time(0x00,0x58,0x20,0x19,0x04,0x06,0x08);//秒、分、时、日、月、星期、年
    028B E088      LDI	R24,0x8
    028C 8788      STD	Y+8,R24
    028D E086      LDI	R24,6
    028E 838E      STD	Y+6,R24
    028F E084      LDI	R24,4
    0290 838C      STD	Y+4,R24
    0291 E189      LDI	R24,0x19
    0292 838A      STD	Y+2,R24
    0293 E280      LDI	R24,0x20
    0294 8388      STD	Y+0,R24
    0295 E528      LDI	R18,0x58
    0296 2700      CLR	R16
    0297 940E03E5  CALL	_init_time
(0245) 	 DDRC|=0x01;      //置为输出
    0299 9AA0      SBI	0x14,0
(0246) 	 PORTC|=0x01;
    029A 9AA8      SBI	0x15,0
(0247) 	 timer2_init();
    029B DEB6      RCALL	_timer2_init
(0248) 	 MCUCR = 0x00;
    029C 2422      CLR	R2
    029D BE25      OUT	0x35,R2
(0249) 	 GICR  = 0x00;
    029E BE2B      OUT	0x3B,R2
(0250) 	 TIMSK = 0x40;
    029F E480      LDI	R24,0x40
    02A0 BF89      OUT	0x39,R24
(0251)      LCD_init();
    02A1 940E0069  CALL	_LCD_init
(0252) 	   /*初始化参数*/
(0253) 	 zkb=1500;    
    02A3 ED8C      LDI	R24,0xDC
    02A4 E095      LDI	R25,5
    02A5 939000A2  STS	zkb+1,R25
    02A7 938000A1  STS	zkb,R24
(0254) 	 t1=zkb/20;        
    02A9 E124      LDI	R18,0x14
    02AA E030      LDI	R19,0
    02AB 910000A1  LDS	R16,zkb
    02AD 911000A2  LDS	R17,zkb+1
    02AF 940E0405  CALL	div16s
    02B1 9310009E  STS	t1+1,R17
    02B3 9300009D  STS	t1,R16
(0255) 	 t2=(20000-zkb)/20; 
    02B5 902000A1  LDS	R2,zkb
    02B7 903000A2  LDS	R3,zkb+1
    02B9 E200      LDI	R16,0x20
    02BA E41E      LDI	R17,0x4E
    02BB 1902      SUB	R16,R2
    02BC 0913      SBC	R17,R3
    02BD E124      LDI	R18,0x14
    02BE E030      LDI	R19,0
    02BF 940E0405  CALL	div16s
    02C1 9310009C  STS	t2+1,R17
    02C3 9300009B  STS	t2,R16
(0256) 	 zq=t1;
    02C5 9020009D  LDS	R2,t1
    02C7 9030009E  LDS	R3,t1+1
    02C9 923000A0  STS	zq+1,R3
    02CB 9220009F  STS	zq,R2
(0257) // Global enable interrupts
(0258)     SEI();
    02CD 9478      BSET	7
    02CE C03E      RJMP	0x030D
(0259)     while(1)
(0260)        {
(0261) 	   //settime();
(0262) 	    // showtime();
(0263) 		delay2_nms(100);
    02CF E604      LDI	R16,0x64
    02D0 E010      LDI	R17,0
    02D1 D048      RCALL	_delay2_nms
(0264)          zkb+=aa;
    02D2 8429      LDD	R2,Y+9
    02D3 2433      CLR	R3
    02D4 904000A1  LDS	R4,zkb
    02D6 905000A2  LDS	R5,zkb+1
    02D8 0C42      ADD	R4,R2
    02D9 1C53      ADC	R5,R3
    02DA 925000A2  STS	zkb+1,R5
    02DC 924000A1  STS	zkb,R4
(0265)          if(zkb==500||zkb==2500){    //标准应该是1000至2000
    02DE 918000A1  LDS	R24,zkb
    02E0 919000A2  LDS	R25,zkb+1
    02E2 3F84      CPI	R24,0xF4
    02E3 E0E1      LDI	R30,1
    02E4 079E      CPC	R25,R30
    02E5 F041      BEQ	0x02EE
    02E6 918000A1  LDS	R24,zkb
    02E8 919000A2  LDS	R25,zkb+1
    02EA 3C84      CPI	R24,0xC4
    02EB E0E9      LDI	R30,0x9
    02EC 079E      CPC	R25,R30
    02ED F419      BNE	0x02F1
(0266)           aa=-aa;          
    02EE 8429      LDD	R2,Y+9
    02EF 9421      NEG	R2
    02F0 8629      STD	Y+9,R2
(0267)         }
(0268)         t1=zkb/20;        
    02F1 E124      LDI	R18,0x14
    02F2 E030      LDI	R19,0
    02F3 910000A1  LDS	R16,zkb
    02F5 911000A2  LDS	R17,zkb+1
    02F7 940E0405  CALL	div16s
    02F9 9310009E  STS	t1+1,R17
    02FB 9300009D  STS	t1,R16
(0269)         t2=(20000-zkb)/20;
    02FD 902000A1  LDS	R2,zkb
    02FF 903000A2  LDS	R3,zkb+1
    0301 E200      LDI	R16,0x20
    0302 E41E      LDI	R17,0x4E
    0303 1902      SUB	R16,R2
    0304 0913      SBC	R17,R3
    0305 E124      LDI	R18,0x14
    0306 E030      LDI	R19,0
    0307 940E0405  CALL	div16s
    0309 9310009C  STS	t2+1,R17
    030B 9300009B  STS	t2,R16
    030D CFC1      RJMP	0x02CF
    030E 962C      ADIW	R28,0xC
    030F 9508      RET
(0270) 		//////////////////////////////////////////////
(0271)         /* LCD_write_char(0x01,0);      //显示清屏
(0272)          LCD_write_string(3,0,"Welcome");
(0273)          LCD_write_string(1,1,"www.527dz.com!");
(0274)          delay_nms(5000);
(0275)          LCD_write_char(0x01,0);      //显示清屏
(0276)          LCD_write_string(0,0,"Tel:13308844201");
(0277)          LCD_write_string(0,1,"527dz@527dz.com");
(0278)          delay_nms(5000);*/
(0279)        }
(0280)   } 	
(0281) void delay2_1ms(void)//1ms延时函数
(0282) {
(0283)   unsigned int i;
(0284)   for (i=0;i<150;i++)
_delay2_1ms:
  i                    --> R16
    0310 2700      CLR	R16
    0311 2711      CLR	R17
    0312 C002      RJMP	0x0315
    0313 5F0F      SUBI	R16,0xFF
    0314 4F1F      SBCI	R17,0xFF
    0315 3906      CPI	R16,0x96
    0316 E0E0      LDI	R30,0
    0317 071E      CPC	R17,R30
    0318 F3D0      BCS	0x0313
    0319 9508      RET
_delay2_nms:
  i                    --> R20
  n                    --> R22
    031A 940E044A  CALL	push_gset2
    031C 01B8      MOVW	R22,R16
(0285)   {
(0286)   } 
(0287) }   
(0288) 
(0289) void delay2_nms(unsigned int n)//延时n毫秒
(0290) {
(0291)   unsigned int i;
(0292)   for (i=0;i<n;i++)//执行n次1毫秒延时
    031D 2744      CLR	R20
    031E 2755      CLR	R21
    031F C003      RJMP	0x0323
(0293)   delay2_1ms(); 
    0320 DFEF      RCALL	_delay2_1ms
    0321 5F4F      SUBI	R20,0xFF
    0322 4F5F      SBCI	R21,0xFF
    0323 1746      CP	R20,R22
    0324 0757      CPC	R21,R23
    0325 F3D0      BCS	0x0320
    0326 940E043B  CALL	pop_gset2
    0328 9508      RET
FILE: E:\mcu\avr\test\1602_duoji\delay.c
(0001) /*-----------------------------------------------------------------------
(0002) 延时函数
(0003) 系统时钟:8M
(0004) -----------------------------------------------------------------------*/
(0005) void delay_1us(void)                 //1us延时函数
(0006)   {
(0007)    asm("nop");
_delay_1us:
    0329 0000      NOP
    032A 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    032B 940E044A  CALL	push_gset2
    032D 01B8      MOVW	R22,R16
(0008)   }
(0009) 
(0010) void delay_nus(unsigned int n)       //N us延时函数
(0011)   {
(0012)    unsigned int i=0;
    032E 2744      CLR	R20
    032F 2755      CLR	R21
(0013)    for (i=0;i<n;i++)
    0330 C003      RJMP	0x0334
(0014)    delay_1us();
    0331 DFF7      RCALL	_delay_1us
    0332 5F4F      SUBI	R20,0xFF
    0333 4F5F      SBCI	R21,0xFF
    0334 1746      CP	R20,R22
    0335 0757      CPC	R21,R23
    0336 F3D0      BCS	0x0331
    0337 940E043B  CALL	pop_gset2
    0339 9508      RET
(0015)   }
(0016)   
(0017) void delay_1ms(void)                 //1ms延时函数
(0018)   {
(0019)    unsigned int i;
(0020)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    033A 2700      CLR	R16
    033B 2711      CLR	R17
    033C C002      RJMP	0x033F
    033D 5F0F      SUBI	R16,0xFF
    033E 4F1F      SBCI	R17,0xFF
    033F 3704      CPI	R16,0x74
    0340 E0E4      LDI	R30,4
    0341 071E      CPC	R17,R30
    0342 F3D0      BCS	0x033D
    0343 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    0344 940E044A  CALL	push_gset2
    0346 01B8      MOVW	R22,R16
(0021)   }
(0022)   
(0023) void delay_nms(unsigned int n)       //N ms延时函数
(0024)   {
(0025)    unsigned int i=0;
    0347 2744      CLR	R20
    0348 2755      CLR	R21
(0026)    for (i=0;i<n;i++)
    0349 C003      RJMP	0x034D
(0027)    delay_1ms();
    034A DFEF      RCALL	_delay_1ms
    034B 5F4F      SUBI	R20,0xFF
    034C 4F5F      SBCI	R21,0xFF
    034D 1746      CP	R20,R22
    034E 0757      CPC	R21,R23
    034F F3D0      BCS	0x034A
    0350 940E043B  CALL	pop_gset2
    0352 9508      RET
_delay:
  a                    --> R20
  n                    --> R16
    0353 940E044C  CALL	push_gset1
FILE: E:\mcu\avr\test\1602_duoji\ds1302.c
(0001) 
(0002) #include <iom16v.h>
(0003) #include <macros.h>
(0004) #include "1602LCD.h"
(0005) /************************************************
(0006)                        延时程序
(0007) ************************************************/
(0008) void delay(uchar n)
(0009) {
(0010) uchar a;
(0011) for(a=0;a<n;a++)
    0355 2744      CLR	R20
    0356 C001      RJMP	0x0358
    0357 9543      INC	R20
    0358 1740      CP	R20,R16

⌨️ 快捷键说明

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