📄 lc.lis
字号:
.module LC.c
.area text(rom, con, rel)
0000 .dbfile E:\资料文件\MCU\myLC/LCD.h
0000 .dbfunc e LCD_en_write _LCD_en_write fV
.even
0000 _LCD_en_write::
0000 .dbline -1
0000 .dbline 21
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; #include <stdlib.h>
0000 ; #include "LCD.h"
0000 ;
0000 ; #define C1 1 //C1=1uF
0000 ; #define L1 100 //L1=100uH
0000 ;
0000 ; unsigned int last_TCNT1,Cx,Lx;
0000 ; unsigned int Cn; //分布电容,单位pf
0000 ; unsigned char buf[8]="";
0000 ;
0000 ; /*------------------------------函数原型声明------------------------------*/
0000 ; void delay_nus (unsigned char n);
0000 ; void delay_nms (unsigned char n);
0000 ; void timer1_init (void);
0000 ; void timer2_init (void);
0000 ; void calc_Cn (void);
0000 ; void calc_Cx (void);
0000 ; void calc_Lx (void);
0000 ; /*------------------------------------------------------------------------*/
0000 .dbline 22
0000 ;
0000 A99A sbi 0x15,1
0002 .dbline 23
0002 ; void main(void)
0002 05E0 ldi R16,5
0004 C4D3 xcall _delay_nus
0006 .dbline 24
0006 ; {
0006 A998 cbi 0x15,1
0008 .dbline -2
0008 L1:
0008 .dbline 0 ; func end
0008 0895 ret
000A .dbend
000A .dbfunc e LCD_write_char _LCD_write_char fV
000A ; data_temp -> R22,R23
000A ; command_temp -> R20,R21
000A ; data -> R12,R13
000A ; command -> R10,R11
.even
000A _LCD_write_char::
000A 0E940000 xcall push_gset4
000E 6901 movw R12,R18
0010 5801 movw R10,R16
0012 .dbline -1
0012 .dbline 28
0012 ; unsigned char k=5;
0012 ; /*----取消-----
0012 ; OSCCAL=0xA9;
0012 ; -------------*/
0012 .dbline 30
0012 ;
0012 ; DDRA|=LCD_DATA; // 数据为输出
0012 A501 movw R20,R10
0014 .dbline 31
0014 ; DDRC|=LCD_RS|LCD_EN; //置位RS和EN
0014 B601 movw R22,R12
0016 .dbline 32
0016 ; DDRD=0x00;
0016 04E1 ldi R16,20
0018 BAD3 xcall _delay_nus
001A .dbline 33
001A ; PORTD=0xFF;
001A 4030 cpi R20,0
001C 4507 cpc R20,R21
001E 11F5 brne L3
0020 X0:
0020 .dbline 34
0020 ; LCD_init();
0020 .dbline 35
0020 ;
0020 A89A sbi 0x15,0
0022 .dbline 36
0022 ; while (--k)
0022 8BB3 in R24,0x1b
0024 8F70 andi R24,15
0026 8BBB out 0x1b,R24
0028 .dbline 37
0028 ; delay_nms(100);
0028 CB01 movw R24,R22
002A 807F andi R24,240
002C 9070 andi R25,0
002E 2BB2 in R2,0x1b
0030 3324 clr R3
0032 282A or R2,R24
0034 392A or R3,R25
0036 2BBA out 0x1b,R2
0038 .dbline 38
0038 ;
0038 E3DF xcall _LCD_en_write
003A .dbline 39
003A ; CLI(); //disable all interrupts
003A 660F lsl R22
003C 771F rol R23
003E 660F lsl R22
0040 771F rol R23
0042 660F lsl R22
0044 771F rol R23
0046 660F lsl R22
0048 771F rol R23
004A .dbline 40
004A ; timer1_init();
004A 8BB3 in R24,0x1b
004C 8F70 andi R24,15
004E 8BBB out 0x1b,R24
0050 .dbline 41
0050 ; timer2_init();
0050 CB01 movw R24,R22
0052 807F andi R24,240
0054 9070 andi R25,0
0056 2BB2 in R2,0x1b
0058 3324 clr R3
005A 282A or R2,R24
005C 392A or R3,R25
005E 2BBA out 0x1b,R2
0060 .dbline 42
0060 ; MCUCR = 0x00;
0060 CFDF xcall _LCD_en_write
0062 .dbline 43
0062 ; GICR = 0x00;
0062 21C0 xjmp L4
0064 L3:
0064 .dbline 45
0064 .dbline 46
0064 A898 cbi 0x15,0
0066 .dbline 47
0066 8BB3 in R24,0x1b
0068 8F70 andi R24,15
006A 8BBB out 0x1b,R24
006C .dbline 48
006C CA01 movw R24,R20
006E 807F andi R24,240
0070 9070 andi R25,0
0072 2BB2 in R2,0x1b
0074 3324 clr R3
0076 282A or R2,R24
0078 392A or R3,R25
007A 2BBA out 0x1b,R2
007C .dbline 49
007C C1DF xcall _LCD_en_write
007E .dbline 50
007E 440F lsl R20
0080 551F rol R21
0082 440F lsl R20
0084 551F rol R21
0086 440F lsl R20
0088 551F rol R21
008A 440F lsl R20
008C 551F rol R21
008E .dbline 51
008E 8BB3 in R24,0x1b
0090 8F70 andi R24,15
0092 8BBB out 0x1b,R24
0094 .dbline 52
0094 CA01 movw R24,R20
0096 807F andi R24,240
0098 9070 andi R25,0
009A 2BB2 in R2,0x1b
009C 3324 clr R3
009E 282A or R2,R24
00A0 392A or R3,R25
00A2 2BBA out 0x1b,R2
00A4 .dbline 53
00A4 ADDF xcall _LCD_en_write
00A6 .dbline 54
00A6 L4:
00A6 .dbline -2
00A6 L2:
00A6 0E940000 xcall pop_gset4
00AA .dbline 0 ; func end
00AA 0895 ret
00AC .dbsym r data_temp 22 i
00AC .dbsym r command_temp 20 i
00AC .dbsym r data 12 i
00AC .dbsym r command 10 i
00AC .dbend
00AC .dbfunc e LCD_set_xy _LCD_set_xy fV
00AC ; address -> R20
00AC ; y -> R20
00AC ; x -> R22
.even
00AC _LCD_set_xy::
00AC 0E940000 xcall push_gset2
00B0 422F mov R20,R18
00B2 602F mov R22,R16
00B4 .dbline -1
00B4 .dbline 58
00B4 ; TIMSK = 0x40; //timer interrupt sources
00B4 ; SEI();
00B4 ;
00B4 ; LCD_write_char(0x01,0);
00B4 ; delay_nms(2);
00B4 ; while(1);
00B4 ; }
00B4 ;
00B4 ; #pragma interrupt_handler timer2_ovf_isr:5
00B4 ; void timer2_ovf_isr(void)
00B4 ; {
00B4 ; TCCR2 = 0x00; //stop Timer1
00B4 ; TCCR1B= 0x00; //stop Timer2
00B4 ; last_TCNT1=TCNT1;
00B4 ;
00B4 .dbline 60
00B4 ; if((PIND|0xFE)==0xFE) //PORTD.0为0,校准模式,不接Cx和Lx
00B4 ; {
00B4 4423 tst R20
00B6 19F4 brne L6
00B8 .dbline 60
00B8 462F mov R20,R22
00BA 4058 subi R20,128 ; addi 128
00BC 02C0 xjmp L7
00BE L6:
00BE .dbline 62
00BE ; LCD_write_char(0x01,0);
00BE ; delay_nms(2);
00BE 462F mov R20,R22
00C0 4054 subi R20,64 ; addi 192
00C2 L7:
00C2 .dbline 63
00C2 ; LCD_set_xy(0,0);
00C2 2227 clr R18
00C4 3327 clr R19
00C6 042F mov R16,R20
00C8 1127 clr R17
00CA 9FDF xcall _LCD_write_char
00CC .dbline -2
00CC L5:
00CC 0E940000 xcall pop_gset2
00D0 .dbline 0 ; func end
00D0 0895 ret
00D2 .dbsym r address 20 c
00D2 .dbsym r y 20 c
00D2 .dbsym r x 22 c
00D2 .dbend
00D2 .dbfunc e LCD_init _LCD_init fV
.even
00D2 _LCD_init::
00D2 .dbline -1
00D2 .dbline 67
00D2 ;
00D2 ; LCD_write_char(0,'C');
00D2 ; LCD_write_char(0,'n');
00D2 ; LCD_write_char(0,'=');
00D2 .dbline 68
00D2 ; calc_Cn();
00D2 0EE1 ldi R16,30
00D4 73D3 xcall _delay_nms
00D6 .dbline 69
00D6 ;
00D6 2227 clr R18
00D8 3327 clr R19
00DA 08E2 ldi R16,40
00DC 10E0 ldi R17,0
00DE 95DF xcall _LCD_write_char
00E0 .dbline 70
00E0 ; LCD_write_string(0,1,"TCNT1=");
00E0 2227 clr R18
00E2 3327 clr R19
00E4 0CE0 ldi R16,12
00E6 10E0 ldi R17,0
00E8 90DF xcall _LCD_write_char
00EA .dbline 71
00EA ; LCD_write_string(1,1,itoa(buf,last_TCNT1,10));
00EA 2227 clr R18
00EC 3327 clr R19
00EE 01E0 ldi R16,1
00F0 10E0 ldi R17,0
00F2 8BDF xcall _LCD_write_char
00F4 .dbline 72
00F4 ;
00F4 0EE1 ldi R16,30
00F6 62D3 xcall _delay_nms
00F8 .dbline -2
00F8 L8:
00F8 .dbline 0 ; func end
00F8 0895 ret
00FA .dbend
00FA .dbfunc e LCD_write_string _LCD_write_string fV
00FA ; s -> R20,R21
00FA ; y -> R10
00FA ; x -> R22
.even
00FA _LCD_write_string::
00FA 0E940000 xcall push_gset3
00FE A22E mov R10,R18
0100 602F mov R22,R16
0102 4E81 ldd R20,y+6
0104 5F81 ldd R21,y+7
0106 .dbline -1
0106 .dbline 76
0106 ; }
0106 ; else //测量模式,接入被测元件Cx或Lx
0106 ; {
0106 ; LCD_write_char(0x01,0);
0106 .dbline 77
0106 ; delay_nms(2);
0106 2A2D mov R18,R10
0108 062F mov R16,R22
010A D0DF xcall _LCD_set_xy
010C 08C0 xjmp L11
010E L10:
010E .dbline 80
010E .dbline 81
010E FA01 movw R30,R20
0110 2081 ldd R18,z+0
0112 3327 clr R19
0114 0027 clr R16
0116 1127 clr R17
0118 78DF xcall _LCD_write_char
011A .dbline 82
011A 4F5F subi R20,255 ; offset = 1
011C 5F4F sbci R21,255
011E .dbline 83
011E L11:
011E .dbline 79
011E ;
011E ; LCD_set_xy(0,0);
011E FA01 movw R30,R20
0120 2080 ldd R2,z+0
0122 2220 tst R2
0124 A1F7 brne L10
0126 .dbline -2
0126 L9:
0126 0E940000 xcall pop_gset3
012A .dbline 0 ; func end
012A 0895 ret
012C .dbsym r s 20 pc
012C .dbsym r y 10 c
012C .dbsym r x 22 c
012C .dbend
.area data(ram, con, rel)
0000 .dbfile E:\资料文件\MCU\myLC/LCD.h
0000 _buf::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile E:\资料文件\MCU\myLC/LCD.h
0001 .blkb 7
.area idata
0001 00000000000000 .byte 0,0,0,0,0,0,0
.area data(ram, con, rel)
0008 .dbfile E:\资料文件\MCU\myLC/LCD.h
0008 .dbfile E:\资料文件\MCU\myLC\LC.c
0008 .dbsym e buf _buf A[8:8]c
.area text(rom, con, rel)
012C .dbfile E:\资料文件\MCU\myLC\LC.c
012C .dbfunc e main _main fV
012C ; k -> R20
.even
012C _main::
012C .dbline -1
012C .dbline 24
012C .dbline 25
012C 45E0 ldi R20,5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -