📄 door1.lst
字号:
__start:
__text_start:
0014 E9CF LDI R28,0x9F
0015 E0D0 LDI R29,0
0016 BFCD OUT 0x3D,R28
0017 BFDE OUT 0x3E,R29
0018 51C0 SUBI R28,0x10
0019 40D0 SBCI R29,0
001A EA0A LDI R16,0xAA
001B 8308 STD Y+0,R16
001C 2400 CLR R0
001D E6E7 LDI R30,0x67
001E E0F0 LDI R31,0
001F E010 LDI R17,0
0020 37E7 CPI R30,0x77
0021 07F1 CPC R31,R17
0022 F011 BEQ 0x0025
0023 9201 ST R0,Z+
0024 CFFB RJMP 0x0020
0025 8300 STD Z+0,R16
0026 E2E0 LDI R30,0x20
0027 E0F0 LDI R31,0
0028 E6A0 LDI R26,0x60
0029 E0B0 LDI R27,0
002A E010 LDI R17,0
002B 32E7 CPI R30,0x27
002C 07F1 CPC R31,R17
002D F021 BEQ 0x0032
002E 95C8 LPM
002F 9631 ADIW R30,1
0030 920D ST R0,X+
0031 CFF9 RJMP 0x002B
0032 D0F0 RCALL _main
_exit:
0033 CFFF RJMP _exit
FILE: E:\abol\file\EMD\programme\EM-PB-2129\delay.c
(0001)
(0002) /* 文件名称:main.c 主函数 */
(0003) /* 编译:ICC-AVR application builder */
(0004)
(0005)
(0006)
(0007) #include <iot13v.h>
(0008) #include <macros.h>
(0009) #include "delay.h"
(0010) #define xtal 9.8
(0011)
(0012) /* 微秒级延时程序 */
(0013) void del(int time)
(0014) {
(0015) do
(0016) {
(0017) time--;
_del:
time --> R16
0034 5001 SUBI R16,1
0035 4010 SBCI R17,0
(0018) }
(0019) while (time>1);
0036 E081 LDI R24,1
0037 E090 LDI R25,0
0038 1780 CP R24,R16
0039 0791 CPC R25,R17
003A F3CC BLT 0x0034
003B 9508 RET
(0020) }
(0021)
(0022) /* 毫秒级延时程序 */
(0023) void delay_1ms(void)
(0024) { unsigned int i1;
(0025) for(i1=1;i1<(unsigned int)(xtal*143-2);i1++)
_delay_1ms:
i1 --> R16
003C E001 LDI R16,1
003D E010 LDI R17,0
003E C002 RJMP 0x0041
003F 5F0F SUBI R16,0xFF
0040 4F1F SBCI R17,0xFF
0041 3707 CPI R16,0x77
0042 E0E5 LDI R30,5
0043 071E CPC R17,R30
0044 F3D0 BCS 0x003F
0045 9508 RET
_delay:
i2 --> R20
n --> R22
0046 D12C RCALL push_gset2
0047 2F60 MOV R22,R16
0048 2F71 MOV R23,R17
(0026) ;
(0027) }
(0028)
(0029) void delay(unsigned int n)
(0030) {
(0031) unsigned int i2=0;
0049 2744 CLR R20
004A 2755 CLR R21
004B C004 RJMP 0x0050
(0032) while(i2<n)
(0033) {delay_1ms();
004C DFEF RCALL _delay_1ms
(0034) i2++; WDR();
004D 5F4F SUBI R20,0xFF
004E 4F5F SBCI R21,0xFF
004F 95A8 WDR
0050 1746 CP R20,R22
0051 0757 CPC R21,R23
0052 F3C8 BCS 0x004C
0053 D115 RCALL pop_gset2
0054 9508 RET
FILE: E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
(0001) #include <iot13v.h>
(0002) #include <macros.h>
(0003) #include "delay.h"
(0004) #include "eeprom.h"
(0005) #define uchar unsigned char
(0006) #define unit unsigned int
(0007) #define ulong unsigned long
(0008) #define xtal 9.8
(0009)
(0010) int mark=1500;
(0011)
(0012) unsigned int ai,aa;
(0013) unsigned char crc,i,j,flag=0,flagh=0,flagl,acount=0,bcount=0,powbit=0;
(0014) unsigned char DECODER_CODE1,DECODER_CODE0;
(0015) unsigned char data[3];
(0016) unsigned char dataf[3];
(0017)
(0018)
(0019) //PB3是控制输出端口!
(0020) #define POWER_ON PORTB |= (1 << PB2) //打开输出
(0021) #define POWER_OFF PORTB &= ~(1 << PB2) //关闭输出
(0022) #define LED_ON PORTB |= (1 << PB0) //打开输出
(0023) #define LED_OFF PORTB &= ~(1 << PB0) //关闭输出
(0024) #define RF_ON PORTB |= (1 << PB1) //打开输出
(0025) #define RF_OFF PORTB &= ~(1 << PB1) //关闭输出
(0026)
(0027) //端口初始化
(0028) void port_init(void)
(0029) {
(0030) PORTB = 0x38; //输入设置有上拉电阻,输出预设低电平
_port_init:
0055 E388 LDI R24,0x38
0056 BB88 OUT 0x18,R24
(0031) DDRB = 0x07; //PB4输入,PB3输出
0057 E087 LDI R24,7
0058 BB87 OUT 0x17,R24
0059 9508 RET
(0032) }
(0033) //转换初始化
(0034) void adc_init(void)
(0035) {
(0036) ADCSRA=0x00; //vcc作为模拟参考电压
_adc_init:
005A 2422 CLR R2
005B B826 OUT 0x06,R2
(0037)
(0038) ADCMUX = 0x03; //选择ADC2通道
005C E083 LDI R24,3
005D B987 OUT 0x07,R24
(0039) ACSR = (1 << ACD);//禁用模拟比较器
005E E880 LDI R24,0x80
005F E090 LDI R25,0
0060 B999 OUT 0x09,R25
0061 B988 OUT 0x08,R24
(0040)
(0041) //使能ADC,终端允许,自由模式,时钟CLK/8
(0042) //0x86允许转换ADEN,ADSC,时钟128分频 75KHz@9.6MHz system clock
(0043) ADCSRA = (1 << ADEN) | 0x07;//| ( 1 << ADATE )
0062 E887 LDI R24,0x87
0063 B986 OUT 0x06,R24
0064 9508 RET
(0044)
(0045) }
(0046) //看门狗初始化
(0047) void watchdog_init(void)
(0048) {
(0049) WDR(); //this prevents a timout on enabling
_watchdog_init:
0065 95A8 WDR
(0050) WDTCR=(1<<WDCE)|(1<<WDE);
0066 E188 LDI R24,0x18
0067 BD81 OUT 0x21,R24
(0051) WDTCR=(0<<WDE);
0068 2422 CLR R2
0069 BC21 OUT 0x21,R2
006A 9508 RET
_GetADC:
adc_value --> R20
006B D109 RCALL push_gset1
(0052) }
(0053)
(0054) //从AD口读入一个值
(0055) unsigned int GetADC(void)
(0056) {
(0057)
(0058) unsigned int adc_value;
(0059)
(0060) ADC = 0;
006C 2422 CLR R2
006D 2433 CLR R3
006E B835 OUT 0x05,R3
006F B824 OUT 0x04,R2
(0061) ADCSRA |= (1 << ADSC); //启动AD转换
0070 9A36 SBI 0x06,6
(0062)
(0063) del(10);
0071 E00A LDI R16,0xA
0072 E010 LDI R17,0
0073 DFC0 RCALL _del
(0064) while(!(ADCSRA&(BIT(ADIF))));////ADIF=4, 表示若ADCSR的第5位置为1,则中断AD转换
0074 9B34 SBIS 0x06,4
0075 CFFE RJMP 0x0074
(0065) //loop_until_bit_is_set(ADCSRA, ADIF);//等待AD转换结束
(0066)
(0067) ADCSRA |= (1 << ADIF); //写1清除标志位
0076 9A34 SBI 0x06,4
(0068)
(0069) adc_value = ADC; //读转换结果
0077 B144 IN R20,0x04
0078 B155 IN R21,0x05
(0070)
(0071) return adc_value;
0079 2F04 MOV R16,R20
007A 2F15 MOV R17,R21
007B D0FC RCALL pop_gset1
007C 9508 RET
_CRC3:
i --> Y+1
j --> R22
len --> R10
data --> R20
007D D0F3 RCALL push_gset3
007E 2EA2 MOV R10,R18
007F 2F40 MOV R20,R16
0080 2F51 MOV R21,R17
(0072) }
(0073)
(0074)
(0075) /******************************************
(0076) CRC3校验函数
(0077) 输 入: ptr需要进行校验的数据包
(0078) len需要校验的数据包字节数
(0079) 输 出: 校验码;
(0080) 调 用: 无;
(0081) 被调用: 从机协议打包函数;
(0082) 功 能: 将一给定的数据包进行CRC3校验给调用者返回校验码
(0083) ******************************************/
(0084) unsigned char CRC3(unsigned char *data, unsigned char len)
(0085) {
(0086) unsigned char i;
(0087) unsigned char j;
(0088) j = 0;
0081 2766 CLR R22
(0089) crc=0;
0082 2422 CLR R2
0083 92200076 STS crc,R2
0085 C034 RJMP 0x00BA
(0090)
(0091) while(len)
(0092) {
(0093) /*多项式除法*/
(0094) if(*data & (0x80>>j)) //如果该位为1
0086 2F26 MOV R18,R22
0087 2733 CLR R19
0088 E800 LDI R16,0x80
0089 E010 LDI R17,0
008A D0D7 RCALL asr16
008B 2FE4 MOV R30,R20
008C 2FF5 MOV R31,R21
008D 8020 LDD R2,Z+0
008E 2433 CLR R3
008F 2220 AND R2,R16
0090 2231 AND R3,R17
0091 2022 TST R2
0092 F411 BNE 0x0095
0093 2033 TST R3
0094 F029 BEQ 0x009A
(0095) crc |= 0x01; //则在余数尾部添1否则添0
0095 91800076 LDS R24,crc
0097 6081 ORI R24,1
0098 93800076 STS crc,R24
(0096) if(crc >= 0x8)
009A 91800076 LDS R24,crc
009C 3088 CPI R24,0x8
009D F030 BCS 0x00A4
(0097) crc ^= 11;
009E E08B LDI R24,0xB
009F 90200076 LDS R2,crc
00A1 2628 EOR R2,R24
00A2 92200076 STS crc,R2
(0098) crc <<= 1;
00A4 90200076 LDS R2,crc
00A6 0C22 LSL R2
00A7 92200076 STS crc,R2
(0099) j++;
00A9 9563 INC R22
(0100) if(len==1)
00AA 2D8A MOV R24,R10
00AB 3081 CPI R24,1
00AC F439 BNE 0x00B4
(0101) {
(0102) if(j == 7)
00AD 3067 CPI R22,7
00AE F459 BNE 0x00BA
(0103) {
(0104) j = 0;
00AF 2766 CLR R22
(0105) data++;
00B0 5F4F SUBI R20,0xFF
00B1 4F5F SBCI R21,0xFF
(0106) len--;
00B2 94AA DEC R10
(0107) }
(0108) }
00B3 C006 RJMP 0x00BA
(0109) else
(0110) {
(0111) if(j == 8)
00B4 3068 CPI R22,0x8
00B5 F421 BNE 0x00BA
(0112) {
(0113) j = 0;
00B6 2766 CLR R22
(0114) data++;
00B7 5F4F SUBI R20,0xFF
00B8 4F5F SBCI R21,0xFF
(0115) len--;
00B9 94AA DEC R10
00BA 20AA TST R10
00BB F651 BNE 0x0086
(0116) }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -