📄 洗衣机.s
字号:
.dbline -2
L28:
.dbline 0 ; func end
xjmp pop_xgset303C
.dbsym r Temp_data 12 i
.dbsym r i 20 i
.dbsym r W_bits 10 i
.dbend
.dbfile F:\AVR洗衣机\洗衣机主机\Sounds_and_Display.h
.dbfunc e bell _bell fV
; fff -> R16
.even
_bell::
st -y,R20
st -y,R21
.dbline -1
.dbline 2
; void bell(uchar fff)
; {
.dbline 3
; switch (fff)
mov R20,R16
clr R21
cpi R20,0
cpc R20,R21
breq L39
X13:
cpi R20,1
ldi R30,0
cpc R21,R30
breq L40
X14:
xjmp L37
L39:
.dbline 5
; {
; case 0:DDR_PA3=1;_PA3=0;break;
in R24,0x1a
ori R24,8
out 0x1a,R24
.dbline 5
in R24,0x1b
andi R24,247
out 0x1b,R24
.dbline 5
xjmp L37
L40:
.dbline 6
; case 1:DDR_PA3=1;_PA3=1;break;
in R24,0x1a
ori R24,8
out 0x1a,R24
.dbline 6
in R24,0x1b
ori R24,8
out 0x1b,R24
.dbline 6
.dbline 7
; default:break;
L37:
.dbline -2
L35:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r fff 16 c
.dbend
.dbfile F:\AVR洗衣机\洗衣机主机\key.h
.dbfunc e Delay _Delay fV
; i -> R20,R21
; ms -> R16,R17
.even
_Delay::
st -y,R20
st -y,R21
.dbline -1
.dbline 12
; /********************************************************************
; 函 数 名:Delay
; 入口参数:ms
; 出口参数:无
; 建立日期:2007年3月3日
; 修改日期:
; 函数作用:毫秒级的延时程序,当晶振为12Mhz时,xtal=12;
; 说 明:
; ********************************************************************/
; #define xtal 8
; void Delay(uint ms)
; {
xjmp L43
L42:
.dbline 15
; uint i;
; while(ms--)
; {
.dbline 16
; for(i=1;i<(uint)(xtal*143-2);i++)
ldi R20,1
ldi R21,0
xjmp L48
L45:
.dbline 17
; ;
L46:
.dbline 16
subi R20,255 ; offset = 1
sbci R21,255
L48:
.dbline 16
ldi R24,1142
ldi R25,4
cp R20,R24
cpc R21,R25
brlo L45
X15:
.dbline 18
; }
L43:
.dbline 14
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L42
tst R3
brne L42
X16:
.dbline -2
L41:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 i
.dbsym r ms 16 i
.dbend
.dbfunc e DELAY _DELAY fV
; i -> R20,R21
; ms -> R16,R17
.even
_DELAY::
st -y,R20
st -y,R21
.dbline -1
.dbline 22
; }
;
; void DELAY(uint ms)
; {
xjmp L51
L50:
.dbline 25
; uint i;
; while(ms--)
; {
.dbline 26
; for(i=1;i<(uint)(xtal*143-2);i++)
ldi R20,1
ldi R21,0
xjmp L56
L53:
.dbline 27
; ;
L54:
.dbline 26
subi R20,255 ; offset = 1
sbci R21,255
L56:
.dbline 26
ldi R24,1142
ldi R25,4
cp R20,R24
cpc R21,R25
brlo L53
X17:
.dbline 28
; }
L51:
.dbline 24
movw R2,R16
subi R16,1
sbci R17,0
tst R2
brne L50
tst R3
brne L50
X18:
.dbline -2
L49:
.dbline 0 ; func end
ld R21,y+
ld R20,y+
ret
.dbsym r i 20 i
.dbsym r ms 16 i
.dbend
.dbfunc e key_scan _key_scan fV
.even
_key_scan::
.dbline -1
.dbline 33
; }
;
;
; void key_scan()
; {
.dbline 34
; DDR_PA4=1;
in R24,0x1a
ori R24,16
out 0x1a,R24
.dbline 35
; DDR_PA7=1;
in R24,0x1a
ori R24,128
out 0x1a,R24
.dbline 36
; _PA4=1;
in R24,0x1b
ori R24,16
out 0x1b,R24
.dbline 37
; _PA7=1;
in R24,0x1b
ori R24,128
out 0x1b,R24
.dbline 38
; DDR_PA4=0;
in R24,0x1a
andi R24,239
out 0x1a,R24
.dbline 39
; DDR_PA7=0;
in R24,0x1a
andi R24,127
out 0x1a,R24
.dbline 42
;
;
; if(READ_PA4==0)
in R24,0x19
swap R24
andi R24,#0x0F
andi R24,1
brne L58
X19:
.dbline 43
; {
.dbline 44
; DELAY(10);
ldi R16,10
ldi R17,0
xcall _DELAY
.dbline 45
; if(READ_PA4==0)
in R24,0x19
swap R24
andi R24,#0x0F
andi R24,1
brne L60
X20:
.dbline 46
; {
.dbline 47
; nn++;
lds R24,_nn
subi R24,255 ; addi 1
sts _nn,R24
.dbline 48
; if(nn==5)
cpi R24,5
brne L65
X21:
.dbline 49
; nn=1;
ldi R24,1
sts _nn,R24
L64:
.dbline 50
; while(READ_PA4==0);
L65:
.dbline 50
in R24,0x19
swap R24
andi R24,#0x0F
andi R24,1
breq L64
X22:
.dbline 51
; }
L60:
.dbline 52
; }
L58:
.dbline 53
; if(READ_PA7==0)
in R24,0x19
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
brne L67
X23:
.dbline 54
; {
.dbline 55
; DELAY(10);
ldi R16,10
ldi R17,0
xcall _DELAY
.dbline 56
; if(READ_PA7==0)
in R24,0x19
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
brne L72
X24:
.dbline 57
; {
.dbline 58
; flag_start=1;
ldi R24,1
sts _flag_start,R24
.dbline 59
; }
L71:
.dbline 60
; while(READ_PA7==0);
L72:
.dbline 60
in R24,0x19
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
breq L71
X25:
.dbline 61
; }
L67:
.dbline -2
L57:
.dbline 0 ; func end
ret
.dbend
.dbfunc e key2_scan _key2_scan fc
.even
_key2_scan::
.dbline -1
.dbline 65
; }
;
; char key2_scan()
; {
.dbline 66
; DDR_PA5=1;
in R24,0x1a
ori R24,32
out 0x1a,R24
.dbline 67
; DDR_PA6=1;
in R24,0x1a
ori R24,64
out 0x1a,R24
.dbline 68
; _PA5=1;
in R24,0x1b
ori R24,32
out 0x1b,R24
.dbline 69
; _PA6=1;
in R24,0x1b
ori R24,64
out 0x1b,R24
.dbline 70
; DDR_PA5=0;
in R24,0x1a
andi R24,223
out 0x1a,R24
.dbline 71
; DDR_PA6=0;
in R24,0x1a
andi R24,191
out 0x1a,R24
.dbline 75
;
;
;
; if(READ_PA5==0)
in R24,0x19
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
brne L75
X26:
.dbline 76
; {
.dbline 77
; DELAY(10);
ldi R16,10
ldi R17,0
xcall _DELAY
.dbline 78
; if(READ_PA5==0)
in R24,0x19
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
brne L77
X27:
.dbline 79
; {
.dbline 80
; BBBuffer=1;
ldi R24,1
sts _BBBuffer,R24
L79:
.dbline 81
; while(READ_PA5==0);
L80:
.dbline 81
in R24,0x19
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
breq L79
X28:
.dbline 82
; nop();
nop
.dbline 83
; return 1;
ldi R16,1
xjmp L74
L77:
.dbline 87
;
; }
;
; }
L75:
.dbline 88
; if(READ_PA6==0)
in R24,0x19
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
brne L82
X29:
.dbline 89
; {
.dbline 90
; DELAY(10);
ldi R16,10
ldi R17,0
xcall _DELAY
.dbline 91
; if(READ_PA6==0)
in R24,0x19
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
brne L83
X30:
.dbline 92
; {
.dbline 93
; BBBuffer=1;
ldi R24,1
sts _BBBuffer,R24
L86:
.dbline 94
; while(READ_PA6==0);
L87:
.dbline 94
in R24,0x19
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
lsr R24
andi R24,1
breq L86
X31:
.dbline 95
; nop();
nop
.dbline 96
; return -1;
ldi R16,255
xjmp L74
L82:
.dbline 102
;
; }
;
; }
; else
; return 0;
clr R16
L83:
.dbline -2
L74:
.dbline 0 ; func end
ret
.dbend
.dbfile F:\AVR洗衣机\洗衣机主机\PWM.h
.dbfunc e PWM_init _PWM_init fV
; ii -> R16,R17
.even
_PWM_init::
.dbline -1
.dbline 2
; void PWM_init(uint ii)
; {
.dbline 3
; OCR1A =19999;//50HZ方波
ldi R24,19999
ldi R25,78
out 0x2b,R25
out 0x2a,R24
.dbline 4
; NOP();
nop
.dbline 5
; OCR1B =ii;
out 0x29,R17
out 0x28,R16
.dbline 6
; NOP();
nop
.dbline -2
L89:
.dbline 0 ; func end
ret
.dbsym r ii 16 i
.dbend
.dbfunc e SET_PWMA _SET_PWMA fV
; SPEED_BUF -> R10
.even
_SET_PWMA::
xcall push_xgset300C
mov R10,R16
.dbline -1
.dbline 12
; // TCCR1A = 0x23; //快速PWM
; // TCCR1B = 0x1a; //时钟8分频 匹配清零
; }
;
; void SET_PWMA(uchar SPEED_BUF)//设置PWM占空比、频率
; {
.dbline 13
; switch(SPEED_BUF)
mov R20,R10
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L94
X32:
cpi R20,2
ldi R30,0
cpc R21,R30
breq L95
X33:
cpi R20,3
ldi R30,0
cpc R21,R30
breq L96
X34:
xjmp L92
L94:
.dbline 15
; {
; case 1:PWM_init(2000);NOP();break;
ldi R16,2000
ldi R17,7
xcall _PWM_init
.dbline 15
nop
.dbline 15
xjmp L92
L95:
.dbline 16
; case 2:PWM_init(2200);NOP();break;
ldi R16,2200
ldi R17,8
xcall _PWM_init
.dbline 16
nop
.dbline 16
xjmp L92
L96:
.dbline 17
; case 3:PWM_init(3000);NOP();break;
ldi R16,3000
ldi R17,11
xcall _PWM_init
.dbline 17
nop
.dbline 17
.dbline 18
; default:break;
L92:
.dbline -2
L90:
.dbline 0 ; func end
xjmp pop_xgset300C
.dbsym r SPEED_BUF 10 c
.dbend
.area data(ram, con, rel)
.dbfile F:\AVR洗衣机\洗衣机主机\PWM.h
_TX_ADDRESS::
.blkb 2
.area idata
.byte 52,'C
.area data(ram, con, rel)
.dbfile F:\AVR洗衣机\洗衣机主机\PWM.h
.blkb 2
.area idata
.byte 16,16
.area data(ram, con, rel)
.dbfile F:\AVR洗衣机\洗衣机主机\PWM.h
.blkb 1
.area idata
.byte 1
.area data(ram, con, rel)
.dbfile F:\AVR洗衣机\洗衣机主机\PWM.h
.dbfile F:\AVR洗衣机\洗衣机主机\24L01_Driver.h
.dbsym e TX_ADDRESS _TX_ADDRESS A[5:5]c
.area text(rom, con, rel)
.dbfile F:\AVR洗衣机\洗衣机主机\24L01_Driver.h
.dbfunc e Uart_Init _Uart_Init fV
.even
_Uart_Init::
.dbline -1
.dbline 75
; #include <iom16v.h>
; #include <macros.h>
; #include <bit.h>
; #define start 's'
; #define wat 'w'
; #define heal 'h'
; #define cyc 'c'
;
;
; #define rep 'r'
;
; #define TX_ADR_WIDTH 5
; #define TX_PLOAD_WIDTH 2 //数据缓冲区大小(2字节)
;
; uchar TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; // Define a static TX address
;
;
; #define CE_0 do {PORTA&=0xFD;} while(0)
; #define CE_1 do {PORTA|=0x02;} while(0)
;
; #define CSN_0 do {PORTB&=0XEF;} while(0)
; #define CSN_1 do {PORTB|=0X10;} while(0)
;
; uchar rx_buf[TX_PLOAD_WIDTH]; //接收缓冲区
; uchar tx_buf[TX_PLOAD_WIDTH]; //发送缓冲区
;
; uchar flag,flag1;
; uchar date;
; uchar sta;
;
;
;
; char Reciv_data;
; char num_buff;//数字缓冲器
; char flagg;//数据属性标志位
; char fir_bit;
; char sec_bit;
; char i;
;
;
; //-----------------------------------------------------------
; //串口初始化子程序
; //-----------------------------------------------------------
; void Uart_Init(void);
;
; //-----------------------------------------------------------
; //串口接收字节子程序
; //-----------------------------------------------------------
; unsigned char Getchar(void);
;
; //-----------------------------------------------------------
; //串口发送字节子程序
; //-----------------------------------------------------------
; void Putchar(unsigned char c);
;
; //-----------------------------------------------------------
; //串口发送字符串子程序
; //-----------------------------------------------------------
; void Putstr(char *s);
;
; //-----------------------------------------------------------
; //串口发送字符串子程序(带有换行符)
; //-----------------------------------------------------------
; void Puts(char *s);
;
; //-----------------------------------------------------------
;
; //-----------------------------------------------------------
; //串口初始化子程序
; //字符长度:8位
; //奇偶校验:禁止
; //通讯模式:异步
; //-----------------------------------------------------------
; void Uart_Init(void)
; { /*
.dbline 83
; UCSRB = 0x00; //disable while setting baud rate
; UCSRA = 0x00; //Bit1为1则倍速发送
; UCSRC = 0x86;
; UBRRL = 0x33; //波特率:9600 Bps
; UBRRH = 0x00; //误差率:0.156%
; UCSRB = 0x18;
; */
; UCSRB = 0x00; //disable while setting baud rate
clr R2
out 0xa,R2
.dbline 84
; UCSRA = 0x00; //Bit1为1则倍速发送
out 0xb,R2
.dbline 85
; UCSRC = BIT(URSEL) |0x06;
ldi R24,134
out 0x20,R24
.dbline 86
; UBRRL = 0x33; //波特率:9600 Bps
ldi R24,51
out 0x9,R24
.dbline 87
; UBRRH = 0x00; //误差率:0.156%
out 0x20,R2
.dbline 88
; UCSRB = 0x98;
ldi R24,152
out 0xa,R24
.dbline 89
; SEI();
sei
.dbline -2
L97:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Getchar _Getchar fc
.even
_Getchar::
.dbline -1
.dbline 96
; }
;
; //-----------------------------------------------------------
; //串口接收字节子程序
; //-----------------------------------------------------------
; unsigned char Getchar(void)
; {
L99:
.dbline 97
; while(!(UCSRA& (1<<RXC)));
L100:
.dbline 97
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -