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

📄 bluetooth_uart.lst

📁 在AVR单片机上源程序 bluetooth uart
💻 LST
📖 第 1 页 / 共 2 页
字号:
__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 + -