📄 main.lss
字号:
6ac: 80 93 5c 0a sts 0x0A5C, r24
addr_e=0; //tc35 失败=1
6b0: 80 91 5c 0a lds r24, 0x0A5C
6b4: 87 7f andi r24, 0xF7 ; 247
6b6: 80 93 5c 0a sts 0x0A5C, r24
read_sms=0; //标记有新短信,主动处理一次
6ba: 80 91 5c 0a lds r24, 0x0A5C
6be: 8f 7e andi r24, 0xEF ; 239
6c0: 80 93 5c 0a sts 0x0A5C, r24
sms_t=0; //正在发送短信 0=没有发送
6c4: 80 91 66 0a lds r24, 0x0A66
6c8: 8f 77 andi r24, 0x7F ; 127
6ca: 80 93 66 0a sts 0x0A66, r24
error=0;
6ce: 80 91 5c 0a lds r24, 0x0A5C
6d2: 8f 77 andi r24, 0x7F ; 127
6d4: 80 93 5c 0a sts 0x0A5C, r24
ok=0;
6d8: 80 91 5c 0a lds r24, 0x0A5C
6dc: 8f 7d andi r24, 0xDF ; 223
6de: 80 93 5c 0a sts 0x0A5C, r24
qu=0;
6e2: 80 91 5c 0a lds r24, 0x0A5C
6e6: 8f 7b andi r24, 0xBF ; 191
6e8: 80 93 5c 0a sts 0x0A5C, r24
request_msm_to=0;
6ec: 80 91 5a 0a lds r24, 0x0A5A
6f0: 8f 77 andi r24, 0x7F ; 127
6f2: 80 93 5a 0a sts 0x0A5A, r24
count30s=20;
6f6: 84 e1 ldi r24, 0x14 ; 20
6f8: 80 93 21 02 sts 0x0221, r24
WDT_C=0;
6fc: 80 91 5c 0a lds r24, 0x0A5C
700: 8e 7f andi r24, 0xFE ; 254
702: 80 93 5c 0a sts 0x0A5C, r24
Receiver_c=0;//接收机
706: 80 91 5a 0a lds r24, 0x0A5A
70a: 8d 7f andi r24, 0xFD ; 253
70c: 80 93 5a 0a sts 0x0A5A, r24
Transmitter_c=0;//发射机
710: 80 91 5a 0a lds r24, 0x0A5A
714: 8b 7f andi r24, 0xFB ; 251
716: 80 93 5a 0a sts 0x0A5A, r24
Frequency_c=0;//频率精度
71a: 80 91 5a 0a lds r24, 0x0A5A
71e: 87 7f andi r24, 0xF7 ; 247
720: 80 93 5a 0a sts 0x0A5A, r24
724: 08 95 ret
00000726 <int_init>:
}
//外中断初始化
void int_init(void)
{
726: 08 95 ret
00000728 <init_devices>:
}
//系统初始化
void init_devices(void)
{
cli(); //禁止所有中断
728: f8 94 cli
MCUCR = 0x00;
72a: 15 be out 0x35, r1 ; 53
MCUCSR |= 0x80; //禁止JTAG
72c: 84 b7 in r24, 0x34 ; 52
72e: 80 68 ori r24, 0x80 ; 128
730: 84 bf out 0x34, r24 ; 52
port_init();
732: 0e 94 17 03 call 0x62e <port_init>
timer ();
736: 0e 94 34 05 call 0xa68 <timer>
int_init();
UART0_InitUART(9600); //硬件串口0初始化
73a: 60 e8 ldi r22, 0x80 ; 128
73c: 75 e2 ldi r23, 0x25 ; 37
73e: 80 e0 ldi r24, 0x00 ; 0
740: 90 e0 ldi r25, 0x00 ; 0
742: 0e 94 8c 18 call 0x3118 <UART0_InitUART>
UART1_InitUART(9600); //串口1 9600,接收
746: 60 e8 ldi r22, 0x80 ; 128
748: 75 e2 ldi r23, 0x25 ; 37
74a: 80 e0 ldi r24, 0x00 ; 0
74c: 90 e0 ldi r25, 0x00 ; 0
74e: 0e 94 55 19 call 0x32aa <UART1_InitUART>
Variable_init();
752: 0e 94 30 03 call 0x660 <Variable_init>
sei();//开全局中断
756: 78 94 sei
758: 08 95 ret
0000075a <main>:
}
//---------------------------------------------------------------------
//主函数
int main(void)
{
75a: cf ef ldi r28, 0xFF ; 255
75c: d0 e1 ldi r29, 0x10 ; 16
75e: de bf out 0x3e, r29 ; 62
760: cd bf out 0x3d, r28 ; 61
wdt_enable(WDTO_2S);//启用看门狗,2S
762: 88 e1 ldi r24, 0x18 ; 24
764: 90 e0 ldi r25, 0x00 ; 0
766: 2f e0 ldi r18, 0x0F ; 15
768: 0f b6 in r0, 0x3f ; 63
76a: f8 94 cli
76c: a8 95 wdr
76e: 81 bd out 0x21, r24 ; 33
770: 0f be out 0x3f, r0 ; 63
772: 21 bd out 0x21, r18 ; 33
init_devices();//系统初始化
774: 0e 94 94 03 call 0x728 <init_devices>
CPU_STATUS =MCUCSR; //读取MCU控制和状态寄存器
778: 84 b7 in r24, 0x34 ; 52
CPU_STATUS&=0x1F;
77a: 8f 71 andi r24, 0x1F ; 31
77c: 80 93 59 0a sts 0x0A59, r24
switch (CPU_STATUS)
780: 88 30 cpi r24, 0x08 ; 8
782: 29 f4 brne .+10 ; 0x78e <main+0x34>
{
case (1<<WDRF): //看门狗引起的复位?
WDT_C=1;//标记看门狗复位,在密码发给我
784: 80 91 5c 0a lds r24, 0x0A5C
788: 81 60 ori r24, 0x01 ; 1
78a: 80 93 5c 0a sts 0x0A5C, r24
break;
default: //多种复位同时发生?
break;
}
MCUCSR=0x80; //清除标志位
78e: 80 e8 ldi r24, 0x80 ; 128
790: 84 bf out 0x34, r24 ; 52
sms_counts(14);//密码qu
792: 8e e0 ldi r24, 0x0E ; 14
794: 0e 94 67 0a call 0x14ce <sms_counts>
sms_counts(8);//上电报告
798: 88 e0 ldi r24, 0x08 ; 8
79a: 0e 94 67 0a call 0x14ce <sms_counts>
sms_counts(5);//发送状态报告
79e: 85 e0 ldi r24, 0x05 ; 5
7a0: 0e 94 67 0a call 0x14ce <sms_counts>
clr_ds18b20_dq();
7a4: c6 98 cbi 0x18, 6 ; 24
set_ds18b20_dq_ddr();
7a6: be 9a sbi 0x17, 6 ; 23
convert_ds18b20(); //DS18B20初始化
7a8: 0e 94 84 1a call 0x3508 <convert_ds18b20>
eeprom_read();//调入初始设置
7ac: 0e 94 1e 07 call 0xe3c <eeprom_read>
read_temperature(); //读温度
7b0: 0e 94 93 1a call 0x3526 <read_temperature>
adv_m=27.5*AdcConvert(ADC_POW); //电源电压
7b4: 80 e0 ldi r24, 0x00 ; 0
7b6: 0e 94 37 05 call 0xa6e <AdcConvert>
7ba: 8c 01 movw r16, r24
7bc: c8 01 movw r24, r16
7be: aa 27 eor r26, r26
7c0: 97 fd sbrc r25, 7
7c2: a0 95 com r26
7c4: ba 2f mov r27, r26
7c6: bc 01 movw r22, r24
7c8: cd 01 movw r24, r26
7ca: 0e 94 1d 1d call 0x3a3a <__floatsisf>
7ce: 17 ff sbrs r17, 7
7d0: 06 c0 rjmp .+12 ; 0x7de <main+0x84>
7d2: 20 e0 ldi r18, 0x00 ; 0
7d4: 30 e0 ldi r19, 0x00 ; 0
7d6: 40 e8 ldi r20, 0x80 ; 128
7d8: 57 e4 ldi r21, 0x47 ; 71
7da: 0e 94 be 1c call 0x397c <__addsf3>
7de: 20 e0 ldi r18, 0x00 ; 0
7e0: 30 e0 ldi r19, 0x00 ; 0
7e2: 4c ed ldi r20, 0xDC ; 220
7e4: 51 e4 ldi r21, 0x41 ; 65
7e6: 0e 94 72 1d call 0x3ae4 <__mulsf3>
7ea: dc 01 movw r26, r24
7ec: cb 01 movw r24, r22
7ee: bc 01 movw r22, r24
7f0: cd 01 movw r24, r26
7f2: 0e 94 00 1d call 0x3a00 <__fixsfsi>
7f6: dc 01 movw r26, r24
7f8: cb 01 movw r24, r22
7fa: 90 93 1e 02 sts 0x021E, r25
7fe: 80 93 1d 02 sts 0x021D, r24
Condition_control(); //状态控制
802: 0e 94 19 07 call 0xe32 <Condition_control>
CLR_IGT;//GSM开机
806: 1a 98 cbi 0x03, 2 ; 3
DelayMs(100);
808: 84 e6 ldi r24, 0x64 ; 100
80a: 90 e0 ldi r25, 0x00 ; 0
80c: 0e 94 cd 05 call 0xb9a <DelayMs>
SET_IGT;//拉高
810: 1a 9a sbi 0x03, 2 ; 3
DelayMs(1000);
812: 88 ee ldi r24, 0xE8 ; 232
814: 93 e0 ldi r25, 0x03 ; 3
816: 0e 94 cd 05 call 0xb9a <DelayMs>
UART0_Transmitstr("应答器遥测启动");
81a: 82 e3 ldi r24, 0x32 ; 50
81c: 91 e0 ldi r25, 0x01 ; 1
81e: 0e 94 25 19 call 0x324a <UART0_Transmitstr>
CR;
822: 89 e2 ldi r24, 0x29 ; 41
824: 91 e0 ldi r25, 0x01 ; 1
826: 0e 94 25 19 call 0x324a <UART0_Transmitstr>
DelayMs(500);
82a: 84 ef ldi r24, 0xF4 ; 244
82c: 91 e0 ldi r25, 0x01 ; 1
82e: 0e 94 cd 05 call 0xb9a <DelayMs>
while(UART0_DataInReceiveBuffer()) UART0_ReceiveByte(); //清空接收区
832: 02 c0 rjmp .+4 ; 0x838 <main+0xde>
834: 0e 94 02 19 call 0x3204 <UART0_ReceiveByte>
838: 0e 94 49 19 call 0x3292 <UART0_DataInReceiveBuffer>
83c: 88 23 and r24, r24
83e: d1 f7 brne .-12 ; 0x834 <main+0xda>
while(1)
{
if(time100ms==1)
840: 80 91 5b 0a lds r24, 0x0A5B
844: 80 ff sbrs r24, 0
846: 06 c0 rjmp .+12 ; 0x854 <main+0xfa>
{
time100ms=0;
848: 80 91 5b 0a lds r24, 0x0A5B
84c: 8e 7f andi r24, 0xFE ; 254
84e: 80 93 5b 0a sts 0x0A5B, r24
wdt_reset();//复位看门狗
852: a8 95 wdr
}
if(time500ms==1)
854: 80 91 5b 0a lds r24, 0x0A5B
858: 86 95 lsr r24
85a: 80 ff sbrs r24, 0
85c: 08 c0 rjmp .+16 ; 0x86e <main+0x114>
{
time500ms=0;
85e: 80 91 5b 0a lds r24, 0x0A5B
862: 8d 7f andi r24, 0xFD ; 253
864: 80 93 5b 0a sts 0x0A5B, r24
wdt_reset();//复位看门狗
868: a8 95 wdr
sms_event_circulation (); //监测发送短信
86a: 0e 94 d2 14 call 0x29a4 <sms_event_circulation>
}
if(time1s==1)
86e: 80 91 5b 0a lds r24, 0x0A5B
872: 86 95 lsr r24
874: 86 95 lsr r24
876: 80 ff sbrs r24, 0
878: 0a c0 rjmp .+20 ; 0x88e <main+0x134>
{
time1s=0;
87a: 80 91 5b 0a lds r24, 0x0A5B
87e: 8b 7f andi r24, 0xFB ; 251
880: 80 93 5b 0a sts 0x0A5B, r24
wdt_reset();//复位看门狗
884: a8 95 wdr
Condition_control(); //状态控制
886: 0e 94 19 07 call 0xe32 <Condition_control>
read_sms_1(); //接收解码短信
88a: 0e 94 0b 16 call 0x2c16 <read_sms_1>
}
if(time3s==1)
88e: 80 91 5b 0a lds r24, 0x0A5B
892: 86 95 lsr r24
894: 86 95 lsr r24
896: 86 95 lsr r24
898: 80 ff sbrs r24, 0
89a: 08 c0 rjmp .+16 ; 0x8ac <main+0x152>
{
time3s=0;
89c: 80 91 5b 0a lds r24, 0x0A5B
8a0: 87 7f andi r24, 0xF7 ; 247
8a2: 80 93 5b 0a sts 0x0A5B, r24
wdt_reset();//复位看门狗
8a6: a8 95 wdr
read_inbuf(); //检查新的短信息
8a8: 0e 94 e0 11 call 0x23c0 <read_inbuf>
//UART0_Transmitstr("温度:");
//hex_bcd1(temper);
//UART0_Transmitstr("电压:");
//hex_bcd1(adv_m);
//Data_acquisition();//应答器数据采集
}
if(time30s==1)
8ac: 80 91 5a 0a lds r24, 0x0A5A
8b0: 82 95 swap r24
8b2: 86 95 lsr r24
8b4: 86 95 lsr r24
8b6: 83 70 andi r24, 0x03 ; 3
8b8: 80 ff sbrs r24, 0
8ba: 0f c0 rjmp .+30 ; 0x8da <main+0x180>
{
time30s=0;
8bc: 80 91 5a 0a lds r24, 0x0A5A
8c0: 8f 7b andi r24, 0xBF ; 191
8c2: 80 93 5a 0a sts 0x0A5A, r24
wdt_reset(); //复位看门狗
8c6: a8 95 wdr
read_sms=1; //轮寻读取短信
8c8: 80 91 5c 0a lds r24, 0x0A5C
8cc: 80 61 ori r24, 0x10 ; 16
8ce: 80 93 5c 0a sts 0x0A5C, r24
write_addr(); //短信中心 ok
8d2: 0e 94 21 13 call 0x2642 <write_addr>
tc35_count (); //TC35初始化
8d6: 0e 94 7d 12 call 0x24fa <tc35_count>
//*******************************************************
//signal_c=1;//测试,不用装卡发短信
// addr_e=1;//测试,不用装卡发短信
//*******************************************************
}
if(time1m==1)
8da: 80 91 5b 0a lds r24, 0x0A5B
8de: 82 95 swap r24
8e0: 8f 70 andi r24, 0x0F ; 15
8e2: 80 ff sbrs r24, 0
8e4: 09 c0 rjmp .+18 ; 0x8f8 <main+0x19e>
{
time1m=0;
8e6: 80 91 5b 0a lds r24, 0x0A5B
8ea: 8f 7e andi r24, 0xEF ; 239
8ec: 80 93 5b 0a sts 0x0A5B, r24
Charge_Control();//充电控制
8f0: 0e 94 6e 06 call 0xcdc <Charge_Control>
Data_acquisition();//应答器数据采集
8f4: 0e 94 2b 1b call 0x3656 <Data_acquisition>
}
if(time1h==1)
8f8: 80 91 5b 0a lds r24, 0x0A5B
8fc: 82 95 swap r24
8fe: 86 95 lsr r24
900: 87 70 andi r24, 0x07 ; 7
902: 80 ff sbrs r24, 0
904: 9d cf rjmp .-198 ; 0x840 <main+0xe6>
{
time1h=0;
906: 80 91 5b 0a lds r24, 0x0A5B
90a: 8f 7d andi r24, 0xDF ; 223
90c: 80 93 5b 0a sts 0x0A5B, r24
Communication_tx();//定时发送监测数据
910: 0e 94 61 1c call 0x38c2 <Communication_tx>
914: 95 cf rjmp .-214 ; 0x840 <main+0xe6>
00000916 <timer2_init>:
//***********************
//定时器T2初始化,系统核心时钟,重要重要
void timer2_init(void)
{
TCCR2 = 0x00;//停止定时器
916: 15 bc out 0x25, r1 ; 37
ASSR = 0x00;//异步时钟模式
918: 10 be out 0x30, r1 ; 48
TCNT2 = 0x10;//初始值
91a: 80 e1 ldi r24, 0x10 ; 16
91c: 84 bd out 0x24, r24 ; 36
OCR2 = 0xF0;//匹配值
91e: 80 ef ldi r24, 0xF0 ; 240
920: 83 bd out 0x23, r24 ; 35
TIMSK |= 0x80;//中断允许
922: 87 b7 in r24, 0x37 ; 55
924: 80 68 ori r24, 0x80 ; 128
926: 87 bf out 0x37, r24 ; 55
TCCR2 = 0x0D;//启动定时器 1024分频 33.333MS
928: 8d e0 ldi r24, 0x0D ; 13
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -