📄 mcp41010.lis
字号:
.module mcp41010.c
.area text(rom, con, rel)
0000 .dbfile mcp41010.c
0000 .dbfile F:\file\数控电源3\ad_da\text\mcp41010.c
0000 .dbfunc e r_io_init _r_io_init fV
.even
0000 _r_io_init::
0000 .dbline -1
0000 .dbline 16
0000 ; #include<iom16v.h>
0000 ;
0000 ; #define r_full 9340
0000 ;
0000 ; #define cs_ddr DDRA
0000 ; #define cs_port PORTA
0000 ; #define sck_ddr DDRA
0000 ; #define sck_port PORTA
0000 ; #define si_ddr DDRA
0000 ; #define si_port PORTA
0000 ; #define cs 0x01
0000 ; #define sck 0x02
0000 ; #define si 0x04
0000 ;
0000 ; void r_io_init(void)
0000 ; {
0000 .dbline 17
0000 ; cs_ddr|=cs;
0000 D09A sbi 0x1a,0
0002 .dbline 18
0002 ; sck_ddr|=sck;
0002 D19A sbi 0x1a,1
0004 .dbline 19
0004 ; si_ddr|=si;
0004 D29A sbi 0x1a,2
0006 .dbline 20
0006 ; cs_port|=cs;
0006 D89A sbi 0x1b,0
0008 .dbline 21
0008 ; sck_port&=~sck;
0008 D998 cbi 0x1b,1
000A .dbline 22
000A ; si_port&=~si;
000A DA98 cbi 0x1b,2
000C .dbline -2
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbend
000E .dbfunc e write_r _write_r fV
000E ; count -> R20
000E ; dat -> R18
000E ; cmd -> R16
.even
000E _write_r::
000E 4A93 st -y,R20
0010 .dbline -1
0010 .dbline 26
0010 ; }
0010 ;
0010 ; void write_r(unsigned char cmd,unsigned char dat) //cmd=0x11:write data; cmd=0x31:cut off
0010 ; {
0010 .dbline 27
0010 ; unsigned char count=0;
0010 4427 clr R20
0012 .dbline 28
0012 ; sck_port&=~sck;//sck=0
0012 D998 cbi 0x1b,1
0014 .dbline 29
0014 ; si_port&=~si;//si=0
0014 DA98 cbi 0x1b,2
0016 .dbline 30
0016 ; cs_port&=~cs;//cs=0
0016 D898 cbi 0x1b,0
0018 .dbline 31
0018 ; sck_port|=sck; //0
0018 D99A sbi 0x1b,1
001A .dbline 32
001A ; sck_port&=~sck;
001A D998 cbi 0x1b,1
001C .dbline 33
001C ; sck_port|=sck; //1
001C D99A sbi 0x1b,1
001E .dbline 34
001E ; sck_port&=~sck;
001E D998 cbi 0x1b,1
0020 .dbline 35
0020 ; if(cmd&0x20)
0020 05FF sbrs R16,5
0022 02C0 rjmp L3
0024 X0:
0024 .dbline 36
0024 ; si_port|=si;
0024 DA9A sbi 0x1b,2
0026 01C0 xjmp L4
0028 L3:
0028 .dbline 38
0028 ; else
0028 ; si_port&=~si;
0028 DA98 cbi 0x1b,2
002A L4:
002A .dbline 39
002A ; sck_port|=sck; //2
002A D99A sbi 0x1b,1
002C .dbline 40
002C ; sck_port&=~sck;
002C D998 cbi 0x1b,1
002E .dbline 41
002E ; if(cmd&0x10)
002E 04FF sbrs R16,4
0030 02C0 rjmp L5
0032 X1:
0032 .dbline 42
0032 ; si_port|=si;
0032 DA9A sbi 0x1b,2
0034 01C0 xjmp L6
0036 L5:
0036 .dbline 44
0036 ; else
0036 ; si_port&=~si;
0036 DA98 cbi 0x1b,2
0038 L6:
0038 .dbline 45
0038 ; sck_port|=sck; //3
0038 D99A sbi 0x1b,1
003A .dbline 46
003A ; sck_port&=~sck;
003A D998 cbi 0x1b,1
003C .dbline 47
003C ; si_port&=~si;
003C DA98 cbi 0x1b,2
003E .dbline 48
003E ; sck_port|=sck; //4
003E D99A sbi 0x1b,1
0040 .dbline 49
0040 ; sck_port&=~sck;
0040 D998 cbi 0x1b,1
0042 .dbline 50
0042 ; sck_port|=sck; //5
0042 D99A sbi 0x1b,1
0044 .dbline 51
0044 ; sck_port&=~sck;
0044 D998 cbi 0x1b,1
0046 .dbline 52
0046 ; if(cmd&0x02)
0046 01FF sbrs R16,1
0048 02C0 rjmp L7
004A X2:
004A .dbline 53
004A ; si_port|=si;
004A DA9A sbi 0x1b,2
004C 01C0 xjmp L8
004E L7:
004E .dbline 55
004E ; else
004E ; si_port&=~si;
004E DA98 cbi 0x1b,2
0050 L8:
0050 .dbline 56
0050 ; sck_port|=sck; //6
0050 D99A sbi 0x1b,1
0052 .dbline 57
0052 ; sck_port&=~sck;
0052 D998 cbi 0x1b,1
0054 .dbline 58
0054 ; if(cmd&0x01)
0054 00FF sbrs R16,0
0056 02C0 rjmp L9
0058 X3:
0058 .dbline 59
0058 ; si_port|=si;
0058 DA9A sbi 0x1b,2
005A 01C0 xjmp L10
005C L9:
005C .dbline 61
005C ; else
005C ; si_port&=~si;
005C DA98 cbi 0x1b,2
005E L10:
005E .dbline 62
005E ; sck_port|=sck; //7
005E D99A sbi 0x1b,1
0060 .dbline 63
0060 ; sck_port&=~sck;
0060 D998 cbi 0x1b,1
0062 .dbline 64
0062 ; for(count=0;count<8;count++)
0062 4427 clr R20
0064 09C0 xjmp L14
0066 L11:
0066 .dbline 65
0066 ; {
0066 .dbline 66
0066 ; if(dat&0x80)
0066 27FF sbrs R18,7
0068 02C0 rjmp L15
006A X4:
006A .dbline 67
006A ; si_port|=si;
006A DA9A sbi 0x1b,2
006C 01C0 xjmp L16
006E L15:
006E .dbline 69
006E ; else
006E ; si_port&=~si;
006E DA98 cbi 0x1b,2
0070 L16:
0070 .dbline 70
0070 ; sck_port|=sck;
0070 D99A sbi 0x1b,1
0072 .dbline 71
0072 ; sck_port&=~sck;
0072 D998 cbi 0x1b,1
0074 .dbline 72
0074 ; dat=dat<<1;
0074 220F lsl R18
0076 .dbline 73
0076 ; }
0076 L12:
0076 .dbline 64
0076 4395 inc R20
0078 L14:
0078 .dbline 64
0078 4830 cpi R20,8
007A A8F3 brlo L11
007C X5:
007C .dbline 74
007C ; cs_port|=cs;
007C D89A sbi 0x1b,0
007E .dbline -2
007E L2:
007E .dbline 0 ; func end
007E 4991 ld R20,y+
0080 0895 ret
0082 .dbsym r count 20 c
0082 .dbsym r dat 18 c
0082 .dbsym r cmd 16 c
0082 .dbend
0082 .dbfunc e r_init _r_init fV
.even
0082 _r_init::
0082 .dbline -1
0082 .dbline 78
0082 ; }
0082 ;
0082 ; void r_init(void)
0082 ; {
0082 .dbline 79
0082 ; r_io_init();
0082 BEDF xcall _r_io_init
0084 .dbline 80
0084 ; write_r(0x11,0x7f);
0084 2FE7 ldi R18,127
0086 01E1 ldi R16,17
0088 .dbline -2
0088 L17:
0088 .dbline 0 ; func end
0088 C2CF xjmp _write_r
008A .dbend
008A .dbfunc e set_r _set_r fV
008A ; buf1 -> R10
008A ; buf0 -> y+0
008A ; r -> R12,R13
.even
008A _set_r::
008A 0E940000 xcall push_xgset003C
008E 6801 movw R12,R16
0090 2497 sbiw R28,4
0092 .dbline -1
0092 .dbline 84
0092 ; }
0092 ;
0092 ; void set_r(unsigned int r)
0092 ; {
0092 .dbline 85
0092 ; float buf0=0;
0092 00E0 ldi R16,<L19
0094 10E0 ldi R17,>L19
0096 0E940000 xcall lpm32
009A 0883 std y+0,R16
009C 1983 std y+1,R17
009E 2A83 std y+2,R18
00A0 3B83 std y+3,R19
00A2 .dbline 86
00A2 ; unsigned char buf1=0;
00A2 .dbline 87
00A2 ; buf0=r_full/255;
00A2 00E0 ldi R16,<L20
00A4 10E0 ldi R17,>L20
00A6 0E940000 xcall lpm32
00AA 0883 std y+0,R16
00AC 1983 std y+1,R17
00AE 2A83 std y+2,R18
00B0 3B83 std y+3,R19
00B2 .dbline 88
00B2 ; buf0=r/buf0;
00B2 8601 movw R16,R12
00B4 0E940000 xcall uint2fp
00B8 CE01 movw R24,R28
00BA 9A93 st -y,R25
00BC 8A93 st -y,R24
00BE 0E940000 xcall fpdiv1
00C2 0883 std y+0,R16
00C4 1983 std y+1,R17
00C6 2A83 std y+2,R18
00C8 3B83 std y+3,R19
00CA .dbline 89
00CA ; buf1=(unsigned char)buf0;
00CA 0881 ldd R16,y+0
00CC 1981 ldd R17,y+1
00CE 2A81 ldd R18,y+2
00D0 3B81 ldd R19,y+3
00D2 0E940000 xcall fpint
00D6 A02E mov R10,R16
00D8 .dbline 90
00D8 ; write_r(0x11,buf1);
00D8 2A2D mov R18,R10
00DA 01E1 ldi R16,17
00DC 98DF xcall _write_r
00DE .dbline -2
00DE L18:
00DE .dbline 0 ; func end
00DE 2496 adiw R28,4
00E0 0C940000 xjmp pop_xgset003C
00E4 .dbsym r buf1 10 c
00E4 .dbsym l buf0 0 D
00E4 .dbsym r r 12 i
00E4 .dbend
00E4 .dbfunc e main _main fV
.even
00E4 _main::
00E4 .dbline -1
00E4 .dbline 107
00E4 ; }
00E4 ;
00E4 ;
00E4 ;
00E4 ;
00E4 ;
00E4 ;
00E4 ;
00E4 ;
00E4 ;
00E4 ;
00E4 ;
00E4 ; //main.c
00E4 ;
00E4 ;
00E4 ; void main(void)
00E4 ; {
00E4 .dbline 108
00E4 ; r_init();
00E4 CEDF xcall _r_init
00E6 03C0 xjmp L23
00E8 L22:
00E8 .dbline 110
00E8 ; while(1)
00E8 ; {
00E8 .dbline 111
00E8 ; set_r(5900);
00E8 0CE0 ldi R16,5900
00EA 17E1 ldi R17,23
00EC CEDF xcall _set_r
00EE .dbline 112
00EE ; }
00EE L23:
00EE .dbline 109
00EE FCCF xjmp L22
00F0 X6:
00F0 .dbline -2
00F0 L21:
00F0 .dbline 0 ; func end
00F0 0895 ret
00F2 .dbend
.area lit(rom, con, rel)
0000 L20:
0000 00001042 .word 0x0,0x4210
0004 L19:
0004 00000000 .word 0x0,0x0
0008 ; }
0008 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -