📄 jdbh.lst
字号:
__start:
__text_start:
0046 EFCF LDI R28,0xFF
0047 E1D0 LDI R29,0x10
0048 BFCD OUT 0x3D,R28
0049 BFDE OUT 0x3E,R29
004A 51C0 SUBI R28,0x10
004B 40D0 SBCI R29,0
004C EA0A LDI R16,0xAA
004D 8308 STD Y+0,R16
004E 2400 CLR R0
004F E0E0 LDI R30,0
0050 E0F1 LDI R31,1
0051 E011 LDI R17,1
0052 32EA CPI R30,0x2A
0053 07F1 CPC R31,R17
0054 F011 BEQ 0x0057
0055 9201 ST R0,Z+
0056 CFFB RJMP 0x0052
0057 8300 STD Z+0,R16
0058 E8EC LDI R30,0x8C
0059 E0F0 LDI R31,0
005A E0A0 LDI R26,0
005B E0B1 LDI R27,1
005C E010 LDI R17,0
005D 38EC CPI R30,0x8C
005E 07F1 CPC R31,R17
005F F021 BEQ 0x0064
0060 95C8 LPM
0061 9631 ADIW R30,1
0062 920D ST R0,X+
0063 CFF9 RJMP 0x005D
0064 940E0195 CALL _main
_exit:
0066 CFFF RJMP _exit
_SIGNALA:
temp_data --> R20
i --> R20
SIG_UART0_RECV --> R16
0067 940E01C4 CALL push_gset1
FILE: C:\AVR\AD\main.c
(0001) #include <iom128v.h>
(0002) #include <stdlib.h>
(0003)
(0004) //全局变量////////////////////////////
(0005)
(0006) unsigned int global_flag_serie;//通信状态标志
(0007) unsigned int global_ad_counter;//AD转换计数器
(0008) unsigned int global_start_sample_flag;//采样开始标志
(0009) unsigned int global_sample_mode_flag;//采样方式标志:手动或自动
(0010) unsigned int global_operation_detected_flag;//检测到动作标志
(0011) unsigned int global_detect_close[5];//用于检测合闸动作开始
(0012) unsigned int global_detect_trip[5];//用于检测分闸动作开始
(0013) unsigned int global_channel_flag;//通道标志
(0014) unsigned int global_close_counter;//合闸线圈地址计数器
(0015) unsigned int global_trip_counter;//分闸线圈地址计数器
(0016) unsigned int global_motor_counter;//打压电机地址计数器
(0017) unsigned int global_voltage_counter;//操作电压地址计数器
(0018) unsigned int global_ad_finish_flag;//AD转换结束标志
(0019)
(0020) //串口接收中断////////////////////////
(0021) SIGNALA(SIG_UART0_RECV)
(0022) {
(0023) //变量定义
(0024) unsigned int temp_data;
(0025) unsigned int i;
(0026) //关全局中断
(0027) // cli();
(0028) //等待接收到数据标志被置位
(0029) //loop_until_bit_is_set(UCSR0A,RXC0);
(0030) //对接收到的字节进行判断
(0031) temp_data=UDR0;//读取接收的字节
0069 B14C IN R20,0x0C
006A 2755 CLR R21
(0032) if(temp_data!=0)//如果接收到非零
006B 3040 CPI R20,0
006C 0745 CPC R20,R21
006D F409 BNE 0x006F
006E C04E RJMP 0x00BD
(0033) {
(0034) if(global_flag_serie==0)//如果接收到的为第一字节
006F 90200128 LDS R2,global_flag_serie
0071 90300129 LDS R3,global_flag_serie+1
0073 2022 TST R2
0074 F559 BNE 0x00A0
0075 2033 TST R3
0076 F549 BNE 0x00A0
(0035) {
(0036) switch (temp_data)
0077 3140 CPI R20,0x10
0078 E0E0 LDI R30,0
0079 075E CPC R21,R30
007A F0B9 BEQ 0x0092
007B E180 LDI R24,0x10
007C E090 LDI R25,0
007D 1784 CP R24,R20
007E 0795 CPC R25,R21
007F F02C BLT 0x0085
0080 3042 CPI R20,2
0081 E0E0 LDI R30,0
0082 075E CPC R21,R30
0083 F031 BEQ 0x008A
0084 C038 RJMP 0x00BD
0085 3242 CPI R20,0x22
0086 E0E0 LDI R30,0
0087 075E CPC R21,R30
0088 F081 BEQ 0x0099
0089 C033 RJMP 0x00BD
(0037) {
(0038) case 2://接到本机地址
(0039) global_flag_serie=1;//准备接收第二字节数据
008A E081 LDI R24,1
008B E090 LDI R25,0
008C 93900129 STS global_flag_serie+1,R25
008E 93800128 STS global_flag_serie,R24
(0040) UCSR0A&=~(1<<MPCM0);//清零MPCM0,允许继续接收数据包
0090 9858 CBI 0x0B,0
(0041) break;
0091 C02B RJMP 0x00BD
(0042) // case 0://接到复位命令
(0043) // global_start_sample_flag=0xff;//复位开始
(0044) // break;
(0045) case 0x10://接到采集命令
(0046) global_start_sample_flag=0;//开始采集数据
0092 2422 CLR R2
0093 2433 CLR R3
0094 92300125 STS global_start_sample_flag+1,R3
0096 92200124 STS global_start_sample_flag,R2
(0047) // sbi(PORTG,3);//测试用///////////////
(0048) break;
0098 C024 RJMP 0x00BD
(0049) // case 17://接到采集结束命令
(0050) // global_start_sample_flag=0xff;//结束采集数据
(0051) // break;
(0052) case 0x22://接收到自动测试信号
(0053) global_sample_mode_flag=0;
0099 2422 CLR R2
009A 2433 CLR R3
009B 92300123 STS global_sample_mode_flag+1,R3
009D 92200122 STS global_sample_mode_flag,R2
(0054) break;
(0055) default:
(0056) break;
(0057) }
(0058) }
009F C01D RJMP 0x00BD
(0059) else if((global_flag_serie==1)&&(temp_data<=32))//如果接收的是第二字节
00A0 91800128 LDS R24,global_flag_serie
00A2 91900129 LDS R25,global_flag_serie+1
00A4 3081 CPI R24,1
00A5 E0E0 LDI R30,0
00A6 079E CPC R25,R30
00A7 F4A9 BNE 0x00BD
00A8 E280 LDI R24,0x20
00A9 E090 LDI R25,0
00AA 1784 CP R24,R20
00AB 0795 CPC R25,R21
00AC F080 BCS 0x00BD
(0060) {
(0061) for(i=0;i<0xfff;i++){;}//延时等待
00AD 2744 CLR R20
00AE 2755 CLR R21
00AF C002 RJMP 0x00B2
00B0 5F4F SUBI R20,0xFF
00B1 4F5F SBCI R21,0xFF
00B2 3F4F CPI R20,0xFF
00B3 E0EF LDI R30,0xF
00B4 075E CPC R21,R30
00B5 F3D0 BCS 0x00B0
(0062) // SEND_ONE_PACKAGE(temp_data);//发送数据包,temp_data为包序号
(0063) // if(temp_data==17){sbi(PORTG,3);}//测试用////////////
(0064) global_flag_serie=0;
00B6 2422 CLR R2
00B7 2433 CLR R3
00B8 92300129 STS global_flag_serie+1,R3
00BA 92200128 STS global_flag_serie,R2
(0065) UCSR0A|=(1<<MPCM0);//准备接收地址
00BC 9A58 SBI 0x0B,0
(0066) }
(0067) }
00BD 940E01C7 CALL pop_gset1
00BF 9508 RET
_SIGNAL:
i --> Y+1
temp2 --> R22
temp1 --> R22
int16_temp1 --> R20
SIG_INTERRUPT7 --> R16
00C0 940E01C2 CALL push_gset2
(0068) //cbi(PORTE,2);//改为接收状态
(0069) //sei();
(0070) }
(0071)
(0072) //AD转换结束中断int7//////////////////
(0073) SIGNAL(SIG_INTERRUPT7)
(0074) {
(0075) //变量定义
(0076) unsigned int int16_temp1;
(0077) unsigned int temp1,temp2,i;
(0078) //关中断
(0079) //cli();
(0080) //读取ad转换结果
(0081) //int16_temp1=AD7891_READ();
(0082) //如果是需要保存到RAM的采样
(0083) if(global_sample_mode_flag==0xFF)
00C2 91800122 LDS R24,global_sample_mode_flag
00C4 91900123 LDS R25,global_sample_mode_flag+1
00C6 3F8F CPI R24,0xFF
00C7 E0E0 LDI R30,0
00C8 079E CPC R25,R30
00C9 F009 BEQ 0x00CB
00CA C03C RJMP 0x0107
(0084) {
(0085) //AD7891 deselect,否则数据总线与RAM冲突
(0086) //sbi(PORTD,5);
(0087) //AD转换结果存入RAM
(0088) temp1=int16_temp1/256;
00CB 01BA MOVW R22,R20
00CC 2F67 MOV R22,R23
00CD 2777 CLR R23
(0089) temp2=int16_temp1%256;
00CE 01BA MOVW R22,R20
00CF 7070 ANDI R23,0
(0090) //保存数据
(0091) switch(global_channel_flag)
00D0 9180010A LDS R24,global_channel_flag
00D2 9190010B LDS R25,global_channel_flag+1
00D4 3081 CPI R24,1
00D5 E0E0 LDI R30,0
00D6 079E CPC R25,R30
00D7 F049 BEQ 0x00E1
00D8 3082 CPI R24,2
00D9 E0E0 LDI R30,0
00DA 079E CPC R25,R30
00DB F079 BEQ 0x00EB
00DC 3083 CPI R24,3
00DD E0E0 LDI R30,0
00DE 079E CPC R25,R30
00DF F0A9 BEQ 0x00F5
00E0 C01D RJMP 0x00FE
(0092) {
(0093) case 1://保存合闸线圈电流
(0094) //SRAM_1M_8_WRITE(global_close_counter,temp1);//高位字节
(0095) //SRAM_1M_8_WRITE(global_close_counter+1,temp2);//低位字节
(0096) global_close_counter+=2;
00E1 91800108 LDS R24,global_close_counter
00E3 91900109 LDS R25,global_close_counter+1
00E5 9602 ADIW R24,2
00E6 93900109 STS global_close_counter+1,R25
00E8 93800108 STS global_close_counter,R24
(0097) break;
00EA C013 RJMP 0x00FE
(0098) case 2://保存分闸线圈电流
(0099) //SRAM_1M_8_WRITE(global_trip_counter,temp1);//高位字节
(0100) //SRAM_1M_8_WRITE(global_trip_counter+1,temp2);//低位字节
(0101) global_trip_counter+=2;
00EB 91800106 LDS R24,global_trip_counter
00ED 91900107 LDS R25,global_trip_counter+1
00EF 9602 ADIW R24,2
00F0 93900107 STS global_trip_counter+1,R25
00F2 93800106 STS global_trip_counter,R24
(0102) break;
00F4 C009 RJMP 0x00FE
(0103) case 3://保存操作电压
(0104) // SRAM_1M_8_WRITE(global_motor_counter,temp1);//高位字节
(0105) // SRAM_1M_8_WRITE(global_motor_counter+1,temp2);//低位字节
(0106) //SRAM_1M_8_WRITE(global_voltage_counter,temp1);//高位字节
(0107) //SRAM_1M_8_WRITE(global_voltage_counter+1,temp2);//低位字节
(0108) global_voltage_counter+=2;
00F5 91800102 LDS R24,global_voltage_counter
00F7 91900103 LDS R25,global_voltage_counter+1
00F9 9602 ADIW R24,2
00FA 93900103 STS global_voltage_counter+1,R25
00FC 93800102 STS global_voltage_counter,R24
(0109) // global_motor_counter+=2;
(0110) break;
(0111) // case 4://保存操作电压
(0112) // SRAM_1M_8_WRITE(global_voltage_counter,temp1);//高位字节
(0113) // SRAM_1M_8_WRITE(global_voltage_counter+1,temp2);//低位字节
(0114) // global_voltage_counter+=2;
(0115) // break;
(0116) default:
(0117) break;
(0118) }
(0119) //计数器自加
(0120) global_ad_counter++;
00FE 91800126 LDS R24,global_ad_counter
0100 91900127 LDS R25,global_ad_counter+1
0102 9601 ADIW R24,1
0103 93900127 STS global_ad_counter+1,R25
0105 93800126 STS global_ad_counter,R24
(0121) }
(0122) //如果是检测动作是否开始的采样
(0123) if(global_sample_mode_flag==0x00)
0107 90200122 LDS R2,global_sample_mode_flag
0109 90300123 LDS R3,global_sample_mode_flag+1
010B 2022 TST R2
010C F009 BEQ 0x010E
010D C07E RJMP 0x018C
010E 2033 TST R3
010F F009 BEQ 0x0111
0110 C07B RJMP 0x018C
(0124) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -