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

📄 洗衣机.lst

📁 自己做的AVR洗衣机模型程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
     2B6 9586      LSR	R24
     2B7 7081      ANDI	R24,1
     2B8 F3C1      BEQ	0x02B1
(0082) 			nop();
     2B9 0000      NOP
(0083) 			return 1;
     2BA E001      LDI	R16,1
     2BB C025      RJMP	0x02E1
(0084) 						
(0085) 			}
(0086) 			
(0087) 		}
(0088) 	if(READ_PA6==0)
     2BC B389      IN	R24,0x19
     2BD 9586      LSR	R24
     2BE 9586      LSR	R24
     2BF 9586      LSR	R24
     2C0 9586      LSR	R24
     2C1 9586      LSR	R24
     2C2 9586      LSR	R24
     2C3 7081      ANDI	R24,1
     2C4 F4D9      BNE	0x02E0
(0089) 		{
(0090) 		DELAY(10);
     2C5 E00A      LDI	R16,0xA
     2C6 E010      LDI	R17,0
     2C7 DF57      RCALL	_DELAY
(0091) 		if(READ_PA6==0)
     2C8 B389      IN	R24,0x19
     2C9 9586      LSR	R24
     2CA 9586      LSR	R24
     2CB 9586      LSR	R24
     2CC 9586      LSR	R24
     2CD 9586      LSR	R24
     2CE 9586      LSR	R24
     2CF 7081      ANDI	R24,1
     2D0 F481      BNE	0x02E1
(0092) 			{
(0093) 			BBBuffer=1;
     2D1 E081      LDI	R24,1
     2D2 9380 0193 STS	BBBuffer,R24
(0094) 			while(READ_PA6==0);			
     2D4 B389      IN	R24,0x19
     2D5 9586      LSR	R24
     2D6 9586      LSR	R24
     2D7 9586      LSR	R24
     2D8 9586      LSR	R24
     2D9 9586      LSR	R24
     2DA 9586      LSR	R24
     2DB 7081      ANDI	R24,1
     2DC F3B9      BEQ	0x02D4
(0095) 			nop();
     2DD 0000      NOP
(0096) 			return -1;
     2DE EF0F      LDI	R16,0xFF
     2DF C001      RJMP	0x02E1
(0097) 			
(0098) 			}
(0099) 			
(0100) 		}
(0101) 	else
(0102) 	    return 0;
     2E0 2700      CLR	R16
     2E1 9508      RET
FILE: F:\AVR洗衣机\洗衣机主机\PWM.h
(0001) void PWM_init(uint ii)
(0002) {
(0003)   OCR1A =19999;//50HZ方波
_PWM_init:
  ii                   --> R16
     2E2 E18F      LDI	R24,0x1F
     2E3 E49E      LDI	R25,0x4E
     2E4 BD9B      OUT	0x2B,R25
     2E5 BD8A      OUT	0x2A,R24
(0004)   NOP();
     2E6 0000      NOP
(0005)   OCR1B =ii;
     2E7 BD19      OUT	0x29,R17
     2E8 BD08      OUT	0x28,R16
(0006)   NOP();
     2E9 0000      NOP
     2EA 9508      RET
_SET_PWMA:
  SPEED_BUF            --> R10
     2EB 940E 0ADD CALL	push_xgset300C
     2ED 2EA0      MOV	R10,R16
(0007) //  TCCR1A = 0x23;   //快速PWM 
(0008) //  TCCR1B = 0x1a;   //时钟8分频 匹配清零
(0009) }
(0010) 
(0011) void SET_PWMA(uchar SPEED_BUF)//设置PWM占空比、频率
(0012) {
(0013) switch(SPEED_BUF)
     2EE 2D4A      MOV	R20,R10
     2EF 2755      CLR	R21
     2F0 3041      CPI	R20,1
     2F1 E0E0      LDI	R30,0
     2F2 075E      CPC	R21,R30
     2F3 F049      BEQ	0x02FD
     2F4 3042      CPI	R20,2
     2F5 E0E0      LDI	R30,0
     2F6 075E      CPC	R21,R30
     2F7 F051      BEQ	0x0302
     2F8 3043      CPI	R20,3
     2F9 E0E0      LDI	R30,0
     2FA 075E      CPC	R21,R30
     2FB F059      BEQ	0x0307
     2FC C00E      RJMP	0x030B
(0014) 	{
(0015) 	case 1:PWM_init(2000);NOP();break;
     2FD ED00      LDI	R16,0xD0
     2FE E017      LDI	R17,7
     2FF DFE2      RCALL	_PWM_init
     300 0000      NOP
     301 C009      RJMP	0x030B
(0016) 	case 2:PWM_init(2200);NOP();break;
     302 E908      LDI	R16,0x98
     303 E018      LDI	R17,0x8
     304 DFDD      RCALL	_PWM_init
     305 0000      NOP
     306 C004      RJMP	0x030B
(0017) 	case 3:PWM_init(3000);NOP();break;
     307 EB08      LDI	R16,0xB8
     308 E01B      LDI	R17,0xB
     309 DFD8      RCALL	_PWM_init
     30A 0000      NOP
(0018) 	default:break;
     30B 940C 0AE2 JMP	pop_xgset300C
FILE: F:\AVR洗衣机\洗衣机主机\24L01_Driver.h
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) #include <bit.h>
(0004) #define start 's'
(0005) #define wat 'w'
(0006) #define heal 'h'
(0007) #define cyc 'c'
(0008) 
(0009) 
(0010) #define rep 'r'
(0011) 
(0012) #define TX_ADR_WIDTH    5  
(0013) #define TX_PLOAD_WIDTH  2 //数据缓冲区大小(2字节)
(0014) 
(0015) uchar TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; // Define a static TX address
(0016) 
(0017) 
(0018) #define CE_0 do {PORTA&=0xFD;} while(0)
(0019) #define CE_1 do {PORTA|=0x02;} while(0)
(0020) 
(0021) #define  CSN_0 do {PORTB&=0XEF;} while(0)
(0022) #define  CSN_1 do {PORTB|=0X10;} while(0)
(0023) 
(0024) uchar rx_buf[TX_PLOAD_WIDTH];     //接收缓冲区
(0025) uchar tx_buf[TX_PLOAD_WIDTH];   //发送缓冲区
(0026) 
(0027) uchar flag,flag1;
(0028) uchar date;
(0029) uchar sta;
(0030) 
(0031) 
(0032) 
(0033) char Reciv_data;
(0034) char num_buff;//数字缓冲器
(0035) char flagg;//数据属性标志位
(0036) char fir_bit;
(0037) char sec_bit;
(0038) char i;
(0039) 
(0040) 
(0041) //-----------------------------------------------------------
(0042) //串口初始化子程序
(0043) //-----------------------------------------------------------
(0044) void Uart_Init(void);
(0045) 
(0046) //-----------------------------------------------------------
(0047) //串口接收字节子程序
(0048) //-----------------------------------------------------------
(0049) unsigned char Getchar(void);
(0050) 
(0051) //-----------------------------------------------------------
(0052) //串口发送字节子程序
(0053) //-----------------------------------------------------------
(0054) void Putchar(unsigned char c);
(0055) 
(0056) //-----------------------------------------------------------
(0057) //串口发送字符串子程序
(0058) //-----------------------------------------------------------
(0059) void Putstr(char *s);
(0060) 
(0061) //-----------------------------------------------------------
(0062) //串口发送字符串子程序(带有换行符)
(0063) //-----------------------------------------------------------
(0064) void Puts(char *s);
(0065) 
(0066) //-----------------------------------------------------------
(0067) 
(0068) //-----------------------------------------------------------
(0069) //串口初始化子程序
(0070) //字符长度:8位
(0071) //奇偶校验:禁止
(0072) //通讯模式:异步
(0073) //-----------------------------------------------------------
(0074) void Uart_Init(void)
(0075) {	/*
(0076)     UCSRB  =  0x00;     //disable while setting baud rate
(0077)     UCSRA  =  0x00;     //Bit1为1则倍速发送
(0078)     UCSRC  =  0x86;  
(0079)     UBRRL  =  0x33;     //波特率:9600 Bps
(0080)     UBRRH  =  0x00;     //误差率:0.156%
(0081)     UCSRB  =  0x18;
(0082) 	*/ 
(0083) 	UCSRB  =  0x00;     //disable while setting baud rate
_Uart_Init:
     30D 2422      CLR	R2
     30E B82A      OUT	0x0A,R2
(0084)     UCSRA  =  0x00;     //Bit1为1则倍速发送
     30F B82B      OUT	0x0B,R2
(0085)     UCSRC  =  BIT(URSEL) |0x06;  
     310 E886      LDI	R24,0x86
     311 BD80      OUT	0x20,R24
(0086)     UBRRL  =  0x33;     //波特率:9600 Bps
     312 E383      LDI	R24,0x33
     313 B989      OUT	0x09,R24
(0087)     UBRRH  =  0x00;     //误差率:0.156%
     314 BC20      OUT	0x20,R2
(0088)     UCSRB  =  0x98;
     315 E988      LDI	R24,0x98
     316 B98A      OUT	0x0A,R24
(0089) 	SEI();
     317 9478      BSET	7
     318 9508      RET
(0090) }
(0091) 
(0092) //-----------------------------------------------------------
(0093) //串口接收字节子程序
(0094) //-----------------------------------------------------------
(0095) unsigned char Getchar(void)
(0096) {
(0097)    while(!(UCSRA& (1<<RXC)));
_Getchar:
     319 9B5F      SBIS	0x0B,7
     31A CFFE      RJMP	_Getchar
(0098)    return UDR;
     31B B10C      IN	R16,0x0C
     31C 9508      RET
(0099) }
(0100) 
(0101) //-----------------------------------------------------------
(0102) //串口发送字节子程序
(0103) //-----------------------------------------------------------
(0104) void Putchar(char c)
(0105) {
(0106)    while (!(UCSRA&(1<<UDRE)));
_Putchar:
  c                    --> R16
     31D 9B5D      SBIS	0x0B,5
     31E CFFE      RJMP	_Putchar
(0107)    UDR=c;
     31F B90C      OUT	0x0C,R16
     320 9508      RET
_Putstr:
  s                    --> R20
     321 934A      ST	R20,-Y
     322 935A      ST	R21,-Y
     323 01A8      MOVW	R20,R16
(0108) }
(0109) 
(0110) //-----------------------------------------------------------
(0111) //串口发送字符串子程序
(0112) //-----------------------------------------------------------
(0113) void Putstr(char *s)
(0114) {
     324 C005      RJMP	0x032A
(0115)    while (*s)
(0116)    {
(0117)       Putchar(*s);
     325 01FA      MOVW	R30,R20
     326 8100      LDD	R16,Z+0
     327 DFF5      RCALL	_Putchar
(0118)       s++;
     328 5F4F      SUBI	R20,0xFF
     329 4F5F      SBCI	R21,0xFF
     32A 01FA      MOVW	R30,R20
     32B 8020      LDD	R2,Z+0
     32C 2022      TST	R2
     32D F7B9      BNE	0x0325
     32E 9159      LD	R21,Y+
     32F 9149      LD	R20,Y+
     330 9508      RET
_Puts:
  s                    --> R20
     331 934A      ST	R20,-Y
     332 935A      ST	R21,-Y
     333 01A8      MOVW	R20,R16
(0119)    }
(0120) }
(0121) 
(0122) //-----------------------------------------------------------
(0123) //串口发送字符串子程序(带有换行符)
(0124) //-----------------------------------------------------------
(0125) void Puts(char *s)
(0126) {
     334 C005      RJMP	0x033A
(0127)    while (*s)
(0128)    {
(0129)       Putchar(*s);
     335 01FA      MOVW	R30,R20
     336 8100      LDD	R16,Z+0
     337 DFE5      RCALL	_Putchar
(0130)       s++;
     338 5F4F      SUBI	R20,0xFF
     339 4F5F      SBCI	R21,0xFF
     33A 01FA      MOVW	R30,R20
     33B 8020      LDD	R2,Z+0
     33C 2022      TST	R2
     33D F7B9      BNE	0x0335
(0131)    }
(0132)    Putchar(0x0a);   //回车换行
     33E E00A      LDI	R16,0xA
     33F DFDD      RCALL	_Putchar
(0133)    Putchar(0x0d);
     340 E00D      LDI	R16,0xD
     341 DFDB      RCALL	_Putchar
     342 9159      LD	R21,Y+
     343 9149      LD	R20,Y+
     344 9508      RET
(0134) }
(0135) 
(0136) void close_rx()
(0137) {
(0138) UCSRB&=~BIT(RXCIE);	
_close_rx:
     345 9857      CBI	0x0A,7
     346 9508      RET
(0139) }
(0140) 
(0141) void open_rx()
(0142) {
(0143) UCSRB|=BIT(RXCIE);
_open_rx:
     347 9A57      SBI	0x0A,7
     348 9508      RET
(0144) }
(0145) 
(0146) void PORT_Init()
(0147) {
(0148) DDRA=0XFF;
_PORT_Init:
     349 EF8F      LDI	R24,0xFF
     34A BB8A      OUT	0x1A,R24
     34B 9508      RET
_delay:
  i                    --> R20
  j                    --> R22
  ms                   --> R16
     34C 940E 0AE7 CALL	push_xgsetF000
(0149) }
(0150) 
(0151) void delay(uint ms)
(0152) {
(0153)         uint i,j;
(0154) 	for(i=0;i<ms;i++)
     34E 2744      CLR	R20
     34F 2755      CLR	R21
     350 C00B      RJMP	0x035C
(0155) 	   {
(0156) 	       for(j=0;j<1000;j++);
     351 2766      CLR	R22
     352 2777      CLR	R23
     353 C002      RJMP	0x0356
     354 5F6F      SUBI	R22,0xFF
     355 4F7F      SBCI	R23,0xFF
     356 3E68      CPI	R22,0xE8
     357 E0E3      LDI	R30,3
     358 077E      CPC	R23,R30
     359 F3D0      BCS	0x0354
     35A 5F4F      SUBI	R20,0xFF
     35B 4F5F      SBCI	R21,0xFF
     35C 1740      CP	R20,R16
     35D 0751      CPC	R21,R17
     35E F390      BCS	0x0351
     35F 940C 0AEC JMP	pop_xgsetF000
(0157)        	   }
(0158) }
(0159) 
(0160) void spi_init()
(0161) {
(0162) 	DDRB|=0XB0;//SCK、SS和MOSI设置为输出,其他为输入
_spi_init:
     361 B387      IN	R24,0x17
     362 6B80      ORI	R24,0xB0
     363 BB87      OUT	0x17,R24
(0163) 	SPCR = (1 << SPE)|(1 << MSTR)|(1 << SPR0);
     364 E581      LDI	R24,0x51
     365 B98D      OUT	0x0D,R24
(0164) //	SPCR = (1 << SPE)|(1 << MSTR);//2Mbps
(0165)   	SPSR = 0;
     366 2422      CLR	R2
     367 B82E      OUT	0x0E,R2
     368 9508      RET
(0166) }
(0167) 
(0168) uchar send_spi(uchar date)
(0169) {
(0170)  	SPSR &= ~(1 << SPIF);
_send_spi:
  date                 --> R16
     369 9877      CBI	0x0E,7
(0171)  	SPDR=date;
     36A B90F      OUT	0x0F,R16
(0172) 	while(!(SPSR&(1 << SPIF)));
     36B 9B77      SBIS	0x0E,7
     36C CFFE      RJMP	0x036B
(0173) 	return SPDR;
     36D B10F      IN	R16,0x0F
     36E 9508      RET
(0174) 	
(0175) }
(0176) 
(0177) 
(0178) void interr_0()
(0179) {
(0180)  	MCUCR=0X02;
_interr_0:
     36F E082      LDI	R24,2
     370 BF85      OUT	0x35,R24
(0181) 	SREG|=0X80;
     371 9478      BSET	7

⌨️ 快捷键说明

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