📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile D:\工作\老董_11.8\程序库\BLUETOOTH_UART\main.c
.dbfunc e Delay_1us _Delay_1us fV
; i -> R16,R17
.even
_Delay_1us::
.dbline -1
.dbline 22
; #include<iom16v.h>
; #include<macros.h>
;
; #define ROOM1_SHOW asm("cbi 0x1b,0")
; #define ROOM1_DOWN asm("sbi 0x1b,0")
; #define ROOM2_SHOW asm("sbi 0x1b,1")
; #define ROOM2_DOWN asm("cbi 0x1b,1")
; unsigned char flag_twinkle1;
; unsigned char flag_twinkle2;
; unsigned char flag_stake;
; unsigned char stakeout_key;
; unsigned char data;
; unsigned char data_stake;
; unsigned char r_data[10];
; unsigned int second1,second2;
;
;
;
;
; //延时us级
; void Delay_1us(void)
; {
.dbline 24
; unsigned int i;
; for(i=1;i<1000;i++)
ldi R16,1
ldi R17,0
xjmp L5
L2:
.dbline 25
L3:
.dbline 24
subi R16,255 ; offset = 1
sbci R17,255
L5:
.dbline 24
cpi R16,232
ldi R30,3
cpc R17,R30
brlo L2
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e Delay_1ms _Delay_1ms fV
; i -> R16,R17
.even
_Delay_1ms::
.dbline -1
.dbline 30
; ;
; }
;
; //延时ms级
; void Delay_1ms(void)
; {
.dbline 32
; unsigned int i;
; for(i=1;i<900;i++)
ldi R16,1
ldi R17,0
xjmp L10
L7:
.dbline 33
L8:
.dbline 32
subi R16,255 ; offset = 1
sbci R17,255
L10:
.dbline 32
cpi R16,132
ldi R30,3
cpc R17,R30
brlo L7
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbsym r i 16 i
.dbend
.dbfunc e Delay _Delay fV
; i -> R20,R21
; n -> R22,R23
.even
_Delay::
xcall push_gset2
movw R22,R16
.dbline -1
.dbline 38
; ;
; }
;
; // 延时
; void Delay(unsigned int n)
; {
.dbline 39
; unsigned int i=0;
clr R20
clr R21
.dbline 40
; for(i=0;i<n;i++)
xjmp L15
L12:
.dbline 41
xcall _Delay_1ms
L13:
.dbline 40
subi R20,255 ; offset = 1
sbci R21,255
L15:
.dbline 40
cp R20,R22
cpc R21,R23
brlo L12
.dbline -2
L11:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e Uart_Read_Data _Uart_Read_Data fc
.even
_Uart_Read_Data::
.dbline -1
.dbline 46
.dbline 47
sbis 0xb,7
rjmp L17
.dbline 47
.dbline 47
in R2,0xc
sts _data,R2
.dbline 47
sts _data_stake,R2
.dbline 47
L17:
.dbline -2
L16:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Uart_Write_Data _Uart_Write_Data fV
; r_data -> R16
.even
_Uart_Write_Data::
.dbline -1
.dbline 53
.dbline 54
sbic 0xb,6
rjmp L20
.dbline 54
out 0xc,R16
L20:
.dbline -2
L19:
.dbline 0 ; func end
ret
.dbsym r r_data 16 c
.dbend
.dbfunc e Room_Select _Room_Select fV
.even
_Room_Select::
xcall push_gset2
.dbline -1
.dbline 65
; Delay_1ms();
; }
;
; //查询接收
; unsigned char Uart_Read_Data(void)
; {
; if(UCSRA&0x80) {data=UDR; data_stake=data;}
; //else ;
; }
;
; //查询发送
; void Uart_Write_Data(unsigned char r_data)
; {
; if(!(UCSRA&0x40)) UDR=r_data;
; //else;
; }
;
; //*************************************************
; //照明控制系统
; //*************************************************
;
;
; //房间选择
; void Room_Select()
; {
.dbline 66
; if(((data&0xc3)==0x01)|(data==0x00)) Room1_Handle(); //房间1处理
lds R24,_data
andi R24,195
cpi R24,1
brne L25
ldi R22,1
ldi R23,0
xjmp L26
L25:
clr R22
clr R23
L26:
lds R2,_data
tst R2
brne L27
ldi R20,1
ldi R21,0
xjmp L28
L27:
clr R20
clr R21
L28:
movw R2,R22
or R2,R20
or R3,R21
tst R2
brne X0
tst R3
breq L23
X0:
.dbline 66
xcall _Room1_Handle
xjmp L24
L23:
.dbline 67
; else if(((data&0xc3)==0x02)|((data&0xc3)==0x03)) Room2_Handle(); //房间2处理
lds R24,_data
andi R24,195
cpi R24,2
brne L31
ldi R22,1
ldi R23,0
xjmp L32
L31:
clr R22
clr R23
L32:
lds R24,_data
andi R24,195
cpi R24,3
brne L33
ldi R20,1
ldi R21,0
xjmp L34
L33:
clr R20
clr R21
L34:
movw R2,R22
or R2,R20
or R3,R21
tst R2
brne X1
tst R3
breq L29
X1:
.dbline 67
xcall _Room2_Handle
L29:
L24:
.dbline -2
L22:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbend
.dbfunc e Room1_Handle _Room1_Handle fc
.even
_Room1_Handle::
.dbline -1
.dbline 76
; //else ;
; }
;
;
;
;
; //房间1处理
; unsigned char Room1_Handle(void)
; {
.dbline 77
; if(data&0x01) {flag_twinkle1=0; PORTB=(0xfe&PINB);}
lds R2,_data
sbrs R2,0
rjmp L36
.dbline 77
.dbline 77
clr R2
sts _flag_twinkle1,R2
.dbline 77
in R24,0x16
andi R24,254
out 0x18,R24
.dbline 77
xjmp L37
L36:
.dbline 78
; else if(data==0x00) {flag_twinkle1=0; PORTB=(0xfd|PINB);}
lds R2,_data
tst R2
brne L38
.dbline 78
.dbline 78
clr R2
sts _flag_twinkle1,R2
.dbline 78
in R24,0x16
ori R24,253
out 0x18,R24
.dbline 78
L38:
L37:
.dbline 80
; //if(FLAG_TWINKLE1) Room_Twinkle(SECOND1,SECOND2);
; if((data&0x1c)==0x1c) {flag_twinkle1=1; second1=500;}//Room_Twinkle(500,SECOND2);} //房间1_0.5s闪烁
lds R24,_data
andi R24,28
cpi R24,28
brne L40
.dbline 80
.dbline 80
ldi R24,1
sts _flag_twinkle1,R24
.dbline 80
ldi R24,500
ldi R25,1
sts _second1+1,R25
sts _second1,R24
.dbline 80
xjmp L41
L40:
.dbline 81
; else if((data&0x1c)==0x10) {flag_twinkle1=1; second1=1000;}//Room_Twinkle(1000,SECOND2);} //房间1_1s闪烁
lds R24,_data
andi R24,28
cpi R24,16
brne L42
.dbline 81
.dbline 81
ldi R24,1
sts _flag_twinkle1,R24
.dbline 81
ldi R24,1000
ldi R25,3
sts _second1+1,R25
sts _second1,R24
.dbline 81
xjmp L43
L42:
.dbline 82
; else if((data&0x1c)==0x14) {flag_twinkle1=1; second1=2000;}//Room_Twinkle(2000,SECOND2);} //房间1_2s闪烁
lds R24,_data
andi R24,28
cpi R24,20
brne L44
.dbline 82
.dbline 82
ldi R24,1
sts _flag_twinkle1,R24
.dbline 82
ldi R24,2000
ldi R25,7
sts _second1+1,R25
sts _second1,R24
.dbline 82
xjmp L45
L44:
.dbline 83
; else if((data&0x1c)==0x18) {flag_twinkle1=1; second1=3000;}//Room_Twinkle(3000,SECOND2);} //房间1_3s闪烁
lds R24,_data
andi R24,28
cpi R24,24
brne L46
.dbline 83
.dbline 83
ldi R24,1
sts _flag_twinkle1,R24
.dbline 83
ldi R24,3000
ldi R25,11
sts _second1+1,R25
sts _second1,R24
.dbline 83
L46:
L45:
L43:
L41:
.dbline -2
L35:
.dbline 0 ; func end
ret
.dbend
.dbfunc e Room_Twinkle _Room_Twinkle fV
; second2 -> R20,R21
; second1 -> R22,R23
.even
_Room_Twinkle::
xcall push_gset2
movw R20,R18
movw R22,R16
.dbline -1
.dbline 89
; //else ;
; }
;
; //房间1闪烁处理
; void Room_Twinkle(unsigned int second1,unsigned int second2)
; {
.dbline 90
; if(flag_twinkle1)
lds R2,_flag_twinkle1
tst R2
breq L49
.dbline 91
; {
.dbline 92
; PORTB=(0xfe&PINB); //1开
in R24,0x16
andi R24,254
out 0x18,R24
.dbline 93
; Delay(second1);
movw R16,R22
xcall _Delay
.dbline 94
; PORTB^=0x01; //1关
ldi R24,1
in R2,0x18
eor R2,R24
out 0x18,R2
.dbline 96
; //PORTA=0xff; //2关
; Delay(second1);
movw R16,R22
xcall _Delay
.dbline 97
; PORTB=(0xfe&PINB); //1开
in R24,0x16
andi R24,254
out 0x18,R24
.dbline 98
; }
L49:
.dbline 99
lds R2,_flag_twinkle2
tst R2
breq L51
.dbline 100
.dbline 101
in R24,0x16
andi R24,253
out 0x18,R24
.dbline 102
movw R16,R20
xcall _Delay
.dbline 103
ldi R24,2
in R2,0x18
eor R2,R24
out 0x18,R2
.dbline 105
movw R16,R20
xcall _Delay
.dbline 106
in R24,0x16
andi R24,253
out 0x18,R24
.dbline 107
L51:
.dbline -2
L48:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r second2 20 i
.dbsym r second1 22 i
.dbend
.dbfunc e Room2_Handle _Room2_Handle fc
.even
_Room2_Handle::
.dbline -1
.dbline 115
; if(flag_twinkle2)
; {
; PORTB=(0xfd&PINB); //2开
; Delay(second2);
; PORTB^=0x02; //2关
; //PORTA=0xff; //1关
; Delay(second2);
; PORTB=(0xfd&PINB); //2开
; }
; }
;
;
;
;
; //房间2处理
; unsigned char Room2_Handle(void)
; {
.dbline 116
; if((data&0x03)==0x02) {flag_twinkle2=0; PORTB=(0xfd&PINB);}
lds R24,_data
andi R24,3
cpi R24,2
brne L54
.dbline 116
.dbline 116
clr R2
sts _flag_twinkle2,R2
.dbline 116
in R24,0x16
andi R24,253
out 0x18,R24
.dbline 116
xjmp L55
L54:
.dbline 117
; else {flag_twinkle2=0; PORTB=(0xfe|PINB);}
.dbline 117
clr R2
sts _flag_twinkle2,R2
.dbline 117
in R24,0x16
ori R24,254
out 0x18,R24
.dbline 117
L55:
.dbline 119
; //if(FLAG_TWINKLE2) Room_Twinkle(SECOND1,SECOND2);
; if((data&0x1c)==0x1c) {flag_twinkle2=1; second2=500;}//Room_Twinkle(SECOND1,500);} //房间2_0.5s闪烁
lds R24,_data
andi R24,28
cpi R24,28
brne L56
.dbline 119
.dbline 119
ldi R24,1
sts _flag_twinkle2,R24
.dbline 119
ldi R24,500
ldi R25,1
sts _second2+1,R25
sts _second2,R24
.dbline 119
xjmp L57
L56:
.dbline 120
; else if((data&0x1c)==0x10) {flag_twinkle2=1; second2=1000;}//Room_Twinkle(SECOND1,1000);} //房间2_1s闪烁
lds R24,_data
andi R24,28
cpi R24,16
brne L58
.dbline 120
.dbline 120
ldi R24,1
sts _flag_twinkle2,R24
.dbline 120
ldi R24,1000
ldi R25,3
sts _second2+1,R25
sts _second2,R24
.dbline 120
xjmp L59
L58:
.dbline 121
; else if((data&0x1c)==0x14) {flag_twinkle2=1; second2=2000;}//Room_Twinkle(SECOND1,2000);} //房间2_2s闪烁
lds R24,_data
andi R24,28
cpi R24,20
brne L60
.dbline 121
.dbline 121
ldi R24,1
sts _flag_twinkle2,R24
.dbline 121
ldi R24,2000
ldi R25,7
sts _second2+1,R25
sts _second2,R24
.dbline 121
xjmp L61
L60:
.dbline 122
; else if((data&0x1c)==0x18) {flag_twinkle2=1; second2=3000;}//Room_Twinkle(SECOND1,3000);} //房间2_3s闪烁
lds R24,_data
andi R24,28
cpi R24,24
brne L62
.dbline 122
.dbline 122
ldi R24,1
sts _flag_twinkle2,R24
.dbline 122
ldi R24,3000
ldi R25,11
sts _second2+1,R25
sts _second2,R24
.dbline 122
L62:
L61:
L59:
L57:
.dbline -2
L53:
.dbline 0 ; func end
ret
.dbend
.dbfunc e stakeout _stakeout fV
.even
_stakeout::
xcall push_gset1
.dbline -1
.dbline 131
; //else ;
; }
;
; //********************************************
; //安防监视系统
; //********************************************
;
; void stakeout(void)
; {
.dbline 132
; if(data==0x41) flag_stake=1;
lds R24,_data
cpi R24,65
brne L65
.dbline 132
ldi R24,1
sts _flag_stake,R24
xjmp L66
L65:
.dbline 133
; else {flag_stake=0; stakeout_key=0;}
.dbline 133
clr R2
sts _flag_stake,R2
.dbline 133
sts _stakeout_key,R2
.dbline 133
L66:
.dbline 134
; if((!(PIND&0x04))&flag_stake) stakeout_key=1;
sbic 0x10,2
rjmp L69
ldi R20,1
ldi R21,0
xjmp L70
L69:
clr R20
clr R21
L70:
lds R2,_flag_stake
clr R3
movw R4,R20
and R4,R2
and R5,R3
tst R4
brne X2
tst R5
breq L72
X2:
.dbline 134
ldi R24,1
sts _stakeout_key,R24
xjmp L72
L71:
.dbline 136
; while(flag_stake&stakeout_key)
; {
.dbline 137
; Uart_Read_Data();
xcall _Uart_Read_Data
.dbline 138
; if(data_stake==0x45) {data_stake=0; Uart_Write_Data(0x45);}
lds R24,_data_stake
cpi R24,69
brne L74
.dbline 138
.dbline 138
clr R2
sts _data_stake,R2
.dbline 138
ldi R16,69
xcall _Uart_Write_Data
.dbline 138
L74:
.dbline 139
; if(data==0x40) {flag_stake=0; stakeout_key=0;}
lds R24,_data
cpi R24,64
brne L76
.dbline 139
.dbline 139
clr R2
sts _flag_stake,R2
.dbline 139
sts _stakeout_key,R2
.dbline 139
xjmp L77
L76:
.dbline 141
; else
; {
.dbline 142
; PORTB=0xfb;
ldi R24,251
out 0x18,R24
.dbline 143
; Delay_1us();
xcall _Delay_1us
.dbline 144
; PORTB^=0x04;
ldi R24,4
in R2,0x18
eor R2,R24
out 0x18,R2
.dbline 145
; Delay_1us();
xcall _Delay_1us
.dbline 146
; }
L77:
.dbline 147
L72:
.dbline 135
lds R2,_stakeout_key
lds R3,_flag_stake
and R3,R2
brne L71
.dbline -2
L64:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 159
; }
; }
; /*
; //***************************************
; //电视系统
; //***************************************
; void tv_
; */
;
;
; //主函数
; void main(void)
; {
.dbline 160
; PORTA=0xff;
ldi R24,255
out 0x1b,R24
.dbline 161
; DDRA=0xff;
out 0x1a,R24
.dbline 162
; PORTB=0xff;
out 0x18,R24
.dbline 163
; DDRB=0xff;
out 0x17,R24
.dbline 164
; PORTC=0xff;
out 0x15,R24
.dbline 165
; DDRC=0xff;
out 0x14,R24
.dbline 166
; UBRRH=0x00; //初始化串口9600
clr R2
out 0x20,R2
.dbline 167
; UBRRL=0x33;
ldi R24,51
out 0x9,R24
.dbline 168
; UCSRB=0x18; //发送接收允许
ldi R24,24
out 0xa,R24
.dbline 169
; Delay_1ms();
xcall _Delay_1ms
xjmp L80
L79:
.dbline 171
.dbline 172
xcall _Uart_Read_Data
.dbline 173
xcall _Room_Select
.dbline 174
lds R18,_second2
lds R19,_second2+1
lds R16,_second1
lds R17,_second1+1
xcall _Room_Twinkle
.dbline 175
xcall _stakeout
.dbline 176
L80:
.dbline 170
xjmp L79
X3:
.dbline -2
L78:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\工作\老董_11.8\程序库\BLUETOOTH_UART\main.c
_second2::
.blkb 2
.dbsym e second2 _second2 i
_second1::
.blkb 2
.dbsym e second1 _second1 i
_r_data::
.blkb 10
.dbsym e r_data _r_data A[10:10]c
_data_stake::
.blkb 1
.dbsym e data_stake _data_stake c
_data::
.blkb 1
.dbsym e data _data c
_stakeout_key::
.blkb 1
.dbsym e stakeout_key _stakeout_key c
_flag_stake::
.blkb 1
.dbsym e flag_stake _flag_stake c
_flag_twinkle2::
.blkb 1
.dbsym e flag_twinkle2 _flag_twinkle2 c
_flag_twinkle1::
.blkb 1
.dbsym e flag_twinkle1 _flag_twinkle1 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -