📄 210.lis
字号:
.module _210.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-210\210.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-210\210.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-210\210.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-210\210.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-210\210.c
0006 .dbsym e bcount _bcount c
.area text(rom, con, rel)
0000 .dbfile E:\abol\file\EMD\programme\EM-PB-210\210.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 27
0000 ; #include <iot13v.h>
0000 ; #include <macros.h>
0000 ; #define uchar unsigned char
0000 ; #define unit unsigned int
0000 ; #define ulong unsigned long
0000 ; #define xtal 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,PINBS;
0000 ; unsigned char DECODER_CODE1,DECODER_CODE0;
0000 ; unsigned char data[3];
0000 ; unsigned char dataf[3];
0000 ;
0000 ;
0000 ; //PB3是控制输出端口!
0000 ; #define RF_ON PORTB |= (1 << PB2) //打开输出
0000 ; #define RF_OFF PORTB &= ~(1 << PB2) //关闭输出
0000 ; #define EN_ON PORTB |= (1 << PB1) //打开输出
0000 ; #define EN_OFF PORTB &= ~(1 << PB1) //关闭输出
0000 ; #define DOOR_IN PINTB =BIT(0)
0000 ;
0000 ;
0000 ; //端口初始化
0000 ; void port_init(void)
0000 ; {
0000 .dbline 28
0000 ; PORTB = 0x29; //输入设置有上拉电阻,输出预设低电平
0000 89E2 ldi R24,41
0002 88BB out 0x18,R24
0004 .dbline 29
0004 ; DDRB = 0x0e; //PB4输出,PB3输入
0004 8EE0 ldi R24,14
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 33
000A ; }
000A ; //转换初始化
000A ; void adc_init(void)
000A ; {
000A .dbline 34
000A ; ADCSRA=0x00; //
000A 2224 clr R2
000C 26B8 out 0x6,R2
000E .dbline 36
000E ;
000E ; ADCMUX = 0x42; //片内作为模拟参考电压 选择ADC2通道
000E 82E4 ldi R24,66
0010 87B9 out 0x7,R24
0012 .dbline 37
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 41
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 EEPROM_write _EEPROM_write fV
0020 ; ucdata -> R18
0020 ; uiaddress -> R16
.even
0020 _EEPROM_write::
0020 .dbline -1
0020 .dbline 53
0020 ;
0020 ; }
0020 ; /*//看门狗初始化
0020 ; void watchdog_init(void)
0020 ; {
0020 ; WDR(); //this prevents a timout on enabling
0020 ; WDTCR=(1<<WDCE)|(1<<WDE);
0020 ; WDTCR=(0<<WDE);
0020 ; }*/
0020 ; /* EEPROM 写入 */
0020 ; void EEPROM_write(unsigned char uiaddress,unsigned char ucdata)
0020 ; {
0020 .dbline 54
0020 ; WDR();
0020 A895 wdr
0022 L4:
0022 .dbline 55
0022 L5:
0022 .dbline 55
0022 ; while(EECR&(1<<EEWE)); /*等待上一次写操作结束*/
0022 E199 sbic 0x1c,1
0024 FECF rjmp L4
0026 .dbline 56
0026 ; EEAR=uiaddress; /*设置地址寄存器*/
0026 0EBB out 0x1e,R16
0028 .dbline 57
0028 ; EEDR=ucdata;
0028 2DBB out 0x1d,R18
002A .dbline 58
002A ; EECR|=(1<<EEMWE);
002A E29A sbi 0x1c,2
002C .dbline 59
002C ; EECR|=(1<<EEWE); /*置位EEMWE 置位EEWE以启动写操作*/
002C E19A sbi 0x1c,1
002E .dbline -2
002E L3:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbsym r ucdata 18 c
0030 .dbsym r uiaddress 16 c
0030 .dbend
0030 .dbfunc e EEPROM_read _EEPROM_read fc
0030 ; uiaddress -> R16
.even
0030 _EEPROM_read::
0030 .dbline -1
0030 .dbline 64
0030 ; }
0030 ;
0030 ; /* EEPROM 读取 */
0030 ; unsigned char EEPROM_read(unsigned char uiaddress)
0030 ; {
0030 L8:
0030 .dbline 65
0030 L9:
0030 .dbline 65
0030 ; while(EECR&(1<<EEWE)); /*等待上一次写操作结束*/
0030 E199 sbic 0x1c,1
0032 FECF rjmp L8
0034 .dbline 66
0034 ; EEAR=uiaddress; /*设置地址寄存器*/
0034 0EBB out 0x1e,R16
0036 .dbline 67
0036 ; EECR|=(1<<EERE); /*置位EEMWE 置位EEWE以启动读操作*/
0036 E09A sbi 0x1c,0
0038 .dbline 68
0038 ; return EEDR; /*自数据存贮器返回数据*/
0038 0DB3 in R16,0x1d
003A .dbline -2
003A L7:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbsym r uiaddress 16 c
003C .dbend
003C .dbfunc e del _del fV
003C ; time -> R16,R17
.even
003C _del::
003C .dbline -1
003C .dbline 72
003C ; }
003C ; /* 微秒级延时程序 */
003C ; void del(int time)
003C ; {
003C L12:
003C .dbline 74
003C ; do
003C ; {
003C .dbline 75
003C ; time--;
003C 0150 subi R16,1
003E 1040 sbci R17,0
0040 .dbline 76
0040 ; }
0040 L13:
0040 .dbline 77
0040 ; while (time>1);
0040 81E0 ldi R24,1
0042 90E0 ldi R25,0
0044 8017 cp R24,R16
0046 9107 cpc R25,R17
0048 CCF3 brlt L12
004A .dbline -2
004A L11:
004A .dbline 0 ; func end
004A 0895 ret
004C .dbsym r time 16 I
004C .dbend
004C .dbfunc e delay_1ms _delay_1ms fV
004C ; i1 -> R16,R17
.even
004C _delay_1ms::
004C .dbline -1
004C .dbline 82
004C ; }
004C ;
004C ; /* 毫秒级延时程序 */
004C ; void delay_1ms(void)
004C ; { unsigned int i1;
004C .dbline 83
004C ; for(i1=1;i1<(unsigned int)(xtal*143-2);i1++)
004C 01E0 ldi R16,1
004E 10E0 ldi R17,0
0050 02C0 rjmp L19
0052 L16:
0052 .dbline 84
0052 L17:
0052 .dbline 83
0052 0F5F subi R16,255 ; offset = 1
0054 1F4F sbci R17,255
0056 L19:
0056 .dbline 83
0056 0637 cpi R16,118
0058 E4E0 ldi R30,4
005A 1E07 cpc R17,R30
005C D0F3 brlo L16
005E .dbline -2
005E L15:
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbsym r i1 16 i
0060 .dbend
0060 .dbfunc e delay _delay fV
0060 ; i2 -> R20,R21
0060 ; n -> R22,R23
.even
0060 _delay::
0060 00D0 rcall push_gset2
0062 602F mov R22,R16
0064 712F mov R23,R17
0066 .dbline -1
0066 .dbline 88
0066 ; ;
0066 ; }
0066 ;
0066 ; void delay(unsigned int n)
0066 ; {
0066 .dbline 89
0066 ; unsigned int i2=0;
0066 4427 clr R20
0068 5527 clr R21
006A 04C0 rjmp L22
006C L21:
006C .dbline 91
006C .dbline 91
006C EFDF rcall _delay_1ms
006E .dbline 92
006E 4F5F subi R20,255 ; offset = 1
0070 5F4F sbci R21,255
0072 .dbline 92
0072 A895 wdr
0074 .dbline 93
0074 L22:
0074 .dbline 90
0074 ; while(i2<n)
0074 4617 cp R20,R22
0076 5707 cpc R21,R23
0078 C8F3 brlo L21
007A .dbline -2
007A L20:
007A 00D0 rcall pop_gset2
007C .dbline 0 ; func end
007C 0895 ret
007E .dbsym r i2 20 i
007E .dbsym r n 22 i
007E .dbend
007E .dbfunc e GetADC _GetADC fi
007E ; adc_value -> R20,R21
.even
007E _GetADC::
007E 00D0 rcall push_gset1
0080 .dbline -1
0080 .dbline 97
0080 ; {delay_1ms();
0080 ; i2++; WDR();
0080 ; }
0080 ; }
0080 ; //从AD口读入一个值
0080 ; unsigned int GetADC(void)
0080 ; {
0080 .dbline 100
0080 ;
0080 ; unsigned int adc_value;
0080 ; DDRB|=(1<<PB3);
0080 BB9A sbi 0x17,3
0082 .dbline 101
0082 ; PORTB&=~(1<<PB3);
0082 C398 cbi 0x18,3
0084 .dbline 102
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -