📄 bluetooth_uart.lst
字号:
__text_start:
__start:
002A E5CF LDI R28,0x5F
002B E0D4 LDI R29,4
002C BFCD OUT 0x3D,R28
002D BFDE OUT 0x3E,R29
002E 51C0 SUBI R28,0x10
002F 40D0 SBCI R29,0
0030 EA0A LDI R16,0xAA
0031 8308 STD Y+0,R16
0032 2400 CLR R0
0033 E6E0 LDI R30,0x60
0034 E0F0 LDI R31,0
0035 E010 LDI R17,0
0036 37E4 CPI R30,0x74
0037 07F1 CPC R31,R17
0038 F011 BEQ 0x003B
0039 9201 ST R0,Z+
003A CFFB RJMP 0x0036
003B 8300 STD Z+0,R16
003C E5E4 LDI R30,0x54
003D E0F0 LDI R31,0
003E E6A0 LDI R26,0x60
003F E0B0 LDI R27,0
0040 E010 LDI R17,0
0041 35E4 CPI R30,0x54
0042 07F1 CPC R31,R17
0043 F021 BEQ 0x0048
0044 95C8 LPM
0045 9631 ADIW R30,1
0046 920D ST R0,X+
0047 CFF9 RJMP 0x0041
0048 940E01CA CALL _main
_exit:
004A CFFF RJMP _exit
FILE: D:\工作\老董_11.8\程序库\BLUETOOTH_UART\main.c
(0001) #include<iom16v.h>
(0002) #include<macros.h>
(0003)
(0004) #define ROOM1_SHOW asm("cbi 0x1b,0")
(0005) #define ROOM1_DOWN asm("sbi 0x1b,0")
(0006) #define ROOM2_SHOW asm("sbi 0x1b,1")
(0007) #define ROOM2_DOWN asm("cbi 0x1b,1")
(0008) unsigned char flag_twinkle1;
(0009) unsigned char flag_twinkle2;
(0010) unsigned char flag_stake;
(0011) unsigned char stakeout_key;
(0012) unsigned char data;
(0013) unsigned char data_stake;
(0014) unsigned char r_data[10];
(0015) unsigned int second1,second2;
(0016)
(0017)
(0018)
(0019)
(0020) //延时us级
(0021) void Delay_1us(void)
(0022) {
(0023) unsigned int i;
(0024) for(i=1;i<1000;i++)
_Delay_1us:
i --> R16
004B E001 LDI R16,1
004C E010 LDI R17,0
004D C002 RJMP 0x0050
004E 5F0F SUBI R16,0xFF
004F 4F1F SBCI R17,0xFF
0050 3E08 CPI R16,0xE8
0051 E0E3 LDI R30,3
0052 071E CPC R17,R30
0053 F3D0 BCS 0x004E
0054 9508 RET
(0025) ;
(0026) }
(0027)
(0028) //延时ms级
(0029) void Delay_1ms(void)
(0030) {
(0031) unsigned int i;
(0032) for(i=1;i<900;i++)
_Delay_1ms:
i --> R16
0055 E001 LDI R16,1
0056 E010 LDI R17,0
0057 C002 RJMP 0x005A
0058 5F0F SUBI R16,0xFF
0059 4F1F SBCI R17,0xFF
005A 3804 CPI R16,0x84
005B E0E3 LDI R30,3
005C 071E CPC R17,R30
005D F3D0 BCS 0x0058
005E 9508 RET
_Delay:
i --> R20
n --> R22
005F 940E01F0 CALL push_gset2
0061 01B8 MOVW R22,R16
(0033) ;
(0034) }
(0035)
(0036) // 延时
(0037) void Delay(unsigned int n)
(0038) {
(0039) unsigned int i=0;
0062 2744 CLR R20
0063 2755 CLR R21
(0040) for(i=0;i<n;i++)
0064 C003 RJMP 0x0068
(0041) Delay_1ms();
0065 DFEF RCALL _Delay_1ms
0066 5F4F SUBI R20,0xFF
0067 4F5F SBCI R21,0xFF
0068 1746 CP R20,R22
0069 0757 CPC R21,R23
006A F3D0 BCS 0x0065
006B 940E01E7 CALL pop_gset2
006D 9508 RET
(0042) }
(0043)
(0044) //查询接收
(0045) unsigned char Uart_Read_Data(void)
(0046) {
(0047) if(UCSRA&0x80) {data=UDR; data_stake=data;}
_Uart_Read_Data:
006E 9B5F SBIS 0x0B,7
006F C005 RJMP 0x0075
0070 B02C IN R2,0x0C
0071 9220006F STS data,R2
0073 9220006E STS data_stake,R2
0075 9508 RET
(0048) //else ;
(0049) }
(0050)
(0051) //查询发送
(0052) void Uart_Write_Data(unsigned char r_data)
(0053) {
(0054) if(!(UCSRA&0x40)) UDR=r_data;
_Uart_Write_Data:
r_data --> R16
0076 995E SBIC 0x0B,6
0077 C001 RJMP 0x0079
0078 B90C OUT 0x0C,R16
0079 9508 RET
_Room_Select:
007A 940E01F0 CALL push_gset2
(0055) //else;
(0056) }
(0057)
(0058) //*************************************************
(0059) //照明控制系统
(0060) //*************************************************
(0061)
(0062)
(0063) //房间选择
(0064) void Room_Select()
(0065) {
(0066) if(((data&0xc3)==0x01)|(data==0x00)) Room1_Handle(); //房间1处理
007C 9180006F LDS R24,data
007E 7C83 ANDI R24,0xC3
007F 3081 CPI R24,1
0080 F419 BNE 0x0084
0081 E061 LDI R22,1
0082 E070 LDI R23,0
0083 C002 RJMP 0x0086
0084 2766 CLR R22
0085 2777 CLR R23
0086 9020006F LDS R2,data
0088 2022 TST R2
0089 F419 BNE 0x008D
008A E041 LDI R20,1
008B E050 LDI R21,0
008C C002 RJMP 0x008F
008D 2744 CLR R20
008E 2755 CLR R21
008F 011B MOVW R2,R22
0090 2A24 OR R2,R20
0091 2A35 OR R3,R21
0092 2022 TST R2
0093 F411 BNE 0x0096
0094 2033 TST R3
0095 F011 BEQ 0x0098
0096 D020 RCALL _Room1_Handle
0097 C01C RJMP 0x00B4
(0067) else if(((data&0xc3)==0x02)|((data&0xc3)==0x03)) Room2_Handle(); //房间2处理
0098 9180006F LDS R24,data
009A 7C83 ANDI R24,0xC3
009B 3082 CPI R24,2
009C F419 BNE 0x00A0
009D E061 LDI R22,1
009E E070 LDI R23,0
009F C002 RJMP 0x00A2
00A0 2766 CLR R22
00A1 2777 CLR R23
00A2 9180006F LDS R24,data
00A4 7C83 ANDI R24,0xC3
00A5 3083 CPI R24,3
00A6 F419 BNE 0x00AA
00A7 E041 LDI R20,1
00A8 E050 LDI R21,0
00A9 C002 RJMP 0x00AC
00AA 2744 CLR R20
00AB 2755 CLR R21
00AC 011B MOVW R2,R22
00AD 2A24 OR R2,R20
00AE 2A35 OR R3,R21
00AF 2022 TST R2
00B0 F411 BNE 0x00B3
00B1 2033 TST R3
00B2 F009 BEQ 0x00B4
00B3 D07F RCALL _Room2_Handle
00B4 940E01E7 CALL pop_gset2
00B6 9508 RET
(0068) //else ;
(0069) }
(0070)
(0071)
(0072)
(0073)
(0074) //房间1处理
(0075) unsigned char Room1_Handle(void)
(0076) {
(0077) if(data&0x01) {flag_twinkle1=0; PORTB=(0xfe&PINB);}
_Room1_Handle:
00B7 9020006F LDS R2,data
00B9 FE20 SBRS R2,0
00BA C007 RJMP 0x00C2
00BB 2422 CLR R2
00BC 92200073 STS flag_twinkle1,R2
00BE B386 IN R24,0x16
00BF 7F8E ANDI R24,0xFE
00C0 BB88 OUT 0x18,R24
00C1 C00A RJMP 0x00CC
(0078) else if(data==0x00) {flag_twinkle1=0; PORTB=(0xfd|PINB);}
00C2 9020006F LDS R2,data
00C4 2022 TST R2
00C5 F431 BNE 0x00CC
00C6 2422 CLR R2
00C7 92200073 STS flag_twinkle1,R2
00C9 B386 IN R24,0x16
00CA 6F8D ORI R24,0xFD
00CB BB88 OUT 0x18,R24
(0079) //if(FLAG_TWINKLE1) Room_Twinkle(SECOND1,SECOND2);
(0080) if((data&0x1c)==0x1c) {flag_twinkle1=1; second1=500;}//Room_Twinkle(500,SECOND2);} //房间1_0.5s闪烁
00CC 9180006F LDS R24,data
00CE 718C ANDI R24,0x1C
00CF 318C CPI R24,0x1C
00D0 F451 BNE 0x00DB
00D1 E081 LDI R24,1
00D2 93800073 STS flag_twinkle1,R24
00D4 EF84 LDI R24,0xF4
00D5 E091 LDI R25,1
00D6 93900063 STS second1+1,R25
00D8 93800062 STS second1,R24
00DA C02C RJMP 0x0107
(0081) else if((data&0x1c)==0x10) {flag_twinkle1=1; second1=1000;}//Room_Twinkle(1000,SECOND2);} //房间1_1s闪烁
00DB 9180006F LDS R24,data
00DD 718C ANDI R24,0x1C
00DE 3180 CPI R24,0x10
00DF F451 BNE 0x00EA
00E0 E081 LDI R24,1
00E1 93800073 STS flag_twinkle1,R24
00E3 EE88 LDI R24,0xE8
00E4 E093 LDI R25,3
00E5 93900063 STS second1+1,R25
00E7 93800062 STS second1,R24
00E9 C01D RJMP 0x0107
(0082) else if((data&0x1c)==0x14) {flag_twinkle1=1; second1=2000;}//Room_Twinkle(2000,SECOND2);} //房间1_2s闪烁
00EA 9180006F LDS R24,data
00EC 718C ANDI R24,0x1C
00ED 3184 CPI R24,0x14
00EE F451 BNE 0x00F9
00EF E081 LDI R24,1
00F0 93800073 STS flag_twinkle1,R24
00F2 ED80 LDI R24,0xD0
00F3 E097 LDI R25,7
00F4 93900063 STS second1+1,R25
00F6 93800062 STS second1,R24
00F8 C00E RJMP 0x0107
(0083) else if((data&0x1c)==0x18) {flag_twinkle1=1; second1=3000;}//Room_Twinkle(3000,SECOND2);} //房间1_3s闪烁
00F9 9180006F LDS R24,data
00FB 718C ANDI R24,0x1C
00FC 3188 CPI R24,0x18
00FD F449 BNE 0x0107
00FE E081 LDI R24,1
00FF 93800073 STS flag_twinkle1,R24
0101 EB88 LDI R24,0xB8
0102 E09B LDI R25,0xB
0103 93900063 STS second1+1,R25
0105 93800062 STS second1,R24
0107 9508 RET
_Room_Twinkle:
second2 --> R20
second1 --> R22
0108 940E01F0 CALL push_gset2
010A 01A9 MOVW R20,R18
010B 01B8 MOVW R22,R16
(0084) //else ;
(0085) }
(0086)
(0087) //房间1闪烁处理
(0088) void Room_Twinkle(unsigned int second1,unsigned int second2)
(0089) {
(0090) if(flag_twinkle1)
010C 90200073 LDS R2,flag_twinkle1
010E 2022 TST R2
010F F071 BEQ 0x011E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -