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

📄 main.s

📁 在AVR单片机上源程序 bluetooth uart
💻 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 + -