📄 door1.lst
字号:
(0117) }
(0118) }
(0119) return(crc);
00BC 91000076 LDS R16,crc
00BE D0AC RCALL pop_gset3
00BF 9508 RET
(0120) }
(0121)
(0122)
(0123) //地址计算
(0124) void addr_f(void)
(0125) {
(0126) unsigned char i;
(0127) unsigned char j;
(0128) data[0]=EEPROM_read(0);
_addr_f:
j --> Y+1
i --> Y+1
00C0 2700 CLR R16
00C1 D09A RCALL _EEPROM_read
00C2 9300006A STS data,R16
(0129) data[1]=EEPROM_read(1); //EEPORM内地址,最大FFFF
00C4 E001 LDI R16,1
00C5 D096 RCALL _EEPROM_read
00C6 9300006B STS data+1,R16
(0130) data[2]=0;
00C8 2422 CLR R2
00C9 9220006C STS data+2,R2
(0131) if(GetADC()<327) data[2]|=0x80;
00CB DF9F RCALL _GetADC
00CC 3407 CPI R16,0x47
00CD E0E1 LDI R30,1
00CE 071E CPC R17,R30
00CF F428 BCC 0x00D5
00D0 9180006C LDS R24,data+2
00D2 6880 ORI R24,0x80
00D3 9380006C STS data+2,R24
(0132) if(powbit) data[2]|=0x40;
00D5 90200066 LDS R2,powbit
00D7 2022 TST R2
00D8 F029 BEQ 0x00DE
00D9 9180006C LDS R24,data+2
00DB 6480 ORI R24,0x40
00DC 9380006C STS data+2,R24
(0133) data[2]+=CRC3(data,3);
00DE E023 LDI R18,3
00DF E60A LDI R16,0x6A
00E0 E010 LDI R17,0
00E1 DF9B RCALL _CRC3
00E2 9020006C LDS R2,data+2
00E4 0E20 ADD R2,R16
00E5 9220006C STS data+2,R2
00E7 9508 RET
(0134) }
(0135) //要发送的数据1
(0136) void data_1(void)
(0137) {
(0138) RF_OFF;
_data_1:
00E8 98C1 CBI 0x18,1
(0139) del(700);
00E9 EB0C LDI R16,0xBC
00EA E012 LDI R17,2
00EB DF48 RCALL _del
(0140) RF_ON;
00EC 9AC1 SBI 0x18,1
(0141) del(350);
00ED E50E LDI R16,0x5E
00EE E011 LDI R17,1
00EF DF44 RCALL _del
00F0 9508 RET
(0142) }
(0143) //要发送的数据0
(0144) void data_0(void)
(0145) {
(0146) RF_OFF;
_data_0:
00F1 98C1 CBI 0x18,1
(0147) del(350);
00F2 E50E LDI R16,0x5E
00F3 E011 LDI R17,1
00F4 DF3F RCALL _del
(0148) RF_ON;
00F5 9AC1 SBI 0x18,1
(0149) del(700);
00F6 EB0C LDI R16,0xBC
00F7 E012 LDI R17,2
00F8 DF3B RCALL _del
00F9 9508 RET
_rf:
i --> R20
j --> R10
dataf --> R22
00FA D076 RCALL push_gset3
00FB 2F60 MOV R22,R16
00FC 2F71 MOV R23,R17
(0150) }
(0151) //发送数据
(0152) void rf (unsigned char *dataf)
(0153) {
(0154) unsigned char i;
(0155) unsigned char j;
(0156) RF_ON; //起始位
00FD 9AC1 SBI 0x18,1
(0157) del(350);
00FE E50E LDI R16,0x5E
00FF E011 LDI R17,1
0100 DF33 RCALL _del
(0158) for(i=0;i<3;i++)
0101 2744 CLR R20
0102 C01B RJMP 0x011E
(0159) { for(j=0;j<8;j++)
0103 24AA CLR R10
0104 C013 RJMP 0x0118
(0160) {
(0161) if(*dataf& (0x80>>j)) //如果该位为1
0105 2D2A MOV R18,R10
0106 2733 CLR R19
0107 E800 LDI R16,0x80
0108 E010 LDI R17,0
0109 D058 RCALL asr16
010A 2FE6 MOV R30,R22
010B 2FF7 MOV R31,R23
010C 8020 LDD R2,Z+0
010D 2433 CLR R3
010E 2220 AND R2,R16
010F 2231 AND R3,R17
0110 2022 TST R2
0111 F411 BNE 0x0114
0112 2033 TST R3
0113 F011 BEQ 0x0116
(0162) data_1();
0114 DFD3 RCALL _data_1
0115 C001 RJMP 0x0117
(0163) else data_0();
0116 DFDA RCALL _data_0
0117 94A3 INC R10
0118 2D8A MOV R24,R10
0119 3088 CPI R24,0x8
011A F350 BCS 0x0105
(0164) }
(0165) dataf++;
011B 5F6F SUBI R22,0xFF
011C 4F7F SBCI R23,0xFF
011D 9543 INC R20
011E 3043 CPI R20,3
011F F318 BCS 0x0103
(0166) }
(0167) RF_OFF;
0120 98C1 CBI 0x18,1
0121 D049 RCALL pop_gset3
0122 9508 RET
(0168) }
(0169) //主函数!不用解释了
(0170) void main()
(0171) {
(0172)
(0173) unsigned char i;
(0174) //以下初始化硬件
(0175) port_init(); //端口初始化
_main:
i --> R20
0123 DF31 RCALL _port_init
(0176) adc_init(); //ADC初始化
0124 DF35 RCALL _adc_init
(0177) watchdog_init();//初始化看门狗
0125 DF3F RCALL _watchdog_init
(0178) POWER_ON;
0126 9AC2 SBI 0x18,2
(0179) if(!(PINB&0X10)) powbit=1;
0127 99B4 SBIC 0x16,4
0128 C003 RJMP 0x012C
0129 E081 LDI R24,1
012A 93800066 STS powbit,R24
(0180) delay(1);
012C E001 LDI R16,1
012D E010 LDI R17,0
012E DF17 RCALL _delay
012F C022 RJMP 0x0152
(0181)
(0182) while(1)
(0183) {
(0184) WDR();
0130 95A8 WDR
(0185) LED_ON;
0131 9AC0 SBI 0x18,0
(0186) delay(100);
0132 E604 LDI R16,0x64
0133 E010 LDI R17,0
0134 DF11 RCALL _delay
(0187) addr_f();
0135 DF8A RCALL _addr_f
(0188) for(i=0;i<50;i++)
0136 2744 CLR R20
0137 C013 RJMP 0x014B
(0189) {
(0190) dataf[0]=data[0];
0138 9020006A LDS R2,data
013A 92200067 STS dataf,R2
(0191) dataf[1]=data[1];
013C 9020006B LDS R2,data+1
013E 92200068 STS dataf+1,R2
(0192) dataf[2]=data[2];
0140 9020006C LDS R2,data+2
0142 92200069 STS dataf+2,R2
(0193) rf(dataf);
0144 E607 LDI R16,0x67
0145 E010 LDI R17,0
0146 DFB3 RCALL _rf
(0194) delay(3);
0147 E003 LDI R16,3
0148 E010 LDI R17,0
0149 DEFC RCALL _delay
014A 9543 INC R20
014B 3342 CPI R20,0x32
014C F358 BCS 0x0138
(0195) }
(0196) POWER_OFF;
014D 98C2 CBI 0x18,2
(0197) delay(100);
014E E604 LDI R16,0x64
014F E010 LDI R17,0
0150 DEF5 RCALL _delay
(0198) LED_OFF;
0151 98C0 CBI 0x18,0
0152 CFDD RJMP 0x0130
0153 9508 RET
FILE: E:\abol\file\EMD\programme\EM-PB-2129\eeprom.c
(0001)
(0002) /* 文件名称:main.c 主函数 */
(0003) /* 编译:ICC-AVR application builder */
(0004)
(0005)
(0006)
(0007) #include <iot13v.h>
(0008) #include <macros.h>
(0009) #include "eeprom.h"
(0010)
(0011)
(0012)
(0013) /* EEPROM 写入 */
(0014) void EEPROM_write(unsigned char uiaddress,unsigned char ucdata)
(0015) {
(0016) WDR();
_EEPROM_write:
ucdata --> R18
uiaddress --> R16
0154 95A8 WDR
(0017) while(EECR&(1<<EEWE)); /*等待上一次写操作结束*/
0155 99E1 SBIC 0x1C,1
0156 CFFE RJMP 0x0155
(0018) EEAR=uiaddress; /*设置地址寄存器*/
0157 BB0E OUT 0x1E,R16
(0019) EEDR=ucdata;
0158 BB2D OUT 0x1D,R18
(0020) EECR|=(1<<EEMWE);
0159 9AE2 SBI 0x1C,2
(0021) EECR|=(1<<EEWE); /*置位EEMWE 置位EEWE以启动写操作*/
015A 9AE1 SBI 0x1C,1
015B 9508 RET
(0022) }
(0023)
(0024) /* EEPROM 读取 */
(0025) unsigned char EEPROM_read(unsigned char uiaddress)
(0026) {
(0027) while(EECR&(1<<EEWE)); /*等待上一次写操作结束*/
_EEPROM_read:
uiaddress --> R16
015C 99E1 SBIC 0x1C,1
015D CFFE RJMP _EEPROM_read
(0028) EEAR=uiaddress; /*设置地址寄存器*/
015E BB0E OUT 0x1E,R16
(0029) EECR|=(1<<EERE); /*置位EEMWE 置位EEWE以启动读操作*/
015F 9AE0 SBI 0x1C,0
(0030) return EEDR; /*自数据存贮器返回数据*/
FILE: <library>
0160 B30D IN R16,0x1D
0161 9508 RET
asr16:
0162 2322 TST R18
0163 F021 BEQ 0x0168
0164 9515 ASR R17
0165 9507 ROR R16
0166 952A DEC R18
0167 CFFA RJMP asr16
0168 9508 RET
pop_gset2:
0169 E0E2 LDI R30,2
016A C00E RJMP pop
pop_gset3:
016B E0E4 LDI R30,4
016C C00C RJMP pop
push_gset5:
016D 92FA ST R15,-Y
016E 92EA ST R14,-Y
push_gset4:
016F 92DA ST R13,-Y
0170 92CA ST R12,-Y
push_gset3:
0171 92BA ST R11,-Y
0172 92AA ST R10,-Y
push_gset2:
0173 937A ST R23,-Y
0174 936A ST R22,-Y
push_gset1:
0175 935A ST R21,-Y
0176 934A ST R20,-Y
0177 9508 RET
pop_gset1:
0178 E0E1 LDI R30,1
pop:
0179 9149 LD R20,Y+
017A 9159 LD R21,Y+
017B FDE0 SBRC R30,0
017C 9508 RET
017D 9169 LD R22,Y+
017E 9179 LD R23,Y+
017F FDE1 SBRC R30,1
0180 9508 RET
0181 90A9 LD R10,Y+
0182 90B9 LD R11,Y+
0183 FDE2 SBRC R30,2
0184 9508 RET
0185 90C9 LD R12,Y+
0186 90D9 LD R13,Y+
0187 FDE3 SBRC R30,3
0188 9508 RET
0189 90E9 LD R14,Y+
018A 90F9 LD R15,Y+
018B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -