📄 doo1.lis
字号:
.module DOO1.c
.area data(ram, con, rel)
0000 _mark::
0000 .blkb 2
.area idata
0000 DC05 .word 1500
.area data(ram, con, rel)
0002 .dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
0002 .dbsym e mark _mark I
0002 _flag::
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
0003 .dbsym e flag _flag c
0003 _flagh::
0003 .blkb 1
.area idata
0003 00 .byte 0
.area data(ram, con, rel)
0004 .dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
0004 .dbsym e flagh _flagh c
0004 _acount::
0004 .blkb 1
.area idata
0004 00 .byte 0
.area data(ram, con, rel)
0005 .dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
0005 .dbsym e acount _acount c
0005 _bcount::
0005 .blkb 1
.area idata
0005 00 .byte 0
.area data(ram, con, rel)
0006 .dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
0006 .dbsym e bcount _bcount c
0006 _powbit::
0006 .blkb 1
.area idata
0006 00 .byte 0
.area data(ram, con, rel)
0007 .dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
0007 .dbsym e powbit _powbit c
.area text(rom, con, rel)
0000 .dbfile E:\abol\file\EMD\programme\EM-PB-2129\DOO1.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 29
0000 ; #include <iot13v.h>
0000 ; #include <macros.h>
0000 ; #include "delay.h"
0000 ; #include "eeprom.h"
0000 ; #define uchar unsigned char
0000 ; #define unit unsigned int
0000 ; #define ulong unsigned long
0000 ; #define xtal 9.8
0000 ;
0000 ; int mark=1500;
0000 ;
0000 ; unsigned int ai,aa;
0000 ; unsigned char crc,i,j,flag=0,flagh=0,flagl,acount=0,bcount=0,powbit=0;
0000 ; unsigned char DECODER_CODE1,DECODER_CODE0;
0000 ; unsigned char data[3];
0000 ; unsigned char dataf[3];
0000 ;
0000 ;
0000 ; //PB3是控制输出端口!
0000 ; #define POWER_ON PORTB |= (1 << PB2) //打开输出
0000 ; #define POWER_OFF PORTB &= ~(1 << PB2) //关闭输出
0000 ; #define LED_ON PORTB |= (1 << PB0) //打开输出
0000 ; #define LED_OFF PORTB &= ~(1 << PB0) //关闭输出
0000 ; #define RF_ON PORTB |= (1 << PB1) //打开输出
0000 ; #define RF_OFF PORTB &= ~(1 << PB1) //关闭输出
0000 ;
0000 ; //端口初始化
0000 ; void port_init(void)
0000 ; {
0000 .dbline 30
0000 ; PORTB = 0x38; //输入设置有上拉电阻,输出预设低电平
0000 88E3 ldi R24,56
0002 88BB out 0x18,R24
0004 .dbline 31
0004 ; DDRB = 0x07; //PB4输入,PB3输出
0004 87E0 ldi R24,7
0006 87BB out 0x17,R24
0008 .dbline -2
0008 L1:
0008 .dbline 0 ; func end
0008 0895 ret
000A .dbend
000A .dbfunc e adc_init _adc_init fV
.even
000A _adc_init::
000A .dbline -1
000A .dbline 35
000A ; }
000A ; //转换初始化
000A ; void adc_init(void)
000A ; {
000A .dbline 36
000A ; ADCSRA=0x00; //vcc作为模拟参考电压
000A 2224 clr R2
000C 26B8 out 0x6,R2
000E .dbline 38
000E ;
000E ; ADCMUX = 0x03; //选择ADC2通道
000E 83E0 ldi R24,3
0010 87B9 out 0x7,R24
0012 .dbline 39
0012 ; ACSR = (1 << ACD);//禁用模拟比较器
0012 80E8 ldi R24,128
0014 90E0 ldi R25,0
0016 99B9 out 0x9,R25
0018 88B9 out 0x8,R24
001A .dbline 43
001A ;
001A ; //使能ADC,终端允许,自由模式,时钟CLK/8
001A ; //0x86允许转换ADEN,ADSC,时钟128分频 75KHz@9.6MHz system clock
001A ; ADCSRA = (1 << ADEN) | 0x07;//| ( 1 << ADATE )
001A 87E8 ldi R24,135
001C 86B9 out 0x6,R24
001E .dbline -2
001E L2:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e watchdog_init _watchdog_init fV
.even
0020 _watchdog_init::
0020 .dbline -1
0020 .dbline 48
0020 ;
0020 ; }
0020 ; //看门狗初始化
0020 ; void watchdog_init(void)
0020 ; {
0020 .dbline 49
0020 ; WDR(); //this prevents a timout on enabling
0020 A895 wdr
0022 .dbline 50
0022 ; WDTCR=(1<<WDCE)|(1<<WDE);
0022 88E1 ldi R24,24
0024 81BD out 0x21,R24
0026 .dbline 51
0026 ; WDTCR=(0<<WDE);
0026 2224 clr R2
0028 21BC out 0x21,R2
002A .dbline -2
002A L3:
002A .dbline 0 ; func end
002A 0895 ret
002C .dbend
002C .dbfunc e GetADC _GetADC fi
002C ; adc_value -> R20,R21
.even
002C _GetADC::
002C 00D0 rcall push_gset1
002E .dbline -1
002E .dbline 56
002E ; }
002E ;
002E ; //从AD口读入一个值
002E ; unsigned int GetADC(void)
002E ; {
002E .dbline 60
002E ;
002E ; unsigned int adc_value;
002E ;
002E ; ADC = 0;
002E 2224 clr R2
0030 3324 clr R3
0032 35B8 out 0x5,R3
0034 24B8 out 0x4,R2
0036 .dbline 61
0036 ; ADCSRA |= (1 << ADSC); //启动AD转换
0036 369A sbi 0x6,6
0038 .dbline 63
0038 ;
0038 ; del(10);
0038 0AE0 ldi R16,10
003A 10E0 ldi R17,0
003C 00D0 rcall _del
003E L5:
003E .dbline 64
003E L6:
003E .dbline 64
003E ; while(!(ADCSRA&(BIT(ADIF))));////ADIF=4, 表示若ADCSR的第5位置为1,则中断AD转换
003E 349B sbis 0x6,4
0040 FECF rjmp L5
0042 .dbline 67
0042 ; //loop_until_bit_is_set(ADCSRA, ADIF);//等待AD转换结束
0042 ;
0042 ; ADCSRA |= (1 << ADIF); //写1清除标志位
0042 349A sbi 0x6,4
0044 .dbline 69
0044 ;
0044 ; adc_value = ADC; //读转换结果
0044 44B1 in R20,0x4
0046 55B1 in R21,0x5
0048 .dbline 71
0048 ;
0048 ; return adc_value;
0048 042F mov R16,R20
004A 152F mov R17,R21
004C .dbline -2
004C L4:
004C 00D0 rcall pop_gset1
004E .dbline 0 ; func end
004E 0895 ret
0050 .dbsym r adc_value 20 i
0050 .dbend
0050 .dbfunc e CRC3 _CRC3 fc
0050 ; i -> <dead>
0050 ; j -> R22
0050 ; len -> R10
0050 ; data -> R20,R21
.even
0050 _CRC3::
0050 00D0 rcall push_gset3
0052 A22E mov R10,R18
0054 402F mov R20,R16
0056 512F mov R21,R17
0058 .dbline -1
0058 .dbline 85
0058 ; }
0058 ;
0058 ;
0058 ; /******************************************
0058 ; CRC3校验函数
0058 ; 输 入: ptr需要进行校验的数据包
0058 ; len需要校验的数据包字节数
0058 ; 输 出: 校验码;
0058 ; 调 用: 无;
0058 ; 被调用: 从机协议打包函数;
0058 ; 功 能: 将一给定的数据包进行CRC3校验给调用者返回校验码
0058 ; ******************************************/
0058 ; unsigned char CRC3(unsigned char *data, unsigned char len)
0058 ; {
0058 .dbline 88
0058 ; unsigned char i;
0058 ; unsigned char j;
0058 ; j = 0;
0058 6627 clr R22
005A .dbline 89
005A ; crc=0;
005A 2224 clr R2
005C 20920F00 sts _crc,R2
0060 34C0 rjmp L10
0062 L9:
0062 .dbline 92
0062 ;
0062 ; while(len)
0062 ; {
0062 .dbline 94
0062 ; /*多项式除法*/
0062 ; if(*data & (0x80>>j)) //如果该位为1
0062 262F mov R18,R22
0064 3327 clr R19
0066 00E8 ldi R16,128
0068 10E0 ldi R17,0
006A 00D0 rcall asr16
006C E42F mov R30,R20
006E F52F mov R31,R21
0070 2080 ldd R2,z+0
0072 3324 clr R3
0074 2022 and R2,R16
0076 3122 and R3,R17
0078 2220 tst R2
007A 11F4 brne X0
007C 3320 tst R3
007E 29F0 breq L12
0080 X0:
0080 .dbline 95
0080 ; crc |= 0x01; //则在余数尾部添1否则添0
0080 80910F00 lds R24,_crc
0084 8160 ori R24,1
0086 80930F00 sts _crc,R24
008A L12:
008A .dbline 96
008A ; if(crc >= 0x8)
008A 80910F00 lds R24,_crc
008E 8830 cpi R24,8
0090 30F0 brlo L14
0092 .dbline 97
0092 ; crc ^= 11;
0092 8BE0 ldi R24,11
0094 20900F00 lds R2,_crc
0098 2826 eor R2,R24
009A 20920F00 sts _crc,R2
009E L14:
009E .dbline 98
009E ; crc <<= 1;
009E 20900F00 lds R2,_crc
00A2 220C lsl R2
00A4 20920F00 sts _crc,R2
00A8 .dbline 99
00A8 ; j++;
00A8 6395 inc R22
00AA .dbline 100
00AA ; if(len==1)
00AA 8A2D mov R24,R10
00AC 8130 cpi R24,1
00AE 39F4 brne L16
00B0 .dbline 101
00B0 ; {
00B0 .dbline 102
00B0 ; if(j == 7)
00B0 6730 cpi R22,7
00B2 59F4 brne L17
00B4 .dbline 103
00B4 ; {
00B4 .dbline 104
00B4 ; j = 0;
00B4 6627 clr R22
00B6 .dbline 105
00B6 ; data++;
00B6 4F5F subi R20,255 ; offset = 1
00B8 5F4F sbci R21,255
00BA .dbline 106
00BA ; len--;
00BA AA94 dec R10
00BC .dbline 107
00BC ; }
00BC .dbline 108
00BC ; }
00BC 06C0 rjmp L17
00BE L16:
00BE .dbline 110
00BE ; else
00BE ; {
00BE .dbline 111
00BE ; if(j == 8)
00BE 6830 cpi R22,8
00C0 21F4 brne L20
00C2 .dbline 112
00C2 ; {
00C2 .dbline 113
00C2 ; j = 0;
00C2 6627 clr R22
00C4 .dbline 114
00C4 ; data++;
00C4 4F5F subi R20,255 ; offset = 1
00C6 5F4F sbci R21,255
00C8 .dbline 115
00C8 ; len--;
00C8 AA94 dec R10
00CA .dbline 116
00CA ; }
00CA L20:
00CA .dbline 117
00CA ; }
00CA L17:
00CA .dbline 118
00CA L10:
00CA .dbline 91
00CA AA20 tst R10
00CC 51F6 brne L9
00CE .dbline 119
00CE ; }
00CE ; return(crc);
00CE 00910F00 lds R16,_crc
00D2 .dbline -2
00D2 L8:
00D2 00D0 rcall pop_gset3
00D4 .dbline 0 ; func end
00D4 0895 ret
00D6 .dbsym l i 1 c
00D6 .dbsym r j 22 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -