📄 洗衣机.lst
字号:
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 + -